🚀 运行: ...
IP: ...
ISP: 检测中...

无需公网IP!Docker + Cloudflare Tunnel 完美部署 WordPress

前言

在家庭宽带或内网服务器上部署网站,通常面临没有公网 IP、端口被封锁(80/443)以及安全风险等问题。

今天分享一个极其优雅的解决方案:使用 Docker 配合 Cloudflare Tunnel (隧道)。这种方案不需要在路由器开端口,不需要公网 IP,且自带免费的 SSL 证书,还能隐藏服务器真实 IP,安全性极高。

准备工作

一台安装了 Docker 和 Docker Compose 的服务器(Linux/Mac/NAS均可)。

一个托管在 Cloudflare 上的域名。

Cloudflare 账号(开通免费的 Zero Trust 功能)。

第一步:获取 Cloudflare Tunnel Token

首先,我们需要在 Cloudflare 后台建立一条隧道,打通 Cloudflare 边缘节点到我们服务器的连接。

登录 Cloudflare Dashboard,点击左侧的 Zero Trust。

进入 Networks -> Tunnels,点击 Create a tunnel。

Connector 选择 Cloudflared,给隧道起个名字(如 wp-server)。

在安装界面选择 Docker 环境。

关键步骤: 复制下方的安装命令中 –token 后面的一长串字符(这就是你的隧道认证密钥),保存备用。

第二步:服务器端部署 (Docker Compose)

为了方便管理,我们将 WordPress、MySQL 和 Cloudflared 隧道程序编排在同一个 docker-compose.yml 文件中。

  1. 创建目录

Bash

mkdir -p my-wordpress && cd my-wordpress

  1. 创建配置文件

创建并编辑 docker-compose.yml 文件:

YAML

version: '3.8'

services:
# --- 1. 数据库服务 ---
db:
image: mysql:5.7
container_name: wp_db
restart: always
environment:
# 【请修改数据库 Root 密码
MYSQL_ROOT_PASSWORD: changeme123
MYSQL_DATABASE: wordpress
MYSQL_USER: wp_user
# 【请修改数据库用户密码 (需与 WP 服务一致)
MYSQL_PASSWORD: wp_password123
volumes:
- db_data:/var/lib/mysql
networks:
- wp_network

# --- 2. WordPress 服务 ---
wordpress:
depends_on:
- db
image: wordpress:latest
container_name: wp_app
restart: always
environment:
WORDPRESS_DB_HOST: db:3306
WORDPRESS_DB_USER: wp_user
# 【请修改必须与上面的 MYSQL_PASSWORD 一致
WORDPRESS_DB_PASSWORD: wp_password123
WORDPRESS_DB_NAME: wordpress
volumes:
- wp_data:/var/www/html
networks:
- wp_network

# --- 3. Cloudflare Tunnel 服务 ---
tunnel:
image: cloudflare/cloudflared
container_name: wp_tunnel
restart: always
command: tunnel run
environment:
# 【请修改这里粘贴第一步获取的长 Token
- TUNNEL_TOKEN=eyJhIjoiM这里填你的Token
networks:
- wp_network

volumes:
db_data:
wp_data:

networks:
wp_network:

注意: 请务必修改代码中注释标注的密码和 Token。

  1. 启动服务

Bash

docker compose up -d

第三步:配置公网域名

回到 Cloudflare Tunnel 的设置页面,点击 Next 进入 Public Hostname 配置:

Subdomain (子域名): 输入你想用的前缀,例如 blog。

Domain (域名): 选择你的主域名。

Service (服务转发):

Type: 选择 HTTP

URL: 输入 wordpress:80

这里的 wordpress 就是我们在 Docker 配置文件中定义的服务名,Docker 内部网络会自动解析,非常方便。

第四步:解决 “重定向次数过多” 问题(关键)

配置完成后,访问域名可能会报错或样式丢失。这是因为 Cloudflare 使用 HTTPS 访问隧道,但 WordPress 容器内部认为是 HTTP,导致陷入死循环。

解决方法: 我们需要强制 WordPress 识别 HTTPS 头部。在服务器终端执行以下命令,直接给 WordPress 配置文件打补丁:

Bash

docker exec -it wp_app sh -c "sed -i \"2iif (isset(\\$_SERVER['HTTP_X_FORWARDED_PROTO']) && \\$_SERVER['HTTP_X_FORWARDED_PROTO'] === 'https') { \\$_SERVER['HTTPS'] = 'on'; }\" /var/www/html/wp-config.php"

总结

现在,打开你的浏览器访问域名,应该就能看到 WordPress 的安装界面了。

通过这种方式部署,你获得了一个:

✅ 无需公网 IP 的站点

✅ 自动配置 SSL 证书 的站点

✅ 隐藏源站 IP 的安全站点

希望这篇教程对你有帮助!

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注