长亭百川云 - 技术讨论

长亭百川云

技术讨论长亭漏洞情报库IP 威胁情报SLA在线工具
热门产品
雷池 WAF 社区版
IP 威胁情报
网站安全监测
百川漏扫服务
云堡垒机
百川云
技术文档
开发工具
长亭漏洞情报库
网安百科
安全社区
CT STACK 安全社区
雷池社区版
XRAY 扫描工具
长亭科技
长亭科技官网
万众合作伙伴商城
长亭 BBS 论坛
友情链接
关注或联系我们
添加百川云公众号,移动管理云安全产品
咨询热线:
4000-327-707
百川公众号
百川公众号
百川云客服
百川云客服

Copyright ©2024 北京长亭科技有限公司
icon
京ICP备2024055124号-2

docker 安全部署 Wordpress 方案(单服务器 +safeline+mariadb+redis)

发布于 3 天前

# 雷池 WAF

发布于 3 天前

头像

Paddy

更新于 3 天前

0

0

前言:部署一个既强大又安全的个人博客

   近期,我和许多朋友一样都入手了自己的云服务器,拥有了自己的第一块“数字自留地”。

   总不能闲着不用叭,用其来部署一个个人博客站,记录成长、分享生活是一个好的选择。博客框架有很多,我想更多的专注于内容创作所以选择了老牌**WordPress**。

   然而,WordPress的巨大市场份额也使其成为黑客与自动化攻击脚本的重点关注对象。因此,**如何为其筑起坚固的防线?**(其实是我喜欢瞎折腾啦

   虽然WordPress部署教程有很多,本篇部署方案的重点在于在单个服务器上,使用**长亭Safeline雷池Web应用防火墙**代替常用的Nginx。

通过Docker容器化技术,我们将构建一个由Safeline WAF作为安全网关,内部集成MariaDB数据库与Redis缓存的高效、安全的WordPress站点。

部署成果:https://www.paddysun.top/ 欢迎来我的个人博客玩呀

核心组件简介

  1. WordPress

    1. 是什么:一款全球最流行的开源内容管理系统(CMS),以其强大的功能、灵活的可扩展性(海量主题与插件)和友好的用户体验而闻名。无论是个人博客、企业官网还是电商平台,它都能胜任。

    2. 在本文中的角色:我们网站的核心应用,提供内容创作和管理的所有功能。

  2. 长亭 Safeline WAF

    1. 是什么:一款业界领先的、开箱即用的Web应用防火墙产品。它像一位忠诚的卫士,守候在网站的最前沿,对所有外来访问请求进行检测和过滤,能有效防御SQL注入、跨站脚本(XSS)、恶意爬虫等常见的Web攻击。

    2. 在本文中的角色:我们的“安全网关”。所有公网流量都必须先经过它的审查,确认安全无害后,才会被转发给内网的WordPress容器。WordPress本身则不直接暴露在公网上,极大地提升了安全性。

实现 “既享受WordPress的便捷与强大,又拥有可靠的安全防护”

本部署方案关键优势

  1. 单服务器:成本低

  2. 安全防护:所有流量经过 Safeline WAF 防护

  3. 网络隔离:WordPress 不直接暴露在公网

  4. 详细得不行(大概叭:我折腾了1个月,稳定运行1个月的实际部署方案

这种架构既保证了安全性,又保持了 WordPress 的完整功能。

具体部署方案 (个人博客实战检验稳定运行)

购买并登云服务器

  • 选择 Linux 系统镜像

  • 确保云和系统安全组开放端口:80, 443

  • 通过 SSH 登录服务器:ssh ubuntu@your-server-ip

0.服务器准备&docker安装

1# 更新系统
2sudo apt update && sudo apt upgrade -y
3
4# 安装 Docker
5sudo apt install docker.io -y
6
7# 安装 Docker Compose
8sudo apt install docker-compose-plugin -y
9
10# 验证安装
11docker --version
12docker compose version
13
14# 确保云防火墙和服务器系统放行80和443端口

1.safeline docker安装

safeline docker安装教程摘录自官方文档 长亭官方安装教程

1.1.创建雷池目录

1mkdir -p "/data/safeline"

该命令会创建 /data/safeline 目录作为雷池的安装目录(你可以根据你的实际情况选择安装目录)
请确保该目录至少有 5GB 的存储空间(如果日常流量较大,请保证充足的磁盘容量)

1.2.下载 compose 编排脚本

使用下方的命令进入雷池安装目录,并下载 docker compose 编排脚本

1cd "/data/safeline"
2wget "https://waf-ce.chaitin.cn/release/latest/compose.yaml"

1.3.配置 compose 环境变量

使用下方的命令进入雷池安装目录,并创建 .env 配置文件

1cd "/data/safeline"
2touch ".env"

使用文本编辑器打开 .env 文件,写入下方的内容,POSTGRES的密码需自定义
具体参数请参考官方文档 长亭官方安装教程

1SAFELINE_DIR=/data/safeline
2IMAGE_TAG=latest
3MGT_PORT=9443
4POSTGRES_PASSWORD=yourpassword #(自定义密码使用数字+英文大小写组合,勿使用特殊字符)
5SUBNET_PREFIX=172.22.222 
6IMAGE_PREFIX=swr.cn-east-3.myhuaweicloud.com/chaitin-safeline
7ARCH_SUFFIX=
8RELEASE=
9REGION=
10MGT_PROXY=0

1.4.启动雷池

现在万事具备,使用以下命令启动雷池服务

1cd "/data/safeline"
2docker compose up -d

2.Wordpress 安装

Wordpress部署方案参考 Docker部署Wordpress (Nginx+Mariadb+redis+Wordpress)
选择合适的目录,创建项目结构

1# 创建项目目录
2mkdir wordpress && cd wordpress
3
4# 创建必要的目录结构
5mkdir -p data/mariadb/{conf,logs}
6mkdir -p data/redis/{conf,log,data}
7mkdir -p data/wordpress/{html,php}
8
9# 设置目录权限
10sudo chmod -R 755 data/

3. 创建配置文件

3.1 修改后的 docker-compose.yml(关键修改)

1# docker-compose.yml
2services:
3  mariadb:
4    image: mariadb:10
5    container_name: mariadb
6    restart: always
7    volumes:
8      - ./data/mariadb/conf:/etc/mysql/conf.d
9      - ./data/mariadb/logs:/logs
10      - wordpress-db-data:/var/lib/mysql
11    environment:
12      MARIADB_DATABASE: wordpress
13      MARIADB_USER: ${DB_USER:-wordpress_user}
14      MARIADB_PASSWORD: ${DB_PASSWORD:-secure_password_123}
15      MARIADB_ROOT_PASSWORD: ${DB_ROOT_PASSWORD:-very_secure_root_password_123}
16      TZ: Asia/Shanghai
17    networks:
18      - wordpress_network
19
20  redis:
21    image: redis:alpine
22    container_name: redis
23    restart: always
24    volumes:
25      - ./data/redis/log/redis.log:/etc/redis.log
26      - ./data/redis/conf/redis.conf:/etc/redis/redis.conf
27      - ./data/redis/data:/data
28    networks:
29      - wordpress_network
30
31  wordpress:
32    depends_on:
33      - mariadb
34      - redis
35    image: wordpress:latest
36    container_name: wordpress
37    restart: always
38    volumes:
39      - ./data/wordpress/html:/var/www/html
40      - ./data/wordpress/php/upload.ini:/usr/local/etc/php/conf.d/upload.ini
41    environment:
42      WORDPRESS_DB_HOST: mariadb
43      WORDPRESS_DB_USER: ${DB_USER:-wordpress_user}
44      WORDPRESS_DB_PASSWORD: ${DB_PASSWORD:-secure_password_123}
45      WORDPRESS_DB_NAME: wordpress
46      TZ: Asia/Shanghai
47      # 重要!:不可以设置 WordPress 站点 URL 和主页地址 要不然之后无法修改
48      # WORDPRESS_CONFIG_EXTRA: |
49      #  define('WP_HOME', 'https://${DOMAIN}');
50      #  define('WP_SITEURL', 'https://${DOMAIN}');
51    networks:
52      - wordpress_network
53    # 重要:不直接暴露端口到宿主机,只在Docker内网访问
54    expose:
55      - "80"
56
57networks:
58  wordpress_network:
59
60volumes:
61  wordpress-db-data:

3.2 创建环境变量文件

1# 创建 .env 文件存储敏感信息
2cat > .env << EOF
3# 数据库配置
4DB_USER= #(你的数据库用户名称)
5DB_PASSWORD= #(你的安全密码)
6DB_ROOT_PASSWORD= #(你的安全密码)
7
8# 域名配置
9DOMAIN= #你的域名
10SERVER_IP= #你的IP 
11
12# WordPress 容器配置
13
14WORDPRESS_PORT=80
15WORDPRESS_CONTAINER_NAME=wordpress
16EOF
17
18# 保护环境文件权限,若要以非root启动,则暂时不必配置权限
19chmod 600 .env

3.3 创建 Redis 配置

1# 下载 Redis 配置文件
2wget -O ./data/redis/conf/redis.conf http://download.redis.io/redis-stable/redis.conf
3
4# 修改 Redis 配置
5sed -i 's/^bind 127.0.0.1/bind 0.0.0.0/' ./data/redis/conf/redis.conf
6sed -i 's/^protected-mode yes/protected-mode no/' ./data/redis/conf/redis.conf
7sed -i 's/^daemonize yes/daemonize no/' ./data/redis/conf/redis.conf
8echo 'logfile "/etc/redis.log"' >> ./data/redis/conf/redis.conf
9echo 'maxmemory 1gb' >> ./data/redis/conf/redis.conf
10echo 'maxmemory-policy allkeys-lru' >> ./data/redis/conf/redis.conf
11
12# 创建日志文件
13touch ./data/redis/log/redis.log
14chmod 666 ./data/redis/log/redis.log

3.4 创建 PHP 上传配置

1# 创建 PHP 配置目录
2mkdir -p ./data/wordpress/php/
3
4# 创建 upload.ini 文件
5cat > ./data/wordpress/php/upload.ini << EOF
6file_uploads = On
7memory_limit = 256M
8upload_max_filesize = 100M
9post_max_size = 100M
10max_execution_time = 300
11EOF

4. 启动 WordPress 服务

1# 启动所有服务
2docker compose --env-file .env up -d
3
4# 查看服务状态
5docker compose ps
6
7# 查看 WordPress 日志
8docker compose logs -f wordpress

5. 配置 Safeline 反向代理

因为WordPress和safeline处于不同的docker和网络, 现在需要在 Safeline 管理界面添加 WordPress 站点, 这样safeline才能与WordPres通讯.

5.1 获取 WordPress 容器网络IP

1# 将 WordPress 相关容器连接到 Safeline 网络
2sudo docker network connect safeline-ce wordpress
3
4# 查看 safeline-ce 网络中 wordpress 容器的 IP 地址
5sudo docker inspect safeline-ce
6# 将"Name": "wordpress"块的IP地址记录下来

5.2 在 Safeline 中添加站点

  1. 登录 Safeline 管理界面:https://您的服务器IP:9443

添加防护站点

  1. 站点名称:wordpress或者你喜欢的名称

  2. 上游服务器:WordPress 容器的实际 IP地址

  3. 访问域名:your-domain.com没有域名就填服务器公网IP

  4. 协议:HTTP(如果配置了 HTTPS 证书则选择 HTTPS)

配置监听端口:

  1. 监听端口:80 和 443(若要开启HTTPS则必须监听443端口)

  2. 确保 Safeline 监听的端口在防火墙中开放

5.3 配置 DNS 解析

将您的域名 your-domain.com 解析到服务器 IP: 您的服务器IP地址

6. 完成 WordPress 安装

  1. 通过 Safeline 访问您的网站:https://your-domain.com或者公网IP

  2. 按照 WordPress 安装向导完成安装

  3. 选择语言、设置站点标题、管理员账号等信息

7. WordPress 安全加固

7.1 修改默认设置

1# WordPress 初始化完成后操作
2# 进入2.中选择的Wordpress对应根目录下
3cd /你的/目录/地址
4# 修改默认数据库表前缀
5if [ -f "./data/wordpress/html/wp-config.php" ]; then
6    sed -i "s/\$table_prefix = 'wp_';/\$table_prefix = 'wp_$(openssl rand -hex 3)_';/" ./data/wordpress/html/wp-config.php
7    echo "数据库表前缀已修改"
8fi

7.2 设置文件权限

1# 设置正确的文件权限
2sudo chown -R www-data:www-data ./data/wordpress/html/
3sudo find ./data/wordpress/html/ -type d -exec chmod 755 {} \;
4sudo find ./data/wordpress/html/ -type f -exec chmod 644 {} \;

8. 验证配置

8.1 检查 Safeline 防护

访问您的网站,确认:

  • 网站正常访问

  • Safeline 的防护功能正常工作

  • 如果需要强制重定向到HTTPS 重定向正常(如果配置了 SSL),可以在wordpress后台配置站点名URL

1# 进入WordPress /wp-admin/ 后台-设置-常规命令页面 进行配置
2# https://你的网址/wp-admin/options-general.php
3
4WordPress 地址(URL)	https://www.paddysun.top
5站点地址(URL)	https://www.paddysun.top

8.2 测试 WordPress 功能

测试以下功能确保正常工作:

  • 文章发布

  • 图片上传

  • 插件安装

  • 主题切换

9. 管理命令

1# 停止服务
2docker compose down
3
4# 重启服务
5docker compose restart
6
7# 查看服务状态
8docker compose ps
9
10# 查看日志
11docker compose logs wordpress
12
13# 备份数据库
14docker compose exec mariadb mysqldump -u root -p wordpress > backup.sql

10.建议

不建议开启safeline Bot防护,开启bot防护也记得将RSS等路径排除。

记得定期维护,更新系统 WordPress 核心、主题和插件等。

建议部署完成后创建系统镜像。

本文最早发布于 https://www.paddysun.top/,采用 共享-署名-非商用-相同方式共享 4.0 国际许可协议 进行许可。投稿至长亭内容创作者计划,希望能够获得雷池专业版授权体验一下 QaQ。

​
头像
相关贴子
#
建议为社区版本添加深色模式支持
#
希望雷池添加可以生成原服务器域名证书的功能
#
雷池规则广场:拦截常见扫描器
#
一个站点,nginx 里面需要多个location不同判断,如何自定义
#
补充规则无法禁用