使用Docker部署WordPress个人博客

注意Docker自身的安装和命令,并非本笔记的内容。

镜像准备

WordPress镜像准备

1. 拉取官方镜像

你可以直接使用官方镜像。


docker pull wordpress:latest

2. 配置

官方镜像有一个问题,php的默认配置限制了文件上传。 所以我们可以自己做一个简单镜像,只需修改php文件上传配置。

现在创建新目录,创建一个uploads.ini文件,用于配置php属性:


 file_uploads = On
 memory_limit = 320M
 upload_max_filesize = 64M
 post_max_size = 64M
 max_execution_time = 360
属性名参数含义
file_uploadsOn允许上传文件
memory_limit320M单个PHP脚本最大320MB
upload_max_filesize64M允许的最大文件尺寸64MB
post_max_size64MPOST方法的数据最大64MB
max_execution_time360单脚本最长运行360秒

你可以根据需要,自行调整这些参数。

然后创建一个Dockerfile,内容非常简单,只需要拉去镜像和复制配置脚本:


FROM wordpress:latest

COPY uploads.ini /usr/local/etc/php/conf.d/uploads.ini

3. 创建镜像

然后可以创建镜像,镜像名任意,这里以mysvac/wordpress为例:


docker build -t mysvac/wordpress .

MySQL镜像准备

1. 拉取官方镜像


docker pull mysql

2. 编辑镜像

MySQL镜像的问题在于,时区可能不正确,以及没有初始数据库和用户。

现在创建新目录,创建一个init.sql文件用于初始化数据库。

这里举个例子,创建db_base数据库,然后创建baseAdmin用户操作db_base数据库。 再创建一个healthUser用户用于监听数据库是否正常运行:


-- init.sql
CREATE DATABASE IF NOT EXISTS db_base;
CREATE USER IF NOT EXISTS 'baseAdmin'@'%' IDENTIFIED BY 'baseAdminPwd';
GRANT ALL PRIVILEGES ON db_base.* TO 'baseAdmin'@'%';

CREATE USER IF NOT EXISTS 'healthUser'@'localhost' IDENTIFIED BY '';
GRANT PROCESS ON *.* TO 'healthUser'@'localhost';

FLUSH PRIVILEGES;

账号密码和数据库名请自行调整。这里假设数据库端口不对外开放,所以可以明文存放。

然后编写Dockerfile,处理时区问题,载入刚刚编写的初始脚本:


FROM mysql:latest

ENV TZ=Asia/Shanghai
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone

ENV MYSQL_ROOT_PASSWORD=xxxpassword

COPY init.sql /docker-entrypoint-initdb.d/

这里甚至明文存放了ROOT账号密码,请你自行更改。实际上我们后面用不到这个ROOT密码。

3. 创建镜像

镜像名依然以mysvac/mysql为例,可以自行修改。


docker build -t mysvac/mysql .

编排容器

下面我们通过Docker-compose配置网络/命名卷/容器名,我们需要完成这些任务:

  1. 创建一个专用网络,提供给Mysql和Wordpress使用
  2. 添加健康检测,保证Mysql先启动,Wordpress后启动
  3. 添加命名卷,存放二者的持久化数据,便于本地修改配置
  4. 让两个容器自动重启

配置

现在创建新目录,创建一个docker-compose.yml文件,样例代码如下:


services:
  mysql:
    image: mysvac/mysql:latest
    container_name: blog-mysql
    volumes:
      - "blog_mysql:/var/lib/mysql"
    networks:
      - blog-net
    healthcheck:
      test: ["CMD", "mysqladmin", "-u", "healthUser" ,"ping"]
      interval: 40s
      timeout: 8s
      retries: 4
      start_period: 16s
    restart: unless-stopped
  wordpress:
    image: mysvac/wordpress:latest
    container_name: blog-wordpress
    volumes:
      - "blog_wordpress:/var/www/html"
    ports:
      - "14080:80"
    networks:
      - blog-net
    depends_on:
      mysql:
        condition: service_healthy
    restart: unless-stopped
networks:
  blog-net:
    name: blog-net

volumes:
  blog_mysql:
  blog_wordpress:

注意我们将wordpress的端口映射到了14080,你可以选择自己喜欢的端口号。

创建容器

现在可以使用刚才的编排配置创建容器了:


docker compose up -d

创建完成后可以查看命名卷列表,事实上我们没有指定完整名称,生成的命名卷应该是XXX_blog_mysqlXXX_blog_wordpress的形式。

初始化Wordpress

现在可以通过浏览器访问Wordpress了,如果你在本地,且没有修改上面的配置,那URL应该是http://localhost:14080,云服务器则是http://yoursite:14080

注意,不要使用https访问,否则无法正常显示网站。HTTPS的配置后面会讲。

1. 选择语言

拉到最下方有中文,最上方是英文,你也可以选择其他语言。

选择后点击继续即可。

2. 配置数据库信息

如果你完全按照上面的样例配置,那么表格信息应该如下。如果不是,请参考下方表格自行调整。

项目内容说明
数据库名db_base是SQL初始化脚本中创建的那个数据库
用户名baseAdmin是SQL初始化脚本中创建的用户
密码baseAdminPwd是SQL初始化脚本中设置的用户密码
数据库主机blog-mysql是docker-compose.yml中设置的容器名
表前缀wp_这是默认值,无需修改

