Skip to content

hex-0xd4c0/misskey-docker-guide

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

7 Commits
 
 
 
 
 
 

Repository files navigation

Docker部署Misskey部署标准指南

1. Misskey是什么

它是一个由Misskey团队开发私人搭建的服务器软件,站与站之间的联合可以建立一个极大的私人社交网络。由于不流行,所以没有专门针对该平台的爬虫,所有数据也都掌握在站长手中。但是需要自行搭建。

你可以访问他们的官方网站获得详细信息:https://misskey-hub.net/

misskey在github有源代码。

2. 需要什么

  1. 一个2C4G轻量级应用服务器 用来跑Misskey

建议使用Ubuntu版本22以上来避免一系列不必要的折腾

Misskey服务器并不需要ECS那么大的算力,但是内存官方要求不小于3G(你也可以自行配制脚本在一个2G的服务器上运行但是后果自负)

  1. 一个域名(必须)

用来绑定你的服务器。推荐Cloudflare,老牌,且有官方适配

Misskey服务器的域名一旦在联邦里投入使用后不可更改,一旦更改,首先是会对服务器本身造成未知影响,其次是会造成服务器联邦混乱,请慎重决定自己的域名请不打开更换过域名绑定的服务器的联合功能。

不要尝试将多个域名指向Misskey服务器,这没有用,对于可能会造成的未知问题,后果自负。

若后期想同时使用captraw.comhub.captraw.com 并且希望captraw.com自动跳转hub.captraw.com可以在Cloudflare Dashboard或者你的ISP里那边自行折腾重定向规则

请顺手关闭所有与安全相关的配置并强制打开TLS (Full)和SSL

  1. 一个对象存储 非必须,但是没有它,misskey将无法处理诸如头像之类的图片(头像全是默认头)

由于个人NAS通常不包含CDN服务,访问速度将及其缓慢。 另外频繁读写将导致NAS硬盘寿命锐减,所以不建议将NAS作为存储桶使用

3. Misskey服务器的架构(前置知识)

  1. Misskey服务器软件本身 ——通常使用Docker运行,极特殊情况下本地部署
  2. Redis缓存服务 ——用于缓存常用数据
  3. PostgreSQL数据库 ——存储服务器的文本数据
  4. Nginx反向代理服务 ——用于配置反向代理,缓冲并加速http(s)访问
  5. 对象存储服务 一般与Misskey不在同一服务器上,如果在同一服务器上,可能需要额外配置

不要尝试在发帖的时候加入💩山代码或者几百屏的报错!!! 因为帖子的文本存储是交由PostgreSQL完成的,所以过多的文本可能会导致一些轻量级服务器上的PostgreSQL崩溃从而导致炸服

4. 配置域名的DNS记录

如果是Cloudflare或者使用Cloudflare DNS,请跟着走。

  1. 打开Cloudflare Dashboard
  2. 鼠标点开你的域名(如captraw.com),左边找DNS,下拉打开点击记录
  3. 点击添加记录,类型选择A名称填你想要使用的子域,地址填你的服务器公网IP。 如你想使用hub.captraw.com左边就填hub,如果想要直接使用根域名那就填@,这样使用的就是captraw.com

不要在地址中填入ISP提供的内网IP

若后期想同时使用captraw.comhub.captraw.com并且希望captraw.com能自动跳转到hub.captraw.com可以在左边栏找规则自行折腾。

如果你有IPv6,可以在这里一并配置,请在添加完A类记录后再添加一个AAAA记录

  1. 关闭Cloudflare代理,让橙云变成灰云

方便使用Let's Encrypt自动配置SSLhttps,如果你不是Cloudflare或希望手动配置https,忽视这一步。如果你的ISP支持Let's Encrypt,请查找相似选项并将其关闭(请注意,有些ISP并不会提供代理服务)。等服务器正常运行后请将其打开以使用CDN和其他安全服务加速访问

Cloudflare新建DNS记录时默认是橙云,请注意修改。

  1. 保存该记录

5. 获得你的Cloudflare API Key

