通过 Docker Compose 部署 WordPress

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
云数据库 RDS MySQL,高可用系列 2核4GB
简介: 通过 Docker Compose 部署 WordPress

环境安装

安装 Docker

为了方便,推荐使用官方脚本安装。此脚本适用于常用 Linux 发行版。

curl -fsSL https://get.docker.com -o get-docker.sh
sudo sh get-docker.sh

默认情况下,Docker 只能通过 root 用户运行,普通用户通常要加 sudo。如果觉得麻烦,可以启用 Docker 的 rootless 模式。使用普通用户执行下面这条命令即可安装:

dockerd-rootless-setuptool.sh install

安装 Docker Compose

下载二进制文件

sudo curl -L "https://github.com/docker/compose/releases/latest/download/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose

赋予执行权限

sudo chmod +x /usr/local/bin/docker-compose

设置容器

创建项目

  1. 新建项目目录,这里以 ~/my_wordpress 为例。

    mkdir ~/my_wordpress
  2. 进入项目目录

    cd ~/my_wordpress
  3. 编写配置文件

    • 编辑文件
    nano docker-compose.yml
    • 填入以下配置:
    version: "3.9"
     
    services:
      db:
        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:
        depends_on:
          - db
        image: wordpress:latest
        volumes:
          - wordpress_data:/var/www/html
        ports:
          - "80:80"
          - "443:443"
        restart: always
        environment:
          WORDPRESS_DB_HOST: db
          WORDPRESS_DB_USER: wordpress
          WORDPRESS_DB_PASSWORD: wordpress
          WORDPRESS_DB_NAME: wordpress
    volumes:
      db_data: {}
      wordpress_data: {}
    • 这里用到了 mysql:5.7wordpress:latest 两个 Docker 镜像,WordPress 镜像依赖于 MySQL 镜像。
    • restart: always 参数表明容器服务宕机后会自动重启。
    • MYSQL_ROOT_PASSWORD 为数据库的 root 密码,MYSQL_PASSWORD 为数据库的普通用户密码,请自行修改,对应的 WORDPRESS_DB_PASSWORD 也要同时修改。MYSQL_USER 为数据库普通用户的用户名,如果有需要也可以修改,对应的 WORDPRESS_DB_USER 也要同时修改。
    • 80:80 的意思是把宿主机的 80 端口映射到容器内部的 80 端口。如需通过其他端口访问,只需修改前面的 80。比如,我要通过 8080 端口访问 WordPress,填写 8080:80即可。
    • 执行 Ctrl + O 保存文件,回车,再执行 Ctrl + X 退出。

启动容器

~/my_wordpress 目录中执行以下命令启动 WordPress:

sudo docker-compose up -d

构建完成后就可以通过 http://ip:port 来访问 WordPress(请将 ip 替换为 VPS 的 IP,port 替换为你使用的端口,如果是 80 端口则可以省略)。如果提示 Error establishing a database connection,说明配置尚未完成,等待 1~2 分钟,刷新网页即可进入安装界面。

配置 SSL

由于本人对 Apache2 不熟悉,且网上很多教程所介绍的方法已不适用,本章的撰写花费了较多时间。

进入容器

sudo docker-compose exec wordpress bash

注意:本章中后续命令都要在容器中执行!

安装 cron 及 nano

apt update && apt install -y cron nano

安装 acme.sh 用于签发 SSL 证书(请把 my@example.com 改为你的邮件地址)

curl  https://get.acme.sh | sh -s email=my@example.com

将域名解析至 VPS 的 IP,然后执行以下命令签发证书(请把 example.com 改为你的域名)

bash ~/.acme.sh/acme.sh --issue -d example.com --apache  --tlsport 56789

启用模块

a2enmod rewrite
a2enmod ssl

创建证书目录

mkdir -p /etc/apache2/ssl

复制证书(请把 example.com 改为你的域名)

bash ~/.acme.sh/acme.sh --install-cert -d example.com \
--cert-file /etc/apache2/ssl/cert.pem \
--key-file /etc/apache2/ssl/key.pem \
--fullchain-file /etc/apache2/ssl/fullchain.pem \
--reloadcmd "service apache2 force-reload"

创建站点(将以下全部内容粘贴进终端执行):

cat > wordpress.conf << EOF
<IfModule mod_ssl.c>
        <VirtualHost *:443>
                ServerAdmin webmaster@localhost
                ServerName yourdomain.com
                DocumentRoot /var/www/html
                ErrorLog ${APACHE_LOG_DIR}/error.log
                CustomLog ${APACHE_LOG_DIR}/access.log combined

                SSLEngine on
                SSLCertificateFile /etc/apache2/ssl/cert.pem
                SSLCertificateKeyFile /etc/apache2/ssl/key.pem
                SSLCACertificateFile /etc/apache2/ssl/fullchain.pem
        </VirtualHost>
</IfModule>
<VirtualHost *:80>
        ServerAdmin webmaster@localhost
        ServerName yourdomain.com
        RewriteEngine on
        RewriteCond %{HTTPS} !=on
        RewriteRule ^(.*) https://%{SERVER_NAME}$1 [L,R]
</VirtualHost>
EOF

启用站点

a2ensite wordpress
service apache2 restart

编辑 /var/www/html/.htaccess,在顶部加入以下内容:

