【docker】搭建一个”联邦宇宙”——Misskey

2024-08-20 16:34:12 浏览数 (2)

1. 前言

1.1 简介

misskey是一个去中心化微博,你可以搭建自己的实例,也可以加入其他人的实例。经过这两年的发展,夜梦觉得它已经算是一个比较成熟的程序了~

颜值超高,二次元狂喜!

官方实例地址(如果你不想自己搭建,可以直接加入官方的实例,不过是日文的。):https://misskey.io/

1.2 相关地址

官方网站:https://misskey-hub.net/en/

GitHub地址:https://github.com/misskey-dev/misskey

官方文档地址:Create Misskey instance with Docker Compose | Misskey Hub (misskey-hub.net)

实例列表:https://join.misskey.page/zh-CN/instances (如果你不想自己搭建,也可以加入一个实例来使用)

1.3 Misskey展示

2. 准备

对于这个项目,夜梦推荐最低配置为:2核CPU,2GB内存,30GB SSD硬盘。如果内存不足,可以添加适当的SWAP,具体操作可以看夜梦的这篇文章:手动添加SWAP。服务器系统推荐使用Ubuntu22.04。

在开始部署之前,你需要安装 docker 和 docker-compose。具体安装见:【docker】在服务器上安装 docker/docker-compose

3. 部署

克隆仓库:

代码语言:javascript复制
mkdir -p /root/data/docker_data/misskey
cd /root/data/docker_data/misskey
git clone -b master https://github.com/misskey-dev/misskey.git
cd misskey
git checkout master

创建配置文件:

代码语言:javascript复制
vim docker-compose.yml

英文输入法下,按i后粘贴以下内容(不建议修改):

代码语言:javascript复制
version: "3"

services:
  web:
    build: .
    restart: always
    links:
      - db
      - redis
#     - mcaptcha
#     - meilisearch
    depends_on:
      db:
        condition: service_healthy
      redis:
        condition: service_healthy
    ports:
      - "3000:3000"
    networks:
      - internal_network
      - external_network
    volumes:
      - ./files:/misskey/files
      - ./.config:/misskey/.config:ro

  redis:
    restart: always
    image: redis:7-alpine
    networks:
      - internal_network
    volumes:
      - ./redis:/data
    healthcheck:
      test: "redis-cli ping"
      interval: 5s
      retries: 20

  db:
    restart: always
    image: postgres:15-alpine
    networks:
      - internal_network
    env_file:
      - .config/docker.env
    volumes:
      - ./db:/var/lib/postgresql/data
    healthcheck:
      test: "pg_isready -U $$POSTGRES_USER -d $$POSTGRES_DB"
      interval: 5s
      retries: 20

#  mcaptcha:
#    restart: always
#    image: mcaptcha/mcaptcha:latest
#    networks:
#      internal_network:
#      external_network:
#        aliases:
#          - localhost
#    ports:
#      - 7493:7493
#    env_file:
#      - .config/docker.env
#    environment:
#      PORT: 7493
#      MCAPTCHA_redis_URL: "redis://mcaptcha_redis/"
#    depends_on:
#      db:
#        condition: service_healthy
#      mcaptcha_redis:
#        condition: service_healthy
#
#  mcaptcha_redis:
#    image: mcaptcha/cache:latest
#    networks:
#      - internal_network
#    healthcheck:
#      test: "redis-cli ping"
#      interval: 5s
#      retries: 20

#  meilisearch:
#    restart: always
#    image: getmeili/meilisearch:v1.3.4
#    environment:
#      - MEILI_NO_ANALYTICS=true
#      - MEILI_ENV=production
#    env_file:
#      - .config/meilisearch.env
#    networks:
#      - internal_network
#    volumes:
#      - ./meili_data:/meili_data

networks:
  internal_network:
    internal: true
  external_network:

然后按esc,再在终端输入:wq保存并退出文件。之后,

代码语言:javascript复制
cd .config
vim default.yml