如果你不是Cloudflare或希望手动配置SSL和https,请跳过这一步。 如果你的ISP支持Let's Encrypt配置SSL和https,请寻求其他有关CertBot的指导

  1. 打开Cloudflare Dashboard
  2. 右上角点击你的头像,点开,点配置文件
  3. 左侧找API令牌,点开后注意下方的API Key,然后下面找Global API Key,点击它右侧的查看
  4. 可能需要身份验证,验证完成后会显示你的API Key。请将其保存,部署Misskey时会用到。

Global API Key权限极大,请妥善保管你的API Key,以免落入他人手中

6. 如何跑动一个Misskey服务器

6.0 万事万物从更新服务器组件开始

# 注意,此命令会直接重启服务器,如希望手动重启,请删去sudo reboot
sudo apt update; sudo apt full-upgrade -y; sudo reboot

6.1官方一键安装脚本部署

一般我们使用Docker运行Misskey,因为Docker几乎不会损失性能,也不需要额外的配置,更不需要在本地编译。

推荐Misskey官方提供的一个Rootless Docker启动的脚本(本质也是辅助写Docker Compose文件并且部署依赖的一个脚本),我们可以尝试。

#注意!此命令将直接启动安装!
wget https://raw.githubusercontent.com/joinmisskey/bash-install/main/ubuntu.sh -O ubuntu.sh; sudo bash ubuntu.sh

这个脚本做了哪些事?

  1. 询问你是本地安装(To use systemed)或者Docker部署(To use docker)

请选择n(To use docker)!!! 如果你想本地部署或本地编译,欢迎没事找事,本指南不提供指导

接下来填入你的服务器的IP地址,如果你的服务器拥有ISP提供的内网IP地址,请尝试使用内网IP地址以避免意外的中间人攻击。如没有内网IP地址直接填公网IP即可。

实际上,脚本在这一点上写的很烂,因为Rootless Docker不支持使用localhost或其他方式直接访问宿主机的Redis和PostgreSQL所以脚本直接用服务器的对外IP来访问这两个东西,这是极易出错的。如果你败在这一步(Misskey的容器无法与Redis或PostgreSQL通信),请尝试后面的Docker Compose部署方案)

接下来指定Docker Host名称,如无冲突保持docker_host不变

接下来选择Use docker hub image并回车使用默认的latest版本。

  1. 设置服务器初始化密码

在部署完成后,第一次进入Misskey网站时,要求输入的密码,这个密码仅会被使用一次。 脚本会自动生成一行强密码,如果不希望使用自动生成的密码,可以删除后重新输入自己想设定的密码。

记下这个密码,如丢失,将无法完成服务器部署完成后的初始设置

  1. 新建一个账户并设置密码来以Rootless方式启动Docker并运行Misskey以避免root权限过大而导致的安全问题。

为了易于维护,建议将这个账户名就设置为misskey并选择一个你记得住的密码或设置一个密码并将其保存在安全处以备用。

  1. 设置Misskey服务器绑定域名

请填写你实际使用时访问的域名,比如hub.captraw.com,如果不希望使用根域名,请不要填入你的根域名(如captraw.com)。

再次提醒:在服务器投入联邦使用后,不要更换域名!!!

  1. 本地安装Nginx

安装脚本会询问你是否安装Nginx,请选择Y

如果你想以不配置Nginx反代的方式折腾一下,那你大可没事找事

  1. 开放防火墙端口

ufwiptables两种方式,建议选择iptables。

注意你的Ubuntu版本 Ubuntu 24 主动引入iptables防火墙配置,也就是此时系统将预装iptables,如果此时选择了ufw,那么 ufw将与iptables 冲突,此时安装程序将崩溃。

如果你有能力,或ISP的Dashboard支持,你可以优雅地手动配置防火墙规则,而不是使用这个黑箱程序。不知道是什么的别瞎折腾容易翻车。

  1. 使用CertBot配置SSL和https

会询问你是否需要配置CertBot,如果希望自行配制SSL和https,请选择n(否);如果你之前按照流程获得了Cloudflare Global API Key,或者你的ISP支持Let's Encrypt并且你知道该如何配置,建议选择Y是。

会询问你是否使用Cloudflare,如果是Cloudflare,请选择Y是,如果不是,请寻求其他关于CertBot的指导

填入你的Cloudflare账号邮箱。随后填入之前取得的Global API Key

  1. 本地安装PostgreSQL

