继之前的 搭建一只Misskey实例 之后,在持续部署与本地开发的过程中,我又发现了许多之前疏漏的细节问题,例如对于镜像使用的掌握、对于相关参数的设置方案等等。因而觉得有必要重新来整理一下思路,准备更全面更精简的部署方案呢
使用无配置misskey构建的镜像在部署时 可能 会出现包含但不仅限于 无法订阅中继 的问题(未经严格测试,还有待考证),因而如果您使用官方镜像/无配置构建的镜像时出现了类似的异常工作情况,您可以考虑配置完成后先手动构建一份本地镜像,再进行对应的部署操作。
推荐的补充阅读:对文章「使用 Docker 最小化部署 Misskey」的补充 (by ADD-SP)
文章提及了一些配置中的坑,也许可以方便您避免一些可能出现的问题。
首先就是关于Misskey的部署需求。由于我们使用Docker来部署,那么唯一需要在意的就是相关的配置文件。(如果是站点迁移,则还需要db、redis、files三个文件夹,之后会解释为什么)因而我们可以直接忽略程式本体内容,仅处理相关的配置文件:
进入目标目录(例如~/nyaone/misskey),参照以下样例新建
docker-compose.yml
文件,请注意仔细检查每一行配置,保证与您的站点配置一致:1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47# 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: # 外部网络新建配置文件夹 (随便叫什么名都可以,请注意和docker-compose.yml中的两处配置项匹配)
1
mkdir config
进入配置文件夹,分别参照example.yml和docker_example.env新建
default.yml
和docker.env
文件,写入各项配置;此处再附上相关的注意事项:default.yml
这个文件的编辑工作基本与非 Docker 环境的版本相同。
但请注意, Postgresql 和 Redis 的 主机名(hostname) 配置不应该是 localhost ,它们被设置在 docker-compose.yml 文件中。
以下是默认的主机名:服务 主机名 Postgresql db Redis redis 文章确实有些年久失修了
现在部署的时候最好把 Misskey 配置文件的signToActivityPubGet: true
这一行前面的注释去掉(即启用这个功能),部分 mastodon 实例开启了安全模式,因而如果不开启这个选项对 GET 请求也进行签名的话可能会导致连接障害。docker.env
在这个文件中配置 Postgresql 。
至少需要如下这些配置:名称 描述 POSTGRES_PASSWORD 数据库密码 POSTGRES_USER 数据库用户名 POSTGRES_DB 数据库名
初始化数据库
1
docker-compose run --rm web yarn run init
启动容器
1
docker-compose up -d
注册后设置管理员
1
docker-compose run --rm web node built/tools/mark-admin @您的用户名
更新
由于Misskey官方有配置CI,所以等新版本发布后过几分钟就可以直接使用官方镜像进行更新。而更新起来也非常方便,只需要进入当前路径,运行以下指令即可:1
2docker-compose pull
docker-compose up -d请不要使用
docker-compose stop
来停止容器,因为这么做需要额外的时间等待容器停止;docker-compose up -d
直接升级容器时会自动停止并立刻重建新的容器,完全没有必要浪费那些时间。删除旧数据
我曾经用这个方法释放了10+G的旧数据,天知道我经历了些什么(猫咪摊手1
docker system prune
要求确认时输入y并回车确认即可。
进阶操作
例如我们可以编写一个脚本,配合crontab每天定时尝试拉取最新数据并更新;如果已经是最新版本了的话,那就无事发生1
2
3docker-compose -f /root/misskey/docker-compose.yml pull
docker-compose -f /root/misskey/docker-compose.yml up -d
docker system prune -f