docker-compose重建typecho博客
文章最后更新时间为:2023年08月09日 16:43:43
最近阿里云的 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即可。
感谢分享,对我帮助很大!我在复现过程中遇到了两个问题,可以依此更新文档。
docker-compose.yml
文件结尾存在缩进问题。Dockerfile
中使用的php:7.2.3-fpm
正在使用Debian Stretch作为基础镜像的一部分,现在可能已经不再受支持,因此其中的一些URL可能已经不可用。可以尝试使用Debian Buster(Debian 10)或者更高版本作为底层系统。以下是更新后的Dockerfile代码示例:
@Aktata 感谢指正,已修改
楼主你这个是什么主题?
666