纯命令行dockercompose一键部署WordPressMySQLNginx
上期我们教了如何使用在纯命令行的服务器中开启代理,方便咱们进行 docker 包以及其他资源的下载,不用换源即可解决网络问题。在此基础上我们进行 docker 部署 wordpress + mysql + nginx。
我们这边是使用 docker compose 进行部署的,所以要先安装好 docker 以及 docker compose,因为安装太久了不知道这两个是连带安装的还是单独安装的了😜,总之命令行输出以下内容,不报错就行。
docker
docker compose
docker-compose
# 比较早版本的 docker compose 命令是 docker-compose 好像是后来就改成 docker compose 了
然后这边是我们的一键部署代码,新建一个 compose.yaml 文件把代码放进去就行。
version: "3.9"
services:
# MySQL 数据库(保持不变)
db:
container_name: mysql
image: mysql:5.7
volumes:
- ./db_data:/var/lib/mysql
restart: always
environment:
MYSQL_ROOT_PASSWORD: somewordpress
MYSQL_DATABASE: wordpress
MYSQL_USER: wordpress
MYSQL_PASSWORD: wordpress
# WordPress(替换为 PHP-FPM 版本)
wordpress:
container_name: wordpress
depends_on:
- db
image: wordpress:php8.0-fpm # 关键修改:使用 php-fpm 镜像
volumes:
- ./wordpress_data:/var/www/html # 保留现有数据卷
restart: always
environment:
WORDPRESS_DB_HOST: db
WORDPRESS_DB_USER: wordpress
WORDPRESS_DB_PASSWORD: wordpress
WORDPRESS_DB_NAME: wordpress
# Nginx 服务(新增)
nginx:
container_name: nginx
depends_on:
- wordpress
image: nginx:alpine
volumes:
- ./wordpress_data:/var/www/html # 共享 WordPress 数据
- ./nginx.conf:/etc/nginx/conf.d/default.conf # 挂载 Nginx 配置
ports:
- "8091:80" # 对外暴露端口(和原来一致)
restart: always
然后再新建一个 nginx.conf 文件存放 nginx 的配置,内容如下:
server {
listen 80;
server_name localhost;
root /var/www/html;
index index.php index.html index.htm;
# 静态文件缓存
location ~* \.(js|css|png|jpg|jpeg|gif|ico)$ {
expires 30d;
add_header Cache-Control "public, no-transform";
}
# WordPress 路由规则
location / {
try_files $uri $uri/ /index.php?$args;
}
# PHP 处理(关键配置)
location ~ \.php$ {
fastcgi_pass wordpress:9000; # 指向 PHP-FPM 容器
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
fastcgi_read_timeout 300; # 避免超时
}
# 禁止访问 .htaccess
location ~ /\.ht {
deny all;
}
}
随便找个你想存放数据的目录,把 compose.yaml 文件和 nginx.conf 放在那个目录下,使用以下代码运行,该目录下就会生成一个 db_data 和 wordpress_data 目录,前者存放的是 sql 数据库数据,后者存放的是 wordpress 的数据。
docker compose up -d
我这里记录一下常用的代码 免得忘记了:
docker compose down # 删除 compose 中的所有容器
docker stop $(docker ps -aq) # 停止所有容器
docker run -d --name <container_name> -p 80:80 -v host_path:container_path image_name
# -d:不加 -d 为前台输出日志 -p:端口,前面为宿主机后面为容器内端口 -v:挂载数据卷,前面为宿主机地址后面为容器地址
docker volume ls # 查看所有的数据卷
docker exec -it container_name bash # 进入到容器内部
docker cp -a container_name:container_path host_path # 从容器内复制文件到宿主机,-a 复制文件夹
docker cp -a host_path container_name:container_path # 从宿主机复制文件到容器内
docker inspect container_name # 查看容器的信息
# | grep 'str' linux 搜索字符串
# | findstr 'str' windows 搜索字符串
compose 进度条走完之后可以 docker ps -a 看一下容器有没有正常创建和运行,可以看到这里的 STATUS 是正常的 up 状态,PORTS 也都正常,如果遇到宿主机 PORTS 被占用的情况,可以把上面 compose.yaml 文件中 8091 改成别的值。

然后这里就没问题啦,正常情况下在浏览器网址栏输入你这个服务器的 ip + 端口号(8091)比如我自己的服务器 39.106.1.193:8091 就可以访问到 wordpress 的主页了,你也可以在命令行 curl 一下这个地址看有没有内容返回:
# 例
curl 39.106.1.193:8091
如果没有返回的话有两个原因:一是防火墙端口没有开放,一是服务器的安全组没有开放,又或者两者都有,开放 8091 端口就行。对于防火墙,不同的发行版命令好像不一样,以 ubuntu 为例:
sudo ufw allow 8091 # 没有 ufw 命令的话就 apt install ufw 下一个
服务器安全组则要在你购买服务器的平台的控制台中设置,以阿里云为例,在控制台安全组中添加一条 8091 端口的策略就 OK。

然后再 curl 一下服务器的 ip + 端口应该就有返回内容了,这样的话在其他电脑的浏览器里输入自己的 ip + 端口就可以正常访问到 wordpress 的内容了,完成首次登陆的注册和配置就 OK😋😋😋
