2核3G小服务器也能跑Misskey?宝塔面板实战部署+优化吐血指南! - 技术宅银魂 - 科技改变生活 - 万事屋 | 生活·动漫·娱乐综合社区-银魂同好聚集地

2核3G小服务器也能跑Misskey?宝塔面板实战部署+优化吐血指南!

我最近在一台已经跑了3个日IP 5000的WordPress站点的2核3G小破服务器上,又塞了一个日IP 2000+的Misskey节点(类似长毛象的分布式社交网络)。数据库服务器更是可怜,就2核2G,还要同时伺候MySQL和新来的PostgreSQL。

结果嘛……你猜怎么着?居然还真给我跑起来了!虽然过程堪称踩坑大全,血压一度飙升。但折腾成功后的成就感,真不是盖的。

如果你也和我的“抠门”老板一样,不想加预算升级配置,又想最大化利用手里有限的服务器资源,那这篇实战避坑指南就是为你写的。我会把完整的安装步骤和压箱底的服务器优化技巧全盘托出,手把手教你如何在宝塔面板环境下,让Misskey和WordPress们“和平共处”。

一、开工前的灵魂拷问:这真的能行?

说实话,在看到配置要求时,我的内心是崩溃的。

  • 前端服务器:2核3G的Ubuntu,跑着宝塔、Nginx、PHP、Redis、Memcached,还扛着3个WordPress。
  • 数据库服务器:2核2G,只跑MySQL,内存已经挺紧张了。
  • 新需求:再加一个吃资源大户——用Node.js和PostgreSQL的Misskey。

这配置直接上,100%会崩给你看。MySQL和PostgreSQL会为了抢内存打起来,前端服务器的CPU和内存会被Misskey直接榨干。

结论是:硬上肯定不行,但经过一番“外科手术”级的优化,有戏! 当然,最治本的办法还是给数据库服务器加内存到4G,预算充足的同学强烈建议这么做。如果老板不肯,那就跟着我往下硬刚吧!

二、硬核安装教程:让Misskey跑起来

在开始任何操作前,务必!一定!必须!给你的两台服务器打快照做备份!玩崩了可别怪我没提醒。

第一步:在数据库服务器上安装PostgreSQL

我们的目标是:在已经运行MySQL的机器上,再安装一个PostgreSQL 13,并且让它们俩不至于同归于尽。

通过SSH连接到你的数据库服务器,然后执行以下命令:

# 添加PostgreSQL官方源
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 --quiet -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc | sudo apt-key add -
# 更新并安装
sudo apt update
sudo apt install postgresql-13

安装完成后,需要配置它允许前端服务器来连接。

1. 修改监听地址:

sudo nano /etc/postgresql/13/main/postgresql.conf
# 找到 listen_addresses 行,修改为(假设你的内网IP是192.168.1.100)
listen_addresses = 'localhost,192.168.1.100'

2. 设置访问权限:

sudo nano /etc/postgresql/13/main/pg_hba.conf
# 在文件末尾添加一行(假设前端服务器内网IP是192.168.1.200)
host    all             all             192.168.1.200/32        md5

3. 重启PostgreSQL服务:

sudo systemctl restart postgresql@13-main

4. 创建Misskey专用的数据库和用户:

# 切换到postgres用户
sudo -u postgres psql
# 执行SQL命令
CREATE USER misskey WITH PASSWORD '你的超级复杂密码';
CREATE DATABASE misskey WITH OWNER misskey ENCODING = 'UTF8';
# 退出
\q

第二步:在前端服务器上安装Misskey

现在回到你的宝塔面板服务器。

1. 安装Node.js和Yarn: Misskey需要比较新的Node.js版本。

# 安装Node.js 20
curl -fsSL https://deb.nodesource.com/setup_20.x | sudo -E bash -
sudo apt install -y nodejs
# 安装Yarn
sudo npm install -g yarn

2. 克隆并构建Misskey: 我们用一个专门的系统用户来运行它,更安全。

# 创建用户
sudo adduser --disabled-password --disabled-login misskey
# 切换到misskey用户
sudo -i -u misskey
# 克隆代码(稳定版)
git clone -b stable https://github.com/misskey-dev/misskey.git
cd misskey
# 切换到最新的稳定标签
git checkout $(git tag -l | grep -E '^[0-9]+\.[0-9]+\.[0-9]+$' | sort -V | tail -n 1)
# 安装依赖并构建(这步很慢,耐心等待)
yarn install
NODE_ENV=production yarn build
# 退出misskey用户
exit

3. 配置Misskey: 这是最关键的一步。

# 切换到项目目录
cd /home/misskey/misskey
# 复制配置文件
cp .config/example.yml .config/default.yml
nano .config/default.yml

你需要修改以下核心部分:

url: https://你的misskey域名.com
port: 3000
db:
  host: 你的数据库服务器内网IP  # 例如 192.168.1.100
  port: 5432
  db: misskey
  user: misskey
  pass: '刚才设置的超级复杂密码'
redis:
  host: localhost
  port: 6379
# 如果Redis有密码,请在这里填写

4. 用PM2守护进程: 保证Misskey崩溃了能自己爬起来。

sudo npm install -g pm2
# 用misskey用户启动项目
sudo -u misskey NODE_ENV=production pm2 start "npm run start" --name Misskey
# 设置开机自启
pm2 save
sudo env PATH=$PATH:/usr/bin /usr/lib/node_modules/pm2/bin/pm2 startup systemd -u misskey --hp /home/misskey

第三步:在宝塔面板中配置Nginx反向代理

总不能让人家用户访问3000端口吧?太不专业了。

在宝塔面板里,为你Misskey的域名创建一个新网站(PHP版本选纯静态即可)。然后点开这个网站的“设置”,进入“配置文件”标签。

