当前位置: 首页 > news >正文

使用Docker+WordPress部署个人博客

一、通过docker compose 自动一键部署WordPress

1. 准备工作

  • 安装 Docker 和 Docker Compose
  • 确保服务器有公网 IP(如果需要外部访问)
  • 域名(可选,用于绑定网站)

2. 创建 Docker Compose 配置文件

创建一个docker-compose.yml文件,内容如下:

version: '3.8'services:# WordPress服务wordpress:image: wordpress:latestrestart: alwaysports:- "80:80"  # 将容器的80端口映射到主机的80端口environment:WORDPRESS_DB_HOST: dbWORDPRESS_DB_USER: wordpressWORDPRESS_DB_PASSWORD: your_secure_passwordWORDPRESS_DB_NAME: wordpress_dbvolumes:- wordpress_data:/var/www/html  # 持久化存储WordPress数据depends_on:- db# 数据库服务db:image: mysql:5.7restart: alwaysenvironment:MYSQL_ROOT_PASSWORD: root_secure_passwordMYSQL_DATABASE: wordpress_dbMYSQL_USER: wordpressMYSQL_PASSWORD: your_secure_passwordvolumes:- db_data:/var/lib/mysql  # 持久化存储数据库数据volumes:wordpress_data:db_data:

3. 启动服务

在配置文件所在目录执行以下命令:

# 启动服务
docker compose up -d# 查看运行状态
docker compose ps# 停止服务(保留容器和数据)
docker compose stop# 停止并删除服务(保留数据卷)
docker compose down# 执行删除命令(包含数据卷)
docker compose down -v# 强制重新构建并启动
docker compose up -d --force-recreate

4. 初始化 WordPress

  1. 打开浏览器,访问服务器 IP 地址(或绑定的域名)
    在这里插入图片描述

  2. 选择网站语言
    在这里插入图片描述

  3. 填写网站基本信息(站点标题、用户名、密码、邮箱)

    在这里插入图片描述

  4. 点击 “安装 WordPress” 完成初始化

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

5. 后续操作

  • 登录后台:访问http://你的IP/wp-admin
  • 安装主题:在后台 “外观 - 主题” 中选择合适的主题
  • 安装插件:根据需求安装必要的插件(如 SEO、安全、备份等)
  • 配置域名:将域名解析到服务器 IP,并在 WordPress 设置中更新站点地址

二、手动部署WordPress

1. 提前创建数据卷(持久化数据)

为了确保 WordPress 文件和 MySQL 数据在容器删除后不丢失,先创建两个数据卷:

# 创建存储WordPress文件的数据卷
docker volume create wordpress_data# 创建存储MySQL数据的数据卷
docker volume create db_data
2. 创建自定义网络(让容器互通)

WordPress 容器需要连接到 MySQL 容器,最好创建一个自定义网络(而非默认网络),这样容器可以通过 “容器名” 互相访问(默认网络可能需要 IP 地址,不方便):

docker network create wordpress_network
3. 启动 MySQL 数据库容器

先启动数据库容器(因为 WordPress 依赖数据库),配置环境变量、数据卷和网络:

docker run -d \--name wordpress_db \  # 给容器起个名字(方便后续引用)--network wordpress_network \  # 加入自定义网络-e MYSQL_ROOT_PASSWORD=root_secure_password \  # MySQL root密码(替换为你的强密码)-e MYSQL_DATABASE=wordpress_db \  # 自动创建的数据库名-e MYSQL_USER=wordpress \  # 给WordPress用的数据库用户-e MYSQL_PASSWORD=your_secure_password \  # 数据库用户密码(替换为你的密码)-v db_data:/var/lib/mysql \  # 挂载数据卷(持久化MySQL数据)--restart always \  # 自动重启策略mysql:5.7  # 使用的镜像(MySQL 5.7)
  • 参数说明:
    • -d:后台运行容器
    • --name:指定容器名称(后续 WordPress 容器会通过这个名称连接数据库)
    • --network:加入之前创建的网络,确保和 WordPress 容器在同一网络
    • -e:设置环境变量(初始化 MySQL 配置)
    • -v:挂载数据卷(db_data卷映射到容器内的/var/lib/mysql,MySQL 数据存储目录)
    • --restart always:容器退出后自动重启(保证服务稳定性)
4. 启动 WordPress 容器

等 MySQL 容器启动就绪后(约 30 秒,可通过docker logs wordpress_db查看启动日志),启动 WordPress 容器:

