简介
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 本身。
准备
要完成本教程你需要准备以下:
- 一台 Linux 服务器,这里我用 Ubuntu 作为演示
- 按照 Linux 安装 Docker 完整教程 - 腾讯云开发者社区,完成安装
- 一个域名解析至服务器(没有可以直接用服务器 IP)
一、完成 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_domain
和 www.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
: 这里是你的域名或者 IPyour_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