我是如何搭建 Ghost 博客系统

2018-05-03 21:31:00

前言

写博客,我喜欢

  • 简洁、轻便的博客系统
  • 用数据库做文章储存方式
  • 专注于文字,支持Markdown编辑

在尝试了WordPress、hexo博客系统之后,Ghost让我眼前一亮。

搭建Ghost博客,主要实现了我以下功能:

  • NodeJs驱动,Mysql保存数据,Nginx反向代理
  • 实现Https安全访问
  • 百度统计 做访问量统计
  • 畅言 做博文评论系统

搭建环境

  • 阿里云学生主机
  • Linux系统:Ubuntu 16.04
  • SSL证书是阿里云的免费CA证书

安装Ghost博客系统所需的系统环境

安装Nginx

sudo apt-get install nginx

安装Node,Npm

sudo apt-get install nodejs

sudo apt-get install npm

* 安装Nvm

  • nvm用于控制node版本,因为下文运行ghost系统时,可能出现提醒node版本太高/低,nvm能自由切换版本
  • nvm切换版本操作具体请看文末的参考链接
  • 如果你系统没有安装git的话,请先安装git:sudo apt-get install git
  • wget方式安装nvm:wget -qO- https://raw.githubusercontent.com/creationix/nvm/v0.33.1/install.sh | bash
  • 可能出现依旧提示找不到nvm命令,那么请使用source命令:source ~/.bashrc

安装mysql

  • sudo apt-get update
  • sudo apt-get install mysql-server
  • sudo mysql_secure_installation
  • 安装时注意输入两次一致密码

安装PM2

  • PM2是npm内用于挂载nodejs程序进程的工具
  • 安装:npm install pm2 -g

安装Ghost

  • 我下载的版本是Ghost v0.7.4 full (zh),如果需要更新版本,请打开下载 Ghost,然后更换下方wget的下载地址
  • 进入Ubuntu:/vaw/www/目录下
  • wget方式安装:wget http://dl.ghostchina.com/Ghost-0.7.4-zh-full.zip ghost.zip
  • unzip解压:unzip ghost.zip -d ghost
  • 安装依赖包:npm install

配置Ghost博客系统

Nginx配置

Nginx配置

  • 这里,我配置的是ssl/https的nginx反向代理配置
  • 所以,请先购买ssl证书,如果只想http访问,那下面的ghost配置文件也需修改url为http前缀,而不是https前缀
  • 配置文件如下:
server {  
    listen 80;
    server_name  hyperdai.com;
    return       301 https://hyperdai.com$request_uri;
}

server {  
    listen 443 ssl;
    server_name  hyperdai.com;
    ssl on;
    ssl_certificate /etc/ssl/private/hyperdai.com/XXX.pem;
    ssl_certificate_key /etc/ssl/private/hyperdai.com/XXX.key;
    ssl_protocols       TLSv1 TLSv1.1 TLSv1.2;
    ssl_ciphers         ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;

    access_log   /var/log/nginx/ghost.log;
    error_log    /var/log/nginx/ghost_error.log;

    location / {
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header HOST $http_host;
        proxy_set_header X-NginX-Proxy true;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;

        proxy_pass http://127.0.0.1:2368;
        proxy_redirect off;
    }
}

Mysql配置

# 设置mysql的编码
$ sudo vi /etc/mysql/my.cnf # 搜索到[mysqld] 插入collation-server = utf8_unicode_ci init-connect = 'SET NAMES utf8' character-set-server = utf8
$ service mysql restart # 重启生效
$ mysql -u root -p # 输入上面设置的密码
$ show variables like 'char%'
$ show variables like 'collation%' # 查看是否改成utf-8了否则之后数据库内存中文存放的是乱码

# 创建Ghost数据库
$ create database ghost # 这里把ghost换成你想换成的数据库名,建议和域名保持一致,方便以后维护。
$ create database ghostDev # 这个是Ghost启动有2种模式 一种开发模式 一种生产模式 这个是开发模式的数据库,如果不想那么麻烦,只用建立一个数据库即可。
$ create user 'ghost'@'localhost' identified by '123456' # 这里新建一个用户ghost密码为123456,当然我的密码肯定不是123456咯,换成你自己的啦 = =,同样也建议用户名,数据库名,服务名,组名,都和域名保持一致,这里是建立一个只有本地操作的用户,远程无法操作,安全策略。
$ grant all privileges on ghost.* to 'ghost'@'localhost'
$ grant all privileges on ghostDev.* to 'ghost'@'localhost' # 这里是赋予ghost这个本地用户所有对数据库ghost以及ghostDev的权限,当然这里你可以根据实际需要赋予权限。
$ FLUSH PRIVILEGES # 重新读取权限表中的数据到内存,不用重启mysql就可以让权限生效,好处可以防止修改错误后,没有余地再去反悔。

Ghost配置

  • 进入ghost文件夹,复制一份ghost配置文件:cp config.example.js config.js
  • 编辑配置文件vi config.js
production # 生产模式  
    production:{
       url: 'https://hyperdai.com',
       main:{},
       database:{
           client :'mysql',
           connection:{
               host:'127.0.0.1',
               user:'ghost',  # 数据库连接的用户
               password:'123456',
               database:'ghost',
               charset:'utf-8'
           }
       }
    }

运行Ghost博客系统

测试Ghost博客安装状态

  • 进入ghost根目录,输入命令:npm start --production
  • 运行成功后,在浏览器输入你的网址
  • 效果如图,即博客环境搭建正确 Imgur

进入ghost后台管理界面

  • 后台管理网址,在浏览器输入:url/ghost,url为你的网址
  • 设置账户之后,进入后台管理界面,如图: Imgur

搭建最后一步,挂载Ghost博客服务

  • 在服务器root用户下
  • 这时候要用上我们之前的pm2工具了,后台挂载我们的服务
  • 输入命令:NODE_ENV=production pm2 start index.js --name "ghost"
  • 开机启动:
// 在运行上述命令后,如果想开机启动,可再基于之上再如下操作
pm2 save  
// 查看这个文件是否已经有保存到数据
more ~/.pm2/dump.pm2  
pm2 startup  
pm2 save  
  • 效果如图: Imgur

设计自己的风格

  • 我使用的是skywalker风格,并自己修改设计
  • 效果如图 Imgur Imgur

参考

基于Coding+WebHook+PHP脚本 实现web项目版本自动迭代部署

前言 测试系统:ubantu16.04、window10 WebHook平台:coding.net 需要的系统环境:nginx,php7,git “了解一下” ①. git pull 了解一下 ②. Linux的SSH 了解一下 ③. Git的SSH公钥 了解一下 一般自动部署,Git不用https,而是改为ssh。 因为自动部署是自动输入账号密码,自动完成部署方案 如果一定要用https,请如下操作,(即记住用户名和密码) 打开当前项目git配置文件‘config’ 编辑[remote "origin"]这一项里的url url = https://yourname:password@git.coding.net/yourusername/yourpro.git 要用到的 //部署用户公钥 ssh-keygen -t rsa -C