使用 Docker 搭建 Typecho 个人博客

张涵哲
2023-02-02 / 0 评论 / 55 阅读 / 正在检测是否收录...

Typecho 是一款开源的博客项目、它轻量精美且五脏俱全,在这里分享一下搭建过程希望可以帮到别人,文章中涉及到的文件都会提供下载地址,如果忘记放置链接或者失效请联系我补充

本文会分享三种基于 Docker 搭建 Typecho 博客的方案,演示环境为 CentOS7 虚拟机,默认你已经安装好 Docker 环境

手动搭建Typecho环境

对于这种部署简单的项目来说,我喜欢亲自感受一下部署过程,所以把手动部署放在了最上面,仅作参考不建议使用该方式部署,如果你想快速部署请下滑参考其他方案

创建 Docker 网桥,用于不同容器之间的交互

# 创建Docker网桥用于组网,网桥名称channel,可自定义
$ docker network create channel

下载并运行 Nginx 作为 WEB 容器,这里使用 Nginx1.22.0,并指定项目目录为宿主机的/opt/docker/nginx/webs

# 下载镜像
$ docker pull nginx:1.22.0

# 初始化Nginx目录
$ mkdir -p /opt/docker/nginx
$ cd /opt/docker/nginx

# 裸启容器
$ docker run -d --name nginx nginx:1.22.0

# 拷贝配置文件等等
$ docker cp nginx:/etc/nginx /opt/docker/nginx
$ mv nginx conf
$ docker cp nginx:/usr/share/nginx /opt/docker/nginx
$ mv nginx webs

# 删除裸启的容器
$ docker rm -f nginx

# 正式启动容器
$ docker run --name nginx \
   -p 80:80 \
   --restart always \
   --network channel \
   -v /opt/docker/nginx/conf/:/etc/nginx \
   -v /opt/docker/nginx/webs/:/usr/share/nginx \
   -v /opt/docker/nginx/logs/:/var/log/nginx \
   -d nginx:1.22.0

下载并运行 PHP,这里使用 PHP7.2 版本,并指定项目目录与 Nginx 一致

# 下载镜像
$ docker pull php:7.2-fpm

# 初始化PHP配置目录
$ mkdir -p /opt/docker/php

# 裸启容器
$ docker run -d --name php php:7.2-fpm

# 将容器内的配置文件拷贝出来
$ docker cp php:/usr/local/etc/php /opt/docker/php/
$ mv /opt/docker/php/php/ /opt/docker/php/conf

# 删除裸启的容器
$ docker rm -f php

# 正式启动容器
$ docker run -d --name php \
  --restart always \
  --network channel \
  -v /opt/docker/nginx/webs:/var/www/html \
  -v /opt/docker/php/conf:/usr/local/etc/php \
  php:7.2-fpm

将 typecho.zip 上传至服务器项目目录下,进入项目目录后执行解压缩,并授予目录权限

# 系统中没有zip命令请安装
$ yum install -y zip unzip

# 解压typecho.zip文件
$ cd /opt/docker/nginx/webs/
$ unzip typecho.zip

# 授予typecho目录权限,不然安装网站时写入配置会报错,权限不是很懂这里直接给到最大,有懂的评论区可以指点下
$ chmod -R 777 typecho

项目上传完毕,然后创建 Nginx 的 Typecho 配置文件

vim /opt/docker/nginx/conf/conf.d/typecho.conf

在 typecho.conf 中添加如下内容

# Typecho博客
server {
    listen       80;
    # 这里改成自己服务器的IP地址
    server_name  192.168.1.251;

    # 路径匹配规则已支持伪静态
    location ~ .*\.php(\/.*)*$ {
        # 这里的php对应这docker中名为php的容器,php与nginx在同一网桥所以支持容器名访问,无需端口映射
        fastcgi_pass    php:9000;
        fastcgi_index   index.php;
        # 路径匹配规则已支持伪静态
        fastcgi_split_path_info   ^(.+?.php)(/.*)$;
        # 注意这里,SCRIPT_FILENAME后面跟着的路径地址需要符合PHP容器中的项目目录
        fastcgi_param   SCRIPT_FILENAME  /var/www/html/typecho/$fastcgi_script_name;
        include         fastcgi_params;
    }

    location / {
        # 这里的root需要对应nginx容器中项目目录
        root   /usr/share/nginx/typecho;
        index  index.html index.htm index.php;
    }

}

这样一来项目就部署完成了,重启 Docker 容器后访问试试看

# 注意需要先重启php在重启nginx,因为nginx中访问了php,要保证重启nginx时php是好用的
$ docker restart php
$ docker restart nginx

2023-02-02T03:25:53.png

如果跟我一样打开的页面是 Nginx 的欢迎页,是因为 Nginx 默认的配置文件优先级比较高,这种情况只需要暂时关闭默认配置,只让 typecho.conf 生效,然后重新访问就可以了

# 将默认的default.conf文件加上.bak后缀让他失效
$ mv /opt/docker/nginx/conf/conf.d/default.conf /opt/docker/nginx/conf/conf.d/default.conf.bak
# 重启nginx容器
$ docker restart nginx

2023-02-02T03:29:52.png

网站安装向导已经显示出来了,可以正常使用了,如果想用 MySQL 作为数据库的话会发现向导中没有提供 MySQL 数据库适配器,那是因为 php 容器中没有启用 mysql 插件,可以参照我之前写的博客启用该插件 Docker PHP 如何启用 MySQL 扩展,然后重启 php 和 nginx 容器,数据库适配器中就多出 MySQL 的选项了

使用第三方Typecho镜像快速部署

第三方镜像的话个人推荐使用80x86/typecho这一款,这一款是第三方中使用人次最多的镜像且足够轻量

2023-02-02T03:40:41.png

$ docker run --name=typecho \
  --restart always \
  --mount type=tmpfs,destination=/tmp \
  -v ./typecho:/data \
  -e PHP_TZ=Asia/Shanghai \
  -e PHP_MAX_EXECUTION_TIME=600 \
  -p 90:80 \
  -d 80x86/typecho:latest

2023-02-02T03:42:24.png

使用官方Typecho镜像快速部署

官方的 Docker 镜像叫joyqi/typecho,这里我并没有使用 latest 而是专门指定了版本号,因为他们的最新版是测试版并不是稳定版

$ docker run --name typecho \
   -e TIMEZONE=Asia/Shanghai \
   -e TYPECHO_SITE_URL=https://typecho.hanzhe.site \
   -p 91:80 \
   -v ./typecho:/app/usr \
   -d joyqi/typecho:1.2.1-php7.3-apache

文件下载地址

1

评论 (0)

取消