2016-12-11 · 技术

架设 Ghost VPS

今年一年没写 blog,有点偷懒。

在去年跟鸟哥还有小蜗老师一块儿玩的播客 ThreeCast 中,有一期是讲 blog 的,当时我刚把自己的 blog 从 Wordpress 迁移到了 Ghost,就在节目中说要写一篇如何架设 Ghost 的文章......转眼快两年过去了,这篇文章一直被我坑到现在。我之前搭建 Ghost 的服务器位于 US,由于众所周知的原因,经常无法访问,能访问时延迟也很大。在据传要新铺建 HK 至 US 的光缆建成之前,US 的 VPS 确实都不太适用于架设面向国内访问者的站点,所以,我决定把我的 Ghost blog 从 US 迁移到 HK,顺便升级一下 Ghost 源程序。
废话不多说,开始今天的正题,你会从这篇博文中了解到以下这些内容:

  1. 对 VPS 进行基本配置
  2. 安装 Ghost 所需要的环境
  3. Ghost 安装配置

需求:

  • VPS OS: ubuntu 14.04 x64
  • Nodejs version : 6.9.0
  • Ghost version : 0.11.3
  • 本地 OS: Linux / macOS / Linux in a virtual machine

注意,从2016年11月2号 release 的 0.11.3 版开始,Ghost 正式支持 Node v6 LTS 了
所以这里选用 Nodejs 6.9.0,而不是早期的 v4 系列版本。

阅读指引:

server$: 表示服务器终端
local$: 表示本机终端
冒号后才是需要键入的指令

VPS基本配置

登录服务器后,首先进行更新

server$: sudo apt-get update && sudo apt-get upgrade

安装基本组件

server$: sudo aptitude install build-essential zip git vim libssl-dev -y

创建一个新用户

server$: sudo adduser demo

加入 sudo

server$: sudo gpasswd -a demo sudo

在本机(Linux or Mac )生成一个 keygen

local$: ssh-keygen

一般生成的文件在本机用户账户的 .ssh 目录下

local$: cat ~/.ssh/id_rsa.pub

你会看到类似下面这大一串长度的字符串:

ssh-rsa ABCDABsadjklasdjklasjdlkasjdklasjkfldjdsjfdsfsdfsdf
sdfsdfdsfdsfdsfdsfsdfdsfdsfdsfdsfdsfdsfdsfdsfdsfdsfd
qweqweqwewqeqweqwewq bla@bla bla

复制它,回到服务器端
默认还是 root 登录,我们切换到新创建的 demo 用户

server$: su - demo
server$: mkdir .ssh
server$: chmod 700 .ssh
server$: vim .ssh/authorized_keys

把刚才复制的那一串公钥字符串粘贴到这里
保存退出

[ESC] ----- :wq ----- [ENTER]

紧接着

server$: chmod 600 .ssh/authorized_keys

回到 root 用户

server$: exit

配置 ssh

server$: vim /etc/ssh/sshd_config

找到 Port 22这一行

改成 Port 1103 或其它,修改 SSH 登录的端口号

找到 PermitRootLogin yes 这一行

改成 PermitRootLogin no

关闭 root 直接登录

保存退出

[ESC] ----- :wq ----- [ENTER]

配置基本的防火墙,开启 SSH 端口、http 、https、SMTP

server$: sudo ufw allow 1103/tcp (如果你修改成别的端口,记得替换这里的数字)
server$: sudo ufw allow 80/tcp 
server$: sudo ufw allow 443/tcp
server$: sudo ufw allow 25/tcp

完成规则添加后,可以检查一下是否有问题

server$: sudo ufw show added

确认无误后启用它

server$: sudo ufw enable

配置一下时区及时间

server$: sudo dpkg-reconfigure tzdata

在现实的配置页面中选择你的物理服务器所在的地区/时间

安装 NTP

server$: sudo apt-get install ntp -y

创建一个交换分区

注意:如果你的服务器是 SSD 硬盘,就不建议创建交换分区
一般交换分区设置为服务器物理内存的2倍

server$: sudo fallocate -l 2G /swapfile
server$: sudo chmod 600 /swapfile
server$: sudo mkswap /swapfile
server$: sudo swapon /swapfile

设置交换分区在每次服务器重启、启动时自动挂载

server$: sudo sh -c 'echo "/swapfile none swap sw 0 0" >> /etc/fstab'

重启一下 ssh

server$: service ssh restart

这时最好先不要退出这个登录,在本机新开一个终端,测试是否能够正常登录服务器

local$: ssh - p 1103 demo@xx.xx.xx.xx (你的服务器IP地址)