# BEGIN SSL Redirect
<IfModule mod_rewrite.c>
RewriteEngine on
RewriteCond %{HTTPS} !=on [NC]
RewriteRule ^(.*)$ https://%{HTTP_HOST}/$1 [R=301,L]
</IfModule>
# END SSL Redirect

最后一步,访问域名,进入 WordPress 后台,打开 「设置」-「常规选项」,并把 WordPress地址站点地址 中的 http 改为 https,并保存。

至此,SSL 配置已完成。

常用命令

以下命令必须在 docker-compose.yml 所在目录执行(本文是 ~/my_wordpress

  • 查看 WordPress 运行日志:

    sudo docker-compose logs
  • 关闭 WordPress 服务:

    sudo docker-compose stop
  • 再次启动 WordPress 服务:

    sudo docker-compose start
  • 完全删除 WordPress 服务及其 Docker 镜像:

    sudo docker-compose down --volumes --rmi all

博客加速

AHdark 大佬为广大网友提供了免费优质的 CDN 加速服务,可以极大得加快博客访问速度。配套的 Source Global CDN 插件可以在 「插件」 - 「添加插件」 中搜索安装并启用。

参考资料

  1. Install Docker Engine | Docker Documentation
  2. Install Docker Compose | Docker Documentation
  3. Quickstart: Compose and WordPress | Docker Documentation
  4. 说明 · acmesh-official/acme.sh Wiki
  5. Deploy ssl certs to apache server · acmesh-official/acme.sh Wiki
  6. 【杂谈】免费SSL证书那点事
  7. Apache2 - Wordpress HTTP 站点跳转 HTTPS
相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
7天前
|
人工智能 API 数据库
FastGPT一站式解决方案[1-部署篇]:轻松实现RAG-智能问答系统(含sealos云端部署、docker部署、OneAPI&Xinference模型接入)
【9月更文挑战第5天】 FastGPT一站式解决方案[1-部署篇]:轻松实现RAG-智能问答系统(含sealos云端部署、docker部署、OneAPI&Xinference模型接入)
 FastGPT一站式解决方案[1-部署篇]:轻松实现RAG-智能问答系统(含sealos云端部署、docker部署、OneAPI&Xinference模型接入)
|
17天前
|
Docker 容器
Docker自建仓库之Harbor高可用部署实战篇
关于如何部署Harbor高可用性的实战教程,涵盖了从单机部署到镜像仓库同步的详细步骤。
57 15
Docker自建仓库之Harbor高可用部署实战篇
|
17天前
|
NoSQL 关系型数据库 Redis
mall在linux环境下的部署(基于Docker容器),Docker安装mysql、redis、nginx、rabbitmq、elasticsearch、logstash、kibana、mongo
mall在linux环境下的部署(基于Docker容器),docker安装mysql、redis、nginx、rabbitmq、elasticsearch、logstash、kibana、mongodb、minio详细教程,拉取镜像、运行容器
mall在linux环境下的部署(基于Docker容器),Docker安装mysql、redis、nginx、rabbitmq、elasticsearch、logstash、kibana、mongo
|
17天前
|
虚拟化 Docker Windows
window 10专业版部署docker环境
本文介绍了如何在Windows 10专业版上部署Docker环境,包括安装步骤、配置镜像加速以及可能遇到的错误处理。
41 2
window 10专业版部署docker环境
|
7天前
|
运维 Docker 微服务
掌握 Docker Compose:简化你的多容器应用部署
在微服务架构和容器化技术普及的今天,管理多容器部署变得颇具挑战。Docker Compose 通过一个 YAML 文件定义和运行多容器应用,简化了部署和运维。本文介绍其基本概念、使用方法及优势,包括服务、项目、卷和网络等核心概念,并提供从安装到管理服务的详细步骤,助你轻松掌握 Docker Compose,提高开发效率和应用运维质量。
|
5天前
|
Devops jenkins 持续交付
DevOps实践:构建和部署一个Docker化的应用
【9月更文挑战第14天】在当今快节奏的软件开发领域,DevOps已经成为提升效率、加速交付的关键。本文将引导你理解DevOps的核心概念,并通过一个实际的示例—构建和部署一个Docker化的应用—来深入探讨其实践方法。我们将从简单的应用出发,逐步实现Docker容器化,并最终通过CI/CD流水线自动化部署过程。这不仅是对DevOps流程的一次实操演练,也是对现代软件开发理念的一次深刻体验。
|
18天前
|
存储 关系型数据库 MySQL
使用Docker快速部署Mysql服务器
本文介绍了如何使用Docker快速部署MySQL服务器,包括下载官方MySQL镜像、启动容器、设置密码、连接MySQL服务器以及注意事项。
101 18
|
17天前
|
存储 测试技术 数据安全/隐私保护
Docker自建仓库之Harbor部署实战
关于如何部署和使用Harbor作为Docker企业级私有镜像仓库的详细教程。
37 12
|
17天前
|
运维 数据安全/隐私保护 Docker
Docker自建仓库之Docker Registry部署实战
关于如何使用Docker Registry镜像搭建本地私有Docker仓库的实战教程,包括了下载镜像、创建授权目录和用户名密码、启动Registry容器、验证端口和容器、测试登录仓库、上传和下载镜像的详细步骤。
66 5
|
17天前
|
NoSQL 关系型数据库 数据库
JumpServer的Docker部署实战案例
JumpServer的Docker部署实战案例,详细介绍了JumpServer的概述、环境准备、基于Docker的快速部署步骤,以及如何访问JumpServer的WebUI。
20 0