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
后粘贴以下内容(不建议修改):
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
保存并退出文件。之后,
cd .config
vim default.yml
英文输入法下,按i
,粘贴以下内容:注意把misskey.yemengstar.top
修改为你自己的域名,一旦确定域名以后就不可以再改了!默认使用3001端口,如果端口被占用要换端口的话也要改!
#━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
# 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
保存并退出文件。之后,
vim docker.env
英文输入法下,按i
,粘贴下面的内容,填入(如果在上面改过数据库用户名密码的话注意和上面对应):
# db settings
POSTGRES_PASSWORD=youMustUseStrongPassword # 密码,与上一个文件里面填写的对应
POSTGRES_USER=yemengMisskey # 用户名,与上一个文件里面填写的对应
POSTGRES_DB=misskey
DATABASE_URL="postgres://${POSTGRES_USER}:${POSTGRES_PASSWORD}@db:5432/${POSTGRES_DB}"
然后按esc
,再在终端输入:wq
保存并退出文件。最后:
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