Loading... > 本文由 [简悦 SimpRead](http://ksria.com/simpread/) 转码, 原文地址 [saucer-man.com](https://saucer-man.com/operation_and_maintenance/607.html) 最近阿里云的 ecs 快要到期了,打算继续续费,没想到我这 1 核 2G1M 的小主机一年竟然要一千多块钱,看来毕业了是真的用不了套路云了,于是打算把博客搬个家,搬到前段时间四年四百块买的良心云上去。 话说我这个小博客是大一的时候利用 lnmp 搭建的,迁移起来也很麻烦,尤其是我还改过数据库的字段,直接利用 typecho 的备份功能是不行的。于是想着一劳永逸用 docker-compose 搭一套新的,下次迁移就直接复制整个目录就行了,备份数据也很方便。 目录如下 ```bash . ├── 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](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 即可。 最后修改:2023 年 10 月 24 日 © 允许规范转载 打赏 赞赏作者 支付宝微信 赞 如果觉得我的文章对你有用,请随意赞赏