| 720 | |
| 721 | uWSGI の動作確認は出来たので、これを Nginx 経由で動かせるように設定していきます。まずは uwsgi のパラメータを定義するファイルを `/var/Developer/trac/original/trac-original.ini` に作成します。 |
| 722 | |
| 723 | {{{ |
| 724 | #!console |
| 725 | $ vim trac-original.ini |
| 726 | }}} |
| 727 | |
| 728 | 内容としては以下の通りになりました。 |
| 729 | |
| 730 | {{{ |
| 731 | [uwsgi] |
| 732 | uid = www-data |
| 733 | gid = www-data |
| 734 | |
| 735 | current_release = /var/Developer/trac/original |
| 736 | chdir = %(current_release) |
| 737 | |
| 738 | #wsgi-file = %(current_release)/trac-original.wsgi |
| 739 | mount = /trac/original=%(current_release)/trac-original.wsgi |
| 740 | callable = application |
| 741 | manage-script-name = true |
| 742 | socket = /var/Developer/trac/run/uwsgi-original.sock |
| 743 | pidfile = /var/Developer/trac/run/uwsgi-original.pid |
| 744 | chmod-socket = 666 |
| 745 | vacuum = true |
| 746 | |
| 747 | daemonize = /var/Developer/trac/log/uwsgi-original.log |
| 748 | log-reopen = true |
| 749 | log-maxsize = 5242880 |
| 750 | logfile-chown = on |
| 751 | logfile-chmod = 644 |
| 752 | |
| 753 | processes = 1 |
| 754 | threads = 4 |
| 755 | max-requests = 500 |
| 756 | max-requests-delta = 300 |
| 757 | master = true |
| 758 | }}} |
| 759 | |
| 760 | 軽く解説入れます。 |
| 761 | |
| 762 | `uwsgi` コマンドを実行するときのカレントディレクトリにしたいディレクトリを指定したい場合、 `current_release` にそのディレクトリパスを指定し、それと同じ値を `chdir` にも指定すれば良いようです。 |
| 763 | |
| 764 | `wsgi-file` パラメータを指定する代わりに `mount` パラメータを使用しています。これを使うと、実際に公開するときの URL prefix を指定できます。 Idea note は `http(s)://developer.harapeko.jp/trac/original/ideanote` として公開したいので、 prefix に `/trac/original` を指定しています。 |
| 765 | |
| 766 | `mount` パラメータは複数指定できるらしいので、同じ場所に複数アプリを置いて同時に公開するような書き方もできるっぽいです。 |
| 767 | |
| 768 | `manage-script-name` は URI prefix を uWSGI 側で管理するかどうかを決めるパラメータで、 `true` を指定すると、リクエストに渡された URL から `mount` に指定した prefix を取り除いた値を URL としてアプリに渡すようになります。例えば `/trac/original/ideanote/wiki/HowTo` という URL でリクエストされた場合、これを `/ideanote/wiki/HowTo` に置き換えた値がアプリに渡されます。これを実現するために Nginx 側の設定を工夫する方法もあるのですが (`location` を正規表現指定にして抜き出したい部分をキャプチャし、 `SCRIPT_NAME` と `PATH_INFO` を指定する)、今回はこの方法で書いてみました。 |
| 769 | |
| 770 | HTTP の公開は Nginx に任せるので、 Nginx との通信のために UNIX socket だけを公開します。それを指定するのが `socket` パラメータです。 `pidfile` パラメータはプロセス ID を書き出すファイルで、デーモン実行した uWSGI プロセスを閉じるのに必要になるものです。 `vacuum = true` を指定しておくと、デーモンを開く際にソケットファイルや PID ファイルが残っていても、ちゃんとクリアしてから起動してくれるようになります。 |
| 771 | |
| 772 | `deamonize` パラメータを指定すると、 uWSGI はデーモンモードで起動するようになります。パラメータには実行中のログを吐き出すファイル名を指定します。 `master` パラメータはマスタープロセスを持つべきか否かを指定するもので、デーモン実行する場合は通常 `true` を指定するものらしいです ([https://stackoverflow.com/questions/35072176/what-is-the-uwsgi-master-process-for この辺]に詳しい解説がありました)。 |
| 773 | |
| 774 | 重要そうなのはそんなところでしょうか。 |
| 775 | |
| 776 | Unix ソケットと PID ファイルを置くディレクトリと、ログファイルを吐き出すディレクトリを用意します。これらのディレクトリはオーナーが `murachi:www-data` になるので、グループに書き込み権限を与えておきます。 |
| 777 | |
| 778 | {{{ |
| 779 | #!console |
| 780 | $ cd .. |
| 781 | $ mkdir run |
| 782 | $ mkdir log |
| 783 | $ chmod g+w run log |
| 784 | }}} |
| 785 | |