老姜讲技术

优秀是一种习惯!

--亚里士多德

docker搭建wordpress

搭建wordpress需要三个镜像,nginx,wordpress,mariadb。

编写docker-compose.yml文件。

version: '3.1'

services:
  nginx:
    image: nginx:1.17.9
    restart: always
    ports:
      - 80:80
      - 443:443
    volumes:
      - $PWD/nginx/yoursite.conf:/etc/nginx/conf.d/yoursite.conf
      - $PWD/nginx/blog.access.log:/var/log/nginx/blog.access.log
      - $PWD/nginx/blog.error.log:/var/log/nginx/blog.error.log
      - $PWD/wordpress:/var/www/html
      - $PWD/cert/challenges:/var/www/challenges
      - $PWD/cert/yoursite.com:/etc/letsencrypt/live/yoursite.com

  wordpress:
    image: wordpress:5.4.0-php7.4-fpm
    restart: always
    environment:
      WORDPRESS_DB_HOST: db
      WORDPRESS_DB_NAME: dbname
      WORDPRESS_DB_USER: username
      WORDPRESS_DB_PASSWORD: password
    volumes:
      - $PWD/wordpress:/var/www/html

  db:
    image: mariadb:10.4.12
    restart: always
    environment:
      MYSQL_DATABASE: dbname
      MYSQL_USER: username
      MYSQL_PASSWORD: password
      MYSQL_RANDOM_ROOT_PASSWORD: '1'
    volumes:
      - $PWD/db:/var/lib/mysql

yoursite.conf编写你的站点的nginx配置文件

server {
    listen       80;
    listen       443 ssl;

    # ssl on;

    server_name  yoursite.com;

    access_log  /var/log/nginx/blog.access.log  main;
    error_log /var/log/nginx/blog.error.log;

    ssl_certificate /etc/letsencrypt/live/yoursite.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/yoursite.com/privkey.pem;

    ssl_session_timeout 5m;
    ssl_protocols TLSv1.1 TLSv1.2;
    ssl_ciphers HIGH:!ADH:!MD5;
    ssl_prefer_server_ciphers on;

        #301转移
        #if ($server_port = 80) {
        #       return 301 https://$server_name$request_uri;
        #}
        if ( $scheme = http ){
          return 301 https://$server_name$request_uri;
        }


    location ^~ /.well-known/acme-challenge/ {
        alias /var/www/challenges/;
        # try_files $uri =404;
    }

    location / {
      root   /var/www/html;
      index index.html index.htm index.php;
      autoindex off;
      try_files $uri $uri/ /index.php?q=$uri&$args;
    }

     error_page   500 502 503 504  /50x.html;
     location = /50x.html {
         root   /var/www/html;
     }

     # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
     #
     location ~ \.php$ {
         root           /var/www/html;
         fastcgi_pass   wordpress:9000;
         fastcgi_index  index.php;
         fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
         include        fastcgi_params;
     }

     # deny access to .htaccess files, if Apache's document root
     # concurs with nginx's one
     #
     location ~ /\.ht {
         deny  all;
     }
}

接下来在当前目录运行docker-compose up -d即可运行你的网站。打开浏览器输入你的域名即可看到wordpress的安装页面。按照步骤配置信息即安装成功。