使用 Docker 部署 Misskey 实例

注意

Misskey 在这个版本(12.119.0)的更新中加入了 nsfwjs,其中依赖了 TensorFlow,所以在部署时构建所耗费时间和性能消耗会比较大,建议使用配置至少为 2 核 2G 的服务器进行部署。

本篇教程基于 官方文档 翻译而来,并加入了一些调整。

拉取模板

git clone -b master https://github.com/misskey-dev/misskey.git
cd misskey
git checkout master

设定

使用下面列出的命令创建你的实例配置文件。

cp .config/example.yml .config/default.yml
cp .config/docker_example.env .config/docker.env

并使用你喜欢的文本编辑器对你刚才创建的两个配置文件进行编辑。

正常部署建议更改的内容是:

.config/default.yml

根据 糖喵的部署教程,在两处数据库的 host 应该不是 localhost,而是 dbredis

db:
  host: db # 第 37 行

redis:
  host: redis # 第 58 行

url: https://example.tld/ # 第 9 行,你的实例域名

pass: example-misskey-pass # 第 45 行,pgsql数据库密码,如果改了建议也把上面那行数据库用户名也改了

# 以下是推荐配置,如果你准备在硬盘不大的服务器上搭建个人实例的话,强烈建议开启。

# Proxy remote files (default: false)
proxyRemoteFiles: true # 第 139 行,注释去掉

# Sign to ActivityPub GET request (default: false)
signToActivityPubGet: true # 第 142 行,注释去掉

.config/docker.env

# db settings
POSTGRES_PASSWORD=example-misskey-pass #跟刚才那个文件第 45 行对应
POSTGRES_USER=example-misskey-user #跟刚才那个文件第 44 行对应
POSTGRES_DB=misskey

构建容器

按需求调整 docker-compose.yml

version: "3"

services:
  web:
    build: .
    restart: always # 可用选项 always, unless-stopped, no 建议设置成 on-failure:3,遇到故障自动重启。除非你对你的服务器性能有自信那就 always 吧。
    links:
      - db
      - redis
#      - es
    ports:
      - "3000:3000"
    networks:
      - internal_network
      - external_network
    volumes:
      - ./files:/misskey/files
      - ./.config:/misskey/.config:ro

  redis:
    restart: always # 同上
    image: redis:4.0-alpine
    networks:
      - internal_network
    volumes:
      - ./redis:/data

  db:
    restart: always # 同上
    image: postgres:12.2-alpine
    networks:
      - internal_network
    env_file:
      - .config/docker.env
    volumes:
      - ./db:/var/lib/postgresql/data

#  es:
#    restart: always
#    image: docker.elastic.co/elasticsearch/elasticsearch-oss:6.4.2
#    environment:
#      - "ES_JAVA_OPTS=-Xms512m -Xmx512m"
#      - "TAKE_FILE_OWNERSHIP=111"
#    networks:
#      - internal_network
#    volumes:
#      - ./elasticsearch:/usr/share/elasticsearch/data

networks:
  internal_network:
    internal: true
  external_network:

确认上面内容正确无误,然后构建

docker-compose run --rm web yarn run init

运行

docker-compose up -d

若你没有在 docker-compose.yml 中更改端口,那么网站应该运行在 http://localhost:3000

设置反代或者直接通过端口连接到你的实例,根据 Misskey 的提示创建第一个管理员与成员账户。

更新

手动更新

docker-compose pull
docker-compose up -d

或者使用 crontab 定时执行以下脚本来自动更新。

docker-compose -f /root/misskey/docker-compose.yml pull
docker-compose -f /root/misskey/docker-compose.yml up -d
docker system prune -f

个人设置优化

关闭媒体缓存

媒体缓存默认开启,你的实例会缓存所有上传,以及其他联邦宇宙发出中实例传来的图片,这会占用大量的硬盘空间。如果你的硬盘空间不足,那么你应该关闭媒体缓存。

关闭方法是:使用你实例的管理员账号登陆实例,在左侧边栏找到控制面板,点击进入,然后在二级右侧边栏找到常规设置,开关在页面下方,如图所示,将其关闭即可。