搭建Ghost博客——Centos+腾讯云
Ghost 是一套基于 Node.js 构建的开源博客平台(Open source blogging platform),具有易用的书写界面和体验,博客内容默认采用 Markdown 语法书写,目标是取代臃肿的 Wordpress。]
环境
- 腾讯云
- CentOS 6.5_x64
- Node v0.10.40(官方建议版本)
- Nginx 1.80
- Mysql
- Ghost v0.7.4 full (zh)(中文汉化、支持七牛、又拍云、阿里云OSS存储)
步骤
首先使用Putty,winscp等工具连接到你的云服务器。
安装node
Ghost是基于Node.js构建的开源博客平台,所以我们首先搭建Node环境。
wget http://nodejs.org/dist/v0.10.40/node-v0.10.40.tar.gz
tar zxvf node-v0.10.40.tar.gz
cd node-v0.10.40
./configure
make && make install
如果在make过程中遇到Error 69make: *** [node] Error 2
yum install gcc-c++
yum install bzip2*
命令执行完毕之后,检测一下环境是否配置成功。
node -v
v0.10.40
如果显示以上信息,恭喜你,安装成功了~
安装Nginx
Nginx是一款轻量级的Web 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器。
首先在/etc/yum.repos.d/目录下创建一个源配置文件nginx.repo:
vi /etc/yum.repos.d/nginx.repo
写入以下内容:
[nginx]
name=nginx repo
baseurl=http://nginx.org/packages/centos/$releasever/$basearch/
gpgcheck=0
enabled=1
保存。(按i编辑,按Esc结束编辑,:x 保存修改并退出,:q! 强制退出,放弃修改) 继续执行以下指令:
yum install nginx -y # 安装Nginx
service nginx start # 启动Nginx
chkconfig nginx on # 设置开机启动Nginx
这样Nginx就安装成功了,在浏览器中输入你的VPS的IP就可以看到提示:“Welcome to Nginx!”
配置Nginx
安装好了nginx后,我们需要设置一个代理服务器让我们的博客可以使用域名访问。 在/etc/nginx/conf.d目录下创建一个配置文件ghost.conf:
vi /etc/nginx/conf.d/ghost.conf
写入以下内容:
server {
listen 80;
server_name example.com; #将 example.com 改为你的域名或ip。
location / {
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header Host $http_host;
proxy_pass http://127.0.0.1:2368;
}
}
保存退出,重启nginx:
service nginx restart
这样就大功告成啦~
安装Mysql
Ghost 默认使用 sqlite3 数据库,对于一般使用足够了,但是内容多的话,就会拖慢整个系统,也就影响页面打开速度了,不想使用Mysql的朋友可以跳过这步。
首先输入以下指令:
yum install mysql mysql-server # 安装Mysql
service mysqld start # 启动Mysql
chkconfig mysqld on # 设置开机启动Mysql
接着输入mysql_secure_installation
配置Mysql:
Set root password? [Y/n] # 设置root密码
anonymous users? [Y/n] # 删除匿名用户 y
Disallow root login remotely? [Y/n] # 禁止root用户远程登录 n
Remove test database and access to it? [Y/n] # 删除默认的 test 数据库 y
Reload privilege tables now? [Y/n] # 刷新授权表使修改生效 y
为了避免数据库存放的中文是乱码,我们还需要设置Mysql的编码:
vi /etc/my.cnf
写入以下内容:
[client]
default-character-set=utf8
[mysql]
default-character-set=utf8
[mysqld]
character-set-server=utf8
collation-server=utf8_general_ci
保存退出,重启Mysql:
service mysqld restart
最后我们需要新建一个数据库,用来存放博客的数据:
mysql -u root -p # 输入设置好的密码
create database ghost; # 创建ghost数据库
grant all privileges on ghost.* to 'ghost'@'%' identified by '123456'; # 新建一个用户ghost,密码为 123456,随意更改啦
flush privileges # 重新读取权限表中的数据到内存,不用重启mysql就可以让权限生效
这样数据库的准备工作就完成了
安装Ghost
做了这么多准备工作,终于要开始折腾我们的主角啦。 首先下载Ghost:
cd /var/www
wget http://dl.ghostchina.com/Ghost-0.7.4-zh-full.zip
unzip Ghost-0.7.4-zh-full.zip -d ghost
cd ghost
接着修改默认配置:
cp config.example.js config.js
vi config.js
Ghost有产品模式、开发模式和测试模式等多种运行模式,这里我们需要在配置文件中找到production模式:
# 生产模式
production: {
url: 'http://www.xmsec.cc', # 修改为你的域名或者IP,注意加上http://
mail: {},
database: {
client: 'mysql'
connection: {
host : '127.0.0.1',
user : 'ghost', # 数据库连接的用户
password : '123456', # 先前创建的密码
database : 'ghost', # 先前创建的数据库
charset : 'utf8'
},
server: {
host: '127.0.0.1',
port: '2368' # 若修改该端口记得在nginx中做相应改变
}
}
保存退出,接下来就到了见证奇迹的时刻啦,输入指令:
npm start --production
启动浏览器,输入之前配置的域名或者IP,我们就可以看到建立好的Ghost博客啦。 (Ctrl+C 中断掉开发者模式)
让Ghost保持运行
前面提到的启动 Ghost 使用 npm start --production 命令。这是一个在开发模式下启动和测试的不错的选择,但是通过这种命令行启动的方式有个缺点,即当你关闭终端窗口或者从 SSH 断开连接时,Ghost 就停止了。为了防止 Ghost 停止工作.
这里我们使用PM2让Ghost保持运行:
cd /var/www/ghost
npm install pm2 -g # 安装PM2
NODE_ENV=production pm2 start index.js --name "ghost"
pm2 startup centos
pm2 save
PS:
因为GFW的强大,在上一步直接使用npm安装依赖的时候可能出现无法安装的情况,这时候可以使用以下代码:
npm install -g cnpm -- registry=https://registry.npm.taobao.org
cnpm install pm2 -g
NODE_ENV=production pm2 start index.js --name "ghost"
pm2 startup centos
pm2 save
这样一来,我们的Ghost博客就可以保持运行啦,你可以使用以下指令来控制Ghost博客:
pm2 start/stop/restart ghost
配置OSS存储
以七牛云为例,创建密钥后
production: {
url: 'http://www.xmsec.cc',
mail: {
},
database: {
},
server: {
host: '127.0.0.1',
port: '2368'
},
//Storage.Now,we can support `qiniu`,`upyun`, `aliyun oss`, `aliyun ace-storage` and `local-file-store`
/* storage: {
provider: 'local-file-store'
}
*/
// or
http://www.ghostchina.com/qiniu-cdn-for-ghost/
storage: {
provider: 'qiniu',
bucketname: '输入仓库名',
ACCESS_KEY: '',//创建密钥的ACCESS KEY
SECRET_KEY: '',//创建密钥的SECRET KEY
root: '/image/',
prefix: 'http://*.bkt.clouddn.com'//输入仓库地址
}
配置主题及邮件
- 主题
在官方的主题库中寻找,上传或者ssh下git复制到theme目录下,重启ghost,在后台更换主题。
也可以在github或者官方论坛寻找主题。 - 邮件
参考http://docs.ghostchina.com/zh/mail/
Ghost 2.x 配置备忘
1.x 后支持自动化安装,可省略部分上述手动配置过程。
AMP WARNING 必需的结构化数据元素有误
AMP Structured Data errors for
publisher.logo
andarticle.image
通过谷歌测试可以发现 需要 填写“image”字段的值。
https://search.google.com/structured-data/testing-tool
之前提过的建议如下:
https://github.com/TryGhost/Ghost/issues/7558#issuecomment-392566856
in the file './versions/1.xx.x/core/server/helpers/ghost_head.js', in the def of the function function handleMetaData(metaData)
,i added this
if(!metaData.schema.hasOwnProperty('image')){
metaData.schema['image']={}
}
and it turned out to be
if (metaData.schema) {
if(!metaData.schema.hasOwnProperty('image')){
metaData.schema['image']={}
}
head.push('<script type="application/ld+json">\n' +
JSON.stringify(metaData.schema, null, ' ') +
'\n </script>\n');
}
Then passed the Google Accelerated Mobile Pages(AMP) Validation.
with version 3.x, the path is 3.4.0/core/frontend/helpers
zh-CN Date
在 2.x 版本,可以在后台直接设置语言了,下面的改动不再需要。
/ghost/core/server/helpers/date.js
// # Date Helper
// Usage: `{{date format="DD MM, YYYY"}}`, `{{date updated_at format="DD MM, YYYY"}}`
//
// Formats a date using moment-timezone.js. Formats published_at by default but will also take a date as a parameter
var proxy = require('./proxy'),
moment = require('moment-timezone'),
SafeString = proxy.SafeString;
moment.locale('zh-CN'); // 日期汉化
HTTPS nginx
ssl_certificate /path;
ssl_certificate_key /path;
ssl_session_cache shared:SSL:50m;
ssl_session_timeout 5m;
ssl_dhparam /etc/nginx/ssl/dhparam.pem;
ssl_prefer_server_ciphers on;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers "EECDH+ECDSA+AESGCM EECDH+aRSA+AESGCM EECDH+ECDSA+SHA384 EECDH+ECDSA+SHA256 EECDH+aRSA+SHA384 EECDH+aRSA+SHA256 EECDH+aRSA+RC4 EECDH EDH+aRSA !aNULL !eNULL !LOW !3DES !MD5 !EXP !PSK !SRP !DSS !RC4";
参考:
https://snowz.me/how-to-install-ghost/
xmsec