Ubuntu
isucon
h2o

ISUCONで話題になったWebサーバー、h2oをUbuntu 18.04で動かしてみる

はじめに

この文書は怪文書です。

  • Ubuntu 18.04で
  • できるだけ労力を少なく
  • h2oを動かしてみる

をやってみようと思います。

CentOSの場合はRPMが、Dockerの場合はDocker Hubにイメージがあるのでそれを使ってあげるとよさそうです。

事前準備

  1. Ubuntu 18.04のマシンを用意する

以上。

インストールをやってみる

これを実行するだけです。

install_h2o.sh
#!/bin/bash
## apt update && apt upgrade -y && apt autoremove -y
## やろうとしたらlockファイルがあって死んだのでlockファイルを消した
## rm -rf /var/lib/dpkg/lock
apt update && apt upgrade -y && apt autoremove -y
apt -y install locate git cmake build-essential checkinstall autoconf pkg-config libtool python-sphinx wget libcunit1-dev nettle-dev libyaml-dev libuv-dev libssl-dev zlib1g-dev
git clone https://github.com/tatsuhiro-t/wslay.git
git clone https://github.com/h2o/h2o.git
cd wslay/
autoreconf -i
automake
autoconf
./configure
make
make install
cd ../h2o/
cmake -DWITH_BUNDLED_SSL=on .
make
make install

Systemdに突っ込んでみる

3年前の記事ですがこれが使えます。

/lib/systemd/system/h2o.service
[Unit]
Description=H2O the optimized HTTP/1, HTTP/2 server
After=syslog.target network.target remote-fs.target nss-lookup.target

[Service]
Type=forking
PIDFile=/var/run/h2o/h2o.pid
ExecStartPre=/usr/local/bin/h2o -c /etc/h2o/h2o.conf -t
ExecStart=/usr/local/bin/h2o -c /etc/h2o/h2o.conf -m daemon
ExecReload=/bin/kill -s HUP $MAINPID
ExecStop=/bin/kill -s QUIT $MAINPID
PrivateTmp=true

[Install]
WantedBy=multi-user.target
/etc/h2o/h2o.conf
user: nobody
hosts:
#  "www.example.com:443":
#    listen:
#      port: 443
#      host: 0.0.0.0
# Let's Encryptを入れる場合
#      ssl:
#        certificate-file: "/etc/letsencrypt/live/www.example.com/fullchain.pem"
#        key-file: "/etc/letsencrypt/live/www.example.com/privkey.pem"
#    paths:
#      "/":
#        file.dir: /var/www/html
  "www.example.com:80":
    listen:
      port: 80
      host: 0.0.0.0
    paths:
      "/":
        file.dir: /var/www/html
access-log: /var/log/h2o/access.log
error-log: /var/log/h2o/error.log
pid-file: /var/run/h2o/h2o.pid

コンフィグを突っ込んだら以下のコマンドを叩きます

systemctl enable h2o.service
systemctl start h2o