把里面默认的内容删掉,替换成下面这段:

server {
    listen 80;
    server_name 你的misskey域名.com;
    return 301 https://$server_name$request_uri;
}

server {
    listen 443 ssl http2;
    server_name 你的misskey域名.com;

    # 这里宝塔会自动帮你填充SSL证书的路径,不用手动改
    ssl_certificate /www/server/panel/vhost/cert/你的域名/fullchain.pem;
    ssl_certificate_key /www/server/panel/vhost/cert/你的域名/privkey.pem;

    # 其他SSL设置保持宝塔默认即可
    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_ciphers EECDH+CHACHA20:EECDH+CHACHA20-draft:EECDH+AES128:RSA+AES128:EECDH+AES256:RSA+AES256:EECDH+3DES:RSA+3DES:!MD5;
    ssl_prefer_server_ciphers on;
    ssl_session_cache shared:SSL:10m;
    ssl_session_timeout 10m;
    add_header Strict-Transport-Security "max-age=31536000";
    error_page 497  https://$host$request_uri;

    client_max_body_size 100m; # 很重要,上传文件大小限制

    location / {
        proxy_pass http://127.0.0.1:3000;
        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 $scheme;
        proxy_http_version 1.1;
        # 下面几个超时设置对稳定性很重要
        proxy_connect_timeout 5m;
        proxy_send_timeout 5m;
        proxy_read_timeout 5m;
        send_timeout 5m;
    }

    # 处理Misskey的长连接和WebSocket
    location /api/streaming {
        proxy_pass http://127.0.0.1:3000;
        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 $scheme;
        proxy_buffering off; # 禁用缓冲
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
    }
}

保存,然后重载Nginx配置。现在,理论上你应该可以通过域名访问你的Misskey站点了。

三、终极性能压榨:优化方案大全

如果只是安装好,那你很快就会发现服务器卡成幻灯片。下面的服务器优化技巧才是让你服务器“起死回生”的关键。

数据库服务器优化 (2核2G的救赎)

MySQL优化(在宝塔面板里修改或直接改/etc/my.cnf):

[mysqld]
# 最重要的设置!缓冲池大小,分走了MySQL最多内存。
# 总内存2G,分给MySQL 700M,给系统和其他留1.3G。
innodb_buffer_pool_size = 700M

# 其他优化
innodb_log_file_size = 128M
innodb_flush_log_at_trx_commit = 2 # 牺牲一点安全性换性能
skip_name_resolve = ON
max_connections = 100
wait_timeout = 600

PostgreSQL优化(修改/etc/postgresql/13/main/postgresql.conf):

# 总内存2G,分给PostgreSQL 512M。
shared_buffers = 512MB
# 每个连接操作的内存,别设太大!
work_mem = 8MB
# 维护操作可以多给点
maintenance_work_mem = 128MB
# 告诉系统大概有多少缓存可用
effective_cache_size = 1GB
# 限制连接数,防止爆内存
max_connections = 50
# 下面是SSD硬盘的优化
random_page_cost = 1.1
effective_io_concurrency = 200

吐槽: 这就像在10平米的房间里塞下两个壮汉,必须规定好谁只能站哪,胳膊腿往哪伸,不然肯定打起来。所以,加内存是解决一切问题的根本

前端服务器优化(宝塔面板环境)

1. Nginx优化:

编辑 /www/server/nginx/conf/nginx.conf

worker_processes 2; # 2核就设2
worker_cpu_affinity auto;
events {
    worker_connections 4096;
    use epoll;
    multi_accept on;
}
# 保持连接相关配置
keepalive_timeout 30;
keepalive_requests 1000;
gzip on;
# ... 其他gzip设置

最关键的一步: 为你那3个WordPress网站全部开启宝塔的“网站加速”(反向代理缓存)!这能把绝大部分未登录用户的请求直接拦在Nginx层,不再请求PHP和数据库,性能提升是核弹级别的。

2. PHP-FPM优化:

在宝塔的PHP设置中:

  • pm = dynamic
  • pm.max_children = 20 (算一下,20个进程*50M/进程=1G内存,差不多了)
  • pm.start_servers = 5
  • pm.min_spare_servers = 5
  • pm.max_spare_servers = 10
  • 务必开启OPcache,并把内存调到128M。

3. Redis优化:

编辑Redis配置,给它上个“紧箍咒”,别让它吃光内存:

maxmemory 512mb # 最多吃512M
maxmemory-policy allkeys-lru # 内存满了就删最老的key

4. 系统层面优化:

必须开Swap! 内存不够时的救命稻草。

sudo fallocate -l 2G /swapfile
sudo chmod 600 /swapfile
sudo mkswap /swapfile
sudo swapon /swapfile
# 写入fstab永久生效
echo '/swapfile none swap sw 0 0' | sudo tee -a /etc/fstab

四、最后的叮嘱

按照上面一套“组合拳”打下来,你的小服务器应该能比较稳定地运行了。但是,一定要持续监控!用htopiotop看看CPU、内存、磁盘IO压力。

如果发现Swap频繁被使用,或者数据库响应还是很慢,说明硬件瓶颈确实存在。到时候就可以理直气壮地拿着监控数据去找老板:“看,要么加钱,要么崩盘,你选吧!”

最后的最后,真的,真的,强烈建议把PostgreSQL拆到另一台最便宜的VPS上去,这是花小钱解决大问题的最佳方案。

希望这篇超详细的宝塔面板部署Misskey教程服务器优化方案能帮到你!折腾的路上总有坎坷,但成功的喜悦也是无可替代的。如果有问题,欢迎在评论区交流~

请登录后发表评论

    没有回复内容

万事屋新帖