使用Docker最小化部署Misskey

Created
Aug 4, 2022 06:50 AM
Tags
docker
URL
继之前的 搭建一只Misskey实例 之后,在持续部署与本地开发的过程中,我又发现了许多之前疏漏的细节问题,例如对于镜像使用的掌握、对于相关参数的设置方案等等。因而觉得有必要重新来整理一下思路,准备更全面更精简的部署方案呢
使用无配置misskey构建的镜像在部署时 可能 会出现包含但不仅限于 无法订阅中继 的问题(未经严格测试,还有待考证),因而如果您使用官方镜像/无配置构建的镜像时出现了类似的异常工作情况,您可以考虑配置完成后先手动构建一份本地镜像,再进行对应的部署操作。
首先就是关于Misskey的部署需求。由于我们使用Docker来部署,那么唯一需要在意的就是相关的配置文件。(如果是站点迁移,则还需要db、redis、files三个文件夹,之后会解释为什么)因而我们可以直接忽略程式本体内容,仅处理相关的配置文件:
  1. 进入目标目录(例如~/nyaone/misskey),参照以下样例新建docker-compose.yml文件,请注意仔细检查每一行配置,保证与您的站点配置一致:
    1. # Misskey minimal deploy config version: "3" services: web: restart: always # 自动重启,请注意如果您对您的配置没有信心,请不要开启这个选项,以避免进程崩溃反复重启耗费大量资源! image: misskey/misskey:latest # 这里使用了官方镜像,以避免本地构建时资源不足的问题 container_name: misskey_web # 容器名,方便管理,您可以自行修改为您觉得合适的内容 links: - db - redis ports: - "127.0.0.1:3000:3000" networks: - internal_network - external_network volumes: - ./config:/misskey/.config:ro # 用于映射配置文件,请根据您的实际配置来决定文件夹名称,设定为只读即可; # 由于官方构建镜像时没有您站点的配置,所以对该卷的映射是必需的; # 如果您自行构建了含有配置文件的镜像,您可以忽略这块配置。 # 配置时请记得删掉这些仅有注释的空行,以避免可能出现的问题。 - ./files:/misskey/files # 用户上传到本地的文件,如果您一开始就接入外部存储(如wasabi或是AWS S3)您可以忽略这块配置 redis: restart: always image: redis:latest container_name: misskey_redis networks: - internal_network volumes: - ./redis:/data # redis数据库的数据文件夹映射,创建后默认在 ./redis 文件夹中 db: restart: always image: postgres:12.2-alpine container_name: misskey_db networks: - internal_network env_file: - ./config/docker.env # 需要使用配置文件中设置的 Docker 环境变量 volumes: - ./db:/var/lib/postgresql/data # 主数据库的数据文件夹映射,创建后默认在 ./db 文件夹中 networks: internal_network: # 内部网络 internal: true external_network: # 外部网络
  1. 新建配置文件夹 (随便叫什么名都可以,请注意和docker-compose.yml中的两处配置项匹配)
  1. 进入配置文件夹,分别参照example.ymldocker_example.env新建default.ymldocker.env文件,写入各项配置;此处再附上相关的注意事项:
      • default.yml 这个文件的编辑工作基本与非 Docker 环境的版本相同。 但请注意, Postgresql 和 Redis 的 主机名(hostname) 配置不应该是 localhost ,它们被设置在 docker-compose.yml 文件中。 以下是默认的主机名:
      • docker.env 在这个文件中配置 Postgresql 。 至少需要如下这些配置:
  1. 初始化数据库
  1. 注册后设置管理员
  1. 更新 由于Misskey官方有配置CI,所以等新版本发布后过几分钟就可以直接使用官方镜像进行更新。而更新起来也非常方便,只需要进入当前路径,运行以下指令即可:
    1. 请不要使用docker-compose stop来停止容器,因为这么做需要额外的时间等待容器停止;docker-compose up -d直接升级容器时会自动停止并立刻重建新的容器,完全没有必要浪费那些时间。
  1. 删除旧数据 我曾经用这个方法释放了10+G的旧数据,天知道我经历了些什么(猫咪摊手
    1. 要求确认时输入y并回车确认即可。
  1. 进阶操作 例如我们可以编写一个脚本,配合crontab每天定时尝试拉取最新数据并更新;如果已经是最新版本了的话,那就无事发生