前言 && 一些交代
那么现在大家也看到了,这个博客经过我前两天的各种踩坑,到现在终于慢慢地算是有些样子了。能跑起来并且可以正常地访问,并且在今天又拥有了 https 的支持,可以说基本成形了。所以我就在这里把我搭建整个 CentOS + nginx + node.js + MariaDB + ghost.js 环境的方案分享一下。
前面一篇文章里面我也说过,由于这套环境的太新,现有的很多教程都有大大小小的坑,我自己也是根据这些文章东拼西凑加自己的各种探索弄出来的。这里也只是给大家提供一个思路,遇到具体问题大家还是要具体分析。不过你们现在能看到这个博客和这篇文章,以下几个教程作为领路人还是功不可没:
- Installing Ghost on Linux @ Ghost.org
- Centos7从零开始安装Ghost @ Pen’s Blog
- Centos7下安装Ghost博客系统 @ 云淡风轻
作为补充,各种环境我在这里也做个交代:
- 腾讯云服务器,单核 / 1G内存 / 20G系统盘 / 1M带宽
- CentOS 7.2 x86
- node.js 4.4.7 LTS(已更新至 6.9.4 LTS)
- nginx 1.10.1 Stable
- MariaDB 10.1.16 Stable
- Ghost 0.8.0(已更新至 0.11.3)
1 | # cat /proc/version |
防火墙?腾讯云自带安全组功能屏蔽端口,要防火墙做什么?
BTW,由于配环境的时候挺混乱的,也没有想到要做记录,所以这里的很多内容没有截图,都是以文字的形式描述的,还请各位看官老爷海涵。
作案动机 && 技术选型
当时想要一个云服务器纯粹是因为想自己写几个接口(比如通过服务器来中转不支持 jsonp
的 ajax
请求什么的),但是想想弄个服务器来就光做这一点事情觉得太亏,所以就有了搭这么一个博客的想法。虽然那些接口还没写出来,但我先把博客搭出来了。
既然下定决心要做这件事情,那么就可以开始做技术选型了。
熟悉我的人可能知道,我现在在长江大学党委宣传部下属的长大在线信息传媒(链接在外网可能无法访问)干活,咱们的主要工作是维护学校的新闻网,这个站的环境是 LAMP(即 Linux + Apache + MySQL + PHP )。虽然咱的头衔是 Web 前端组组长,但是无论是后台还是运维的事情我也懂一些,有时候还会给他们帮一下忙,所以 LAMP 的基本搭建和日常维护基本对我问题不大,以至于在进行技术选型的时候我差点就想直接弄个 LAMP + WordPress 算了。但是转念一想,人嘛还是要趁年轻多折腾,而且作为初出茅庐并且现在如日中天的 node.js ,作为一个 JavaScript 熟练工来说,要是不亲自体验一下这种新技术的话就可惜了,况且这个服务器本来就是作为一个游乐场而存在的,所以最后还是选择了 node.js 这个平台。
系统没啥好说的,CentOS,当服务器不知道比 Ubuntu 高到哪里去了。
再说反向代理,平时用得比较多的是 Apache , ngnix 仅仅是听说过而已。但是为了这个博客,我还是去仔细地查阅了资料,发现 nginx 似乎在性能方面表现更好,考虑到这个服务器本身配置并不高,于是选用了 nginx。
CentOS 7 把默认的数据库从 MySQL 换成了 MariaDB ,据说 MariaDB 是在 MySQL 被收购以后,其原作者担心 Oracle 使坏,然后开发的一个备用版本,现在也很好使,于是也就拿来用了。
node.js 下面比较成熟的博客平台貌似目前也就 Ghost 一家,也没啥好挑的。
开工 && 安装所需的包
第一步当然是买服务器,买域名和装系统啦,托腾讯爸爸的云+校园计划的福,服务器和域名一共只花了一块钱就全部搞定了,而且目前用着感觉也还不错。如果你有学信网的学生认证,不妨也买一台来玩玩,花一点抢红包就能抢回来的钱来弄这么一个高档玩具来玩(我还真的是用的微信零钱里的红包钱),岂不美哉?
系统弄好了,下一步当然就是连上 ssh ,把该装的什么 nginx 啊 node.js 啊 MariaDB 啊这些全都装好啦。那么问题来了……
Q: 说到给 CentOS 装包的话? \(°∀°)
A:
yum
哒哟 ~ (°∀°)/
没错,yum
是在 CentOS 里装包的最棒的选择,而且没有之一——完善的依赖管理,全自动的操作流程,方便的安装和卸载,简直是像我这样的懒癌患者的福音。于是我兴冲冲地在终端里敲入了yum install mariadb-server mariadb-client nodejs nginx
,然后,理所当然地,yum
会自动解析好所有的依赖,然后拿来一张列表,告诉我他马上要干什么,然后问我“Is that OK?(y/N)” 当我正准备点头,却发现有点不对劲——什么?居然拿 0.10.x 的 node.js 、 1.6.x 版的 nginx 和 10.x 的 MariaDB 就要给我装了?那我以后的 https 和 http/2 怎么办?es6 的支持怎么办?不行!坚决不行!但是,你们知道的,像我这样的懒人,能用工具是绝对不会靠自己的双手的,所以不到万不得已,我是绝对不会下源码回来手动编译的。那可如何是好?
好在各个软件的提供者都意识到了自带 yum 源版本更新慢的问题,并且很贴心地自建了 yum 源和指南供我们使用。由于之后这样的地址和指南针对不同系统有所不同,并且可能会频繁更新,我就不在这里一一细说了,感兴趣的同学可以去查阅下面的官方指南:
- MariaDB:Setting up MariaDB Repositories
- nginx:nginx: Linux packages
- node.js:Installing Node.js via package manager
配置服务
包都装好了,接下来当然是配置各种东西啦,首先是 MariaDB ,我这么懒的人肯定是用官方提供的设置向导 mysql_secure_installion
啦。首先当然是输入 root 用户的密码,新装好的数据库是不会有密码的,所以直接敲回车就可以了。然后接下来它会引导你做一些最基本的安全设置,比如问你要不要禁用匿名用户啦,要不要禁止 root 用户远程登录啦,要不要删除测试数据库啦等等。这些如果你没有特别需求的话(比如远程数据库需要允许 root 远程登录),一路 enter 下去就好,这里就不再多说。
接下来还要改一点东西,把数据库的默认编码改成我们常用的 “UTF_8” ,防止在日后的使用中出现麻烦。输入 vim /etc/my.cnf
来修改 MariaDB 的配置文件,在相应的字段下添加以下内容:
1 | [client] |
保存(:wq
)之后咱们先输入 systemctl restart mariadb
重启一下数据库,再来输入 mysql -u root -p
登录试试看:
1 | Enter password: |
输入密码之后看到这样的界面,说明我们已经登陆进了数据库,然后我们来看一下我们用两句查询来看一看我们的字符编码是否已经改好了,如下:
1 | MariaDB [(none)]> show variables like 'char%'; |
这样我们的字符编码就改好了,接下来我们来给我们的博客配备一个专用的数据库和用户:1
2
3
4
5
6
7
8MariaDB [(none)]> create database ghost;
...
MariaDB [(none)]> grant all privileges on ghost.* To 'ghost'@'localhost' identified by 'password';
...
MariaDB [(none)]> exit
Bye
数据库的配置就此完成,接下来是 nginx,输入 vim /etc/nginx/conf.d/default.conf
修改 nginx 配置文件,如下:
1 | server { |
然后输入 systemctl restart nginx
重启 nginx ,nginx 就配置完成了。
安装 ghost.js
接下来的事情就简单得多了。我们来安装 Ghost,这里我用的是英文原版:
1 | cd /usr/share/nginx/ |
接着来配置我们的博客,输入以下命令:
1 | cp config.example.js config.js |
编辑我们的配置文件,基本上只改动 production
对象就可以了,我自己的核心配置是这样:
1 | ... |
现在,执行这条命令1
npm run --produnction
然后用浏览器打开你的域名,如果你能看到一个类似于这样的页面(应该会有一篇类似 “Welcome” 的英文文章):
那么整个博客系统基本上可以宣告搭建成功了。不过这里我们还是会遇到一点问题,就是我们必须一直挂着这个命令在前台执行,如果结束掉这个命令的话,博客也就不再运行了。这显然是不行的。我们可以把我们的博客程序变成系统的一个服务。执行 vim /etc/systemd/system/ghost.service
生成一个配置文件:
1 | [Unit] |
接着就可以用 systemctl
把我们的博客程序当作服务来管理啦 ~
1 | systemctl enable ghost # 随系统启动而启动 |
用浏览器访问你的域名下的 /ghost
目录(本例是 www.peterwang1996.cn/ghost/
),开始你的独立博客之旅吧 ~
#EOF