社内ブログとしてjekyllを導入した時の作業メモ。
jekyllは導入済みというところからの作業です。
今回作る/いじるファイル
.
├── Gemfile
├── _config.yml
├── config.ru
└── puma.rb
必要なgemをインストールする
以下のgemをインストールしましょう。
source 'https://rubygems.org'
gem 'jekyll'
gem 'rack-jekyll', github: 'adaoraul/rack-jekyll'
gem 'puma'
rack-jekyllはjekyllをrackで動かせるようにするgemです。
Jekyll側の設定
関連ファイルをexcludeする
_config.yml
に以下の設定を追加します。
_config.yml
exclude: ["_tmp", "_log", "puma.rb", "config.ru"]
これはjekyll build
に巻き込まれないように除外するファイルを指定する設定です。
この後作るpidファイルやログファイルを貯めこむディレクトリや、pumaの設定ファイルをjekyll build
に無視してもらう必要があります。
rack起動ファイルを作る
jekyllをrack-jekyllによってrackから動かせるようにしたので、rackup
するためのconfig.ru
を作ります。
config.ru
require "bundler/setup"
Bundler.require(:default)
run Rack::Jekyll.new(:destination => '_site')
pumaセットアップ
pumaに読ませる設定ファイルを作ります。
このファイルに書かずにコマンド上でオプションを用いて指定する方法もあります。面倒です。
puma.rb
application_path = File.expand_path('../../', __FILE__)
directory application_path
environment 'production'
daemonize true
pidfile File.join(application_path, '_tmp', 'pids', 'puma.pid')
state_path File.join(application_path, '_tmp', 'pids', 'puma.state')
stdout_redirect File.join(application_path, '_log', 'puma.stdout.log'), File.join(application_path, '_log', 'puma.stderr.log'), true
bind 'unix:///tmp/puma_jekyll.sock'
bind 'unix:///tmp/puma_jekyll.sock'
で指定したソケットをnginxから見てもらうということになります。
nginx側の設定
リバースプロキシを立てて、pumaのソケットにリクエストを流し込む設定をして完了です。
/etc/nginx/conf.d/jekyll.conf
upstream jekyll {
server unix:///tmp/puma_jekyll.sock;
}
server {
listen 80;
server_name blog.example.com;
location / {
proxy_read_timeout 30;
proxy_connect_timeout 30;
proxy_redirect off;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $host;
proxy_pass http://jekyll;
access_log /var/log/nginx/jekyll_access.log;
error_log /var/log/nginx/jekyll_error.log;
}
}
nginxの大元の設定ファイルであるnginx.conf
からconf.d/
以下の設定ファイルをincludeしてもらう設定をしていない場合はそれもしましょう。
多分デフォルトなら大丈夫だろうが・・・
/etc/nginx/nginx.conf
のhttp
ディレクティブに以下の1行を追加します。
/etc/nginx/nginx.conf
# any configuration...
http {
# any configuration...
include /etc/nginx/conf.d/*.conf;
}
起動
# pumaでjekyllを起動
bundle exec puma -C puma.rb
# nginx再起動
sudo service nginx restart