在WP越来越臃肿的情况下,很多人都纷纷转投轻量化的博客,PHP方面最知名的轻量博客还是Typecho,在国内有很高的声誉,不过正式版已经快三年没有更新,虽然开发版还在更新,加上用的人还是偏少,毕竟倾向于专门博客方面,所以模板、插件和二次开发的教程都偏少,所以又有一部分人投向了其他语言。例如很火的GO语言、NodeJS等等,用这些语言开发的博客网站确实速度非常快,让服务器的压力也小了很多,远比PHP这类动态的具有明显优势。在NodeJS方面最知名的就是Hexo和Ghost了,还有GO语言写的Hugo,还有Jekyll等等,他们甚至还能依靠Github Page运行,又节省了服务器成本。

一直闻其Ghost博客大名,但是一直没有体验过,所以这次折腾了一阵子终于搞定了比较简单些的Ghost博客。博主比较菜+懒,所以Hexo搞了半天没成功,虽然dalao们都说简单,加上手上空闲只有国内主机,国内主机平时更新个WP都是问题,下载Hexo依赖的一大堆组件简直不能忍受。。。正好Ghost博客已经有了很多一键搭建脚本,所以就先发Ghost博客。

一、Ghost博客的搭建

Ghost博客的搭建说难不难,说简单也不简单,它比WP这种PHP所要的环境和组件毕竟多和复杂,所以很多新人都觉得这玩意实在是太复杂了。Ghost博客所占用的资源比较厉害,至少需要512MB内存才能保证其正常使用,如果主机在国外相对方便一些,国内更新软件包实在蛋疼。

Ghost博客有中文站点,但是已经很久没有更新源码,从英文官网下载是最新版本。Ghost需要的服务器环境是Nginx+NodeJS+Sqlite,使用MySQL需要其他操作,这类教程在百度上一大堆不再阐述。

推荐国外服务器,安装完整版系统,minimal系统因为会缺东西容易不成功。网上的搭建教程太乱,有的没写清楚,有的版本太老,NodeJS更新又太快,所以博主在网络上找到一个比较新的一键包,节省了不少时间。

1.系统需求

Ubuntu 16.04、14.04、12.04;Debian 8、CentOS 6或者7

2.安装

一键脚本开源:https://github.com/hwdsl2/setup-ghost-blog

wget --no-check-certificate https://git.io/ghost-nginx-modsecurity -O ghost-setup.sh
sh ghost-setup.sh yourdomain.com

yourdomain.com换成你自己的域名,务必提前在DNS做好解析。

然后一路确认自动安装

安装成功后访问http://yourdomain.com/ghost 即可,开始后台的设置。

3.设置后台

很简单的设置,也没啥好讲的,设置好站点名称、邮箱、昵称、密码就行了。

二、Ghost博客后台

后台一直是博主关注一款程序的重点,可以看到这款程序的所有功能到底怎么样。

Ghost博客的后台肯定比WP那一堆简单多了,基本就是设置、发布文章、标签等设置。

1.文章编辑

流行的Markdown编辑器,要啥啥没有,需要掌握基本的MD语法,其实也不算难。Ghost好处就是后台就能发文章,Hexo这类需要在本地写再同步上传才能完成发布,有点麻烦。

在编辑器提供了基本的高级设置,足够使用了,特殊图片、标签、时间和作者等等,也能自定义Url路径。

2.导航栏

设置首页的导航栏,可以自定义文章、或者Url链接

3.标签

Ghost博客分类基本就是靠标签了,和传统的WP等不同不是有单独的分类,这点不太一样。

4.自定义设置

头部和底部代码,可以插入统计等等。

5.插件

自带的两个插件,第二个AMP可以为Google搜索提供一个移动版本,例如V2EX也有在Google上展示移动页面就是这个版本。

6.导出导入数据

提供了数据迁移功能,可以方便的导入导出数据,比WP需要装个插件简单省事。

7.团队协作

Ghost提供了团队协作功能,可以添加用户一起建设一个网站,这种简单程序一般是个人使用的,有团队功能确实有创意。

8.基本设置

对博客进行设置,上传Logo、标题、描述等等,同时主题也在这里可以管理,找到Ghost主题可以直接在后台上传

三、前台

前台没什么好讲的,其实自带主题就不错,也有很多第三方主题,质量普通不错。

四、使用问题

基本算是轻量级博客的共性吧,毕竟大部分是极客、个人使用,所以对很多功能都进行了删减,保证了高效运行,当然也牺牲掉了一些功能。例如搜索功能没有,好像Ghost博客也能加,不过没有时间就没再折腾。还有就是没有分类功能,在前文已经提到,分类基本是拿标签来充数。还有就是没有评论系统,评论需要使用第三方。第三方评论因为多说倒了所以推荐国内使用畅言(需要备案)、友言、网易云跟帖,特别网易云跟帖支持Https,还是不错的,当然缺点就是必须登录帐号才能评论,有点略麻烦。国外还有Disqus,不过这货被墙了也没什么好说的。还有就是自建,Isso评论系统,在兽兽dalao的博客使用,看起来不错,自建也稳定可靠许多,这方面教程在后面的扩展阅读中会提供,有兴趣的可以去建立一个。

使用第三方评论系统

找到主题文件,本篇文章使用的一键包Ghost安装在/var/www/yourdomain.com/主题文件夹/,编辑post.hbs文件,把评论代码加到最底下的{{/post}}标签后面就行了。第三方评论使用通用代码即可。使评论系统生效重启Ghost博客或者最简单的去后台设置,切回默认主题再切回自己用的主题即可生效。

