废话不多说,直接进入正题。
这两年Ghost博客的热度一直没降过,作为一个基于Node.js的开源博客平台,它在写作体验、主题美观度和性能表现上确实比传统PHP系博客更轻快。但Ghost的问题也很典型:官方文档是英文的,部署方式偏开发向,默认推荐Docker或者用Ghost CLI来装,这和很多新手熟悉的“下载压缩包、放到网站目录、下一步安装”完全是两个世界。所以很多人在腾讯云CVM上折腾Ghost,卡在环境配置和Nginx反向代理这一步就放弃了。
这篇就是写给纯新手的,我用腾讯云CVM作为例子,从买服务器、配置环境、装Ghost、绑域名、开HTTPS到日常备份,完整走一遍流程。我尽量把每一步为什么这么做讲清楚,而不是只丢给你一串命令。
1. 动手之前:Ghost到底是什么,值不值得折腾
1.1 Ghost和WordPress的定位差异
Ghost经常被拿来和WordPress对比,但这两者的定位其实差异很大。WordPress是万能的,通过插件能做企业站、商城、论坛,功能上几乎没有上限,但代价是臃肿,插件装多了以后性能和安全性都是问题。
Ghost走的是另一条路:从头到尾就专注“写博客”这一件事。它的后台编辑器基于Markdown,写作的时候没有任何干扰,预览很舒服。主题系统用的是Handlebars模板引擎,想改样式需要懂一点代码,但不改也不影响日常使用。发布、打标签、会员订阅这些基础功能都是内置的,不用装一堆插件。
我个人的使用感受是:如果你就是想认真写东西,做一个内容干净、速度快、没有广告和弹窗的博客,Ghost比WordPress合适得多。但如果你打算做一个带商城、带论坛、带复杂业务逻辑的站点,Ghost就帮不上忙了,那还是老老实实用WordPress或者其他方案。这个定位想清楚了,后面才不会装到一半觉得“这也不行那也不行”。
1.2 服务器配置选型参考
Ghost对服务器配置的要求不算高,但也不是随便一台小鸡就能跑得很流畅。它背后依赖Node.js运行时和MySQL数据库,这两个都是吃内存的,尤其MySQL,默认配置下占用内存就不小。
我直接给一个参考标准:
| 场景 | CPU | 内存 | 带宽 | 预估月流量 |
|---|---|---|---|---|
| 个人博客、内测期 | 1核 | 2GB | 1-3Mbps | 50GB以内 |
| 长期运营、文章量较大 | 2核 | 4GB | 3-5Mbps | 100GB以上 |
| 访问量稳定、有会员功能 | 2核 | 8GB及以上 | 5Mbps以上 | 视实际用户量而定 |
腾讯云CVM在这方面的优势是配置选择灵活,新用户经常能拿到比较划算的套餐,而且轻量应用服务器和标准CVM都有。Ghost官方文档说最低512MB内存就能跑,但我强烈不建议这么干,实测下来512MB内存开Ghost加MySQL,系统光空闲状态就接近80%内存占用,一旦有人访问,Node.js进程很容易被系统杀掉。2GB内存是一个比较舒服的起步线。
还有一个容易被忽略的点是带宽。Ghost后台虽然不重,但如果你在博客里放了比较多的高清图片,1Mbps的带宽在高峰期会明显感觉到加载慢。我建议你前期带宽选小一点没关系,腾讯云CVM后面随时可以升配,但买服务器的时候记得确认一下能不能弹性调整带宽,这比一开始买大带宽更省钱。
1.3 关于“渠道商”的一些看法
标题里提到了“腾讯云渠道商”,这里多说一句:渠道商本质上是腾讯云的授权经销商,通过他们的链接购买或者找他们代付,价格可能会比官网直购便宜,有的还附带一些代金券或者服务支持。
我的建议是,渠道商的优惠活动可以留意,但如果只是为了搭建Ghost博客这种个人项目,不需要刻意绑定某个渠道商。云厂商的官方控制台、计费方式、工单支持都是统一的,渠道商主要是销售角色,不负责帮你处理技术问题。你要关注的核心还是:服务器本身的稳定性、后续续费价格、以及售后工单响应速度。这些才是真正影响你使用的因素。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 腾讯云CVM初始化:从购买到能上手部署
2.1 购买CVM时的几个关键选项
无论你从哪个入口进去买CVM,都会遇到一堆选项,新手容易看花眼。我逐个说一下关键选择:
- 地域:选离你最近的地区就行,国内访问速度都够用。要注意的是地域选定后是不能跨区迁移的(除非做镜像迁移,但没必要),所以选之前想清楚。
- 计费模式:包年包月适合长期稳定的博客,按量计费适合短期测试。博客这种东西一般是长期运行的,直接包年包月更省心,还送一部分优惠。
- 镜像:选Ubuntu 22.04 LTS或Debian 12。我比较推荐Ubuntu,因为Ghost的官方文档和社区教程里大部分命令都是基于Ubuntu的,包管理命令也简单,新手照抄不容易出错。
- 硬盘:系统盘默认给40GB或50GB,够用了。如果以后放了大量图片、备份文件、日志,可以在买的时候顺便加一块数据盘,或者后续在控制台单独购买云硬盘挂载。Ghost博客本身不大,主要是图片和备份占空间。
- 安全组:这个非常关键。在控制台创建安全组规则的时候,默认会放行22、80、443等常用端口。千万别为了图省事放行所有端口,特别是不要暴露MySQL的3306端口给公网,后果很严重。后面我会专门讲安全组的正确配置。
登录方式上,建议你在购买时直接设置好登录密码,如果你会用SSH密钥也可以创建密钥对。自己用的话密码就够了,但注意密码复杂度要够,别用123456这种,云服务器每天都在被全网扫端口,弱密码几小时内就容易被入侵。
2.2 登录服务器并完成基础系统配置
购买完成后,在腾讯云控制台能看到服务器的公网IP。Windows系统可以用Xshell、MobaXterm、FinalShell等SSH工具连接,macOS和Linux用户直接用终端,在命令行里输入:
bash复制ssh root@你的服务器IP
第一次登录可能会提示你确认主机指纹,输入yes回车,然后输入密码,就进到系统里了。
进来之后先做两件事:更新系统包、设置时区。更新系统包是为了让软件源里的软件版本是最新的,避免后面安装依赖时遇到版本过旧的问题。命令很简单:
bash复制apt update && apt upgrade -y
这一步可能需要几分钟,取决于网络情况。等它跑完,再装一个基础工具集:
bash复制apt install -y curl wget git unzip vim
这些是后面的部署过程中要用到的,提前装好免得后面缺东少西。
时区设置建议改成Asia/Shanghai,否则后面Ghost生成的日志时间、备份时间都是UTC时区,查看日志的时候会差8小时,很容易把自己绕晕。
bash复制timedatectl set-timezone Asia/Shanghai
输入date命令确认一下时间,没问题就可以进入下一步了。
3. 一步一步装Ghost:环境、数据库、站点
3.1 安装Node.js和MySQL数据库
Ghost是基于Node.js的,所以要装Node运行时。Ghost 5.x版本要求Node.js 18或者20,建议直接装20 LTS版本,兼容性更好。
我推荐用nvm来装Node。nvm的好处是可以在同一台机器上安装多个Node版本并按需切换,如果以后你还要跑其他的Node项目,不会互相冲突。如果直接用apt安装Node,版本往往比较老,而且升级麻烦。
安装nvm的命令:
bash复制curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.7/install.sh | bash
装完后重新登录SSH或者执行source ~/.bashrc,让nvm命令生效。然后执行:
bash复制nvm install 20
nvm use 20
node -v
如果看到v20.x.x,Node就算装好了。注意nvm默认安装的Node可能不在系统PATH里,如果你用nvm install后执行node -v找不到命令,先执行source ~/.bashrc再试。
数据库方面,Ghost官方支持MySQL 8。Ubuntu的包管理器里默认的MySQL版本就是8.x,直接安装就行:
bash复制apt install -y mysql-server
systemctl start mysql
systemctl enable mysql
装完MySQL后要创建一个Ghost专用的数据库和用户,不要用root账号跑应用,这是基本的安全习惯。执行:
bash复制mysql -u root -p
进去后执行SQL:
sql复制CREATE DATABASE ghost_prod;
CREATE USER 'ghost'@'localhost' IDENTIFIED BY '你自定义的强密码';
GRANT ALL PRIVILEGES ON ghost_prod.* TO 'ghost'@'localhost';
FLUSH PRIVILEGES;
EXIT;
这里有个小坑:MySQL 8默认的认证插件是caching_sha2_password,而Ghost的mysql模块可以兼容,所以其实不用额外处理,但我遇到过某些旧版本Ghost报认证错误的情况。如果你在后面的ghost install阶段遇到“MySQL server does not support this authentication plugin”这类报错,可以回来执行:
sql复制ALTER USER 'ghost'@'localhost' IDENTIFIED WITH mysql_native_password BY '你自定义的强密码';
这是兼容性处理,不影响使用。
3.2 用Ghost CLI初始化博客
Ghost官方提供了一个自动化安装工具叫ghost-cli,它几乎是目前安装Ghost的标准方式,比手动下载源码包、配置环境高效得多。它会自动处理依赖安装、配置文件生成、日志目录创建等一系列操作。
全局安装ghost-cli:
bash复制npm install ghost-cli@latest -g
然后创建博客目录。Ghost官方推荐放在/var/www/ghost:
bash复制sudo mkdir -p /var/www/ghost
sudo chown -R $USER:$USER /var/www/ghost
cd /var/www/ghost
接下来执行安装命令。下面这条命令是我在各种环境里验证过的:
bash复制ghost install --db=mysql --dbhost=localhost --dbuser=ghost --dbpass='你刚设置的密码' --dbname=ghost_prod --process=systemd --no-prompt
这里解释几个参数的含义:
- --dbhost=localhost:数据库就在本机,不需要走网络连接,速度更快也更安全。
- --process=systemd:用systemd管理Ghost进程,这样服务器重启后Ghost会自动启动,不用手动拉起。
- --no-prompt:跳过所有交互式提问,避免安装过程中卡在需要你输入的地方。
执行后ghost-cli会自动安装依赖、生成config.production.json、启动服务。整个过程可能持续几分钟,看到类似“Ghost was installed successfully”的提示就说明成功了。这时Ghost默认监听127.0.0.1的2368端口,外部还不能直接访问,我们下一步要通过Nginx把流量转发进来。
如果你在安装过程中被问到“Do you want to set up SSL?”之类的交互问题,先选No,因为域名和证书还没配好,等Nginx和域名正常了再补HTTPS,顺序更稳妥。
3.3 Nginx反向代理与域名接入
Ghost默认监听本地2368端口,不能直接对公网开放。正常做法是用Nginx做反向代理,把80和443端口的请求转发到2368端口。
安装Nginx:
bash复制apt install -y nginx
systemctl start nginx
然后创建站点配置文件:
bash复制vim /etc/nginx/sites-available/ghost.conf
写入以下内容:
nginx复制server {
listen 80;
server_name yourdomain.com www.yourdomain.com;
access_log /var/log/nginx/ghost_access.log;
error_log /var/log/nginx/ghost_error.log;
location / {
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header Host $host;
proxy_pass http://127.0.0.1:2368;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
}
client_max_body_size 50m;
}
这段配置有几个值得说的点:
- proxy_set_header Host $host; 这一行很关键。Ghost会根据Host头来生成站点链接,如果不传Host,博客内部生成的链接会变成127.0.0.1,导致页面上很多链接点不开。
- Upgrade和Connection这两行是为了支持WebSocket连接。Ghost后续版本中部分后台功能会用到WebSocket,提前配上能少踩很多坑。
- client_max_body_size 50m; 是设置上传文件大小上限。Ghost默认限制比较小,如果你打算在后台上传较大的图片或文件,建议把这个值调大。
配置保存后,启用站点配置并把默认配置禁用:
bash复制ln -s /etc/nginx/sites-available/ghost.conf /etc/nginx/sites-enabled/
rm /etc/nginx/sites-enabled/default
nginx -t
systemctl reload nginx
nginx -t用来检查配置文件是否有语法错误,这是个好习惯,改完配置一定要先验证再重载。
域名解析这一步,去你的域名服务商后台添加一条A记录,把域名解析到你CVM的公网IP上。域名解析生效通常需要几分钟,最长不超过24小时,一般10分钟左右就能用。
3.4 安全组端口放行:别一上来就全端口开放
很多教程只教你在服务器内配置防火墙,却忽略了一个重要环节:腾讯云在CVM的网络安全层还有一个安全组机制,它在系统防火墙之前生效,就算你服务器内部放行了端口,安全组没有放行,外部一样访问不了。
这也是为什么很多新手照着教程执行完后打开浏览器发现网站没反应——问题往往不在服务器内部,而是安全组没放行。
登录腾讯云控制台,找到你的CVM实例,点进“安全组”标签,编辑规则,确保至少有以下三条入站规则:
| 端口 | 协议 | 来源 | 用途 |
|---|---|---|---|
| 22 | TCP | 你自己的IP或0.0.0.0/0 | SSH远程连接 |
| 80 | TCP | 0.0.0.0/0 | HTTP访问 |
| 443 | TCP | 0.0.0.0/0 | HTTPS访问 |
来源地址建议尽量精确。SSH的22端口可以只允许你自己的公网IP访问,这样能在很大程度上防止暴力破解。80和443是要对所有人开放的,所以来源必须是0.0.0.0/0。
我看到不少人在网上搜“腾讯云如何开放所有端口”,这是很危险的做法。把所有端口全部暴露到公网,等于把服务器大门敞开,让全网的扫描器对你的3389、3306、6379、27017这些端口挨个试。就算你设置了强密码,也经不住天天被扫。正确姿势是只放行必要端口,其他全部拒绝。
安全组规则修改后会立即生效,不用重启服务器。等80端口放行,浏览器输入你的域名,如果看到Ghost的默认首页,说明整个链路已经通了。
4. 上线之后必做的几件事:HTTPS、备份、安全加固
4.1 用免费证书配置HTTPS
现在没有HTTPS的网站会被浏览器直接提示不安全,对访客体验影响很大,所以这一步不能省。
腾讯云提供免费的SSL证书申请,有效期3个月,到期可以重新申请,完全够用。具体路径是:腾讯云控制台搜索“SSL证书” -> 申请免费证书 -> 填域名 -> 验证 -> 签发,全程在网页上操作,不需要额外安装命令行工具。签发后下载Nginx格式的证书文件,里面包含.crt和.key两个文件。
把这两个文件上传到服务器,比如放到/etc/nginx/cert/目录下:
bash复制mkdir -p /etc/nginx/cert
然后修改刚才的Nginx配置文件,添加HTTPS监听:
nginx复制server {
listen 443 ssl http2;
server_name yourdomain.com www.yourdomain.com;
ssl_certificate /etc/nginx/cert/yourdomain_bundle.crt;
ssl_certificate_key /etc/nginx/cert/yourdomain.key;
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers HIGH:!aNULL:!MD5;
location / {
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header Host $host;
proxy_pass http://127.0.0.1:2368;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
}
client_max_body_size 50m;
}
server {
listen 80;
server_name yourdomain.com www.yourdomain.com;
return 301 https://$host$request_uri;
}
注意我把80端口的请求直接301跳转到HTTPS,这是通用做法,可以避免用户输入域名不带https时访问到明文站点。
改完配置后同样执行nginx -t验证语法,然后systemctl reload nginx。此时打开网站,浏览器地址栏应该出现小锁图标,HTTPS配置宣告完成。
Ghost不会自动感知HTTPS,所以需要告诉Ghost当前访问协议是https。执行:
bash复制cd /var/www/ghost
ghost config url https://yourdomain.com
ghost restart
这一步很重要,否则博客页面里生成的资源链接还是http开头,浏览器会拦截混合内容,导致图片和样式加载不出来。
4.2 备份策略:数据库和文件分开处理
博客上线后最重要的就是数据安全。Ghost的数据分为两部分:一部分是MySQL里的文章、设置、用户等结构化数据,另一部分是/var/www/ghost/content目录下的图片、主题、日志等文件。两部分的备份方式不同。
Ghost CLI自带数据库备份功能,可以在命令行手动导出:
bash复制cd /var/www/ghost
ghost backup
它会自动生成一个zip文件,包含Ghost配置和数据库导出文件。但手动备份的问题是你可能忘记执行,所以最稳妥的做法是写一个定时任务,每天自动备份。
创建一个备份脚本:
bash复制mkdir -p /var/backups/ghost
vim /root/backup-ghost.sh
写入内容:
bash复制#!/bin/bash
DATE=$(date +"%Y%m%d%H%M")
cd /var/www/ghost
ghost backup /var/backups/ghost/ghost-$DATE.zip
tar -czf /var/backups/ghost/content-$DATE.tar.gz /var/www/ghost/content
find /var/backups/ghost -type f -mtime +7 -delete
然后给脚本加执行权限,并编辑crontab:
bash复制chmod +x /root/backup-ghost.sh
crontab -e
添加一行:
code复制0 3 * * * /root/backup-ghost.sh
这个定时任务会在每天凌晨3点执行备份,同时只保留最近7天的备份文件,避免磁盘被备份文件占满。
注意ghost backup命令需要在/var/www/ghost目录下用ghost系统用户执行,如果你直接用root执行会报错。可以在脚本开头加su - ghost -c "cd /var/www/ghost && ghost backup ...",或者用sudo -u ghost来执行。另外云端备份很重要,建议定期把备份下载到本地,或者再同步一份到腾讯云COS,防止服务器本身出现故障导致数据全部丢失。
4.3 基础安全加固与性能优化
博客上线后经常被扫描是常态,多做几步加固能减少很多不必要的麻烦。
首先是SSH安全。最简单有效的一招是修改默认端口,虽然不能完全防止扫描,但能把大量的自动扫描流量过滤掉。修改/etc/ssh/sshd_config中的Port字段,改成比如2299这种非默认端口,然后重启sshd。注意改之前务必在安全组里放行新端口,否则你可能把自己锁在门外。另外一个建议是禁用root密码登录,改成用密钥登录。这个稍微复杂一些,但收益很大。
然后是服务器层面的防火墙。Ubuntu默认有ufw,可以启用它,只放行必要端口:
bash复制ufw default deny incoming
ufw allow 2299/tcp
ufw allow 80/tcp
ufw allow 443/tcp
ufw enable
注意如果改了SSH端口,这里放行的也要同步改。
性能优化方面,Ghost本身跑起来很轻,但如果你的服务器内存只有2GB,MySQL会占掉不小比例。可以调整一下MySQL的内存池,编辑/etc/mysql/mysql.conf.d/mysqld.cnf,在[mysqld]下增加:
ini复制performance_schema = OFF
innodb_buffer_pool_size = 256M
performance_schema用来做性能监控,但对一个博客来说意义不大,关掉能省出不少内存。innodb_buffer_pool_size是MySQL的缓存池,256M对Ghost这个数据量来说足够了,不需要保持默认值。
改完重启MySQL:
bash复制systemctl restart mysql
你可以用free -h看一下内存变化,通常能省出200-400MB内存,对2GB小鸡来说提升非常明显。
还有一个小技巧是给图片做压缩。Ghost默认支持在后台直接上传图片,但它不会帮你自动压缩。如果文章里的原图是几MB的照片,访客打开页面的速度会明显下降。我习惯在上传前用工具把图片压缩到100KB-500KB之间,既保证清晰度,又不会拖慢加载速度。这个习惯比任何缓存优化都有效。
5. 新手最容易踩的坑:常见问题排查
5.1 安装过程中报错对照表
我把自己遇到过以及和朋友们交流时收集到的典型报错整理一下,方便你对症下药。
| 报错信息 | 原因 | 解决方式 |
|---|---|---|
| EACCES permission denied | 安装目录权限不足 | 确保/var/www/ghost目录的所有者是当前用户,执行chown |
| MySQL authentication plugin error | MySQL 8认证插件不兼容 | 执行ALTER USER修改认证插件为mysql_native_password |
| Node.js version not supported | Node版本太老或太新 | 用nvm切换到Node 18或20的LTS版本 |
| The command "ghost" could not be found | ghost-cli没有全局安装或路径没配置 | 重装ghost-cli,执行npm install ghost-cli@latest -g |
| Port 2368 already in use | 之前安装过Ghost或端口被占用 | 执行lsof -i:2368查看占用进程,处理后再重试 |
| nginx: configuration test failed | Nginx配置文件语法错误 | 执行nginx -t查看具体错误行,逐一修正 |
排障的基本思路是:先看错误信息,再查日志。Ghost的运行日志在/var/www/ghost/content/logs/目录下,里面有ghost.log和GhostError.log,遇到问题先看这两个文件,大部分线索都能找到。Nginx日志在/var/log/nginx/下,HTTP 502这类问题要看error.log才能定位是超时还是后端挂了。
5.2 网站502 Bad Gateway
502错误在Ghost部署里非常常见,基本都指向Nginx连不上后端应用。可能的原因有几个:
第一,Ghost服务没有启动。执行ghost status看一下状态,如果显示not running,执行ghost start启动。更常见的情况是Ghost服务启动失败,你可能在ghost config改了URL后忘记ghost restart,配置更新没有生效,服务其实处于不健康状态。
第二,端口不匹配。Nginx配置里proxy_pass指向的是2368端口,但Ghost实际监听的可能不是这个端口。用ss -lntp查一下服务监听状态,确认2368有没有进程在监听。
第三,目录权限或用户不对。Ghost是通过systemd管理的,如果你手动用root执行ghost命令改变了文件权限,可能会导致Ghost服务启动时没有写权限。
排查顺序建议:先curl http://127.0.0.1:2368/ 看本机是否能访问到Ghost页面,如果能,问题一定在Nginx侧;如果不能,问题在Ghost侧。这个二分法能帮你快速缩小范围。
5.3 Ghost后台登录不了或者无限重定向
后台登录问题很多时候是URL配置不对。Ghost对URL的配置非常敏感,如果config里写的是http,但实际你通过https访问,它会产生一个重定向循环,表现形式就是一直在登录页面打转,或者登录成功后跳转回首页没反应。
解决方法就是回到4.1节说的,确保配置URL和实际访问协议一致:
bash复制cd /var/www/ghost
ghost config url https://yourdomain.com
ghost restart
另外如果你用的是Ghost 5.x,记得后台管理员账号的邮箱要和你在安装时填的一致,如果忘记密码,可以通过CLI重置:
bash复制ghost reset-password --email 你的邮箱
5.4 上传图片失败或者文件大小受限
上传图片失败最常见的原因就是Nginx的client_max_body_size限制。默认配置下Nginx限制请求体最大1MB,超过就会返回413错误。前面我已经在你的Nginx配置里加了client_max_body_size 50m,一般情况下足够。如果你传比较大的视频或者打包文件,可以再调大,但建议不要超过100m,毕竟Ghost不是用来存文件的,大文件上传会导致PHP进程(这里是Node进程)长时间占用连接,影响其他用户访问。
另外一个容易被忽略的点是磁盘空间。ghost backup会生成备份文件,如果你没有定期清理,磁盘空间耗尽后Ghost会进入只读状态,表现为后台能登录但无法写文件、上传图片失败。用df -h检查一下磁盘使用率,发现超过80%就要赶紧清理备份和日志了。
让我印象很深的一次排障:用户说博客突然无法登录,f12看请求全部超时,我登进服务器df -h一看,磁盘使用率100%,/var/www/ghost/content/logs/目录下有个几个G的日志文件,是Nginx的access_log没做轮转积累出来的。所以有两点建议:一是日志要开定时轮转,二是生产环境尽量不记录access_log,或者设置为按天切割,并设置保留天数。
5.5 腾讯云CVM的网络安全组规则改了不生效
这个问题其实很多教程没说清楚。腾讯云的安全组规则是“白名单+优先级”机制,只要有一条规则允许了某个端口,其他默认拒绝规则就不会拦截它。但如果你在控制台修改了安全组规则,某些情况下连接不会立即断开,而是在新连接建立时才生效,所以如果你改完安全组规则的几分钟内仍然访问不了,不是系统没生效,而是浏览器缓存了旧的连接状态。
确认安全组是否生效的办法:换一个浏览器或者用手机流量访问试试,如果能打开,说明是本地缓存问题,清一下浏览器缓存就好了。
另外注意安全组是有方向的,入站规则控制外部到服务器的流量,出站规则控制服务器到外部的流量。一般我们只需要关注入站规则。出站默认是全部放行的,不用改。
最后的个人体会
Ghost这套东西,部署本身不算太难,真正难的是理解它背后的几个关键逻辑:Node.js进程怎么被管理、Nginx怎么转发请求、数据库和应用是什么关系。如果你搞懂了这三件事,那么不仅在腾讯云CVM上能装好Ghost,换到任何一台VPS、任何一家云厂商,都只是命令稍微变一变的问题。
我在实际部署中还发现,Ghost的很多问题不是装不上,而是装完之后的细节没有处理好。URL的协议一致性、安全组的端口控制、备份是否真实可用、日志有没有轮转,这些细节点决定了你的博客能跑多久不出问题。
所以我的建议是:按着这篇文章的步骤走完一遍之后,不要着急写文章,先把HTTPS、备份、内存优化这几件事做完,再花一天时间观察一下服务器的CPU、内存、磁盘变化,做到心中有数。接下来再开始写内容就不迟了。
如果你在搭建过程中遇到这篇文章没覆盖到的问题,可以在评论区把报错信息发出来,我会尽我所能帮你看看。最后也提醒一下,腾讯云的工单系统对服务器底层问题的响应还是比较快的,如果是网络不通、安全组规则异常这类平台级问题,直接提工单通常比自己在网上翻攻略更快。
