首页
史上最详细的阿里云搭建Ghost教程

本文详细地讲述了如何从零到一在阿里云服务器上搭建你的Ghost博客。参考了之前的一些文章,过程大致一样,但是自己又仔细地理了一遍流程,相比而言,也更详细一些吧。实现环境为新购买的 阿里云服务器ECS

一. Linux 格式化和挂载数据盘

这部分直接参考阿里云的文档就可以了,写得十分详细,点击标题即可跳转。
如果不知道怎样用远程工具连接Linux实例,附上连接 Linux 实例教程

二. nginx安装

1. 升级一下所有软件包

yum -y update

2. 安装编译工具及库文件

yum -y install gcc gcc-c++ automake pcre pcre-devel zlib zlib-devel open openssl-devel

3. 通过rpm包管理器添加nginx:

rpm -Uvh http://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7.ngx.noarch.rpm

4. 安装nginx:

yum -y install nginx

5. 设置nginx服务器自动启动

systemctl enable nginx.service

6. 启动nginx并查看nginx服务状态:

systemctl start nginx.service
systemctl status nginx.service

到这里nginx安装完毕,之前有些文章介绍通过浏览器输入公网ip访问,可以看到nginx的欢迎页面。试了一下,发现打不开,需要进入阿里云控制台添加安全组规则,允许通过80端口访问。如果是https,则是443端口

三. 添加安全组规则

允许公网通过 HTTP、HTTPS 等服务访问实例

  • 进入阿里云控制台,点击侧边栏的安全组
    image_1bmtrsk9f1qs51ctg1n6or5df8o9.png-30.2kB
  • 点击配置规则,新增一个规则
    QQ图片20170807161318.png-10.6kB
  • 填写内容并加入到实例
    image_1bmeol6e292uuo61k821gp1ngs9.png-13kB
  • 再次通过浏览器访问你的公网ip就可以出现nginx的欢迎页面了

四. 安装nvm

Linux环境下使用nvm来管理node.js的版本

curl -o- https://raw.githubusercontent.com/creationix/nvm/v0.33.2/install.sh | bash
source ~/.bashrc

五. 通过nvm安装node.js

  • 安装ghost所需版本,之前本地用的是4.2.0:nvm install 4.2.0
  • 查看已安装版本:nvm ls
  • 切换至ghost所需版本4.2.0:nvm use v4.2.0
  • 设置默认版本:nvm alias default v4.2.0

说明一下,如果你的系统主要就玩Ghost的话,最好将默认版本设置成支持Ghost的,避免有时候忘了版本做一些无用的操作

下面是一些nvm常用命令:

nvm install stable #安装最新稳定版 node 
nvm install 4.2.0 #安装 4.2.2 版本 
nvm list-remote #列出Node.js的所有版本
nvm ls #查看已安装版本
nvm use v4.2.0 #切换至ghost所需版本4.2.0
nvm alias default v4.2.0 #设置默认版本
nvm help #命令帮助

六. 安装Ghost

  • 新建一个目录存放Ghost
cd /data
mkdir ghost
  • 下载Ghost
    我下载的是完整中文版的:wget http://dl.ghostchina.com/Ghost-0.7.4-zh-full.zip

  • 解压:unzip Ghost-0.7.4-zh-full.zip

  • 从示例配置文件复制并新建 Ghost 配置文件 config.js:cp config.example.js config.js

  • 将production里的url修改为你的域名,如果需要用其他环境,一并修改

