Docker Compose(一)快速搭建 WordPress

Linux , 记录
135 0

简介

WordPress 是一个免费和开源的内容管理系统(CMS),建立在 MySQL 数据库和 PHP 上。由于其可扩展的插件架构和模板系统,其大部分管理可以通过网络界面完成。这就是为什么 WordPress 在创建不同类型的网站时是一个受欢迎的选择,从博客到产品页面到电子商务网站。

运行 WordPress 通常需要安装 LAMP(Linux、Apache、MySQL 和 PHP)或 LEMP(Linux、Nginx、MySQL 和 PHP),这可能很费时间。然而,通过使用像 Docker 和 Docker Compose 这样的工具,你可以简化设置你喜欢的栈和安装 WordPress 的过程。你可以使用镜像,而不是手工安装单个组件,镜像将库、配置文件和环境变量等东西标准化。然后,在容器中运行这些镜像,即在一个共享的操作系统上运行的孤立的进程。此外,通过使用 Compose,你可以协调多个容器--例如,一个应用程序和数据库--以相互通信。

在本教程中,将建立多个容器来安装 WordPress 。容器将包括一个 MySQL 数据库、一个 Nginx 网络服务器和 WordPress 本身。

准备

要完成本教程你需要准备以下:

一、完成 Web 服务器配置

在运行 Docker 容器之前,我们第一步是完成 Nginx 配置。你的配置文件将包括一些 WordPress 特有的位置块,还有一个位置块,用来引导 Let's Encrypt 验证请求到 Certbot 客户端,以便自动更新证书。

1、首先创建一个 wordpress 文件夹

mkdir wordpress

2、然后进入该目录

cd wordpress

3、为 Nginx 配置文件新建一个目录

mkdir nginx-conf

4、用一个你喜欢的编辑器,编辑配置文件

vim nginx-conf/nginx.conf

5、将以下配置文件写入 nginx.conf,注意这里的 your_domainwww.your_domain 需要替换成你的域名或者 IP

server {
        listen 80;
        listen [::]:80;

        server_name your_domain www.your_domain;

        index index.php index.html index.htm;

        root /var/www/html;

        location ~ /.well-known/acme-challenge {
                allow all;
                root /var/www/html;
        }

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

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

        location ~ /\.ht {
                deny all;
        }
        
        location = /favicon.ico { 
                log_not_found off; access_log off; 
        }
        location = /robots.txt { 
                log_not_found off; access_log off; allow all; 
        }
        location ~* \.(css|gif|ico|jpeg|jpg|js|png)$ {
                expires max;
                log_not_found off;
        }
}

这里介绍一下上面的 Nginx 配置文件都是写了些什么

Directives

  • listen:告诉 Nginx 监听 80 443 端口,这将允许你使用 Certbot 的 webroot 插件处理你的证书请求。注意,一旦成功获得证书,我们将更新此配置让博客用上 SSL。
  • server_name: 这里是你的域名或者 IP your_domain
  • index:这个指定了在处理对服务器的请求时,将作为索引使用的文件。在这里我们修改了默认的优先级顺序,以便 Nginx 在可能时优先调用文件。 index.php index.html index.php
  • root:这个指令决定了向你的服务器请求的根目录。这个目录,在构建时由你的 WordPress Dockerfile 中的指令创建为一个挂载点。这些 Dockerfile 指令也确保 WordPress 发布的文件被挂载到 /var/www/html 这个卷。

Location Blocks:

  • location ~ /.well-known/acme-challenge: 这个模块将处理对 .well-known 目录,Certbot 将在那里放置一个临时文件,以验证你的域名的 DNS 是否解析到你的服务器。有了这个配置,你就可以使用 Certbot 的 webroot 插件来为你的域名获取证书。
  • location /: 在这个模块中,一个 try_files 指令是用来检查符合个别 URI 请求的文件。而不是返回一个 404 Not Found 状态是默认的,但是,你会把控制权交给 WordPress 的 index.php 文件中的请求参数。
  • location ~ \.php$: 这个模块将处理 PHP ,并将这些请求代理给你的 wordpress 容器。因为你的 WordPress Docker 镜像将基于 php:fpm 镜像,所以还得将在这模块中包括 FastCGI 协议的特定配置选项。
  • location ~ /\.ht: 这个模块将处理 .htaccess 文件,因为 Nginx 不会提供这些文件。列表中的 deny_all 指令保证了 .htaccess 文件将永远不会被提供给用户。
  • location = /favicon.ico, location = /robots.txt: 这些模块确保了对 /favicon.ico/robots.txt 将不会被记录。
  • location ~* \.(css|gif|ico|jpeg|jpg|js|png)$: 这个模块关闭了对静态资产请求的记录,并确保这些文件格式是高度可缓存的,因为它们通常占用较多流量的服务。

二、用 Docker Compose 跑服务

使用 Compose,可以设置不同的服务来运行多容器应用程序,因为 Compose 允许您将这些服务与共享网络和卷链接在一起。这将对您当前的设置很有帮助,因为您将为数据库,WordPress 应用程序和 Web 服务器创建不同的容器。

首先,创建并打开文件:docker-compose.yml

vim docker-compose.yml

填入下面的内容,以下是完整的 docker-compose. yml 文件

version: "3"
services:
  db:
    image: mysql:5.7
    # 重启策略
    restart: unless-stopped
    # 容器名称
    container_name: MYSQL57
    # 映射 db 容器内存放数据库数据的文件夹
    # 其中包含了WordPress 的核心数据信息
    volumes:
      - ./mysql:/var/lib/mysql
    # 下面的环境变量会在数据库数据文件夹已存在时失效
    environment:
      MYSQL_ROOT_PASSWORD: your_password
      MYSQL_DATABASE: your_database
      MYSQL_USER: your_user
      MYSQL_PASSWORD: your_password
    networks:
      - app-network

  wordpress:
    depends_on:
      # 按依赖关系顺序启动
      - db
    image: wordpress:php8.2-fpm-alpine
    restart: unless-stopped
    volumes:
      - ./wordpress:/var/www/html
    environment:
      WORDPRESS_DB_HOST: db:3306
      WORDPRESS_DB_USER: your_user
      WORDPRESS_DB_PASSWORD: your_password
      WORDPRESS_DB_NAME: your_database
    networks:
      - app-network

  nginx:
    depends_on:
      # 按依赖关系顺序启动
      - wordpress
    image: nginx:1.22
    restart: unless-stopped
    # ./wordpress 中包含了 WordPress 本体文件
    # ./config 中包含 Nginx 配置文件
    # ./key (可选) 中包含SSL证书 用于启用https连接
    volumes:
      - ./wordpress:/var/www/html
      - ./nginx-conf:/etc/nginx/conf.d
      - ./key:/key
    ports:
      - 80:80
      - 443:443
    networks:
      - app-network

volumes:
  wordpress:
  dbdata:

networks:
  app-network:
    driver: bridge

三、运行

使用以下命令运行即可

docker compose up -d
最后更新 2023-05-04
评论 ( 0 )
OωO
隐私评论