docker run -d \--name wordpress_site \  # 容器名称--network wordpress_network \  # 加入同一网络(与数据库互通)-p 80:80 \  # 端口映射(主机80端口 → 容器80端口)-e WORDPRESS_DB_HOST=wordpress_db \  # 数据库主机(填MySQL容器的名称,网络内可直接解析)-e WORDPRESS_DB_USER=wordpress \  # 数据库用户名(与MySQL配置一致)-e WORDPRESS_DB_PASSWORD=your_secure_password \  # 数据库密码(与MySQL配置一致)-e WORDPRESS_DB_NAME=wordpress_db \  # 数据库名(与MySQL配置一致)-v wordpress_data:/var/www/html \  # 挂载数据卷(持久化WordPress文件)--restart always \  # 自动重启策略wordpress:latest  # 使用的镜像(最新版WordPress)
  • 参数说明:
    • --network:与 MySQL 容器在同一网络,因此WORDPRESS_DB_HOST可以直接填 MySQL 容器的名称(wordpress_db
    • -p 80:80:外部通过主机的 80 端口访问 WordPress(如http://服务器IP
    • -vwordpress_data卷映射到容器内的/var/www/html(WordPress 的核心文件、主题、插件等存储目录)
    • 环境变量必须与 MySQL 容器的配置完全一致,否则 WordPress 无法连接数据库
5. 验证部署
  1. 查看容器状态:

    docker ps  # 查看运行中的容器,应包含wordpress_site和wordpress_db
    
  2. 访问网站:在浏览器中输入服务器的 IP 地址(或绑定的域名),应显示 WordPress 的初始化页面。

后续操作(与 Docker Compose 方式一致)

  • 初始化 WordPress:按页面提示设置站点标题、管理员账号等
  • 登录后台:http://服务器IP/wp-admin
  • 管理容器:
    • 停止容器:docker stop wordpress_site wordpress_db
    • 启动容器:docker start wordpress_site wordpress_db
    • 删除容器(数据卷保留):docker rm wordpress_site wordpress_db
  • 备份数据:数据卷存储在/var/lib/docker/volumes/目录,可直接备份该目录

与 Docker Compose 的区别

  • 手动操作需要分步执行命令,且需要手动管理网络和启动顺序(必须先启动数据库)
  • 没有 “一键启动 / 停止所有服务” 的便捷性(Docker Compose 的up/down命令)
  • 配置分散在命令中,不如docker-compose.yml文件直观(后期修改需重新执行docker run命令)
http://www.dtcms.com/a/350241.html

相关文章:

  • 无人机和无人系统的计算机视觉-人工智能无人机
  • k8s的etcd备份脚本
  • 4G模块 EC200通过MQTT协议连接到阿里云
  • Java-面试八股文-Java高级篇
  • Springboot 集成 TraceID
  • 在react里使用路由,手动跳转
  • C++ 内存安全与智能指针深度解析
  • 【flutter对屏幕底部有手势区域(如:一条横杠)导致出现重叠遮挡】
  • YOLOv7:重新定义实时目标检测的技术突破
  • 浅聊RLVR
  • 绿色循环经济下的旧物回收App:重构闲置资源的价值链条
  • 设计仿真 | 从物理扫描到虚拟检具:Simufact Welding革新汽车零部件检测
  • 汽车零部件工厂ESOP系统工业一体机如何选型
  • 基于51单片机红外避障车辆高速汽车测速仪表设计
  • AEB 强制来临,东软睿驰Next-Cube-Lite有望成为汽车安全普惠“破局器”
  • kubeadm join 命令无法加入node节点,ip_forward 内核参数没有被正确设置
  • IIS 安装了.netcore运行时 还是报错 HTTP 错误 500.19
  • k8s笔记03-常用操作命令
  • Qt开发:智能指针的介绍和使用
  • 君正T31学习(二)- USB烧录
  • 支持指令流水的计算机系统设计与实现
  • mysql绿色版本教程
  • 【python断言插件responses_validator使用】
  • 校园科研自动气象站:藏在校园里的 “科研小站”
  • Nginx零拷贝技术深度解析
  • 【 Python程序员的Ubuntu入门指南】
  • Python二进制、八进制与十六进制高级操作指南:从底层处理到工程实践
  • freqtrade进行回测
  • 关于熵减 - 电力磁力和万有引力
  • list容器的使用