五、Ghost博客使用Https+Robots规则

在国内一些博客和网站都没有找到可靠明白的使用Https的教程,在Google翻了一些歪果仁的文章总算看明白了,英语渣不容易啊。。。

1.Https+301强制跳转https

本篇文章所使用的一键包Nginx配置文件夹在/opt/nginx/conf,修改nginx.conf文件,提供一份模板,https+301强制https。站点域名和证书名称、位置替换成自己使用的!同时提供下载:http://dl.zrj766.com/zrj96/ghost-nginx.conf

user nginx;
worker_processes 2;  # Set this equal to the number of CPU cores
events { worker_connections 1024; }
http {
    server_names_hash_bucket_size 64;
    types_hash_max_size 2048;
    server_tokens off;
    include mime.types;
    default_type application/octet-stream;
    sendfile on;
    keepalive_timeout  15;
    gzip on;
    gzip_comp_level 6;
    gzip_disable "msie6";
    gzip_min_length 150;
    gzip_proxied any;
    gzip_types text/plain text/xml text/css application/json application/javascript;
    gzip_vary on;
    proxy_cache_path /var/cache/nginx levels=1:2 keys_zone=one:8m max_size=1000M inactive=60m;
    proxy_temp_path /var/tmp;
    client_max_body_size 20m;
    client_body_buffer_size 128k;

    ModSecurityEnabled on;
    ModSecurityConfig modsecurity.conf;

    upstream ghost_upstream {
        server 127.0.0.1:2368;
        keepalive 64;
    }

    server {  
    listen 80;
    server_name  slarker.me;
    return       301 https://designer.moe$request_uri;
    }

    server {  
    listen 443 ssl;
    server_name  designer.moe;

        ssl_certificate /opt/nginx/conf/designer.moe.crt;
        ssl_certificate_key /opt/nginx/conf/designer.moe.key;

        # Due to the SSLv3 POODLE vulnerability, it is excluded from the protocol list.
        ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
        ssl_ciphers RC4:HIGH:!MEDIUM:!aNULL:!MD5:!DH:!EDH;
        ssl_prefer_server_ciphers on;
        ssl_session_cache shared:SSL:10m;
        ssl_session_timeout 10m;

        if ($request_method !~ ^(GET|HEAD|POST|PUT|DELETE)$ ) { return 444; }
        if ($host != $server_name) {
            return 301 $scheme://$server_name$request_uri;
        }

        location ~* \.(db|hbs|conf)$  { deny all; }
        location ~ /\. { deny all; }
        location ~ ~$  { deny all; }

        # Uncomment this block if you wish to use your own files
        # instead of those auto-generated by Ghost blog
        # location ~ ^/(sitemap\.xml|robots\.txt|favicon\.ico)$ {
        #     root /var/www/designer.moe/public;
        #     access_log off;
        #     log_not_found off;
        # }

        # Static files served directly by Nginx
        location ~ ^/assets/(img|js|css|fonts)/  {
            root /var/www/designer.moe/content/themes/casper;
            expires 30d;
            access_log off;
        }

        location ~ ^/(img/|css/|lib/|vendor/|fonts/) {
            root /var/www/designer.moe/core/client/assets;
            expires 30d;
            access_log off;
        }

        location ~ ^/content/images/ {
            root /var/www/designer.moe;
            expires 30d;
            access_log off;
        }

        location ~ ^/(shared/|built/) {
            root /var/www/designer.moe/core;
            expires 30d;
            access_log off;
        }

        location / {

            proxy_pass http://ghost_upstream;
            proxy_redirect off;
            proxy_read_timeout 180s;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header X-Forwarded-Proto $scheme;
            proxy_set_header Host $http_host;
            proxy_set_header X-NginX-Proxy true;
            proxy_set_header Connection "";
            proxy_pass_header X-CSRF-TOKEN;
            proxy_http_version 1.1;
            proxy_cache one;
            proxy_cache_key "$scheme$host$request_uri";
            proxy_cache_valid 200 10m;
            proxy_cache_valid 404 1m;
            proxy_cache_use_stale error timeout invalid_header updating http_500 http_502 http_503 http_504;
            proxy_intercept_errors on;
            proxy_hide_header X-Powered-By;
        }

        location = /50x.html { root html; internal; }
        #error_page   404 /404.html;
        error_page   500 502 503 504  /50x.html;
    }
}

修改完成后重启Nginx即可生效。

service nginx restart

2.Robots规则

User-agent: *  
Disallow: /ghost/  
Disallow: /signout/  
Sitemap: http://YOUR.DOMAIN.NAME/sitemap.xml

六、总结

如果寻找一款仅仅是博客的程序Ghost这类轻量级博客确实非常不错,速度快、轻巧简约,完全为博客用户设计,远比臃肿不堪的WP方便很多。如果你觉得某些功能不方便或者必须有那还是建议使用Typecho。当然WP也有他自己的用户群体,更适合二次开发和大型网站的运营。各取所需吧。

七、扩展阅读

还想折腾的可以看看以下文章推荐

Debian 8.x / Ubuntu 16.04.x 搭建 Isso 评论系统教程

Debian 8.x / Ubuntu 16.04.x 搭建 Ghost 教程

Hexo建站从入门到精通-Hexo博客本地环境配置,初始化,写作与部署

八、参考文章

本篇文章的写成参考了以下文章,感谢原作者的辛苦付出!

Ghost轻博客一键安装脚本工具(Ubuntu/Debian/CentOS)

给Ghost博客增加多说评论组件

Ghost Blog Auto Setup with Nginx and ModSecurity

为 Ghost 博客添加 HTTPS