如果你曾运行过这个安装脚本,并且之间执行的过程中发现PostgreSQL已经安装过了,请选择n(否)并按照之前配置时使用的用户名,密码和数据库名称进行配置

安装过程中会要求设置Misskey使用的PostgreSQL数据库实例的用户名,为方便维护,建议直接使用misskey或者一个不易丢失或遗忘的用户名。接着会要求设置数据库的密码,同样,确保密码安全且不会丢失或遗忘

接下来会设置Misskey使用的数据库的名称,如不冲突,直接使用使用默认的mk1即可

如果你正在尝试作死在一台服务器上部署第二个Misskey实例,请在第一步时就选择n(否)并使用其他数据库名称。实际上,这么做并不受支持,祝贵服安康。

小知识:PostgreSQL的监听端口是5432,这可能对你的故障排除有帮助

  1. 本地安装Redis

同样,如果你曾运行过这个安装脚本,并且之间执行的过程中发现Redis已经安装过了,请选择n(否)并按照之前配置时使用的密码进行配置

同样会要求设置密码,请确保其安全且不会丢失或遗忘

小知识:Redis的监听端口是6379,这可能对你的故障排除有帮助

  1. 设置监听端口

默认给了3000,如无冲突,请直接回车。

  1. 本地安装Docker 尝试docker run(运行)并顺手拉取Misskey的镜像(Image)

可能有点缓慢,如果失败了可以再来一次

请确保服务器空间足够安装Misskey

