CentOS6 32位安装Ghost

CentOS6 32位安装Ghost

为了换上传说中写作体验超级好的 Ghost,我下了狠心把 VPS
上的所有内容全部删除,把系统从 CentOS 5 升级到 CentOS
6,在各种教程和手册的指导下花费了一个下午的时间终于配置好了 Ghost。

一句话总结:能把 Ghost 在 VPS 上配置好的人都值得拿高薪,太麻烦了!

下面的内容包括了我这一下午折腾的所有操作,你可以根据自己的需要选择阅读。当然如果你也想从头开始安装
Ghost,可以按顺序阅读本文。

一、Ghost介绍

Ghost是一个开源、免费的博客平台,它基于Node.js构建,设计目标是简化在线发布博客的过程。
本文主要讲述怎样在CentOS
7上安装Ghost。

Ghost博客就不再介绍了,CentOS系统要安装Ghost只需要安装好node.js和Nginx。
1、 编译安装Node.js
先安装好需要的依赖工具gcc、gcc、make
yum install gcc gcc-c++ make -y
下载并解压缩Node.js源码包,官方地址:https://nodejs.org/en/download/
目前最高版本是 v4.4.2,版本若有更新修改即可
wget https://nodejs.org/dist/v4.4.2/node-v4.4.2.tar.gz && tar xzf node-v4.4.2.tar.gz
剩下当然就是编译安装了,整个过程大约十分钟时间
./configure && make && make install
以上集合成一条命令就是:
yum install gcc gcc-c++ make -y && wget https://nodejs.org/dist/v4.4.2/node-v4.4.2.tar.gz && tar xzf node-v4.4.2.tar.gz && cd node-v4.4.2 && ./configure && make && make install

基本信息

