LoginSignup
1
0

More than 5 years have passed since last update.

pumaをh2oをunixドメインソケットで連携させるところまで

Posted at

概要

  • puma
  • h2o version 2.2.2
  • HTTP/2, TLSは考慮してない
  • OS: CentOS 7 (SELinuxは利用していない)

目次

  • h2oの利用
    • ポートの開放
    • インストール・起動
  • pumaの利用
    • ruby環境の構築
    • pumaの初期設定・起動
  • h2oの設定・再起動

h2oの利用

ポートの開放

80番ポートをすでに使用していないか確認する。 lsof を使う。なければインストール。 lsof でなにも表示されなければよし

sudo yum install lsof -y
lsof -i:80 

80番ポートを解放する。serviceとしてhttp, portとして80/tcpを追加する。

sudo firewall-cmd --permanent --zone=public --add-service=http
sudo firewall-cmd --add-port=80/tcp --zone=public --permanent
sudo firewall-cmd --reload

状況の確認

sudo firewall-cmd --list-all

インストール・起動

  • H2Oの公式h2o-rpmを紹介しているのでそれを使う
  • おおむねREADME.mdに従う
  • 個人的な保守性のために若干READMEから変えている。bashでそのまま実行できるようにしている。$ をエスケープしたりしている。

リポジトリの登録

cat <<EOS > bintray-tatsushid-h2o-rpm.repo
[bintray-tatsushid-h2o-rpm]
name=bintray-tatsushid-h2o-rpm
baseurl=https://dl.bintray.com/tatsushid/h2o-rpm/centos/\$releasever/\$basearch/
gpgcheck=0
repo_gpgcheck=0
enabled=1
EOS

sudo mv bintray-tatsushid-h2o-rpm.repo /etc/yum.repos.d/

インストールする

sudo yum install h2o -y

起動する

sudo systemctl start h2o.service

確認する。http://ipアドレス にアクセスして「Welcome to H2O - an optimized HTTP server」と表示されたらIt works!

pumaの利用

ruby環境の構築

README通りに。特に細かく説明はしない。
git はリポジトリのダウンロードに、 bzip2 はrubyのソースの解凍に、 gcc はrubyのソースのコンパイルに、openssl-devel readline-devel zlib-devel はrubyの依存ライブラリに利用している。 gcc-c++ はtherubyracerで使うが、この記事には関係ない。

# すでにインストール済みであれば削除
sudo yum remove ruby
sudo yum install git bzip2 gcc openssl-devel readline-devel zlib-devel gcc-c++ -y
# rbenvのインストール
git clone https://github.com/sstephenson/rbenv.git ~/.rbenv
echo 'export PATH="$HOME/.rbenv/bin:$PATH"' >> ~/.bash_profile
echo 'eval "$(rbenv init -)"' >> ~/.bash_profile
source ~/.bash_profile
# ruby-buildのインストール
git clone git://github.com/sstephenson/ruby-build.git ~/.rbenv/plugins/ruby-build
cd ~/.rbenv/plugins/ruby-build
sudo ./install.sh
# rubyのインストール
rbenv install 2.4.1
# このシェルでは2.4.1を使う
# このバージョンしか使わないのであればrbenv global 2.4.1でも良い
# ディレクトリでバージョン固定するのであればrbenv local 2.4.1
rbenv shell 2.4.1
ruby -v
# => ruby 2.4.1p111 (2017-03-22 revision 58053) [x86_64-linux] 
# bundlerのインストール
gem install bundler

pumaの初期設定

pumaのインストール

mkdir puma-sample; cd puma-sample
bundle init
echo "gem 'puma'" >> Gemfile
bundle install --path=vendor/bundle

unixドメインソケットを置く場所の設定

sudo mkdir /var/run/puma
# pumaを起動するユーザが読書できるように
sudo chown $(whoami):$(whoami) /var/run/puma

必要なディレクトリを作る

mkdir -p config log tmp/pids public

puma設定ファイルの記述。https://github.com/puma/puma/blob/master/examples/config.rb

cat <<EOS > config/puma.rb
bind 'unix:///var/run/puma/puma.sock?umask=0111'
environment 'production'
daemonize true
pidfile "#{Dir.pwd}/tmp/pids/puma.pid"
stdout_redirect "#{Dir.pwd}/log/log.log", "#{Dir.pwd}/log/error.log"
preload_app!
EOS

Rackサーバーの設定。http://rack.github.io/

cat <<EOS > config.ru
app = -> env do
  [
    '200',
    {'Content-Type' => 'text/html'},
    [Time.now.to_s + ?\n]
  ]
end
run app
EOS

pumaの起動

bundle exec puma

h2oの設定・再起動

YAMLで書く。https://h2o.examp1e.net/configure/proxy_directives.html
host名は適当に。

sudo sh -c "cat <<EOS > /etc/h2o/h2o.conf
user: nobody
listen:
  port: 80
hosts:
  example.com:
    paths:
      /:
        proxy.reverse.url: http://[unix:/var/run/puma/puma.sock]/
EOS"

h2oの再起動

sudo systemctl restart h2o.service

http://IPアドレス/ なりhostなりでアクセスしてみて、現在時刻が表示されれば完了。

1
0
0

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
0