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

とする。

Tags of current page

, ,