最近阿里云的 ecs 快要到期了,打算继续续费,没想到我这1核2G1M的小主机一年竟然要一千多块钱,看来毕业了是真的用不了套路云了,于是打算把博客搬个家,搬到前段时间四年四百块买的良心云上去。
话说我这个小博客是大一的时候利用 lnmp 搭建的,迁移起来也很麻烦,尤其是我还改过数据库的字段,直接利用 typecho 的备份功能是不行的。于是想着一劳永逸用 docker-compose 搭一套新的,下次迁移就直接复制整个目录就行了,备份数据也很方便。
目录如下
.
├── docker-compose.yml
├── logs
├── mysql
├── mysql.env
├── nginx
│ └── default.conf
├── php
│ └── Dockerfile
└── typecho
和lnmp一样,涉及到三个镜像 mysql + php-fpm + nginx
docker-compose
- ./docker-compose.yml
version: "3"
services:
nginx:
image: nginx:1.19.10
ports:
- "80:80"
restart: always
environment:
- TZ=Asia/Shanghai
volumes:
- ./typecho:/var/www/html
- ./nginx:/etc/nginx/conf.d
- ./logs:/var/log/nginx
depends_on:
- php
networks:
- web
php:
build: php
restart: always
expose:
- "9000"
volumes:
- ./typecho:/var/www/html
environment:
- TZ=Asia/Shanghai
depends_on:
- mysql
networks:
- web
mysql:
image: mysql:5.7
restart: always
environment:
- TZ=Asia/Shanghai
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:
mysql
没什么好说的
- ./mysql.env
MYSQL_ROOT_PASSWORD=root_pass
MYSQL_DATABASE=typecho
MYSQL_USER=username
MYSQL_PASSWORD=password
php-fpm
其中 php 目录为 php-fpm 的 Dockerfile,在官方镜像的基础上,添加了 PDO_MYSQL(如果使用 MySQL 作为 Typecho 的数据库,则需安装此扩展),并设置 buffer 为 4kb,即一个内存页。同时设置了时区为RPC,来源于issue: https://github.com/typecho/typecho/issues/1090
- ./php/Dockerfile
FROM php:7.4-fpm-buster
RUN apt-get update \
&& docker-php-ext-install pdo_mysql \
&& echo "output_buffering = 4096" > /usr/local/etc/php/conf.d/php.ini \
&& echo "date.timezone = PRC" >> /usr/local/etc/php/conf.d/php.ini
nginx
nginx 的配置要注意的是需要有 rewrite 规则,如果需要指定域名的话,需要写 server_name 字段。这里我并没有指定443端口,因为我的博客的 ssl 是在 cdn 那里做的。
- ./nginx/default.conf
server {
listen 80 default_server;
root /var/www/html;
index index.php;
access_log /var/log/nginx/typecho_access.log main;
if (!-e $request_filename) {
rewrite ^(.*)$ /index.php$1 last;
}
location / {
index index.html index.htm index.php;
if (!-e $request_filename) {
rewrite . /index.php last;
}
}
location ~ \.php(.*)$ {
fastcgi_pass php:9000;
fastcgi_index index.php;
fastcgi_param PATH_TRANSLATED $document_root$fastcgi_path_info;
fastcgi_split_path_info ^((?U).+\.php)(/?.+)$;
fastcgi_param PATH_INFO $fastcgi_path_info;
fastcgi_param SCRIPT_NAME $fastcgi_script_name;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
}
其他
- 无法上传图片
sudo chmod -R 777 /path/to/blog/usr/uploads
- mysql数据导入导出
docker-compose起来后,需要导入mysql数据。
mysql导入导出语句:
# 导出typecho数据库
mysqldump -uroot -p --databases typecho >/tmp/typecho.sql
# 导入typecho数据库
mysql -u root -p
mysql>use typecho
mysql>source /tmp/typecho.sql
- 复制源码到typecho目录下
将之前的目录复制到typecho目录下即可。
- 之后的备份迁移
之后迁移只需要复制整个目录,然后重启docker-compose up即可。