用Docker搭建Ghost博客 & 我是如何搭建本博客的

1.简介

Ghost开源的基于Node.js的博客系统。

Docker开源的基于linux的应用容器工具。

2.准备工作

如果你已经拥有一台安装了Docker的服务器,可以跳过本节。

2.1.服务器

这个请自行解决,现在云主机很多,也很便宜。

如果这个实在搞不定,那也没关系,你可以把Docker安装在你的本地PC/Mac上。

2.2.安装Docker

我的服务器操作系统为CentOS 6.6,安装Docker并设置开机启动如下:

$ sudo yum install docker-io
$ sudo service docker start
$ sudo chkconfig docker on

其它操作系统(包括PC/Mac)请参考Docker官方文档

3.搭建Ghost

$ docker run -d -p 8080:2368 --name ghost ghost

OK了,是的,用Docker就是这么简单。

如果你的服务器的8080端口被占用了,随便换一个就是,当然你也可以直接用80端口,这样你还不需要对nginx进行配置了。

现在你已经可以通过http://you_ip:8080访问Ghost了。

4.域名配置

如果上面的操作你是本地机器进行了,请跳过此节。

4.1.域名与DNS

域名可以在国内外各大域名注册商注册,具体过程不赘述。如果你想和笔者这样的.ml域名,你可以去Freenom注册,它是免费但有期限但可以续期的。
2016.5.25更新:笔者左看右看觉得域名太low了,于是注册了一个顶级域名。
2016.5.26更新:嗯,域名用了一天就被主机供应商干掉了,需要备案,但很low的免费域名还能用,看来主机供应商还要看域名注册商下菜,早知道就去国外注册了=。=
2016.6.3更新:备案好了,又可以开心的用域名了

配置DNS(可以用域名商提供的也可以用第三方的比如我用的DNSPod)添加A记录配置你想要的URL与服务器的地址就OK了。

4.2.Nginx反向代理

如果你的Ghost运行在80端口上,那你就无需做任何配置,可以直接访问你的DNS里设置的URL来访问你的博客了。

但是,通常会在服务器上搭建多个网站,这样就需要Nginx做反向代理了。配置见下(注意把server_name改成你的URL,下面的端口改为你在第3节中设置的端口):

server {  
listen 80;  
server_name blog.ideasriver.com;

location / {  
    proxy_set_header   X-Real-IP $remote_addr;
    proxy_set_header   Host      $http_host;
    proxy_pass         http://127.0.0.1:8080;
}
}

详细说明见Ghost官方Nginx配置文档

如果你的服务器没有安装过Nginx,你同样也可以尝试用Docker来安装一个(想想第三节安装Ghost的快捷酸爽吧)。

5.结束

现在就可以访问你刚设置的URL来访问你的Ghost博客了。访问URL/ghost可以进入控制台,第一次访问时会引导你设置密码。

开始你的Ghost之旅吧!

6.后续

6.1.数据存储在哪里

Docker通过Volume把内容存储在了服务器上(而不是Docker容器里),由于前面没有指定映射到服务器上哪个位置,它自动指定了一个位置,如下:

$ docker inspect --format='{{json .Volumes}}' ghost
${"/var/lib/ghost":"/var/lib/docker/volumes/b8c9128d9e78a7b9ed58ffcaf8ff54a91640d5ad1b290801a2f89754d66cfef5/_data"}

注意,我的操作系统以及Docker版本比较老,新版的inspect格式可以不太一样,你可以直接运行docker inspect ghost来查看类似的地方。

如果你想指定存储位置,可以在第3节中的命令加入-v /path/you/want:/var/lib/ghost参数。

另外,Ghost的配置文件也是这个目录下,就是config.js。

6.2.数据库呢

Ghost默认使用SQLite,免配置,数据库作为文件存储在上一小节中提到的位置里,对于个人小规模博客,这是足够的。

当然,你也可以使用MySQL,请查看Ghost配置文档