LoginSignup
1
1

More than 5 years have passed since last update.

jekyllをpuma + nginxで動かす

Last updated at Posted at 2014-12-11

社内ブログとして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.confhttpディレクティブに以下の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
1
1
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1