从零开始搭建Ghost博客
dyydp
9年前
Ghost是一款非常出色的开源博客平台,无论是从架构、设计、易用性,它都要比Wp要好,非常喜欢,从Wp切换到Ghost感觉非常好。
优势
- 从技术上,采用NodeJs,在可预见的未来里,无疑比PHP有更多优势,并发能力远超Wp很多。
- 从易用性上,专注写作,不带评论,超炫皮肤,完美支持MarkDown,没有Wp那么臃肿,回归到博客最原始的状态,传递文字最原始的力量。
- 容易二次开发,好维护。
劣势:
- 太新了,一切问题都得自己解决,不过这样更加锻炼了我们的能力,在解决问题的途中,发现了很多美丽的风景。
- 后台简陋,没有太多功能,其他功能得自己改造,DIY精神得到完美释放。
本文将带你体验飞一般的Ghost之旅
亮点:
- 采用 Ghost中文版最新版0.6.3 保证了最新功能以及教程的实时性
- 采用Mysql作为数据库,保证了教程的通用性
- Nginx作为反向代理,配置多个Ghost博客
- 非常简易化的Node.js安装方法
- 安装系统服务,开机重启ghost服务
- 采用 Font Awesome 作为社交按钮
- highlight.js 作为主题的代码高亮引擎
- 整合 DISQUS 评论系统,建立属于自己的Discuss圈
- 国外优秀免费Ghost主题资源以及安装方法
- 整合百度统计以及百度分享
环境:
Ubuntu 14.04,MySql 5.5.43,Nginx 1.4.6,Node 0.10.33
步骤:
安装MySql
* 安装MySql # apt-get update # apt-get install mysql-server mysql-client -y //快速安装-y代表默认选择y省去了回车,这时只需要设置mysql的root密码 * 设置mysql的编码 # sudo vi /etc/mysql/my.cnf //搜索到[mysqlld] 插入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了否则之后数据库内存中文存放的是乱码,[具体原因](http://www.cnblogs.com/hongfei/archive/2011/12/29/set-names-utf8.html) * 创建ghost数据库 # create database mousycoder; //这里把mousycoder换成你想换成的数据库名,建议和域名保持一致,方便以后维护。 # create database mousycoderDev; //这个是Ghost启动有2种模式 一种开发模式 一种生产模式 这个是开发模式的数据库,如果不想那么麻烦,只用建立一个数据库即可。 # create user 'mousycoder'@'localhost' identified by '123456';//这里新建一个用户mousycoder密码为123456,当然我的密码肯定不是123456咯,换成你自己的啦 = =,同样也建议用户名,数据库名,服务名,组名,都和域名保持一致,这里是建立一个只有本地操作的用户,远程无法操作,安全策略。 # grant all privileges on mousycoder.* to 'mousycoder'@'localhost'; # grant all privileges on mousycoderDev.* to 'mousycoder'@'localhost' //这里是赋予mousycoder这个本地用户所有对数据库mousycoder以及mousycoderDev的权限,当然这里你可以根据实际需要赋予权限。 # FLUSH PRIVILEGES;//重新读取权限表中的数据到内存,不用重启mysql就可以让权限生效,好处可以防止修改错误后,没有余地再去反悔。
补充说明:
- mysql 移除匿名账户,禁用root远程登录sudo mysql_secure_installation回答n,y,y,y,y
- grant 权限1,权限2,…权限n on 数据库名称.表名称 to 用户名@用户地址 identified by ‘连接口令’;其中权限1,权限2,…权限n代表select,insert,update,delete,create,drop,index,alter,grant,references,reload,shutdown,process,file等14个权限,例如:grant select,insert,update,delete,create,drop on mousycoder.employee to hello@10.163.225.87 identified by ‘123456′;给来自10.163.225.87的用户hello分配可对数据库mousycoder的employee表进行select,insert,update,delete,create,drop等操作的权限,并设定口令为123456。
安装Nginx
* 安装nginx # apt-get install nginx -y # apt-get install curl -y // curl是一种命令行工具,作用是发出网络请求,然后得到和提取数据。 # curl -i 127.0.0.1 //确保Nginx 运行,默认监听80端口 # 设置web目录和cache目录 # mkdir /var/www # mkdir -p /var/cache/nginx // -p 可以一下子把中间路径中不存在的文件夹也一起建立,非常实用 # chown www-data:www-data /var/www //nginx安装会自动建立用户www-data并且默认用这个用户操作 # chown www-data:www-data /var/cache/nginx * 修改配置文件(一般不操作这个文件) # cp /etc/nginx/nginx.conf /etc/nginx/nginx.conf.old //备份原来配置 # vi /etc/nginx/nginx.conf //可以修改默认用户为其他用户 * 为Ghost单独创建nginx配置文件 # rm /etc/nginx/sites-enabled/default //删掉默认的配置 # vi /etc/nginx/sites-available/mousycoder //建立一个nginx配置文件 server { listen 0.0.0.0:80; # 监听的端口号 server_name mousycoder.com; # 把mousycoder.com换成自己的域名,如果没有域名或者网站还没备案下来这里可以写ip,例如120.25.150.209,如果配置多个网站的话,这里可以通过不同的端口对应不同的网站,例如:120.25.150.209:81等 前提是这些端口外网还能访问。 access_log /var/log/nginx/mousycoder.log; location / { proxy_set_header Host $http_host; proxy_set_header X-NginX-Proxy true; proxy_set_header X-Real-IP $remote_addr; proxy_pass http://127.0.0.1:2368; # 这里是ghost启动时的默认端口,可以根据实际情况变化,默认也可以 #proxy_buffering off; proxy_redirect off; } } # ln -s /etc/nginx/sites-available/mousycoder /etc/nginx/sites-enabled/mousycoder //建立软链接到到实际配置路径,方便统一维护配置文件变化。 # service nginx restart //nginx安装好时已经默认注册了系统的服务,我们就可以直接重启nginx服务,让配置文件生效
补充说明:nginx 这里主要是做端口转发映射作用,当然它非常能抗压。
安装Node.Js
# wget http://nodejs.org/dist/v0.10.39/node-v0.10.39-linux-x64.tar.gz # tar zxf node-v0.10.39-linux-x64.tar.gz && cd node-v0.10.39-linux-x64 # cp bin/* /usr/bin //拷贝执行目录,相当于去设置一个环境变量到用户的bin目录
补充说明:这里下载的并不是最新版的nodejs,注意从 Ghost 0.6.0 版本开始,Ghost 中文版完整包已经集成了 Nodejs 0.12 版本的 sqlite3 原生库,在 windows(32/64 bit)、Linux(32/64 bit)、Mac(64 bit)操作系统上可以直接在 Nodejs 0.10.x 和 0.12.x 版本上运行。但是,我们强烈建议使用 Node.js 0.10.x 最新版本。对 Node.js 0.12.x 版本的支持还有待考验!详情见 ghost中文网 ,当然NodeJs有很多种安装方法,个人觉得这种是在这里最适合的方法。
安装Ghost
Ghost中文版0.6.3下载
# cd /var/www/ # curl -L http://dl.ghostchina.com/Ghost-0.6.3-zh.zip -o mousycoder.zip # unzip mousycoder.zip -d mousycoder # cd mousycoder/
配置Ghost
Ghost有两种运行模式:开发模式和产品模式,通过config.js配置
# cp config.example.js config.js # vi config.js - production # 生产模式 production:{ url: 'http://mousycoder.com', main:{}, database:{ client :'mysql', connection:{ host:'127.0.0.1', user:'mousycoder', # 数据库连接的用户 password:'123456', database:'mousycoder', charset:'utf-8' } } } - development # 开发模式 production:{ url: 'http://mousycoder.com', main:{}, database:{ client :'mysql', connection:{ host:'127.0.0.1', user:'mousycoder', # 数据库连接的用户 password:'123456', database:'mousycoderDev', charset:'utf-8' } } }
安装启动
根据package.json 安装依赖包,进入当前mousycoder目录下
# cd /var/www/mousycoder # npm install --production //产品模式;只安装运行的包 # npm install //开发模式,默认是开发模式
用mousycoder运行ghost(非root账户运行ghost更安全)
# adduser -shell /bin/bash --gecos 'mousycoder blog' mousycoder # chown -R mousycoder:mousycoder /var/www/mousycoder
安装forever,保持Ghost一直在后台运行
cd /var/www/mousycoder # npm install forever -g //全局安装forever模块 # NODE_ENV=production forever start index.js //生产模式后台运行ghost
安装系统服务
# curl https://raw.githubusercontent.com/TryGhost/Ghost-Config/master/init.d/ghost -o /etc/init.d/mousycoder //下载ghost提供的脚本到/etc/init.d/目录,该目录是系统服务目录 # chmod +x /etc/init.d/mousycoder //给脚本赋予执行权限 # usermod -aG mousycoder www-data //把www-data用户加入mousycoder组,让其可以操作源文件等目录 # update-rc.d mousycoder defaults //用update-rc.d 安装服务 mousycoder # update-rc.d mousycoder enable //刷新一遍服务,防止之前有重名的 # service mousycoder status //查看mousycoder 服务的状态 # service mousycoder start //这样开机就会自动启动ghost生产环境,不信reboot一下
补充说明:
- curl 常用命令 详情可以参考 阮老师的博客
curl -L https://raw.githubusercontent.com/TryGhost/Ghost-Config/master/init.d/ghost -o ghost // -L 解决网站地址自动跳转后拿不到文件 curl -v www.baidu.com //显示详细过程包含http头 curl -u username:password url 解决页面需要授权输入用户名密码情况 curl -u username --data "param1=value1¶m2=value2" https://api.github.com // post请求 curl -I -X DELETE https://api.github.com //解决get post以外的请求方式 curl --form "fileupload=@filename.txt" http://hostname/resource //上传文件
- chmod 命令
chmod -R a-w abc //取消/abc目录的-w(写)权限
drwxr-xr-x 第一列d 目录 第2-4列 拥有者权限 rwx 5-7列 r-x同组用户权限 r-x是其他组用户权限,其中rwx对应4,2,1
- 系统服务启动顺序
update-rc.d A start 50 1 2 3 4 5 stop 51 0 6 start 50 1 2 3 4 5 :表示在1,2,3,4,5这5个运行级别中,按先后顺序,由小到大执行,第50个开始运行脚本 stop 50 0 6 :表示在0,6这两个运行级别中,按照先后顺序,由小到到执行,第52个停止这个脚本运行 update-rc.d mousycoder remove 卸载mousycoder开机服务
测试启动
打开浏览器,输入之前配置的ip或者域名
http://hostname.com//ghost首页 http://hostname.com/ghost ghost后台