前言
其实以前已经写过,如利用docker-compose拉起Typecho的相关文章(具体配置可跳转:【 Traefik2 快速搭建 Typecho 步骤 】)。当时为了方便,用的镜像分别是:image:mysql:5.7,80x86/typecho:latest,前者数据库,后者是作者高度定制的typecho容器。但随着需求的变化,以前的typecho docker容器镜像变得不可用,因为变化略大,这里作个备份。
当时的需求很简单:
- 1.能把博客从wordpress过渡到typecho,这个也很容易实现,可参考当时的文章(博客程序 从 Wordpress 转到 Typecho步骤 );
- 2.不需要太多的配置,能通过修改配置文件部份内容,几分种轻松搭建Typecho。
上面提到文章确实解决了这些简单的需求,然而也有其自身的局限性,那就是扩展性极差,想实现新功能或修改点什么相当困难。
“80x86/typecho:latest”这个typecho 镜像,玩是挺好玩的一个 docker镜像。
然而他是高度定制的,把typecho cms的站点文件也限制进容器里了,还是以快捷方式的形式移到别的目录。如果你随便映射缩主机文件取代容器内typecho的文件,会一直报错 。
这就极大的限制了站点不断涌现的新需求。比方说,这个docker镜像的typecho版本太老,最后一次更新是4年前,那版本肯定就是typecho1.x时代的。
现在新增需求:
- 新搭建的typecho能自由指定 Typecho CMS文件目录,方便更新文件或在根目录添加验证文件(方便google,bing等站的站长所有者验证)。
- 最好还是 nginx+php现成搭配好的镜像提供lnp服务,外加m即可简单组成lnmp环境 。
准备工作(选择lnmp镜像):
1.数据库选择(M):
经测试: mariadb 或 mysql 皆可。
2.Lnp环境选择(选装有pdo驱动镜像):
经测试,之前选的 trafex/alpine-nginx-php7不能用,原因作者说了,为一把包做小,原生不支持pdo驱动的安装,要安装pdo驱动还得自己进容器折腾一翻。
可选择已经配置好pdo驱动的容器,经测试,这个“【fukoy/nginx-php-fpm】”容器,可直接使用于typecho的搭建,提供其中的nginx+phpfm环境。 这里是作者的github仓库:https://github.com/fukoy/docker-typecho。
Docker安装 Typecho的步骤
1.直接拉取仓库文件
进入相应的文件夹,拉取带有Typecho 1.2版本的仓库文件。
mkdir typecho1
cd typecho1
git clone https://github.com/fukoy/docker-typecho.git
仓库的文件结构:
得到的文件结构如上图,有配置好的nginx配置文件及typecho1.2 的文件
仓库文件简单解释:
www
-> 放typecho cms文件的位置nginx
-> nginx 的配置, 要修改网站配置,可修改~/typecho1/docker-typecho/nginx/conf.d/
下的typecho.conf
。
typecho.conf
配置如下(注意fastcgi_pass的配置),自测server {
listen 80;
root /usr/share/nginx/typecho/;
index index.php index.html index.htm;
access_log /var/log/nginx/lsky_access.log main;
location / {
if (!-e $request_filename) {
rewrite . /index.php last;
}
}
location ~ \.php$ {
# try_files $uri $uri/ /index.php?$query_string;
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_pass unix:/run/php/php7.4-fpm.sock;
fastcgi_index index.php;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param PATH_INFO $fastcgi_path_info;
}
}
2.根据情况修改相应文件
#### 2.1 修改 mysql.env 文件
mysql.env
如下位置:~/typecho1/docker-typecho/mysql.env
# MySQL的root用户默认密码,这里自行更改
MYSQL_ROOT_PASSWORD=password
# MySQL镜像创建时自动创建的数据库名称
MYSQL_DATABASE=typecho
# MySQL镜像创建时自动创建的用户名
MYSQL_USER=typecho
# MySQL镜像创建时自动创建的用户密码
MYSQL_PASSWORD=password
# 时区
TZ=Asia/Shanghai
一般修改password即可。这文件的作用是给docker-compose文件引用数据库时配置相应的数据库及密码。
2.2 修改docker-compose.yml文件
这个typecho仓库的docker-compose 文件位置:~/typecho1/docker-typecho/docker-compose.yml
A. 原docker-compose.yml
version: '3'
services:
web:
image: fukoy/nginx-php-fpm:php7.4
ports:
- '8090:80' #开放端口8090
restart: always
volumes:
- ./www:/usr/share/nginx/typecho/ #typecho网站文件
- ./nginx/conf.d:/etc/nginx/conf.d #nginx配置文件夹
- ./nginx/nginx.conf:/etc/nginx/nginx.conf #nginx配置文件
depends_on:
- mysql
networks:
- web
mysql:
image: mariadb
restart: always
expose:
- '3306' #不开放端口
volumes:
- ./mysql/data:/var/lib/mysql
- ./mysql/logs:/var/log/mysql
- ./mysql/conf:/etc/mysql/conf.d
env_file:
- mysql.env
networks:
- web
networks:
web:
- 如果没特殊要求,直接端口访问,可以不修改这个typecho仓库的docker-compose文件,启动后带穿透端口访问即可,也就是上面的web映射端口8090。访问方式:http://dmian.com:8090/。
- 如果根据以前沿用的配置文件,利用traefik2进行反代,docker-compose文件配置文件要做相应的修改。访问方式:https://www.domain.com/。traefik2自动转换https进行访问。
B. 利用traefik2进行反代相关设置
B.1 traefik反代typecho的docker-compose文件配置
version: '3'
services:
web:
image: fukoy/nginx-php-fpm:php7.4
container_name: server-phpnginx-tp1
restart: always
volumes:
- ./www:/usr/share/nginx/typecho/ #typecho网站文件
- ./nginx/conf.d:/etc/nginx/conf.d #nginx配置文件夹
- ./nginx/nginx.conf:/etc/nginx/nginx.conf #nginx配置文件
depends_on:
- mysql
networks:
- default
- proxy
mysql:
image: mariadb
restart: always
container_name: server-mysql-tp1
volumes:
- ./mysql/data:/var/lib/mysql
- ./mysql/logs:/var/log/mysql
- ./mysql/conf:/etc/mysql/conf.d
env_file:
- mysql.env
networks:
- default
networks:
default:
proxy:
external: true
B.2 配置Traefik的动态配置文件dynamic.yml
B.2.1 增加 routers
routers:
# Roter3: typecho-1
typecho-1:
entryPoints:
- "websecure"
service: typecho-service2
rule: "Host(`youdomain.com`)"
B.2.2 增加 services
services:
# service1: typecho-1-service
typecho-service2:
loadBalancer:
servers:
- url: "http://172.18.0.5"
查找容器url,用docker inspect --format='{{.NetworkSettings.Networks.proxy.IPAddress}}' server-phpnginx-tp1
命令。
关于本站沿用的,更多traefik2的相关配置文件,参考: Docker-compose安装Traefik2基本配置文件。
启动Typecho docker-compose
准备,并修改好所有文件,启动命令: docker-compose up -d
。
调试常用的docker-compose命令有:
#docker-compose运行
sudo docker-compose up -d
#docker-compose停止
sudo docker-compose down
#docker-compose重启
sudo docker-compose restart
总结
这配置本质就是拉起了一个lnmp环境,并把网站目录指向了~/typecho1/docker-typecho/www
目录,而且这个lnmp环境是预装有mysql_pdo驱动,能很好的支持typecho。
利用treafik2反代,修改相应的容器名及IP,即可实现docker环境下,快速搭建typecho的目的。
当然,拉起其他CMS也是一样的,修改~/typecho1/docker-typecho/nginx/conf.d/
中对应的nginx网站配置文件即可。