返回博客列表
纯命令行dockercompose一键部署WordPressMySQLNginx

纯命令行dockercompose一键部署WordPressMySQLNginx

2025-06-19#docker#docker-compose#wordpress#nginx#mysql

上期我们教了如何使用在纯命令行的服务器中开启代理,方便咱们进行 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 改成别的值。

docker ps -a

然后这里就没问题啦,正常情况下在浏览器网址栏输入你这个服务器的 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。

阿里云安全组放行 8091

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