英文输入法下,按i,粘贴以下内容:注意把misskey.yemengstar.top修改为你自己的域名,一旦确定域名以后就不可以再改了!默认使用3001端口如果端口被占用要换端口的话也要改!

代码语言:javascript复制
#━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
# Misskey configuration
#━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

#   ┌─────┐
#───┘ URL └─────────────────────────────────────────────────────

# Final accessible URL seen by a user.
url: https://misskey.yemengstar.top/

# ONCE YOU HAVE STARTED THE INSTANCE, DO NOT CHANGE THE
# URL SETTINGS AFTER THAT!

#   ┌───────────────────────┐
#───┘ Port and TLS settings └───────────────────────────────────

#
# Misskey requires a reverse proxy to support HTTPS connections.
#
#                  ----- https://example.tld/ ------------ 
#    ------       | -------------        ---------------- |
#   | User | ---> || Proxy (443) | ---> | Misskey (3000) ||
#    ------       | -------------        ---------------- |
#                  --------------------------------------- 
#
#   You need to set up a reverse proxy. (e.g. nginx)
#   An encrypted connection with HTTPS is highly recommended
#   because tokens may be transferred in GET requests.

# The port that your Misskey server should listen on.
port: 3000

#   ┌──────────────────────────┐
#───┘ PostgreSQL configuration └────────────────────────────────

db:
  host: db
  port: 5432

  # Database name
  db: misskey

  # Auth
  user: yemengMisskey # 用户名
  pass: youMustUseStrongPassword # 密码

  # Whether disable Caching queries
  #disableCache: true

  # Extra Connection options
  #extra:
  #  ssl: true

dbReplications: false

# You can configure any number of replicas here
#dbSlaves:
#  -
#    host:
#    port:
#    db:
#    user:
#    pass:
#  -
#    host:
#    port:
#    db:
#    user:
#    pass:

#   ┌─────────────────────┐
#───┘ Redis configuration └─────────────────────────────────────

redis:
  host: redis
  port: 6379
  #family: 0  # 0=Both, 4=IPv4, 6=IPv6
  #pass: example-pass
  #prefix: example-prefix
  #db: 1

#redisForPubsub:
#  host: redis
#  port: 6379
#  #family: 0  # 0=Both, 4=IPv4, 6=IPv6
#  #pass: example-pass
#  #prefix: example-prefix
#  #db: 1

#redisForJobQueue:
#  host: redis
#  port: 6379
#  #family: 0  # 0=Both, 4=IPv4, 6=IPv6
#  #pass: example-pass
#  #prefix: example-prefix
#  #db: 1

#redisForTimelines:
#  host: redis
#  port: 6379
#  #family: 0  # 0=Both, 4=IPv4, 6=IPv6
#  #pass: example-pass
#  #prefix: example-prefix
#  #db: 1

#   ┌───────────────────────────┐
#───┘ MeiliSearch configuration └─────────────────────────────

# You can set scope to local (default value) or global 
# (include notes from remote).

#meilisearch:
#  host: meilisearch
#  port: 7700
#  apiKey: ''
#  ssl: true
#  index: ''
#  scope: local

#   ┌───────────────┐
#───┘ ID generation └───────────────────────────────────────────

# You can select the ID generation method.
# You don't usually need to change this setting, but you can
# change it according to your preferences.

# Available methods:
# aid ... Short, Millisecond accuracy
# aidx ... Millisecond accuracy
# meid ... Similar to ObjectID, Millisecond accuracy
# ulid ... Millisecond accuracy
# objectid ... This is left for backward compatibility

# ONCE YOU HAVE STARTED THE INSTANCE, DO NOT CHANGE THE
# ID SETTINGS AFTER THAT!

id: 'aidx'

#   ┌─────────────────────┐
#───┘ Other configuration └─────────────────────────────────────

# Whether disable HSTS
#disableHsts: true

# Number of worker processes
#clusterLimit: 1

# Job concurrency per worker
# deliverJobConcurrency: 128
# inboxJobConcurrency: 16

