docker 安全部署 Wordpress 方案(单服务器 +safeline+mariadb+redis)
Paddy
更新于 19 小时前
近期,我和许多朋友一样都入手了自己的云服务器,拥有了自己的第一块“数字自留地”。
总不能闲着不用叭,用其来部署一个个人博客站,记录成长、分享生活是一个好的选择。博客框架有很多,我想更多的专注于内容创作所以选择了老牌**WordPress**。
然而,WordPress的巨大市场份额也使其成为黑客与自动化攻击脚本的重点关注对象。因此,**如何为其筑起坚固的防线?**(其实是我喜欢瞎折腾啦
虽然WordPress部署教程有很多,本篇部署方案的重点在于在单个服务器上,使用**长亭Safeline雷池Web应用防火墙**代替常用的Nginx。
通过Docker容器化技术,我们将构建一个由Safeline WAF作为安全网关,内部集成MariaDB数据库与Redis缓存的高效、安全的WordPress站点。
部署成果:https://www.paddysun.top/ 欢迎来我的个人博客玩呀
WordPress
是什么:一款全球最流行的开源内容管理系统(CMS),以其强大的功能、灵活的可扩展性(海量主题与插件)和友好的用户体验而闻名。无论是个人博客、企业官网还是电商平台,它都能胜任。
在本文中的角色:我们网站的核心应用,提供内容创作和管理的所有功能。
长亭 Safeline WAF
是什么:一款业界领先的、开箱即用的Web应用防火墙产品。它像一位忠诚的卫士,守候在网站的最前沿,对所有外来访问请求进行检测和过滤,能有效防御SQL注入、跨站脚本(XSS)、恶意爬虫等常见的Web攻击。
在本文中的角色:我们的“安全网关”。所有公网流量都必须先经过它的审查,确认安全无害后,才会被转发给内网的WordPress容器。WordPress本身则不直接暴露在公网上,极大地提升了安全性。
实现 “既享受WordPress的便捷与强大,又拥有可靠的安全防护”
单服务器:成本低
安全防护:所有流量经过 Safeline WAF 防护
网络隔离:WordPress 不直接暴露在公网
详细得不行(大概叭:我折腾了1个月,稳定运行1个月的实际部署方案
这种架构既保证了安全性,又保持了 WordPress 的完整功能。
选择 Linux 系统镜像
确保云和系统安全组开放端口:80, 443
通过 SSH 登录服务器:ssh ubuntu@your-server-ip
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端口
safeline docker安装教程摘录自官方文档 长亭官方安装教程
1mkdir -p "/data/safeline"
该命令会创建 /data/safeline 目录作为雷池的安装目录(你可以根据你的实际情况选择安装目录)
请确保该目录至少有 5GB 的存储空间(如果日常流量较大,请保证充足的磁盘容量)
使用下方的命令进入雷池安装目录,并下载 docker compose 编排脚本
1cd "/data/safeline" 2wget "https://waf-ce.chaitin.cn/release/latest/compose.yaml"
使用下方的命令进入雷池安装目录,并创建 .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
现在万事具备,使用以下命令启动雷池服务
1cd "/data/safeline" 2docker compose up -d
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/
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:
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
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
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
1# 启动所有服务 2docker compose --env-file .env up -d 3 4# 查看服务状态 5docker compose ps 6 7# 查看 WordPress 日志 8docker compose logs -f wordpress
因为WordPress和safeline处于不同的docker和网络, 现在需要在 Safeline 管理界面添加 WordPress 站点, 这样safeline才能与WordPres通讯.
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地址记录下来
https://您的服务器IP:9443添加防护站点
站点名称:wordpress或者你喜欢的名称
上游服务器:WordPress 容器的实际 IP地址
访问域名:your-domain.com没有域名就填服务器公网IP
协议:HTTP(如果配置了 HTTPS 证书则选择 HTTPS)
配置监听端口:
监听端口:80 和 443(若要开启HTTPS则必须监听443端口)
确保 Safeline 监听的端口在防火墙中开放
将您的域名 your-domain.com 解析到服务器 IP: 您的服务器IP地址
通过 Safeline 访问您的网站:https://your-domain.com或者公网IP
按照 WordPress 安装向导完成安装
选择语言、设置站点标题、管理员账号等信息
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
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 {} \;
访问您的网站,确认:
网站正常访问
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
测试以下功能确保正常工作:
文章发布
图片上传
插件安装
主题切换
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
不建议开启safeline Bot防护,开启bot防护也记得将RSS等路径排除。
记得定期维护,更新系统 WordPress 核心、主题和插件等。
建议部署完成后创建系统镜像。
本文最早发布于 https://www.paddysun.top/,采用 共享-署名-非商用-相同方式共享 4.0 国际许可协议 进行许可。投稿至长亭内容创作者计划,希望能够获得雷池专业版授权体验一下 QaQ。
0
1
fvm snserver 进程分别有十几个,正常吗,内存爆了
刘鑫
更新于 2 天前
fvm snserver 进程分别有十几个,正常吗,内存爆了
0
2
建议升级postgres数据库版本
time flies
更新于 2 天前
最新版本9.2.7数据库版本不postgresql15.2,建议升级数据库版本到17,性能更好!
1
16
公司官网安装waf需要购买商业授权吗?
Dawn
更新于 3 天前
如题,一直有这个疑问,给公司的官网安装雷池的waf,需不需要购买授权?
0
3
雷池社区版自动化更新SSL证书(基于DNS验证)
突突突
更新于 3 天前
从2023年下半年开始,各大云厂商的免费证书陆续从有效期一年变成了有效期三个月,这对广大的个人用户来讲是一件很不好的事情,因为这样就意味着每三个月就需要重新申请一次证书并部署。
雷池虽然自带了一个通过 Let's Encrypt 来申请证书的功能,但只支持申请时长为3个月的免费证书,但也没有自动续签的功能,所以作者就写了一个用于自动化更新雷池SSL证书的工具。
这款工具使用golang编写(go语言写的多了,就没想过用其他语言了),通过 Let's Encrypt 的 DNS-01 challenge 来进行验证并申请新的证书,替换原有的证书来实现自动更新。
目前DNS验证暂时仅支持:腾讯云、 阿里云、 华为云、 西部数码、 雨云,如果有小伙伴使用的是其他的域名服务提供商,欢迎在评论区留言,作者会在收到留言后会进行相应的更新。
项目地址:
github: https://github.com/Wink541/SafelineAPI
个人gitea: https://gitea.doicat.com/duoduo/SafelineAPI
$ git clone https://github.com/Wink541/SafelineAPI
$ cd SafelineAPI
$ go build -o safelineApi ./cmd/safelineApi/main.go
// 可根据不同平台来设定不同的编译环境
$ go env -w GOOS=linux //编译环境修改为linux,可选: linux/windows/darwin
$ go env -w GOARCH=amd64 //编辑架构修改为amd64,可选: amd64/arm64
{
"SafeLine": {
"Host": {
"HostName": "192.168.1.4",
"Port": "1443"
},
"ApiToken": "xxx"
},
"ApplyCert": {
"Days": 30,
"Email": "xxx",
"SavePath": "/tmp/ssl",
"DNSProviderConfig": {
"DNSProvider": "xxx",
"TencentCloud": {
"SecretId": "xxx",
"SecretKey": "xxx"
},
"AliCloud": {
"AccessKeyId": "xxx",
"AccessKeySecret": "xxx",
"RAMRole": "xxx(可选)",
"STSToken": "xxx(可选)"
},
"HuaweiCloud": {
"AccessKeyId": "xxx",
"Region": "xxx",
"SecretAccessKey": "xxx"
},
"WestCN": {
"Username": "xxx",
"Password": "xxx"
},
"RainYun": {
"ApiKey": "xxx"
}
}
}
}
参数介绍:
SafeLine
HostName : 雷池管理后台地址。默认为 safeline-mgt 容器IP;
Port : 雷池管理后台端口。默认为 1443 ;
ApiToken : 雷池接口API Token ,从控制台获取;
ApplyCert
Days : 过期时间,默认当证书剩余有效期小于该值时,则对证书进行更新;
Email : 申请证书时所使用的邮箱;
SavePath : 申请证书临时保存位置;
DNSProviderConfig : DNS服务提供商配置
DNSProvider : 域名服务提供商,可选 TencentCloud/AliCloud/HuaweiCloud/WestCN/RainYun ,下列的相关参数为云服务平台账号的凭据。$ ./safelineApi ./config.json //<可执行文件路径> <配置文件路径>
0 0 1,31 * * root /opt/safelineApi/safelineApi /opt/safelineApi/config.json > /opt/safelineApi/app.log
工具执行前证书有效期如图:

测试环境,过期时间设定为90天
工具执行部分日志如下:
[SUCCESS] 2025/04/15 21:36:07 SafeLine 相关配置检验完成!
[INFO] 2025/04/15 21:36:07 ApplyCert 相关配置检验完成!
[INFO] 2025/04/15 21:36:07 配置检查完毕,即将开始更新证书!
[INFO] 2025/04/15 21:36:07 本次需要更新证书数量有 6 个
2025/04/15 21:36:08 [INFO] acme: Registering account for admin@example.com
2025/04/15 21:36:09 [INFO] [www.doicat.com] acme: Obtaining bundled SAN certificate
2025/04/15 21:36:10 [INFO] [www.doicat.com] AuthURL: https://acme-v02.api.letsencrypt.org/acme/authz/xxxxxxxxxx/xxxxxxxxxxxx
2025/04/15 21:36:10 [INFO] [www.doicat.com] acme: Could not find solver for: tls-alpn-01
2025/04/15 21:36:10 [INFO] [www.doicat.com] acme: Could not find solver for: http-01
2025/04/15 21:36:10 [INFO] [www.doicat.com] acme: use dns-01 solver
2025/04/15 21:36:10 [INFO] [www.doicat.com] acme: Preparing to solve DNS-01
2025/04/15 21:36:12 [INFO] [www.doicat.com] acme: Trying to solve DNS-01
2025/04/15 21:36:12 [INFO] [www.doicat.com] acme: Checking DNS record propagation. [nameservers=183.60.83.19:53,183.60.82.98:53]
2025/04/15 21:36:14 [INFO] Wait for propagation [timeout: 1m0s, interval: 2s]
2025/04/15 21:36:22 [INFO] [www.doicat.com] The server validated our request
2025/04/15 21:36:22 [INFO] [www.doicat.com] acme: Cleaning DNS-01 challenge
2025/04/15 21:36:24 [INFO] [www.doicat.com] acme: Validations succeeded; requesting certificates
2025/04/15 21:36:27 [INFO] [www.doicat.com] Server responded with a certificate.
[SUCCESS] 2025/04/15 21:36:43 域名 [www.doicat.com] 证书更新成功!
执行后证书更新如下:

这个简单的项目就到这里了,主要还是为了解决证书更新的问题,文章内容不是很丰富(由于最近学业较繁忙,凭据申请的方法就没有去收集,各位可以上官网查询文档来获取),项目还是有需要完善的地方,有想法的小伙伴可以前往原文 雷池社区版自动化更新SSL证书 留言,在条件允许的情况下会尽力去实现。
1
6
当前 IP
docker 安全部署 Wordpress 方案(单服务器 +safeline+mariadb+redis)
Paddy
更新于 19 小时前
近期,我和许多朋友一样都入手了自己的云服务器,拥有了自己的第一块“数字自留地”。
总不能闲着不用叭,用其来部署一个个人博客站,记录成长、分享生活是一个好的选择。博客框架有很多,我想更多的专注于内容创作所以选择了老牌**WordPress**。
然而,WordPress的巨大市场份额也使其成为黑客与自动化攻击脚本的重点关注对象。因此,**如何为其筑起坚固的防线?**(其实是我喜欢瞎折腾啦
虽然WordPress部署教程有很多,本篇部署方案的重点在于在单个服务器上,使用**长亭Safeline雷池Web应用防火墙**代替常用的Nginx。
通过Docker容器化技术,我们将构建一个由Safeline WAF作为安全网关,内部集成MariaDB数据库与Redis缓存的高效、安全的WordPress站点。
部署成果:https://www.paddysun.top/ 欢迎来我的个人博客玩呀
WordPress
是什么:一款全球最流行的开源内容管理系统(CMS),以其强大的功能、灵活的可扩展性(海量主题与插件)和友好的用户体验而闻名。无论是个人博客、企业官网还是电商平台,它都能胜任。
在本文中的角色:我们网站的核心应用,提供内容创作和管理的所有功能。
长亭 Safeline WAF
是什么:一款业界领先的、开箱即用的Web应用防火墙产品。它像一位忠诚的卫士,守候在网站的最前沿,对所有外来访问请求进行检测和过滤,能有效防御SQL注入、跨站脚本(XSS)、恶意爬虫等常见的Web攻击。
在本文中的角色:我们的“安全网关”。所有公网流量都必须先经过它的审查,确认安全无害后,才会被转发给内网的WordPress容器。WordPress本身则不直接暴露在公网上,极大地提升了安全性。
实现 “既享受WordPress的便捷与强大,又拥有可靠的安全防护”
单服务器:成本低
安全防护:所有流量经过 Safeline WAF 防护
网络隔离:WordPress 不直接暴露在公网
详细得不行(大概叭:我折腾了1个月,稳定运行1个月的实际部署方案
这种架构既保证了安全性,又保持了 WordPress 的完整功能。
选择 Linux 系统镜像
确保云和系统安全组开放端口:80, 443
通过 SSH 登录服务器:ssh ubuntu@your-server-ip
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端口
safeline docker安装教程摘录自官方文档 长亭官方安装教程
1mkdir -p "/data/safeline"
该命令会创建 /data/safeline 目录作为雷池的安装目录(你可以根据你的实际情况选择安装目录)
请确保该目录至少有 5GB 的存储空间(如果日常流量较大,请保证充足的磁盘容量)
使用下方的命令进入雷池安装目录,并下载 docker compose 编排脚本
1cd "/data/safeline" 2wget "https://waf-ce.chaitin.cn/release/latest/compose.yaml"
使用下方的命令进入雷池安装目录,并创建 .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
现在万事具备,使用以下命令启动雷池服务
1cd "/data/safeline" 2docker compose up -d
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/
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:
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
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
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
1# 启动所有服务 2docker compose --env-file .env up -d 3 4# 查看服务状态 5docker compose ps 6 7# 查看 WordPress 日志 8docker compose logs -f wordpress
因为WordPress和safeline处于不同的docker和网络, 现在需要在 Safeline 管理界面添加 WordPress 站点, 这样safeline才能与WordPres通讯.
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地址记录下来
https://您的服务器IP:9443添加防护站点
站点名称:wordpress或者你喜欢的名称
上游服务器:WordPress 容器的实际 IP地址
访问域名:your-domain.com没有域名就填服务器公网IP
协议:HTTP(如果配置了 HTTPS 证书则选择 HTTPS)
配置监听端口:
监听端口:80 和 443(若要开启HTTPS则必须监听443端口)
确保 Safeline 监听的端口在防火墙中开放
将您的域名 your-domain.com 解析到服务器 IP: 您的服务器IP地址
通过 Safeline 访问您的网站:https://your-domain.com或者公网IP
按照 WordPress 安装向导完成安装
选择语言、设置站点标题、管理员账号等信息
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
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 {} \;
访问您的网站,确认:
网站正常访问
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
测试以下功能确保正常工作:
文章发布
图片上传
插件安装
主题切换
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
不建议开启safeline Bot防护,开启bot防护也记得将RSS等路径排除。
记得定期维护,更新系统 WordPress 核心、主题和插件等。
建议部署完成后创建系统镜像。
本文最早发布于 https://www.paddysun.top/,采用 共享-署名-非商用-相同方式共享 4.0 国际许可协议 进行许可。投稿至长亭内容创作者计划,希望能够获得雷池专业版授权体验一下 QaQ。
0
1
fvm snserver 进程分别有十几个,正常吗,内存爆了
刘鑫
更新于 2 天前
fvm snserver 进程分别有十几个,正常吗,内存爆了
0
2
建议升级postgres数据库版本
time flies
更新于 2 天前
最新版本9.2.7数据库版本不postgresql15.2,建议升级数据库版本到17,性能更好!
1
16
公司官网安装waf需要购买商业授权吗?
Dawn
更新于 3 天前
如题,一直有这个疑问,给公司的官网安装雷池的waf,需不需要购买授权?
0
3
雷池社区版自动化更新SSL证书(基于DNS验证)
突突突
更新于 3 天前
从2023年下半年开始,各大云厂商的免费证书陆续从有效期一年变成了有效期三个月,这对广大的个人用户来讲是一件很不好的事情,因为这样就意味着每三个月就需要重新申请一次证书并部署。
雷池虽然自带了一个通过 Let's Encrypt 来申请证书的功能,但只支持申请时长为3个月的免费证书,但也没有自动续签的功能,所以作者就写了一个用于自动化更新雷池SSL证书的工具。
这款工具使用golang编写(go语言写的多了,就没想过用其他语言了),通过 Let's Encrypt 的 DNS-01 challenge 来进行验证并申请新的证书,替换原有的证书来实现自动更新。
目前DNS验证暂时仅支持:腾讯云、 阿里云、 华为云、 西部数码、 雨云,如果有小伙伴使用的是其他的域名服务提供商,欢迎在评论区留言,作者会在收到留言后会进行相应的更新。
项目地址:
github: https://github.com/Wink541/SafelineAPI
个人gitea: https://gitea.doicat.com/duoduo/SafelineAPI
$ git clone https://github.com/Wink541/SafelineAPI
$ cd SafelineAPI
$ go build -o safelineApi ./cmd/safelineApi/main.go
// 可根据不同平台来设定不同的编译环境
$ go env -w GOOS=linux //编译环境修改为linux,可选: linux/windows/darwin
$ go env -w GOARCH=amd64 //编辑架构修改为amd64,可选: amd64/arm64
{
"SafeLine": {
"Host": {
"HostName": "192.168.1.4",
"Port": "1443"
},
"ApiToken": "xxx"
},
"ApplyCert": {
"Days": 30,
"Email": "xxx",
"SavePath": "/tmp/ssl",
"DNSProviderConfig": {
"DNSProvider": "xxx",
"TencentCloud": {
"SecretId": "xxx",
"SecretKey": "xxx"
},
"AliCloud": {
"AccessKeyId": "xxx",
"AccessKeySecret": "xxx",
"RAMRole": "xxx(可选)",
"STSToken": "xxx(可选)"
},
"HuaweiCloud": {
"AccessKeyId": "xxx",
"Region": "xxx",
"SecretAccessKey": "xxx"
},
"WestCN": {
"Username": "xxx",
"Password": "xxx"
},
"RainYun": {
"ApiKey": "xxx"
}
}
}
}
参数介绍:
SafeLine
HostName : 雷池管理后台地址。默认为 safeline-mgt 容器IP;
Port : 雷池管理后台端口。默认为 1443 ;
ApiToken : 雷池接口API Token ,从控制台获取;
ApplyCert
Days : 过期时间,默认当证书剩余有效期小于该值时,则对证书进行更新;
Email : 申请证书时所使用的邮箱;
SavePath : 申请证书临时保存位置;
DNSProviderConfig : DNS服务提供商配置
DNSProvider : 域名服务提供商,可选 TencentCloud/AliCloud/HuaweiCloud/WestCN/RainYun ,下列的相关参数为云服务平台账号的凭据。$ ./safelineApi ./config.json //<可执行文件路径> <配置文件路径>
0 0 1,31 * * root /opt/safelineApi/safelineApi /opt/safelineApi/config.json > /opt/safelineApi/app.log
工具执行前证书有效期如图:

测试环境,过期时间设定为90天
工具执行部分日志如下:
[SUCCESS] 2025/04/15 21:36:07 SafeLine 相关配置检验完成!
[INFO] 2025/04/15 21:36:07 ApplyCert 相关配置检验完成!
[INFO] 2025/04/15 21:36:07 配置检查完毕,即将开始更新证书!
[INFO] 2025/04/15 21:36:07 本次需要更新证书数量有 6 个
2025/04/15 21:36:08 [INFO] acme: Registering account for admin@example.com
2025/04/15 21:36:09 [INFO] [www.doicat.com] acme: Obtaining bundled SAN certificate
2025/04/15 21:36:10 [INFO] [www.doicat.com] AuthURL: https://acme-v02.api.letsencrypt.org/acme/authz/xxxxxxxxxx/xxxxxxxxxxxx
2025/04/15 21:36:10 [INFO] [www.doicat.com] acme: Could not find solver for: tls-alpn-01
2025/04/15 21:36:10 [INFO] [www.doicat.com] acme: Could not find solver for: http-01
2025/04/15 21:36:10 [INFO] [www.doicat.com] acme: use dns-01 solver
2025/04/15 21:36:10 [INFO] [www.doicat.com] acme: Preparing to solve DNS-01
2025/04/15 21:36:12 [INFO] [www.doicat.com] acme: Trying to solve DNS-01
2025/04/15 21:36:12 [INFO] [www.doicat.com] acme: Checking DNS record propagation. [nameservers=183.60.83.19:53,183.60.82.98:53]
2025/04/15 21:36:14 [INFO] Wait for propagation [timeout: 1m0s, interval: 2s]
2025/04/15 21:36:22 [INFO] [www.doicat.com] The server validated our request
2025/04/15 21:36:22 [INFO] [www.doicat.com] acme: Cleaning DNS-01 challenge
2025/04/15 21:36:24 [INFO] [www.doicat.com] acme: Validations succeeded; requesting certificates
2025/04/15 21:36:27 [INFO] [www.doicat.com] Server responded with a certificate.
[SUCCESS] 2025/04/15 21:36:43 域名 [www.doicat.com] 证书更新成功!
执行后证书更新如下:

这个简单的项目就到这里了,主要还是为了解决证书更新的问题,文章内容不是很丰富(由于最近学业较繁忙,凭据申请的方法就没有去收集,各位可以上官网查询文档来获取),项目还是有需要完善的地方,有想法的小伙伴可以前往原文 雷池社区版自动化更新SSL证书 留言,在条件允许的情况下会尽力去实现。
1
6