tDiary を Nginx と Puma で動かす
Ubuntu 18.04 で行った。
Nginx のインストール
apt install nginx
でインストールし、
service nginx start
でとしておく。
Ruby のインストール
専用のユーザを作って、そこで tdiary の rack server を実行することにした。 そのユーザでログインする。 ruby は rbenv でインストールした。
git clone https://github.com/sstephenson/rbenv.git ~/.rbenv
git clone https://github.com/sstephenson/ruby-build.git ~/.rbenv/plugins/ruby-build
として、~/.bashrc などに rbenv の設定を書いておく。 root で ruby のコンパイルに必要なパッケージをインストールする。
apt install ruby-build
ruby をインストールする。
rbenv install 2.5.1
Nginx の設定
次のような nginx の設定のファイルを用意して、適切なファイル名(たとえば、example.com)で /etc/nginx/sites-available/ に保存する。
upstream tdiary_rack_server {
server unix:/tmp/puma_tdiary.sock;
}
server {
listen 80;
server_name example.com;
error_log /var/log/nginx/example.error.log;
access_log /var/log/nginx/example.access.log;
root /var/www/example.com;
gzip on;
gzip_http_version 1.1;
gzip_types text/plain
text/xml
text/css
application/xml
application/xhtml+xml
application/rss+xml
application/javascript
application/x-javascript;
gzip_buffers 4 8k;
gzip_min_length 1000;
gzip_comp_level 1;
gzip_proxied off;
gzip_disable "MSIE [1-6]\." "Mozilla/4";
gzip_vary off;
location / {
proxy_http_version 1.1;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
proxy_redirect off;
proxy_max_temp_file_size 0;
proxy_pass http://tdiary_rack_server;
}
}
このファイルのシンボリックリンクを /etc/nginx/sites-enabled/ に作る。
ln -s /etc/nginx/sites-available/example.com /etc/nginx/sites-enabled
Nginx の設定を読み込む。
service nginx reload
Puma の設定
tDiary はリポジトリからダウンロードして、適切に設定する。 .htpasswd を作っておけば、特に設定しなくても rack server で認証するようになるようだ。
Gemfile に
gem 'puma'
gem 'puma_worker_killer'
を加え
bundle update
で gem をインストールする。
puma.rb として次のファイルを作った。
workers 1
threads 2, 5
preload_app!
bind 'unix:/tmp/puma_tdiary.sock'
pidfile File.join(File.expand_path(__dir__), 'tmp/pids/puma.pid')
daemonize
stdout_redirect File.join(File.expand_path(__dir__), "log/puma_stdout.log"), File.join(File.expand_path(__dir__), "log/puma_stderr.log"), true
before_fork do
require 'puma_worker_killer'
PumaWorkerKiller.enable_rolling_restart(24 * 3600)
end
これを実行するには
puma -C puma.rb
とする。