# Job rate limiter
# deliverJobPerSec: 128
# inboxJobPerSec: 32

# Job attempts
# deliverJobMaxAttempts: 12
# inboxJobMaxAttempts: 8

# IP address family used for outgoing request (ipv4, ipv6 or dual)
#outgoingAddressFamily: ipv4

# Proxy for HTTP/HTTPS
#proxy: http://127.0.0.1:3128

proxyBypassHosts:
  - api.deepl.com
  - api-free.deepl.com
  - www.recaptcha.net
  - hcaptcha.com
  - challenges.cloudflare.com

# Proxy for SMTP/SMTPS
#proxySmtp: http://127.0.0.1:3128   # use HTTP/1.1 CONNECT
#proxySmtp: socks4://127.0.0.1:1080 # use SOCKS4
#proxySmtp: socks5://127.0.0.1:1080 # use SOCKS5

# Media Proxy
#mediaProxy: https://example.com/proxy

# Proxy remote files (default: true)
proxyRemoteFiles: true

# Sign to ActivityPub GET request (default: true)
signToActivityPubGet: true

# For security reasons, uploading attachments from the intranet is prohibited,
# but exceptions can be made from the following settings. Default value is "undefined". 
# Read changelog to learn more (Improvements of 12.90.0 (2021/09/04)).
#allowedPrivateNetworks: [
#  '127.0.0.1/32'
#]

# Upload or download file size limits (bytes)
#maxFileSize: 262144000

然后按esc,再在终端输入:wq保存并退出文件。之后,

代码语言:javascript复制
vim docker.env

英文输入法下,按i,粘贴下面的内容,填入(如果在上面改过数据库用户名密码的话注意和上面对应):

代码语言:javascript复制
# db settings
POSTGRES_PASSWORD=youMustUseStrongPassword # 密码,与上一个文件里面填写的对应
POSTGRES_USER=yemengMisskey # 用户名,与上一个文件里面填写的对应
POSTGRES_DB=misskey
DATABASE_URL="postgres://${POSTGRES_USER}:${POSTGRES_PASSWORD}@db:5432/${POSTGRES_DB}"

然后按esc,再在终端输入:wq保存并退出文件。最后:

代码语言:javascript复制
cd ..    # 来到docker-compose.yml所在的文件夹下
docker-compose build
docker-compose run --rm web pnpm run init   #初始化数据库

顺利完成以后,我们就可以启动misskey了!

代码语言:javascript复制
docker-compose up -d

第一次启动需要较长的时间时间。泡杯咖啡,稍作等待即可~

4.反向代理

在添加反向代理之前,确保你已经完成了域名解析。你需要完成反向代理并开启 SSL,具体为你的域名 -> 服务器IP:3000,反代可以参考下面两篇文章:

【docker】反向代理神器——Nginx Proxy Manager

【docker】Nginx Proxy Manager的使用

5.使用过程中的问题

5.1头像无法上传

进入misskey根目录运行sudo chown -hR 991:991 ./files,然后重启一下服务即可(修改一下权限就可)

[1][2][3]

5.2页面报错

清楚浏览器缓存重新载入即可!

5.3 wss报错

你需要在反向代理中开启这个选项:

6. 其他事项

6.1 更新misskey

使用docker-compose部署的可以采用下面的方式更新misskey:

代码语言:javascript复制
git stash
git checkout master
git pull
git submodule update --init
git stash pop
sudo docker compose build
sudo docker compose stop && sudo docker compose up -d

6.2 卸载misskey

我们查看misskey的<CONTAINER ID>:

代码语言:javascript复制
docker ps -a

获得它的ID以后,我们把容器删了:

代码语言:javascript复制
docker stop <CONTAINER ID>
docker rm -f <CONTAINER ID>

然后我们可以查看它的<IMAGE ID>:

代码语言:javascript复制
docker images

然后把镜像也删了:

代码语言:javascript复制
docker rmi IMAGE ID

最后把本地文件删了:

代码语言:javascript复制
rm -f /root/data/docker_data/misskey

0 人点赞