config = {
    // ### Production
    // When running Ghost in the wild, use the production environment.
    // Configure your URL and mail settings here
    production: {
        url: 'http://yourdomain.com',   //替换成你的域名,如果没有域名,先用公网ip
        mail: {},
  • 进入Ghost主目录,执行npm start,因为我下载的是完整版的,所以不需要npm install --production,如果下载的不是完整版的,需先安装依赖,再启动

七. 配置nginx站点

  • 进入nginx配置目录,一般都在/etc/nginx里,如果不在这里,可以用whereis nginx命令查找一下
  • 新建Ghost博客的nginx配置文件:
    vi /etc/nginx/conf.d/ghost_blog.conf
  • 配置站点信息
server {
    listen 80;
    server_name yourdomain.com;  //替换成你的域名

    location / {
        proxy_set_header   X-Real-IP $remote_addr;
        proxy_set_header   Host      $http_host;
        proxy_pass         http://127.0.0.1:2368;
    }
}
  • 修改默认的配置文件default.conf为default.conf.bak,使Nginx只应用ghost.conf:
    mv default.conf default.conf.bak
  • 重新加载nginx配置:/usr/sbin/nginx -s reload
  • 不出意外的话,通过浏览器访问你的域名或公网ip,应该能看到Ghost的首页了
  • 如果不成功,重启一下nginx:systemctl restart nginx.service

到这里Ghost博客已经可以跑起来了,但是还没有结束。如果你关掉远程连接的客户端,再次访问你的博客,发现已经挂了,因为node命令是无法作为守护进程在后台执行的。

八. 安装forever

forever是一个简单的命令式nodejs的守护进程,能够启动,停止,重启App应用。forever完全基于命令行操作,在forever进程之下,创建node的子进程,通过monitor监控node子进程的运行情况,一旦文件更新,或者进程挂掉,forever会自动重启node服务器,确保应用正常运行。

  • 安装:npm install forever -g
  • 用法
forever start test.js
forever stop test.js
forever restart test.js
forever list

九. 通过forever启动 Ghost

//进入ghost主目录
cd /data/ghost
//设置环境变量为production
export NODE_ENV=production 
//可以打印一下环境,确保是production
echo $NODE_ENV
//通过forever启动ghost
forever start index.js  

这样ghost博客可以作为一个守护进程一直在后台执行,关掉远程连接的客户端,还是可以访问

十. 安装mysql

1. 下载mysql的repo源:

wget https://dev.mysql.com/get/mysql57-community-release-el7-11.noarch.rpm

2. 安装mysql57-community-release-el7-11.noarch.rpm包

sudo rpm -Uvh mysql57-community-release-el7-11.noarch.rpm

3. 安装mysql

  • yum repolist all | grep mysql,会列出所有的版本
    image_1bmj8qqelsnl16bu1jhirtl1v7d9.png-57.7kB

  • 查看可安装的版本
    yum repolist enabled | grep mysql

  • 开始安装mysql
    sudo yum install mysql-community-server
    期间会让你确认,按y就行了

4.启动mysql服务

sudo service mysqld start
//For EL7-based platforms, this is the preferred command:
sudo systemctl start mysqld.service

sudo service mysqld status
//For EL7-based platforms, this is the preferred command:
sudo systemctl status mysqld.service

5. 修改root密码

  • sudo grep 'temporary password' /var/log/mysqld.log 可查看初始密码
  • mysql -uroot -p 用初始密码登录root用户
  • ALTER USER 'root'@'localhost' IDENTIFIED BY '新的密码';
    修改后用新的密码登录试试

6. 加强 MySQL 安全设置

输入 mysql_secure_installation,输入后会执行一系列安全设置

You already have a root password set, so you can safely answer 'n'.
//是否修改 root 账户的密码?前面设置过 root 账户的密码了,如果不打算修改密码的话,输入 'n'
Remove anonymous users? [Y/n] y  
//是否删除匿名用户?
Disallow root login remotely? [Y/n] y  
//是否禁止 root 账户远程登录?
Remove test database and access to it? [Y/n] y  
//是否删除 MySQL 默认创建的 test 数据库,并删除所有对 test 数据库的权限设置?
Reload privilege tables now? [Y/n] y  
//是否重新加载权限表?

7. 修改mysql默认字符集为utf8mb4

解释一下,为什么不是utf8,而是utf8mb4。因为现在手机端可以添加一些emoji表情符,为了支持emoji表情符,须将字符集设置成utf8mb4,它是utf8的超集

  • 查看mysql默认字符集
    SHOW VARIABLES WHERE Variable_name LIKE 'character\_set\_%' OR Variable_name LIKE 'collation%';
  • 修改my.cnf
    vi /etc/my.cnf,增加下面内容
[mysqld]
character-set-client-handshake = FALSE
character-set-server=utf8mb4
collation-server=utf8mb4_general_ci
init_connect='SET NAMES utf8mb4'

[client]
default-character-set=utf8mb4

[mysql]
default-character-set = utf8mb4

  • 重启mysql
    sudo service mysqld restart
  • 查看结果
    进入mysql执行
    SHOW VARIABLES WHERE Variable_name LIKE 'character\_set\_%' OR Variable_name LIKE 'collation%';
    image_1bmlrlbruv8a1ct04961stu1um89.png-20.1kB

十一. 新建一个ghost DB

CREATE SCHEMA `ghost` DEFAULT CHARACTER SET utf8mb4 ;

十二. 配置ghost的DB为mysql

Ghost默认使用SQLite数据库,以文件的形式存放在content/data/目录里,如果你想将db配置为mysql,修改一下配置即可

config = {
    // ### Production
    // When running Ghost in the wild, use the production environment.
    // Configure your URL and mail settings here
    production: {
        url: 'http://yourdomain.com',
        mail: {},
        /*注释掉sqlite的配置*/
      /* database: {
            client: 'sqlite3',
            connection: {
                filename: path.join(__dirname, '/content/data/ghost.db')
            },
            debug: false
        },*/

        // 配置MySQL 数据库
        database: {
            client: 'mysql',
            connection: {
                host     : '127.0.0.1',
                user     : 'root',
                password : 'yourpassword',
                database : 'ghost',
                charset  : 'utf8mb4'
            },
            debug: false
        },

配置好后,重启ghost,进入db可以看到ghost库里面自动建好了所有的表
image_1bmmd3h2s12o217qfukt3tocmb9.png-16.3kB

十三. 导入之前的数据

到这里所有的工作都完成了,但是如果像我一样服务器之前在别的地方,需要将以前的数据重新导入

  • 登录之前的后台管理,点击实验功能里的导出按钮
    image_1bmmdfet6141f1lmv1ev91td81u2fm.png-53.5kB
  • 登录新的ghost博客系统,创建一个临时账号,进入实验室功能,选择导入

导入时会导入以前的用户信息,这个临时账号数据会被覆盖,这里要注意一下;还有导入的只是数据,图片是没有的,如果你之前使用云存储来管理图片那么就ok了,否则还要将图片都copy过来;还有主题也要一并复制过来

image_1bmmdpa7kr9a1fes1mkfvgq1jdq13.png-13.2kB


参考:

  1. Linux目录结构详解
  2. linux 通过nvm安装node
  3. Linux 守护进程的启动方法
  4. 在Linux上用forever实现Node.js项目自启动
  5. CentOs7.x安装Mysql的详细教程
  6. Nodejs服务器管理模块forever