3. 运行安装程序

此时需要填写网站名,网站后台账号密码以及邮箱。

网站名随意,后面可以修改。账号密码和邮箱也可以更改,但需要先登录,所以请牢记账号信息。

对搜索引擎的可见性随意。

然后点击安装即可。

4. 登录

点击安装后,很快就会安装完成,然后使用刚才的账号密码登录。

如果你关闭了浏览器再打开,再访问http://localhost:14080,很可能是游客状况。

请访问网址http://localhost:14080/wp-admin登录网站后台。

若非本地部署,请将localhost改成你的服务器IP或者域名,但暂时不要使用https访问。

进阶内容

博客部署已经完成,剩下的内容可以选择性观看。

Argon美化主题

Argon主题的官方仓库:点我

Argon – 轻盈、简洁、美观的 WordPress 主题

建议在官方仓库的release中下载最新版的压缩包,这里给一个v1.35版本的链接:点击下载

然后返回Wordpress的后台,点击左侧栏中的“外观”->“主题”,页面左上角有“添加主题”->“上传主题”按钮。 我们将刚刚下载的压缩包上传即可。

注意,官方wordpress镜像可能不允许文件上传,但我们的镜像使用相关配置文件允许了文件上传。

这里提供一些Argon的文档/教程:

配置SSL证书与开启HTTPS支持

WordPress配置HTTPS支持并没有你想的那么轻松,一旦操作失误,网站很可能无法访问,需要修改配置文件才能恢复。

下面我将介绍如何使用Nginx配置SSL证书,让网站支持HTTPS访问。

前提条件:

  1. 博客部署于云服务器而非本地
  2. 拥有执行服务器IP的域名
  3. 有SSL证书(可用阿里云或腾讯的免费测试证书)

1. 配置Nginx反向代理

Nginx可以直接安装也用docker安装,这里不介绍。

下面要配置nginx.conf,大致需要如下内容:

  1. 将http请求301转发到https
  2. 将https请求反向代理到本地端口,并附带证书
  3. 允许Nginx代理时传输文件,并设置最大文件大小

样例如下(下面使用yoursite代指你的域名):


# ......................
http {
    # ......................
    # 允许传输文件并设置最大数据量
    client_max_body_size 64M;
    sendfile on;
    # ......................
    # 将http请求转发到https
    server {
        listen 80;
        server_name yoursite.com www.yoursite.com;
        return 301 https://yoursite.com$request_uri;
    }
    # 将https请求代理到本地端口
    server {
        listen 443 ssl;
        http2 on;
        server_name yoursite.com;

        # 证书位置
        ssl_certificate /etc/nginx/ssl/yoursite.com.pem;
        ssl_certificate_key /etc/nginx/ssl/yoursite.com.key;

        location / {
            proxy_set_header Host              $host;
            proxy_set_header X-Real-IP         $remote_addr;
            proxy_set_header X-Forwarded-For   $proxy_add_x_forwarded_for;
            proxy_set_header X-Forwarded-Proto $scheme;
            # 代理到本地的14080端口
            proxy_pass http://127.0.0.1:14080;
        }
    }
    # ......................
}
# ......................

阿里云/腾讯云等平台提供免费测试证书,申请后下载Nginx的版本,内含pemkey两个文件,

2. 设置网站URL

进入WordPress后台,点击左侧栏的“设置”,里面有WordPress 地址(URL)站点地址(URL)

将他们都修改成https://yoursite.com,然后下方保存修改。

注意yoursite指的是你的域名,别真改成yoursite,此处操作错误后的修复非常繁琐。

保存后,你可能就无法使用IP访问了,只能通过域名访问,后台网址还是熟悉的https://yoursite.com/wp-admin

现在通过域名和https访问你的网站,你会发现网站排版完全乱了,打开F12开发者工具就能发现问题所在: 现在开启了https,但是有很多资源请求依然使用http发送,这些请求都被拦截了。

3. 修改配置文件

为了使请求统一采用https发送,我们需要修改wordpress的php配置。

我们在创建容器时,我们为Wordpress分配了命名卷,它的名字大概是XXX_blog_wordpress。 进入这个命名卷,在根目录可以找到一个wp-config.php文件,我们需要修改它。

现在打开这个文件,在第一段注释之后、数据库代码之前,加上这三条语句:


/**
 * .........这是文档开头的注释
 * @package WordPress
 */

define('FORCE_SSL_ADMIN', true);
define('FORCE_SSL_LOGIN', true);
$_SERVER['HTTPS'] = 'on';

// ** Database settings - You can get this info from your web host ** //
/** The name of the database for WordPress */

FORCE_SSL_ADMINFORCE_SSL_LOGIN分别表示后台和登录页面启用https。
$_SERVER['HTTPS'] = 'on';指令告诉PHP/WordPress当前使用的是HTTPS协议。

现在保存修改,然后重启Wordpress容器。

4. 最后

容器重启完后,再通过https和域名访问,网站就恢复正常了。

注意https的网页内不应该出现http资源,所以你链接外部资源时也请使用https请求。

其他文档

评论

  1. 测试
    1 天前
    2025-6-02 20:32:33

    评论测试

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
下一篇