跳至主要內容

Docker搭建WordPress

三思原创大约 4 分钟dockerdocker-composewordpress

使用docker-compose搭建WordPress,添加Nginx反向代理和https配置,增大文件上传限制。配置四个容器:mysql、phpmyadmin、wordpress和nginx。提供Nginx配置文件进行站点访问控制和https设置。

image
image

Docker-compose来搭建WordPress

使用Docker-compose来搭建WordPress

开始搭建

下载安装docker和docker-compose

大家最好参考官网的方法, 只需要一个脚本就可以了!

创建一个目录

这是为了, 我们把所有的内容都放到一起.

mkdir wordpress && cd wordpress && touch docker-compose.yml && mkdir volumes

创建yaml文件

yaml文件, 将指导如何创建容器:

version: "3.9"
services:
  db:
    image: mysql
    volumes:
      - /share/Container/container-station-data/Mount/wordpress/mysql:/var/lib/mysql
    restart: always
    environment:
      MYSQL_ROOT_PASSWORD: password
      MYSQL_DATABASE: wordpress
      MYSQL_USER: kingdo
      MYSQL_PASSWORD: password
  wordpress:
    depends_on:
      - db
    image: wordpress
    volumes:
      - /share/Container/container-station-data/Mount/wordpress/wordpress:/var/www/html
    restart: always
    environment:
      WORDPRESS_DB_HOST: db
      WORDPRESS_DB_USER: root
      WORDPRESS_DB_PASSWORD: password
      WORDPRESS_DB_NAME: wordpress
    ports:
      - 10084:80
version: '3.1'

services:

  wordpress:
    image: wordpress
    restart: always
    ports:
      - 10084:80
    environment:
      WORDPRESS_DB_HOST: db
      WORDPRESS_DB_USER: exampleuser
      WORDPRESS_DB_PASSWORD: examplepass
      WORDPRESS_DB_NAME: exampledb
    volumes:
      - /share/Container/container-station-data/Mount6/wordpress:/var/www/html

  db:
    image: mysql:5.7
    restart: always
    environment:
      MYSQL_DATABASE: exampledb
      MYSQL_USER: exampleuser
      MYSQL_PASSWORD: examplepass
      MYSQL_RANDOM_ROOT_PASSWORD: '1'
    volumes:
      - /share/Container/container-station-data/Mount6/db:/var/lib/mysql

volumes:
  wordpress:
  db:

在这个yaml中, 我们启动了四个容器:

  1. mysql, 数据库
  2. phpmyadmin, 数据库管理软件
  3. wordpress, 网站站点
  4. nginx, 反向代理

配置nginx

我们需要在./volumes/nginx/conf.d​中准备两个文件:

一个是htts的证书文件, 我是在腾讯云中申请的, 过程并不复杂, 就不展开了!

一个是Nginx的配置文件, 我的配置是:

server {
        listen       80;
        listen  [::]:80;
        server_name  kingdo.club;
        client_max_body_size 1024M;
        sendfile on;
        location / {
                return 301 https://$host$request_uri;
        }
        location ^~ /xsfw/ {
                root   /usr/share/nginx/html;
                add_header content-type "text/html";
                index  index.html index.htm;
        }
}
server {
        listen 443 ssl;
        server_tokens off;
        keepalive_timeout 5;
        root /usr/share/nginx/html;
        index index.html;
        server_name kingdo.club;
        ssl_certificate /etc/nginx/conf.d/certs/kingdo.club_bundle.crt;
        ssl_certificate_key /etc/nginx/conf.d/certs/kingdo.club.key;
        ssl_session_timeout 5m;
        ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
        ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE;
        ssl_prefer_server_ciphers on;
        client_max_body_size 1024M;
        sendfile on;

        location / {
                proxy_pass http://wordpress;
                proxy_http_version    1.1;
                proxy_cache_bypass    $http_upgrade;

                proxy_set_header Upgrade            $http_upgrade;
                proxy_set_header Connection         "upgrade";
                proxy_set_header Host                $host;
                proxy_set_header X-Real-IP            $remote_addr;
                proxy_set_header X-Forwarded-For    $proxy_add_x_forwarded_for;
                proxy_set_header X-Forwarded-Proto    $scheme;
                proxy_set_header X-Forwarded-Host    $host;
                proxy_set_header X-Forwarded-Port    $server_port;
        }
        location = /MP_verify_V6hDvkp9FnFJLodc.txt {
                root   /usr/share/nginx/html;
        }
        location ^~ /xsfw/ {
                root   /usr/share/nginx/html;
                add_header content-type "text/html";
                index  index.html index.htm;
        }

        location ^~ /resources/ {
                root   /usr/share/nginx/html;
                index  index.html index.htm;
        }

        location ^~ /BigXXY/ {
                root   /usr/share/nginx/html;
                index  index.html index.htm;
        }

        location ^~ /3D-Photo-Album/ {
                root   /usr/share/nginx/html;
                index  index.html index.htm;
        }
}

这里面有一写比较重要的配置. 首先我们定义了两个server, 分别监听80和443端口, 表示http和tpps.

http中, 除uri以 /xsfw/ ​ 开头之外, 全部转发到https中! 因为这个 /xsfw/ ​ 是我给女朋友写的, 而这个必须是http的, 因此我保留了这个配置!

https中, 前面一大部分属于配置ssl, 需要将路径修改称自己的! 其他的不需要动, 也可以不需要懂, 反正是我抄的!

后面两个配置是增大nginx的上传文件大小限制, 这个非常重要, 不然你上传大文件的时候, 会失败, 因为我们是通过nginx进行反向代理, 因此我们需要同时修改nginx和worepress的上传文件限制.

后面的location /​是方向代理的部分, 将流量转发到wordpress中!

再后面的几个location​就是静态资源了.

启动容器

docker-compose up -d

-d表示在后台运行. 这样就完成了!

修改文件大小

我们除去在nginx中, 修改了上传文件的大小配置, 还需要修改wordpress的, 这个修改比较容易, 只需要修改wordpress根目录中的.htaccess即可:

php_value upload_max_filesize 512M
php_value post_max_size 512M
php_value memory_limit 512M

修改站点的地址

迁移

一劳永逸, 你所有的数据都会保存在我们指定的文件中, 你只需要将文件放到任意一个服务器上, 然后再执行一次docker-compose, 就可以恢复你的网站, 这样的话, 我们就可以轻松的实现迁移和备份.

但是, 迁移之后, 需要注意, 需要保证Wordpress根目录的所属用户以及用户组保持不变, 否则安装插件, 主题等都会出现错误!

可以直接将用户和用户组以​ **-R参数递归的修改为:**​www-data

后记

我的网站目前就是这样搭建起来的:

Kingdo Station - 好好活就是有意义的事,有意义的事就是好好活open in new windowkingdo.club/open in new window