博客迁移到阿里云
2017-07-02 Server托管在GitHub上的博客如果使用自己的域名的话,就无法直接启用https。
正好阿里云有提供Symantec的免费SSL证书,于是就想把博客放到自己的阿里云上。
Environment
> CentOS --- 7.3.1611
> Apache --- 2.4.6
> Ruby --- 2.4.1
> gem --- 2.6.11
Ruby
- 刚开始直接用
yum
安装的Ruby,结果在用gem
安装Jekyll时报错:ERROR: Error installing jekyll: liquid requires Ruby version >= 2.1.0.
用
ruby -v
查看当前Ruby版本:
ruby 2.0.0p648 (2015-12-16) [x86_64-linux]
无奈只能重新从源码编译安装Ruby。 - 移除已安装的Ruby:
$ sudo yum remove ruby ruby-devel
- 获取Ruby源码:
$ wget https://cache.ruby-lang.org/pub/ruby/2.4/ruby-2.4.1.tar.gz
$ tar xvfvz ruby-2.4.1.tar.gz
- 编译自带的zlib库:
$ cd ~/ruby-2.4.1/ext/zlib
$ ruby extconf.rb
$ make
$ sudo make install
(缺少这一步可能在运行gem命令时遇到“cannot load such file – zlib”的错误) - 安装openssl组件:
$ sudo yum install openssl-devel
(缺少这一步可能在运行gem命令时遇到“Unable to require openssl. install openSSL and rebuilt ruby (preferred) or use non HTTPs sources”的错误) - 编译安装Ruby:
$ cd ~/ruby-2.4.1
$ ./configure
$ make
$ sudo make install
- 此时运行
gem update
可能遇到错误:ERROR: While executing gem ... (Gem::FilePermissionError) You don't have write permissions for the /usr/local/lib/ruby/gems/2.4.0 directory.
于是换用
sudo gem update
,提示:
sudo: gem: command not found
可以在当前用户的.bashrc
中加上alias sudo='sudo env PATH=$PATH'
,以后通过sudo
来运行gem命令即可。
Jekyll
- 更新gem:
$ sudo gem update
- 安装Jekyll:
$ sudo gem install jekyll
- 我的博客还用到了Jeyll的两个插件,也需要装上:
$ sudo gem install jekyll-paginate jekyll-gist
Blog
- 克隆托管在GitHub上的博客:
$ git clone https://github.com/whoisnian/whoisnian.github.io.git blog
- 生成网站:
$ cd blog
$ jekyll serve
- 然后在apache的配置文件中将Root目录改为jekyll生成的目录:
$ sudo vim /etc/httpd/conf/httpd.conf
将DocumentRoot "/var/www/html"
改为DocumentRoot "/var/www/blog/_site"
现在访问服务器就会看到自己的博客了。
Https
- 在阿里云上成功申请SSL证书后得到一个压缩包,解压得到四个文件:
******.key ******.pem chain.pem public.pem
上传到服务器的/etc/httpd/certs目录下。
- 服务器安装ssl模块:
$ sudo yum install mod_ssl
- 配置SSL证书设置:
$ sudo vim /etc/httpd/conf.d/ssl.conf
# 证书公钥配置 SSLCertificateFile /etc/httpd/certs/public.pem # 证书私钥配置 SSLCertificateKeyFile /etc/httpd/certs/******.key # 证书链配置 SSLCertificateChainFile /etc/httpd/certs/chain.pem
- 重启httpd服务:
$ sudo systemctl restart httpd