今天帮朋友搭建一个 WordPress 网站,使用 Caddy 做反向代理,记录一下全过程

安装 WordPress

WordPress 的 Docker 镜像分为 Apache 和 PHP-FPM 两种,我不喜欢在 Docker 中还有一个 Apache,所以使用 PHP-FPM,然后使用 Caddy 反向代理。

朋友网站的访问量很小,没必要上 Kubernetes,直接 docker-compose,配置如下:

version: "3"
services:
  db:
    image: mysql:5.7
    ports:
      - 3306:3306
    volumes:
      - /opt/vol/mysql:/var/lib/mysql
    environment:
      MYSQL_ROOT_PASSWORD: secret
      MYSQL_USER: wordpress
      MYSQL_PASSWORD: wordpress
      MYSQL_DATABASE: wordpress
    restart: always

  wordpress:
    image: wordpress:php7.1-fpm-alpine
    ports:
      - 9000:9000
    volumes:
      - /opt/vol/wordpress:/var/www/html
    environment:
      WORDPRESS_DB_HOST: db:3306
      WORDPRESS_DB_USER: wordpress
      WORDPRESS_DB_PASSWORD: wordpress
      WORDPRESS_DB_NAME: wordpress
    depends_on:
      - db
    restart: always

使用 Caddy 反向代理

按照官方文档,进行反向代理设置的时候,一开始总是提示 File not found ,后来仔细查阅文档,才发现由于 PHP-FPM 中 FastCGI 的根目录是 Docker 中的 /var/www/html,而并非 Docker 外的 /opt/vol/wordpress,所以需要额外设置一下 FastCGI 的 root,整个配置如下:

example.com {
     gzip
     root /opt/vol/wordpress
     fastcgi / 127.0.0.1:9000 php {
         root /var/www/html
     }
}

使用 Nginx 反向代理

如果采用 Nginx 的话,则需要更改 fastcgi_param 这一行配置,强制指定使用 /var/www/html 而不是原来的 $document_root。整个配置如下:

server {
    listen 80;
    server_name example.com;

    root /opt/vol/wordpress;
    index index.php;

    location / {
        try_files $uri $uri/ /index.php?$args;
    }

    location ~ \.php$ {
        try_files $uri =404;
        fastcgi_split_path_info ^(.+\.php)(/.+)$;
        fastcgi_pass 127.0.0.1:9000;
        fastcgi_index index.php;
        include fastcgi_params;
        fastcgi_param SCRIPT_FILENAME /var/www/html$fastcgi_script_name;
        fastcgi_param PATH_INFO $fastcgi_path_info;
    }
}