我最近在一台已经跑了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
四、最后的叮嘱
按照上面一套“组合拳”打下来,你的小服务器应该能比较稳定地运行了。但是,一定要持续监控!用htop
、iotop
看看CPU、内存、磁盘IO压力。
如果发现Swap频繁被使用,或者数据库响应还是很慢,说明硬件瓶颈确实存在。到时候就可以理直气壮地拿着监控数据去找老板:“看,要么加钱,要么崩盘,你选吧!”
最后的最后,真的,真的,强烈建议把PostgreSQL拆到另一台最便宜的VPS上去,这是花小钱解决大问题的最佳方案。
希望这篇超详细的宝塔面板部署Misskey教程和服务器优化方案能帮到你!折腾的路上总有坎坷,但成功的喜悦也是无可替代的。如果有问题,欢迎在评论区交流~
没有回复内容