Upd 2018-12-26: 这篇流程仅针对ghost v0.x,新版ghost可以直接用官方推荐的工具ghost-cli来完成安装,我这几天也将博客升级成了ghost v2.x。

需要注意的是,ghost官方的安装教程是基于ubuntu的。如果你像我一样在centos7上安装ghost,数据库最好不要用yum中默认的mysql开源版本mariaDB,否则可能会出现各种神乎其神的bug。推荐使用官方源安装mysql,或者改用sqlite3。


连续搞了几个晚上 (肝要废了),今天终于弄好了Ghost Blog+域名+全局SSL (好菜啊)。那第一篇blog就来说说搭建流程咯。

准备服务器

首先你需要买个服务器,国外的话可以考虑Vultr或者DigitalOcean,这两个有5刀/月的服务器卖;国内的不是很了解,但要注意若服务器在国内,建网站是需要去备案的。我用的是Vultr的5美元服务器(CPU*1 + 1G内存 + 1T流量 + 25G SSD),系统是CentOS 7。Ghost安装步骤基本参考这篇文章

第一次进入系统后建议先修改ssh登陆端口。打开ssh的配置文件:

vi /etc/ssh/sshd_config

找到# port 22这一行,把前面的#号注释删掉,同时再添加一行:

port xx

xx是你想要用的新的端口号。
之后重启sshd服务:

systemctl restart sshd.service

接下来在防火墙开放端口并使之生效:

firewall-cmd --permanent --add-port=xx/tcp
firewall-cmd --reload

xx是你的端口号。然后退出后重新指定端口登陆:

ssh -p xx [email protected]

如果设置正确那么此时应该就可以登陆上去了。如果无法登陆的话那就再从22端口登陆,检查设置是否正确。

最后我们要关闭22端口。重新打开/etc/ssh/sshd_config,把port 22那一行注释掉并重启sshd就可以了。

安装Ghost

首先更新软件包信息,然后安装unzip,npm和nginx:

sudo yum update -y
sudo yum install unzip -y
sudo yum install nginx -y
sudo yum install npm -y

之后下载最新版Ghost:

wget https://ghost.org/zip/ghost-latest.zip

下载好后将其解压到/var/www/ghost/目录下:

sudo mkdir /var/www
sudo unzip -d /var/www/ghost ghost-latest.zip

切换到/var/www/ghost/目录并安装Ghost:

cd /var/www/ghost/
sudo npm install --production

接下来开始配置Ghost,它的配置文件为/var/www/ghost/config.js,但这个文件一开始是不存在的,所以我们要将同一目录下的模版文件复制过去:

sudo cp config.example.js config.js

打开config.js,找到production部分,将url修改成你服务器的IP地址或域名,例如:url: 'xxx.xxx.xxx.xxx';,同时记下server处的内网地址和端口,默认应该是127.0.0.1:2368。当你的Ghost运行时,内网用户将通过这个地址访问Ghost。

但是现在是无法从外网访问Ghost的,所以我们接下来要配置Nginx内网转发,使得Nginx把来自80端口的http请求转发到内网地址127.0.0.1:2368

配置Nginx实现内网转发

刚刚的这些操作都是在/var/www/ghost下进行的,接下来我们将配置nginx内网转发。切换目录到/etc/nginx

cd /etc/nginx

打开Nginx的配置文件nginx.conf

vi nginx.conf

找到监听80端口(写着listen 80)的server段,将这个server段修改成:

server {
	listen 80;
	server_name your_domain_or_ip_address;

	access_log /var/log/nginx/nginx.vhost.access.log;
	error_log /var/log/nginx/nginx.vhost.error.log;

	location / {
		proxy_pass http://127.0.0.1:2368;
		proxy_set_header Host $http_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;
	}
}

其中,your_domain_or_ip_address要改成你自己的域名或IP地址;proxy_pass填的就是Ghost的内网地址。

接下来重启Nginx:

sudo service nginx restart

这时再切换到/var/www/ghost目录来启动Ghost:

sudo npm start --production

现在在浏览器中输入你的IP地址并访问,就可看到你的博客了。

让Ghost以非root权限在后台运行

让Ghost以root权限运行是非常不安全的,因为Ghost一旦被人攻破,那么攻击者就很容易获得root权限。因此我们要单独开一个权限较低的用户来运行Ghost。

添加一个名字叫做ghost的用户,并让它成为Ghost所在目录的所有者:

sudo adduser --shell /bin/bash ghost
sudo chown -R ghost:ghost /var/www/ghost/

接下来令Ghost成为一个系统服务。添加配置文件:

sudo vi /etc/systemd/system/ghost.service

在这个配置文件里写入这些东西:

[Unit]
Description=Ghost
After=network.target

[Service]
Type=simple

WorkingDirectory=/var/www/ghost
User=ghost
Group=ghost

ExecStart=/usr/bin/npm start --production
ExecStop=/usr/bin/npm stop --production
Restart=always
SyslogIdentifier=Ghost

[Install]
WantedBy=multi-user.target

保存配置文件并使其生效:

sudo systemctl enable ghost.service
sudo sytemctl start ghost.service

现在访问http://your_domain_or_ip_address就可以看到你的博客了。若要停止Ghost只需输入命令:

sudo systemctl stop ghost.service

重启Ghost只需输入:

sudo systemctl restart ghost.service

简单管理Ghost

建立好Ghost的第一件事就是创建后台用户。访问:

http://your_domain_or_ip_address/ghost/

初次登陆要创建新管理员,按照它的提示操作就可以了。注意如果忘记了密码的话,它是可以邮箱找回密码的,但这个功能需要自行配置,所以一个比较简单的方法是直接从后台操作数据库。这个网上有很多教程,这里就不说了。

Ghost的数据基本上都存在/var/www/ghost/content里面,所以备份博客时直接备份这个文件夹就可以了。

至此终于把Ghost肝完了,接下来还要肝域名和SSL (主要是在肝SSL)。过几天有空了再把第二篇补上。