本次操作涉及以下内容:

  • 操作系统:CentOS6 32位(查看方式:cat /etc/*release*
  • node版本:0.10.26
  • Ghost版本:0.4.1
  • nginx版本:1.4.7
  • MySQL版本:5.5

操作步骤:

  1. 通过 yum 安装 node
  2. 通过 yum 安装 nginx
  3. 通过 yum 安装 MySQL*
  4. 下载 Ghost 源码
  5. 配置 MySQL
  6. 配置 nginx
  7. 配置 Ghost
  8. WordPress原有数据导入

*Ghost 支持 MySQL 或 SQLite3 数据库,为了日后扩展或迁移方便,我决定使用
MySQL。若你选择使用 SQLite3,可以跳过 MySQL 的相关步骤,同时在 Ghost 的
config.js 中使用自己的配置。

二、安装过程

2、安装Nginx最新版本
Nginx可以直接包安装,但默认的版本较老,需要先更新库,若其它Debian、Ubuntu也想安装最新的版本可参考这两篇:Debian
和 Ubuntu
官网的教程:http://nginx.org/en/linux\_packages.html
简单交待下:
创建一个nginx.repo文件在/etc/yum.repos.d/目录下,即/etc/yum.repos.d/nginx.repo,VIM或echo导入均可

这是我搭建好的Ghost博客

编译node

原本我的 VPS 上快乐的运行着 LNMP 环境,本以为再直接装上 node
即可,谁知道 yum 无法直接安装 node。

根据 node 官方的 wiki, CentOS 需要先安装 epel 的 yum repo 才能使用 yum
安装 node。

#更新 yum 的 repo list
rpm -Uvh download-i2.Fedoraproject.org/pub/epel/6/i386/epel-release-6-8.noarch.rpm  
#同时安装 node 和 npm
sudo yum install nodejs npm --enablerepo=epel  

安装完成后,分别使用node -vnpm -v 来确认 node 和 npm
以及功能安装成功。

其实是在写这篇博客的时候才发现可以直接通过 yum 装,我自己是直接编译的 node 源码……

1、首先确保所有的系统包为最新

# yum -y update

[nginx]
name=nginx repo
baseurl=http://nginx.org/packages/OS/OSRELEASE/$basearch/
gpgcheck=0
enabled=1

目前网络上对搭建Ghost的教程明显比较旧了,一个流程下来并不能成功,本人整理下这篇文章,让大家也能用上写作体验轻便快捷的Ghost博客。

安装nginx

安装 nginx 的步骤和 node 类似,更新源列表然后直接安装。

#下载 repo 列表
wget nginx.org/packages/centos/6/noarch/RPMS/nginx-release-centos-6-0.el6.ngx.noarch.rpm  
#通过 rpm 添加列表
rpm -ivh nginx-release-centos-6-0.el6.ngx.noarch.rpm  
#通过 yum 安装 nginx
yum install nginx  
#将 nginx 设置为开机启动(可选,推荐)
chkconfig nginx on  
#启动 nginx 服务
service nginx start  

下面是一些常用的 nginx 相关文件地址:

  • 主配置文件:/etc/nginx/nginx.conf
  • 默认主机配置文件:/etc/nginx/conf.d/default.conf
  • 默认日志目录:/var/log/nginx/

2、安装LAMP服务器

安装基本的LAMP环境是必须的,LAMP是指Linux、Apache、MariaDB、PHP。

其中上面OS和OSRELEASE要改成自己的,OS是
centos或rhel(红帽),OSRELEASE是版本号,填5或6或7,如使用的是 CentOS
7.x版本则改成:

我的系统是32位的CentOS 6,也是目前VPS上主流的操作系统

安装MySQL

步骤依然类似,不再添加注释。

rpm -Uvh dl.fedoraproject.org/pub/epel/6/i386/epel-release-6-8.noarch.rpm

rpm -Uvh rpms.famillecollet.com/enterprise/remi-release-6.rpm

yum --enablerepo=remi,remi-test install mysql mysql-server

service mysqld start

chkconfig mysqld on  

1)安装Apache服务器

# yum install httpd openssl mod_ssl

重启Apache服务器

# systemctl restart httpd
# systemctl status httpd
# systemctl enable httpd

[nginx]
name=nginx repo
baseurl=http://nginx.org/packages/centos/7/$basearch/
gpgcheck=0
enabled=1

我的版本信息:
–VPS:Alpharacks
–操作系统版本:32位的CentOS 6
–nginx版本:1.8.0
–node版本:node-v0.10.40 (目前Ghost官方建议的版本)
–Mysql版本:5.1.73
–Ghost版本:v0.7.4 full (zh)

安装 Ghost

这个简单,因为 node 环境已经部署好,运行 Ghost 只需要将 Ghost
的源码下载并解压就好了。

这里我把 /var/www
设置为服务器的根目录,你可以根据你的喜好进行设置,但是注意在下面的脚本中替换相关路径。

cd /var && mkdir www && cd www  
wget dl.ghostchina.com/Ghost-0.4.1.zip && unzip Ghost*  

现在 /var/www 目录结构如下(使用ls查看):

.
├── config.js
├── content
├── core
├── Gruntfile.js
├── index.js
├── LICENSE
├── node_modules
├── package.json
└── README.md

2)安装MariaDB数据库

# yum install mariadb mariadb-server mysql

默认情况下,MariaDB并不够安全,故应该修改其默认配置来加固其安全。使用mysql_secure_installation脚本,并注意以下的步骤细节,比如设置root账户的密码、移除匿名用户、不允许root账户远程登录、移除test数据库和时序安全访问MariaDB等。

# mysql_secure_installation

像这样进行配置:

- Set root password? [Y/n] y
- Remove anonymous users? [Y/n] y
- Disallow root login remotely? [Y/n] y
- Remove test database and access to it? [Y/n] y
- Reload privilege tables now? [Y/n] y

下一步需要登录到MariaDB控制台并为WikkaWiki创建一个数据库。运行以下命令:

# mysql -u root -p    

重启MariaDB

# systemctl restart mariadb
# systemctl status mariadb
# systemctl enable mariadb

以上是Nginx稳定版本1.8.x,考虑到有人需要http2,需要1.9.x主线版本,需要改成:

前期准备

yum update 更新yum源
yum groupinstall "Development Tools" 安装开发工具包
yum install wget 安装wget下载工具

配置MySQL

MySQL 默认用户名为 root,默认密码为空,这是十分不安全的。因此我们要对
MySQL 进行一些简单的安全配置,然后为 Ghost
创建一个专门的数据库和专门的用户(使用root用户来连接Ghost使用的数据库是十分不安全的做法!)。

mysql_secure_installation

运行上述命令可以进入 MySQL 的交互式安装程序,基本流程是:

  1. 输入安装 MySQL 时指定的 root 密码,一般直接按回车
  2. 是否改变 root 密码,输入 y
  3. 输入新的 root 密码
  4. 是否删除匿名用户,输入 y
  5. 是否禁止 root 远程登录,输入 y
  6. 是否删除默认的 test 数据库,输入 y
  7. 是否马上应用最新的设置,输入 y

至此整个 MySQL 的安装过程结束。下一步开始创建为 Ghost
专用的用户名和数据库。

#登录MySQL
mysql -u root -p 你的密码

#创建名为ghost的用户并新建名为ghost的数据库,同时给ghost用户授予ghost数据库的所有权限
CREATE DATABASE ghost;  
GRANT ALL PRIVILEGES ON ghost.* To 'ghost'@'127.0.0.1' IDENTIFIED BY '为ghost用户设置一个与root不同的密码';  

3)安装PHP

# yum install php php-mysql

如果PHP应用还需要一些扩展模块,可以选择安装,如下:

php-bcmath          : A module for PHP applications for using the bcmath library
php-cli             : Command-line interface for PHP
php-common          : Common files for PHP
php-dba             : A database abstraction layer module for PHP applications
php-devel           : Files needed for building PHP extensions
php-embedded        : PHP library for embedding in applications
php-enchant         : Enchant spelling extension for PHP applications
php-fpm             : PHP FastCGI Process Manager
php-gd              : A module for PHP applications for using the gd graphics library
php-intl            : Internationalization extension for PHP applications
php-ldap            : A module for PHP applications that use LDAP
php-mbstring        : A module for PHP applications which need multi-byte string handling
php-mysql           : A module for PHP applications that use MySQL databases
php-mysqlnd         : A module for PHP applications that use MySQL databases
php-odbc            : A module for PHP applications that use ODBC databases
php-pdo             : A database access abstraction module for PHP applications
php-pear.noarch     : PHP Extension and Application Repository framework
php-pecl-memcache   : Extension to work with the Memcached caching daemon
php-pgsql           : A PostgreSQL database module for PHP
php-process         : Modules for PHP script using system process interfaces
php-pspell          : A module for PHP applications for using pspell interfaces
php-recode          : A module for PHP applications for using the recode library
php-snmp            : A module for PHP applications that query SNMP-managed devices
php-soap            : A module for PHP applications that use the SOAP protocol
php-xml             : A module for PHP applications which use XML
php-xmlrpc          : A module for PHP applications which use the XML-RPC protocol

http://nginx.org/packages/mainline/OS/OSRELEASE/$basearch/

开始安装Nginx

我们先编辑下Nginx的仓储地址,新建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

保存退出(按Esc结束编辑,Shift + ;键,
输入wq,回车),vi编辑器的使用就默认不说了
ok现在使用yum下载Nginx,并安装:
sudo yum install nginx -y
sudo service nginx start 开启nginx
sudo chkconfig nginx on 设置nginx为开机启动
ok,这样Nginx的安装就完成了,在浏览器中输入VPS的IP或者域名就可以看见Nginx友好的提示:“Welcome
to Nginx!”

配置nginx

安装完 nginx 后,它的主配置文件在
/etc/nginx/nginx.conf,但是这里面没有太多要修改的东西。

我们主要修改
/etc/nginx/conf.d/default.conf,我最终的配置如下,见注释。

server {  
    listen       80;
    #你的域名
    server_name  bkjia.com;

    #访问日志地址
    access_log  /var/log/nginx/log/host.access.log  main;

    #后续Wordpress原有数据导入章节会详细说明
    location /wp-content/ {
        root /var/www/content/images;
    }

    #下面几个location都是让nginx直接serve静态文件
    location ~ ^/(img/|css/|lib/|vendor/|fonts/|robots.txt|humans.txt) {
      root /var/www/core/client/assets;
      access_log off;
      expires max;
    }

    location ~ ^/(shared/|built/) {
      root /var/www/core;
      access_log off;
      expires max;
    }

    location ~ ^/(favicon.ico) {
      root /var/www/core/shared;
      access_log off;
      expires max;
    }

    location ~ ^/(content/images/) {
      root /var/www;
      access_log off;
      expires max;
    }

    #后续Wordpress原有数据导入会详细讲解
    rewrite ^/(d+)/(d+)/(.*)$ http://bkjia.com/$3 permanent;

    #核心block,将请求proxy到Ghost实例上
    #其中端口可以在Ghost的config.js中修改,但要保持一致
    location / {
        proxy_set_header        X-Real-IP $remote_addr;
        proxy_set_header        Host      $http_host;
        proxy_pass              http://127.0.0.1:2368;
    }
}

修改完配置后执行service nginx restart,如果没有报错说明配置是没有问题的。

4)配置防火墙

CentOS
7的防火墙默认会阻塞一切,故必须在防火墙允许HTTP/HTTPS通过防火墙。执行命令:

# sudo firewall-cmd --permanent --zone=public --add-service=http
# sudo firewall-cmd --permanent --zone=public --add-service=https
# sudo firewall-cmd --reload

然后就是更新和安装了
yum update -y && yum install nginx -y

使用Nginx配置反向代理

如果完成上一步并且在浏览器中看见Nginx的welcome,那么我们就可以开始配置反向代理,让代理从80端口指向2368端口
去到以下这个目录:
cd /etc/nginx/conf.d
删掉default.conf配置文件
rm default.conf
在此目录下新建一个.conf文件,文件名随意
vi myself.conf
在文件中写入以下内容:

server {
    listen 80;
    server_name zyden.vicp.cc;
    location / {
        proxy_set_header   X-Real-IP $remote_addr;
        proxy_set_header   Host      $http_host;
        proxy_pass         http://127.0.0.1:2368;
        proxy_set_header REMOTE-HOST $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }
}

将server_name换成自己的域名,或者ip,保存退出,并重启nginx:
service nginx restart
ok,nginx的问题就close file了

配置Ghost

做了这么多的铺垫工作,终于要开始配置 Ghost 了。打开
/var/www/config.js(如果不存在该文件,则先执行mv config-sample.js config.js将默认的配置文件重命名)。

打开config.js后,直接修改production模块。

...
production: {  
    url: 'http://bkjia.com', //替换为你自己的域名。
    mail: {},
    database: {
        client: 'mysql',
        connection: {
            host     : '127.0.0.1',
            user     : 'ghost', //上面配置过
            password : 'ghost对应的密码', //上面配置过
            database : 'ghost', //我们前面为 Ghost 创建的数据库名称
            charset  : 'utf8'
        }
    },
    server: {
        host: '127.0.0.1',
        port: '2368'//若修改该端口记得在nginx中做相应改变
    }
},
...

配置完成后,使用npm安装所有的依赖。

npm install --production  

关于为什么加上 --production 这个flag,Ghost 官网给出了解释。虽然我们现在直接在编辑Ghost的源码,看起来像是在develop,但实际上如果你不加--production,npm安装依赖时会安装一堆开发Ghost核心时才需要的文件,这些文件在运行Ghost的时候是不需要的。

安装完所有的依赖,可以运行 Ghost 的了。如果我们直接执行
node index.js,当你的ssh 断开后 node
也会停止运行,所以我们需要另一个模块forever,让我们的 node
程序一直执行。

npm install forever -g  

安装完 forever 后,再执行下面的命令启动 Ghost:

NODE_ENV=production forever start index.js  

如果不出意外,输入你的域名就能看到 Ghost
的界面了。当然,一般都是会出现意外的,这个时候建议你查看如下内容:

  • nginx 错误日志,/var/log/nginx/error.log
  • Ghost 代码所在目录的权限
  • Ghost 的配置是否正确
  • 数据库能否正常连接

3、安装Node.js和npm

运行以下命令安装Node.js和npm:

# yum install nodejs npm --enablerepo=epel

验证安装是否正确,执行:

# node -v && npm -v
v0.10.26
1.3.6

现在你就可以安装Node.js的应用了,比如Ghost博客,具体可参考:http://www.jianshu.com/p/8d3963da06ab

安装配置Mysql

Ghost v0.7.4 full (zh) 集成了sqlite3,不喜欢用Mysql的话可以忽略此步骤

yum install mysql mysql-server
service mysqld start 启动mysql
chkconfig mysqld on 设置为开机启动
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的字符支持,编辑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

新建一个ghost专用的mysql用户和专用的database:

mysql -u root -p  
//用root用户登录mysql

create database ghost
//创建ghost数据库  

GRANT ALL PRIVILEGES ON ghost.* To 'ghost'@'%' IDENTIFIED BY '密码';
//创建ghost database 和 用户名为ghost的用户
//%代表能被所有地址访问

WordPress原有数据导入

对于从 WordPress 转过来的人,一般会遇到两个问题:

  1. 原有博文数据的导入
  2. 原有附件(图片)的导入
  3. 原链接到新链接的跳转

下面分享一下我的解决方案。

4、安装Ghost

下载并解压Ghost:

# mkdir -p /var/www/html
# cd /var/www/html
# curl -L -O https://ghost.org/zip/ghost-latest.zip  
# unzip -d ghost ghost-latest.zip  
# cd ghost
# sudo npm install --production

Ghost安装完成后,进行配置并用主机的域名更新配置文件中的URL。

# cp config.example.js config.js

打开配置文件:

# nano config.js

找到“Production”节,用域名更新URL,修改后看起来如下:

// ### Production
    // When running Ghost in the wild, use the production environment.
    // Configure your URL and mail settings here
    production: {
        url: 'http://your_domain',

至此完成了整个安装过程,可以启动Ghost了。

# npm start –production

安装Node.js

这里根据Ghost官方的建议,我们安装v0.10.40版本
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

博文数据导入

对于Wordpress数据导入到Ghost,你可以安装一款 WordPress 插件
Ghost,然后在后台工具一栏导出 Ghost 支持的数据格式。

注意:目前支持导出的内容包括标题、作者、日期、内容、链接(permalink,slug)、标签,不支持其它的
postmeta。

我在 Ghost 导入数据时(你的ghost博客地址/ghost/debug ),遇到提示 slug
长度不能大于 150 的提示。我看了一下 WordPress 导出的数据中,如果 slug
含有中文会被默认 urlencode,导致长度过大。

系统的默认提示为

“Property ‘slug’ exceeds maximum length of 150.”

我写了一个简单的 node 脚本处理这个问题:

var fs = require('fs');

//data.json是原来导出的文件
fs.readFile('data.json', {encoding: 'utf-8'}, function(err, data){  
    if(err) throw err;
    data = JSON.parse(data);
    data.data.posts.forEach(function(v){
        v.slug = decodeURIComponent(v.slug);
    });

    //data-new.json是处理后的文件,在Ghost后台导入该文件即可
    fs.writeFile('data-new.json', JSON.stringify(data), function (err){
        if(err) throw err;
        console.log('solved!');
    });
});

三、访问Ghost

Ghost默认在HTTP
80端口下是可用的。所以打开浏览器,访问http://server-ip:2368,完成剩余的安装步骤。如果主机上使用了防火墙,需要允许2368端口通过。

本文永久更新链接地址:http://www.linuxidc.com/Linux/2016-10/136410.htm

图片 1

安装Ghost

我们将ghost安装在/var/www下
cd /var/www没有就创建
wget http://dl.ghostchina.com/Ghost-0.7.4-zh-full.zip我们下载中文版的Ghost
unzip Ghost-0.7.4-zh-full.zip -d ghost 解压为ghost文件夹
cd ghost
这里要将config.example.js重命名为config.js再对其进行修改配置
mv config.example.js config.js
vi config.js
我们找到生产环境的配置:production

Ghost-0.7.4-zh-full这个版本默认集成 sqlite3
原生库,但博客篇幅比较大时,sqlite读写数据量太大时将会影响页面加载速度,我们可以根据个人需求改用mysql

如果选择使用sqlite则在config.js中只需要修改url地址

production: {  
    url: 'zyden.vicp.cc', //这里是你自己VPS主机的域名,或者IP
    mail: {},
    database: {
        client: 'mysql'这里我选择使用mysql作为我博客的数据库
        connection: {
            host     : '127.0.0.1',
            user     : 'ghost', //mysql用户名
            password : '', //密码
            database : 'ghost', //之前创建的ghost数据库名称
            charset  : 'utf8'
        },
    server: {
            host: '127.0.0.1',
            port: '2368'//若修改该端口记得在nginx中做相应改变
        }
    }  

现在可以用命令npm start来试试启动开发者模式的Ghost,启动后在浏览器输入自己VPS
主机的地址如果能看见Ghost。那么一切就成功了!
Ctrl + C 中断掉开发者模式。

图片的导入

首先将你Wordpress里的/wp-content/uploads目录压缩后,然后在
/var/www/content/images下新建一个目录名为wp-content,然后压缩包上传到
Ghost 所在的 /var/www/content/images 目录中,最后解压缩。

新的目录结果如下:

.
├── data
│   └── README.md
├── images
│   ├── README.md
│   └── wp-content
├── plugins
│   └── README.md
└── themes
    └── casper

然后就没有然后了,在上一步配置 nginx 的时候我们加入的

location /wp-content/ {  
    root /var/www/content/images;
}

语句,意思就是请求 uri 包含 /wp-content/ 时,从
/var/www/content/images/ 中获取数据,举个例子。

原请求:

/wp-content/uploads/2014/01/abc.jpg

经过 nginx 处理,变成了:

/var/www/content/images/wp-content/uploads/2014/01/abc.jpg

这样图片就能顺滑的显示了。

使用PM2让Ghost永远在线

只要我们一断开ssh,Ghost的进程就会被关闭,这里我们使用PM2来守护Ghost服务进程,并让其运行在生产模式production上

//!!首先进到ghost的安装目录
//安装pm2
npm install pm2 -g
//让ghost以production模式运作,指定程序的入口index.js,并且此进程命名为ghost
NODE_ENV=production pm2 start index.js --name "ghost"
//开机启动
pm2 startup centos
pm2 save

进程守护做完,顺便提提pm2重启进程的命令是:pm2 restart 进程名

ok,在浏览器可以看见自己的Ghost博客了,地址后面加上/ghost就可以访问后台,一开始需要注册个账户(保存在你的数据库里),这个用户是对于你主机上的Ghost博客管理人员而言的,用于登陆你的Ghost博客后台,而与公网上的其他用户没有关系。

有什么问题留言,我会尽量帮忙。谢谢支持

欢迎转载,请注明出处:
http://zyden.vicp.cc/centos-ghost-blog/
谢谢

原链接跳转

我原来在 WordPress 中设置的链接形式是:

/%year%/%month%/%post_name%/

但是 Ghost 只支持:

/%year%/%month%/%day%/%post_name%/ (在Ghost后台设置)

/%post_name%/

两种,因此我配置了 nginx 对请求进行简单的跳转。

rewrite ^/(d+)/(d+)/(.*)$ http://bkjia.com/$3 permanent;  

nginx 的跳转语法比较简单,都是基本的正则,你可以根据自己的需求进行调整。

本文永久更新链接地址:

32位安装Ghost
为了换上传说中写作体验超级好的 Ghost,我下了狠心把 VPS
上的所有内容全部删除,把系统从 CentOS 5 升级到 CentOS 6,在各…

相关文章