概要
目次
- 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環境の構築
- rbenv,ruby-build,ruby,bundlerをinstallする
- rbenv
- ruby-build
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なりでアクセスしてみて、現在時刻が表示されれば完了。