这篇文章上次修改于 264 天前,可能其部分内容已经发生变化,如有疑问可询问作者。

马上都两个月了,想了想自己最近干了什么,发现什么都没干就水一水。

备份

由于之前的服务器环境比较混乱,所以我还是先打个备份比较好,直接登录云服务器后台以当前系统制作一个镜像就行了。
然后是网站数据的备份,直接根目录打包拉到本地完事(在删除重复内容的情况下还是下了几小时)。
最后是数据库部分,这个额外导出一份。

刷镜像

本来是想试试 FreeBSD 的,无奈技术力不够。不过我在本地装上了,等弄明白了可能会再换上。
经历了一两天的网站无法访问后我还是给它装回了 Debian,不过这次换上了全 docker。

恢复服务

Nginx

服务器太慢了,我直接在本地 build 镜像然后上传到服务器,而且对 Nginx 进行编译不仅吃配置还需要良好的网络环境,这两点云服务器都没有。

我用的是自己修改过后的版本 https://github.com/albaz64/nginx-docker/ 并且因为版本更新导致原本的 Dockerfile 还不能用,又去捣鼓了一下才正常。

docker pull albaz64/nginx:1.25.4

PHP

众所周知 PHP 的官方镜像什么也没有,所以需要基于原本的镜像安装拓展才能正常玩耍。如果还需要其他拓展可以看看 https://github.com/mlocati/docker-php-extension-installer
我基于官方的 php:fpm-alpine 添加了一些常用拓展制作了自己的镜像。

docker pull albaz64/php:8.3.3

MySQL

其实我本来想用 postgres 的,但是忽然发现博客的数据库转过去可能会有问题,就继续用 MySQL 了。
数据库这里恢复倒是很简单,登录容器数据库创建一个新数据库再导入 sql 文件就行了。
最后用 crontab 设置个数据库自动备份。

55 23 * * * docker exec -i mysql mysqldump typecho > "/path/to/$(date +\%Y-\%m-\%d).sql"

至于图形界面的数据库客户端?不存在的!

启动

也没什么讲究的,主要是把 Nginx 和 PHP 的网站根目录映射成一样,不然需要修改其中至少一方的默认配置才能找到文件。
动静分离这些我没兴趣,单纯给自己找麻烦罢了。

$ vim compose.yaml && docker-compose up -d
version: '3.9'
services:
  nginx:
    image: albaz64/nginx:1.25.4
    container_name: nginx
    volumes:
      - ./nginx/conf:/etc/nginx/conf
      - /srv/www/:/srv/www/
      # - ./nginx/html:/etc/nginx/html
      - ./nginx/lib:/etc/nginx/lib
      - ./nginx/logs:/etc/nginx/logs
    environment:
      - TZ=Asia/Shanghai
    restart: always
    privileged: false
    network_mode: host

  php:
    container_name: php
    image: albaz64/php:8.3.3
    environment:
      TZ: Asia/Shanghai
    restart: always
    volumes:
      - /srv/www/:/srv/www/
    ports:
      - 172.17.0.1:9000:9000

由于我用的是修改过后的 Nginx 所以默认配置文件会无法启动,直接把之前备份到本地的文件先上传到服务器对应位置再启动容器就能正常用了。可能会涉及到用户权限的问题,如果不想创建直接拿 root 跑也不是不行。

新问题

Typecho 版本最近又更新了,同时我使用的是比较激进的 PHP8.3 而且原来的博客主题作者已经失联五年了,总而言之原来的主题有问题不能用了 QAQ

差不多就是这样,现在的服务器环境除了一个定时任务配置文件是存储在其他地方,其余的都是在用户目录下进行操作的。额外装的软件一只手就能数过来,方便随时跑路到 FreeBSD (bushi