史上最详细的阿里云搭建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 等服务访问实例

  • 进入阿里云控制台,点击侧边栏的安全组


  • 点击配置规则,新增一个规则


  • 填写内容并加入到实例


  • 再次通过浏览器访问你的公网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,会列出所有的版本

  • 查看可安装的版本
    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%';

十一. 新建一个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库里面自动建好了所有的表


十三. 导入之前的数据

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

  • 登录之前的后台管理,点击实验功能里的导出按钮


  • 登录新的ghost博客系统,创建一个临时账号,进入实验室功能,选择导入

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


参考:

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

PS:自己纯手动打造了一款新的主题,可以访问我的 博客 预览,接下来会分享一系列主题制作的教程,喜欢的同学可以关注一下。

先透露一下,主要从博客的设计、页面结构、工程化构建和一些插件的使用等方面入手,保证小白看完后能够动手打造一款属于自己的主题。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,732评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,496评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,264评论 0 338
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,807评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,806评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,675评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,029评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,683评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 41,704评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,666评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,773评论 1 332
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,413评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,016评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,978评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,204评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,083评论 2 350
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,503评论 2 343

推荐阅读更多精彩内容

  • CentOS 6 系统安装Ghost博客平台详细教程 颜修门 4 个月前 虽然本教程测试环境为腾讯云 CentOS...
    Karl_阅读 692评论 0 1
  • 我站在窗前 展开双臂,迎抱阵阵凉风 这是个失意的夏天 没有爱情、没有激情 我独自眺望、 吮吸着叶子散发的阵阵清香 ...
    粲月阅读 191评论 0 0
  • (1) 我是老师的学生,亦是学生的老师。人的一生中,除去父母,曾经有一个人,最关心你的学习,最牵挂你的安危,最影响...
    Claire_阅读 849评论 0 0
  • 【原创】介绍儿童画 文/我心我愿秀 儿童画所需的材料非常简单,只要有纸笔应该就可以画。而且儿童画没有局限性,儿童画...
    我心我愿秀阅读 675评论 0 4
  • 在错误的方向停止前进,就是进步 我们在中国,在我们还未懂事之前我们对未来一片迷茫,在进入大学以前,不管你是什么性格...
    喵弟弟阅读 418评论 0 0