0、准备

先在服务器上安装好 docker 及 docker-compose

1、下载 cloudflared

windows 版

2、登录

进入 cloudflared.exe 所在目录

打开 cmd

cloudflared login

登录,之后选择一个托管在 cloudflare 上的域名

会在用户根目录生成”.cloudflared” 文件夹

里面有 cert.pem, 证书

3、创建有一个隧道

cloudflared tunnel create <隧道名字>

会在”.cloudflared” 文件夹,生成一个<id>.json文件,记住 id,之后更名为 “id.json”

忘记隧道名和 ID 可以通过下面命令找回

cloudflared tunnel list

3.5、添加解析

cloudflared tunnel route dns <隧道名> <域名>

或者在仪表盘上,创建一个 CNAMEA,域名指向 <id>.cfargotunnel.com

4、创建配置文件

创建一个 “config.yaml” 文件

tunnel: <id>
credentials-file: /etc/cloudflared/tunnel/id.json # 别改,路径为docker映射
protocol: quic
ingress:
- hostname: <域名>
  service: http://wp:80
- service: http_status:404

修改 id 和域名

5、建立文件夹结构

blog
├── html
├── mariadb_data
├── config
│   └── uploads.ini
├── cloudflared
│   ├── config.yaml
│   └── tunnel
│       └── id.json
└── docker-compose.yml

blog 为根文件夹 html 之后放置 workpress 文件,无需创建
mariadb_data 之后放置数据库文件,无需创建

5.5uploads.ini

是为了增加上传限制大小

#uploads.ini
file_uploads = On
memory_limit = 256M
upload_max_filesize = 10M
post_max_size = 10M
max_execution_time = 600

6、docker-compose.yml

version: "3"
services:
  argo_tunnel:
    image: cloudflare/cloudflared:latest
    volumes:
      - ./cloudflared:/etc/cloudflared
    restart: always
    command: 'tunnel --config /etc/cloudflared/config.yaml run' # 别改
    user: root
    depends_on:
      - wp

  wp:
    image: wordpress:latest
    restart: always
    ports:
      - "80:80"
    volumes:
      - ./html/:/var/www/html
      - ./config/uploads.ini:/usr/local/etc/php/conf.d/uploads.ini
    depends_on:
      - mariadb_wp

  mariadb_wp:
    image: mariadb:latest
    environment:
       MYSQL_ROOT_PASSWORD: Zzh125475
       MYSQL_DATABASE: wordpress
       MYSQL_USER: root
       MYSQL_PASSWORD: Zzh125475
    volumes:
      - ./mariadb_data:/var/lib/mysql
    restart: always
    privileged: true

注意数据库账号密码

7、将 blog 文件夹,传到服务器

启动

docker-compose up -d

查看日志

docker-compose logs -f --tail=30

移除所有容器

docker-compose down

7.5 迁移

把这个 “blog” 文件夹打包直接拷走到其他服务器重启启动就行了

移植 wordpress 后出现无法安装插件,主题,提示需要 ftp 服务

修改 wordpress 配置即可。 在 wordpress 安装目录中找到 wp-config.php 文件,在文件中添加以下代码:

define("FS_METHOD","direct");
define("FS_CHMOD_DIR", 0777);
define("FS_CHMOD_FILE", 0777);

然后给 wordpress 安装目录开放权限:

chmod -R 777 <wordpress安装目录>

8、局域网访问

workpress 只支持后台设置的域名访问,局域网直接输 ip 是访问不了的

进入 C:\Windows\System32\drivers\etc

修改 hosts,添加一条解析

192.168.16.239 b.zzh.one

然后本地通过域名就能访问局域网了

8.5 解除域名限值

需要通过其他域名或者局域网访问 wordpress 时

修改 wordpress 配置即可。 在 wordpress 安装目录中找到 wp-config.php 文件,在文件中添加以下代码:

define('WP_SITEURL','http://'.$_SERVER['HTTP_HOST']);
define('WP_HOME','http://'.$_SERVER['HTTP_HOST']);
define( 'WP_CONTENT_URL', '/wp-content');

9、优化速度

frp

目前使用 cloudflare tunnel 穿透,好处是免费,安全,但是延迟有点高

使用 香港服务器 做 frp 中转,可以提高浏览体验

安装 frp 看这篇 -> frp 内网穿透

反向代理

先到 cloudflare 上添加一条解析,指派一个域名给中转服务器 fast.sanqi.one

然后通过 nginx,反向代理服务器上的中转端口

刚好中转服务器上安装了宝塔,这次就使用宝塔来设置反向代理

到宝塔上新增一个站点,域名填写 fast.sanqi.one,下方选项都选不创建

打开站点设置,通过 Let’s Encrypt,添加 ssl

修改配置文件,在下方加入:

location / {
#注意我frp配置的是http协议,所以端口为7080,
proxy_pass http://127.0.0.1:7080;
rewrite ^/(.*)$ /$1 break;
proxy_redirect off;
proxy_set_header Host $host:80;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Upgrade-Insecure-Requests 1;
proxy_set_header X-Forwarded-Proto https;
#解决nginx反向代理Mixed Content和Blockable问题
add_header Content-Security-Policy upgrade-insecure-requests;
}

同时删除配置文件中的多余的过滤限值

现在就可以通过 fast.sanqi.one 来访问 wordpress 了

参考博客

10. WordPress问题汇总

:::note[warning WordPress问题汇总]

1、WordPress 上传的文件尺寸超过 php.ini 中定义的 upload_max_filesize 值

此问题是 WordPress 中 php.ini 默认允许上传的文件大小为 2M, 可以通过挂载配置文件修复此问题。

自定义 uploads.ini 文件,内容如下 (尺寸限制可按需修改):

file_uploads = On
memory_limit = 256M
upload_max_filesize = 10M
post_max_size = 10M
max_execution_time = 600

将刚创建的配置文件挂载为 WordPress 容器的 /usr/local/etc/php/conf.d/uploads.ini 即可。下面以 docker-compose.yml 为例,配置形如:

wordpress:
volumes:
- ./config/uploads.ini:/usr/local/etc/php/conf.d/uploads.ini
docker-compose down # 重启服务栈

docker-compose up -d

2、WordPress 安装插件提示需要 Ftp 服务

移植 wordpress 后出现此问题

修改 wordpress 配置即可。 在 wordpress 安装目录中找到 wp-config.php 文件,在文件中添加以下代码:

define("FS_METHOD","direct");
define("FS_CHMOD_DIR", 0777);
define("FS_CHMOD_FILE", 0777);

然后给 wordpress 安装目录开放权限:

chmod -R 777 <wordpress安装目录>

3、只有特定域名能够访问 wordpress

需要通过其他域名或者局域网访问 wordpress 时

修改 wordpress 配置即可。 在 wordpress 安装目录中找到 wp-config.php 文件,在文件中添加以下代码:

define('WP_SITEURL','http://'.$_SERVER['HTTP_HOST']);
define('WP_HOME','http://'.$_SERVER['HTTP_HOST']);
define( 'WP_CONTENT_URL', '/wp-content');

:::