如果能直接登录,说明刚才设置的密钥及端口都生效了
如果不能登录,在还没退出的终端里及时排查错误,修改完后记得再次重启 ssh

使用 demo 登录后,切换到 root

server$: su - root

继续配置服务器,安装 Fail2Ban

server$: sudo apt-get install fail2ban -y

拷贝配置文件

server$: sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local

编辑

server$: sudo vim /etc/fail2ban/jail.local

[ssh]

把 port = ssh 改为 port = 1103

[ssh-ddos]

enabled = true
port = 1103

保存退出

[ESC] ----- :wq ----- [ENTER]

重启 Fail2ban

server$: sudo service fail2ban restart

安装 Ghost 需求环境

通过 NVM 安装管理 nodejs

server$: curl -o- https://raw.githubusercontent.com/creationix/nvm/v0.32.1/install.sh | bash
server$: source ~/.profile
server$: nvm ls-remote

安装6.9.0版本并设置为默认版本

server$: nvm install v6.9.0
server$: nvm use v6.9.0
server$: nvm alias default v6.9.0

安装完毕,这时可以输入 nvm 检查可以使用的命令

安装 Ghost

server$: sudo mkdir -p /var/www/
server$: cd /var/www/
server$: sudo wget https://ghost.org/zip/ghost-latest.zip
server$: sudo unzip -d ghost ghost-latest.zip
server$: cd ghost
server$: npm install --production

如果有报错,通过查看 error log 来排除

紧接着配置 Ghost

server$: sudo cp config.example.js config.js
server$: sudo vim config.js

把里面的 url: ''
改成你自己的 URL

使用以下命令创建 /etc/init.d/ghost 文件:

server$:  sudo curl https://raw.githubusercontent.com/TryGhost/Ghost-Config/master/init.d/ghost \
  -o /etc/init.d/ghost

server$: sudo useradd -r ghost -U

确保 Ghost 用户可以访问安装目录:

server$: sudo chown -R ghost:ghost /你的 Ghost 安装目录

使用以下命令给这个初始化脚本加上可执行权限:

server$: sudo chmod 755 /etc/init.d/ghost

使用 vim /etc/init.d/ghost 命令打开文件并检查以下内容:
将 GHOST_ROOT 变量的值更换为你的 Ghost 安装路径
检查 DAEMON 变量的值是否和 which node 的输出值相同
完成后,你可以使用以下命令来控制 ghost 的启动/停止/重启/状态

server$: sudo service ghost start
server$: sudo service ghost stop
server$: sudo service ghost restart
server$: sudo service ghost status

为了让 ghost 能在每次系统启动的时候同时启动,需要将刚刚创建的初始化脚本注册为启动项。

server$: sudo update-rc.d ghost defaults
server$: sudo update-rc.d ghost enable

安装 Nginx

server$: sudo apt-get install nginx -y
server$: sudo mv /etc/nginx/sites-available/default /etc/nginx/sites-available/ghost.conf
server$: sudo vim /etc/nginx/sites-available/ghost.conf

按照你的需求修改配置,注意,如果你需要像我一样使用SSL
请自行根据 SSL 签发商提供的文件进行配置,把证书密钥等放在 Nginx 推荐放到的位置上

配置完 nginx 的 conf 后,记得把该配置文件链接到 nginx 另外一个目录的配置里
否则 Nginx 配置不会生效。

server$: sudo ln -s /etc/nginx/sites-available/ghost.conf /etc/nginx/sites-enabled/ghost.conf

配置完成后,重启服务器

server$: sudo service nginx restart

在浏览器中尝试访问
http(s)://你的域名/ghost
即可对 ghost 应用进行初始化配置及创建

Enjoy :)

参考:

https://www.digitalocean.com/community/tutorials/initial-server-setup-with-ubuntu-14-04
https://www.digitalocean.com/community/tutorials/additional-recommended-steps-for-new-ubuntu-14-04-servers
https://gist.github.com/janikvonrotz/8542013
https://www.digitalocean.com/community/tutorials/how-to-create-a-blog-with-ghost-and-nginx-on-ubuntu-14-04
https://www.digitalocean.com/community/tutorials/how-to-create-an-ssl-certificate-on-nginx-for-ubuntu-14-04
http://docs.ghostchina.com/installation/deploy/
https://support.comodo.com/index.php?/Knowledgebase/Article/View/801/0/nginx-csr-generation-using-openssl
https://support.comodo.com/index.php?/Knowledgebase/Article/View/1091/0/certificate-installation--nginx

Comments powered by Disqus

Search Results: