发布于 3 天前
发布于 3 天前
Paddy
更新于 3 天前
0
0
近期,我和许多朋友一样都入手了自己的云服务器,拥有了自己的第一块“数字自留地”。
总不能闲着不用叭,用其来部署一个个人博客站,记录成长、分享生活是一个好的选择。博客框架有很多,我想更多的专注于内容创作所以选择了老牌**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。