本文详细地讲述了如何从零到一在阿里云服务器上搭建你的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过来;还有主题也要一并复制过来
参考:
PS:自己纯手动打造了一款新的主题,可以访问我的 博客 预览,接下来会分享一系列主题制作的教程,喜欢的同学可以关注一下。
先透露一下,主要从博客的设计、页面结构、工程化构建和一些插件的使用等方面入手,保证小白看完后能够动手打造一款属于自己的主题。