小知识:如果你的服务器在国内,这意味着你可能需要一天或几天的时间来拉取Docker Hub的Image,而这时候是不能断开ssh的,更别提笔电合盖了。这时候,一个叫做screen的程序的帮你把安装进度挂在后台的功能就极其重要了,这意味着即使你断开了ssh,安装进度也会继续。详细使用办法请自行安装(sudo apt install screen)查询(screen --help

接下来脚本会自动进行的事情

  1. 本地安装Node.js
  2. 本地安装pnpm
  3. 按照之前的配置依次本地安装PostgreSQL、Redis
  4. 安装FFmpeg
  5. 按照先前配置安装Nginx
  6. 安装git和build-essential
  7. 使用ufw配置防火墙
  8. 配置https
  9. 安装Misskey (Docker Run)

理论上,当你看到Now listening on port 3000时,Misskey已经部署完成,你可以打开Cloudflare小橙云代理和使用你的域名访问你的服务器。

若果失败了,请使用下面的Docker Compose的方案:

6.2 使用Docker Compose部署

此方法并非官方教程中现场编译的办法,如果你希望现场编译,请参考官方教程https://misskey-hub.net/cn/docs/for-admin/install/guides/docker

此方法需要手动配置Nginx

此方法需要使用CertBot手动配置https,但是你仍然可以使用Cloudflare方式。

如果你之前使用了官方脚本并且前面都没有问题,直到docker run拉取完镜像真正运行的时候出错了,可以直接跳至 《创建配置文件》 处。

0. 此方法搭建的出的服务器的架构:

宿主机:
  Nginx
Docker容器:
  redis
  postgresql
  misskey

1. 正文开始前,万变不离其宗:

# 警告,此命令会直接重启服务器,若希望手动重启,请勿执行sudo roboot
sudo apt update
sudo apt upgrade
sudo reboot

2. 配置防火墙

iptablesufw两种方式。

请勿同时通过两种方式配置,这会导致iptablesufw不兼容!

由于sudoroot权限运行Docker赋予Docker修改iptables的权限,为避免出现安装了ufw结果Docker配置了iptables 的问题,建议直接使用iptables方式配置防火墙。

如果你是Ubuntu 24,请不要使用ufw方式,会直接造成冲突! 主笔没有测试其他系统有没有相似的情况!

另外,如果你的ISP提供了相应的安全功能(如阿里云),你需要检查相应的安全组件,使其也放行这两个端口,否则很容易被拦截。

如果你的ISP给VPS提供了图形化的防火墙配置界面,那么以下两种方式都不用看了优雅地用GUI配置吧!

  1. iptables方式
# 设置放行80和443
sudo iptables -A INPUT -p tcp --dport 80 -j ACCEPT
sudo iptables -A INPUT -p tcp --dport 443 -j ACCEPT

# 安装持久化工具
sudo apt install iptables-persistent -y

# 保存当前规则
sudo netfilter-persistent save

# 验证配置
sudo iptables -L -n -v

在输出中,你应该能看到类似下面两条关于端口 80 和 443 的 ACCEPT 规则。

Chain INPUT (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination
    0     0 ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0            tcp dpt:80
    0     0 ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0            tcp dpt:443

注意:如果你的服务器上运行着 Docker,Docker 会直接操作 iptables 规则。在配置时需要留意 Docker 的规则与自定义规则的顺序和兼容性,避免出现规则不生效的情况。(这就体现出Rootless Docker的优越性了。)

  1. ufw方式
# 启用ufw
sudo ufw enable

# 设置ufw默认拒绝访问
sudo ufw default deny

# 设置有限制的ssh端口访问(22)
sudo ufw limit 22

# 设置开放80和443端口
sudo ufw allow 80
sudo ufw allow 443

# 确认ufw状态
sudo ufw status

# 永久化ufw设置
sudo systemctl enable ufw

3. 安装Nginx

取得gpg key:

sudo apt install -y curl ca-certificates gnupg2 lsb-release ubuntu-keyring
curl https://nginx.org/keys/nginx_signing.key | gpg --dearmor | sudo tee /usr/share/keyrings/nginx-archive-keyring.gpg >/dev/null
gpg --dry-run --quiet --no-keyring --import --import-options import-show /usr/share/keyrings/nginx-archive-keyring.gpg

请确认终端是否输出573BFD6B3D8FBC641079A6ABABF5BD827BD9BF62

若并未输出预期字符,将无法执行下面安装

该字符串有小概率更改,请自行前往Nginx官网确认:http://nginx.org/en/linux_packages.html#Ubuntu

安装Nginx

echo "deb [signed-by=/usr/share/keyrings/nginx-archive-keyring.gpg] http://nginx.org/packages/ubuntu `lsb_release -cs` nginx" | sudo tee /etc/apt/sources.list.d/nginx.list
echo -e "Package: *\nPin: origin nginx.org\nPin: release o=nginx\nPin-Priority: 900\n" | sudo tee /etc/apt/preferences.d/99nginx
sudo apt update
sudo apt install -y nginx

# 确认Nginx安装状态
systemctl status nginx

# 启动Nginx
sudo systemctl start nginx
sudo systemctl enable nginx

此时执行curl http://localhost将返回Welcome to nginx!

如遇到问题,请参考Nginx官方信息: http://nginx.org/en/linux_packages.html#Ubuntu

4. 配置https

安装使用时Cloudflare的CertBot

如果你的ISP有适用的CertBot程序,请下载适用于你的ISP的CertBot,并认真研究适用于你的ISP的CertBot认证方法。如果没有,请自行探索

sudo apt install -y certbot python3-certbot-dns-cloudflare

mkdir /etc/cloudflare
nano /etc/cloudflare/cloudflare.ini

编辑cloudflare.ini

dns_cloudflare_email = he0xd4c0@example.com
dns_cloudflare_api_key = xxxxxxxxxxxxxxxxxxxxxxxxxx

Ctrl+O写入更改,按Ctrl+X退出nano

# 使用chmod授予权限
sudo chmod 600 /etc/cloudflare/cloudflare.ini

# 将 example.ltd 更换为自己的*根*域名!
sudo certbot certonly --dns-cloudflare --dns-cloudflare-credentials /etc/cloudflare/cloudflare.ini --dns-cloudflare-propagation-seconds 60 --server https://acme-v02.api.letsencrypt.org/directory -d example.tld -d *.example.tld

如果显示*Congratulations!*则配置完成。生成的.pem证书文件请妥善保存备用。(配置Nginx会用到)

5. 配置Nginx

sudo nano /etc/nginx/conf.d/misskey.conf

粘贴:

# nginx configuration for Misskey
# 专为Misskey配置的nginx配置文件
# Created by joinmisskey/bash-install v3.3.1
# 由joinmisskey/bash-install v3.3.1创建
# 由hex-0xd4c0在2026年2月25日翻译注释

# For WebSocket
# WebSocket支持
map $http_upgrade $connection_upgrade {
    default upgrade;
    ''      close;
}

proxy_cache_path /tmp/nginx_cache levels=1:2 keys_zone=cache1:16m max_size=1g inactive=720m use_temp_path=off;

server {
    listen 80;
    listen [::]:80;
    server_name example.tld;

    # For SSL domain validation
    # SSL域验证
    root /var/www/html;
    location /.well-known/acme-challenge/ { allow all; }
    location /.well-known/pki-validation/ { allow all; }

        # with https
        # 带HTTPS
    location / { return 301 https://$server_name$request_uri; }
}
server {
    listen 443 ssl http2;
    listen [::]:443 ssl http2;
    server_name example.tld;

    ssl_session_timeout 1d;
    ssl_session_cache shared:ssl_session_cache:10m;
    ssl_session_tickets off;

    # To use Let's Encrypt certificate
    # 使用Let's Encrypt证书
    ssl_certificate     /etc/letsencrypt/live/example.tld/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/example.tld/privkey.pem;

    # SSL protocol settings
    # SSL协议设置
    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384;
    ssl_prefer_server_ciphers off;
    ssl_stapling on;
    ssl_stapling_verify on;
    # Change to your upload limit
    # 上传限制请修改
    client_max_body_size 250m;

    # Proxy to Node
    # 代理到Node.js
    location / {
        proxy_pass http://127.0.0.1:3000;
        proxy_set_header Host $host;
        proxy_http_version 1.1;
        proxy_redirect off;

        # If it's behind another reverse proxy or CDN, remove the following.
        # 如果在另一个反向代理或CDN后面,请删除以下内容,包括但不限于Cloudflare小橙云代理。
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto https;

        # For WebSocket
        # WebSocket支持
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection $connection_upgrade;

        # Cache settings
        # 缓存设置
        proxy_cache cache1;
        proxy_cache_lock on;
        proxy_cache_use_stale updating;
                proxy_force_ranges on;
        add_header X-Cache $upstream_cache_status;
    }
}

请将所有的example.tld改成自己实际使用的域名。 将上文中的ssl_certificatessl_certificate_key后面的路径替换为之前CertBot获得的pem证书的路径。 如果你打开了Cloudflare代理 (有谁不开的?),请删去上面文件中location下的这几行,以免影响网站访问:

        # If it's behind another reverse proxy or CDN, remove the following.
        # 如果在另一个反向代理或CDN后面,请删除以下内容,包括但不限于Cloudflare小橙云代理。
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto https;

Ctrl+O保存更改,Ctrl+X退出nano

确认配置文件是否正常。

sudo systemctl restart nginx

如果配置文件正常,重启nginx守护程序。

sudo systemctl restart nginx

确认Nginx运行状态。

sudo systemctl status nginx

6. 安装docker

# 此命令适用于Debian系

# 添加Docker官方GPG key:
sudo apt update
sudo apt install ca-certificates curl
sudo install -m 0755 -d /etc/apt/keyrings
sudo curl -fsSL https://download.docker.com/linux/debian/gpg -o /etc/apt/keyrings/docker.asc
sudo chmod a+r /etc/apt/keyrings/docker.asc

# 添加仓库到Apt源:
sudo tee /etc/apt/sources.list.d/docker.sources <<EOF
Types: deb
URIs: https://download.docker.com/linux/debian
Suites: $(. /etc/os-release && echo "$VERSION_CODENAME")
Components: stable
Signed-By: /etc/apt/keyrings/docker.asc
EOF

sudo apt update

7. 安装Docker Compose

sudo apt install docker-compose-plugin

8. 新建Misskey专用账户

并非必须,但是处于安全考虑,建议这么做。

如果你想作死使用root运行然后方便不怀好意之人获取misskey权限就能直接**提权至root**那你大可一试。

使用useradd添加账户

useradd -m -U -s /bin/bash "misskey";

如果你想使用自定义的用户名,请替换misskey

登陆到新账户:

sudo -iu misskey

然后修改密码:

passwd
# 系统会要求你输入原密码,因为你没有设置过,直接留空回车

# 接着会要求你输入新密码,输入的密码不会被显示
# (不要怀疑自己没打出来,是真的不会有任何显示,连*都没有)
# 输入完成后直接回车

# 接着是确认密码,请确保两遍输入的密码相同

请确保密码安全且不易丢失或遗忘,你也不想在维护的时候对着密码输入框发呆吧。

如果你想让你的用户裸奔,你可以 逝 世 不设密码,后果自负

9. 创建配置文件

创建Docker Compose配置文件

nano docker-compose.yml

粘贴:

services:
  postgres:
    image: postgres:15
    restart: unless-stopped
    environment:
      POSTGRES_DB: mk1
      POSTGRES_USER: misskey
      POSTGRES_PASSWORD: <your_db_password>
    volumes:
      - ./postgres:/var/lib/postgresql/data

  redis:
    image: redis:7
    restart: unless-stopped
    command: redis-server --requirepass <your_redis_password>
    volumes:
      - ./redis:/data

  misskey:
    image: misskey/misskey:latest
    restart: unless-stopped
    depends_on:
      - postgres
      - redis
    ports:
      - "3000:3000"
    volumes:
      - ./files:/misskey/files
      - ./default.yml:/misskey/.config/default.yml:ro

请将<your_db_password><your_redis_password>分别替换为安全且不易丢失或遗忘的PostgreSQL数据库密码和Redis密码。这很重要。

创建Misskey默认配置文件

nano default.yml

粘贴:

url: https://<你的域名>
port: 3000

setupPassword: '<初始化密码>'

db:
  host: postgres
  port: 5432
  db: mk1
  user: misskey
  pass: <your_db_password>

redis:
  host: redis
  port: 6379
  pass: <your_redis_password>

id: 'aid'
proxyRemoteFiles: true
signToActivityPubGet: true

请将<你的域名>替换为你实际使用的域名(如hub.captraw.com <—这是我的域名,别填我的!!!)。 请将<初始化密码>替换为你希望设定的初始化密码,这个密码只会使用一次,但是没有它将无法完成部署之后的初始设置

请将<your_db_password><your_redis_password>分别改为你刚刚设定的PostgreSQL密码和Redis密码

10. 启动Misskey

# 务必在misskey目录下运行此命令
docker compose up -d

你也可以使用sudo运行此命令,但其实普通权限就够了。

7. 联合问题

Misskey服务器支持相互联合组成巨大联邦,但是在联合过程中,出现了诸多障碍,主要是各种云服务平台的安全配置导致的。

以下是常见问题解决方案:

1. 区域限制

部分国内ISP的国内节点设置默认所有VPS拒绝所有境外访问,实际使用时,可以开放访问权限给部分地区或指定IP。

2. 证书问题

如果你的证书配置是崩的,那么发给他站的GET是不带签名的,不仅ISP可能会直接把请求挡了,Misskey也不会回应。(在Misskey中有相应设置,注意:关闭强制要求签名会使安全性下降

3. Cloudflare Bot Fight Mode 自动程序攻击模式

💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩

如果你的ISP也有相似功能,那主责大概八九不离十了。

如果你的服务器的IP段在到你手里之前不知被何人用过而且还用得很脏,在广大老牌厂商那里留了不知道多少案底,那么诸如Cloudflare之类的老牌厂商肯定不会允许这种IP段用爬虫访问他们保护的网站。(Misskey从他站获得数据的行为本质上也是一种爬虫行为)特别是当他站的安全规则开得非常严格的时候。

经过确认,笔者确定是Cloudflare的Bot Fight Mode 自动程序攻击模式 非常容易 把Misskey的请求给403了

为了绕开这个安全组件,在尽量保证安全的情况下避免误伤,你应该在Cloudflare Dashboard上进行以下配置: 点开你自己的域名,进Security → Security Rules → Create rule → Customize Rule(中文是安全性 → 安全规则 → 创建规则 → 自定义规则)。 直接点编辑表达式,输入以下内容:

(
  http.request.headers["user-agent"][contains "Misskey"]
  and http.request.headers["signature"][exists]
  and (
        http.request.uri.path contains "/users/"
        or http.request.uri.path contains "/inbox"
        or http.request.uri.path contains "/.well-known/"
        or http.request.uri.path contains "/notes/"
      )
  and http.request.headers["user-agent"][contains "example.com"]
)

请将example.com替换为被挡的域名。

最后由He0xD4C0更新于2026年2月25日

About

Full guide for all people to deploy a miskey server with docker!!!

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors