别浪费你的小钢炮!N305 2核4G迷你主机跑Misskey实战:从0到5000IP/日不掉链子(改进版) - 技术宅银魂 - 科技改变生活 - 万事屋 | 生活·动漫·娱乐综合社区-银魂同好聚集地

别浪费你的小钢炮!N305 2核4G迷你主机跑Misskey实战:从0到5000IP/日不掉链子(改进版)

这两天测试Misskey社区程序,据说很强大,但如何强大?国内用的人很少,还是挺冷门的,一点点摸索试试。

0️⃣ 硬件 & 系统

  • CPU:Intel N305 2 C 4 T
  • 内存:4 GB(推荐再挂 4 GB swap)
  • 系统:Ubuntu 22.04 LTS Server
sudo apt update && sudo apt full-upgrade -y

1️⃣ 环境依赖

# Node.js 20 LTS
curl -fsSL https://deb.nodesource.com/setup_20.x | sudo -E bash -
sudo apt install -y \
  nodejs build-essential python3 pkg-config \
  libvips-dev libcairo2-dev libpango1.0-dev \
  libjpeg-dev libgif-dev librsvg2-dev

# pnpm(官方锁死)
corepack enable
corepack prepare pnpm@latest --activate

2️⃣ PostgreSQL 15小内存优化

    1. 官方源安装
sudo sh -c 'echo "deb https://apt.postgresql.org/pub/repos/apt $(lsb_release -cs)-pgdg main" >/etc/apt/sources.list.d/pgdg.list'
wget -qO- https://www.postgresql.org/media/keys/ACCC4CF8.asc | sudo apt-key add -
sudo apt update && sudo apt install -y postgresql-15 postgresql-client-15
    1. 建库建用户
sudo -u postgres psql -c "CREATE USER misskey WITH PASSWORD 'dbpass';"
sudo -u postgres createdb -O misskey misskey
    1. 2核4G专用配置
sudo tee /etc/postgresql/15/main/conf.d/misskey.conf <<'EOF'
shared_buffers = 512MB
effective_cache_size = 1GB
work_mem = 4MB
max_connections = 50
listen_addresses = 'localhost'
port = 5432
log_statement = 'ddl'
EOF
sudo systemctl restart postgresql

3️⃣ Redis 256 MB封顶

sudo apt install -y redis-server
sudo tee -a /etc/redis/redis.conf <<'EOF'
maxmemory 256mb
maxmemory-policy allkeys-lru
save 900 1
save 60 10000
appendonly no
EOF
sudo systemctl restart redis

4️⃣ Misskey 源码部署

    1. 目录与用户
sudo useradd -r -s /bin/bash -d /home/misskey misskey
sudo mkdir -p /www/ncn
sudo chown -R misskey:misskey /home/www
    1. 克隆源码
sudo -iu misskey
cd /home/www
git clone -b master https://github.com/misskey-dev/misskey.git nervcn
cd nervcn
    1. 一键配置
cp .config/example.yml .config/default.yml
sed -i 's|url:.*|url: https://www.nervcn.com|' .config/default.yml
sed -i 's|port:.*|port: 3000|' .config/default.yml
sed -i 's|host:.*|host: localhost|' .config/default.yml
sed -i 's|user:.*|user: misskey|' .config/default.yml
sed -i 's|pass:.*|pass: dbpass|' .config/default.yml
    1. 编译
pnpm install --frozen-lockfile
NODE_OPTIONS="--max-old-space-size=3072" pnpm build
NODE_ENV=production pnpm run init
    1. systemd 守护
sudo tee /etc/systemd/system/misskey.service <<'EOF'
[Unit]
Description=Misskey daemon
After=network.target postgresql.service redis.service

[Service]
Type=simple
User=misskey
WorkingDirectory=/www/ncn
ExecStart=/usr/bin/node packages/backend/built/boot/entry.js
Environment=NODE_ENV=production
Restart=on-failure

[Install]
WantedBy=multi-user.target
EOF
sudo systemctl daemon-reload
sudo systemctl enable --now misskey

5️⃣ Nginx 443反代

sudo apt install -y nginx-core
sudo tee /etc/nginx/sites-available/misskey <<'EOF'
server {
    listen 80;
    server_name www.nervcn.com nervcn.com;
    return 301 https://$host$request_uri;
}

server {
    listen 443 ssl http2;
    server_name www.nervcn.com nervcn.com;

    ssl_certificate      /etc/ssl/certs/nervcn.crt;
    ssl_certificate_key  /etc/ssl/private/nervcn.key;
    ssl_protocols TLSv1.2 TLSv1.3;

    client_max_body_size 64m;

    location / {
        proxy_pass         http://127.0.0.1:3000;
        proxy_http_version 1.1;
        proxy_set_header   Upgrade $http_upgrade;
        proxy_set_header   Connection "upgrade";
        proxy_set_header   Host $host;
        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;
    }
}
EOF
sudo ln -sf /etc/nginx/sites-available/misskey /etc/nginx/sites-enabled/
sudo nginx -t && sudo systemctl reload nginx

6️⃣ 备案信息插入(底部不跑位)

location / 末尾追加:

# 插入备案信息

proxy_set_header Accept-Encoding "";

sub_filter '</body>'
  'Copyright © 2010 - 2025 · <a href="https://www.rei3.com" target="_blank" rel="nofollow">万事屋 </a> · <a href="https://beian.miit.gov.cn" target="_blank" rel="nofollow">沪ICP备16001031号-1.</a>

  </footer></body>';

sub_filter_once on;

重载生效:

sudo nginx -t && sudo systemctl reload nginx

7️⃣ 开机自启 & 日志切割

    1. 日志切割
sudo tee /etc/logrotate.d/misskey <<'EOF'
/www/ncn/log/*.log {
  daily
  missingok
  rotate 14
  compress
  delaycompress
  notifempty
  copytruncate
  su misskey misskey
}
EOF
    1. 每日 4 点平滑重启(防内存泄漏)
(crontab -l 2>/dev/null; echo "0 4 * * * /bin/systemctl try-reload-or-restart misskey") | crontab -

8️⃣ 常见问题速查

现象 解决
PostgreSQL 起不来 证书权限:sudo chown postgres:postgres /etc/ssl/private/ssl-cert-snakeoil.key
前端报 Promise Nginx 缺 WebSocket:proxy_set_header Upgrade $http_upgrade;
端口 3000 未出现 手动跑:NODE_ENV=production /usr/bin/node packages/backend/built/boot/entry.js

至此,2核4G N305迷你主机已完整跑满MisskeyPostgreSQL 15 + Redis 256 MB全部调优,Nginx 443反代+备案信息一步到位,5000 IP/日稳如老狗。
升级前端无需重新编译,备案永不丢失。

请登录后发表评论

    没有回复内容

万事屋新帖