nginxとuwsgiを使ってTracをホストしよう
このTrac
をセットアップするのに多くの時間を費やし、文献を読みあさったのでここに手順やハマりどころをまとめておきます。
そこらの文献というのはなぜかコマンドをどの権限やパスで実行するか明記していないケースがあるので、この記事ではコマンドの説明をするときはbash
っぽくプロンプトの部分から記述します。
- なんかサーバを用意します(当サーバはAmazon EC2上のUbuntu 12.04.2)
以降、ホスト名はreimu
と表します(このホストがreimu.x86-64.jpだから)
- 必要なものをパッケージマネージャなり公式サイトなりから引っ張ってきます。
わたしはaptを使って手を抜きました。依存環境などもまるまる降ってくるし、アップデートの適用もシステムと一緒にできるという恩恵にあずかれます。
[email protected] ~:# apt-get install nginx uwsgi uwsgi-plugin-python trac trac-git
trac-git
はTrac
でgit
使いたいから入れておいたもので、必須ではありません。
で、uwsgi
って結局なんなん: Uwsgi?
- わたしはWebサイトごとにユーザを作るスタイルを採用しているので、
Trac
用にユーザを作っちゃいます。[email protected] ~:# adduser -G www-data trac
nginx
が走るグループは、環境によってはwww-data
ではないかもしれません(httpd
とか)
ユーザ分けとかどうでもいい場合はwww-data
さんが参照できるディレクトリを用意するだけで大丈夫です。
Trac
のプロジェクトが入るディレクトリを適当に作り、Trac
に付属しているTrac-admin?コマンドでそのディレクトリをTrac
化します。
これは通常ユーザ(この記事の例ではtrac
,Trac
用のユーザを作らなかった場合はwww-data
)で行います。[email protected] ~:$ mkdir your_trac_project [email protected] ~:$ trac-admin ~/your_trac_project initenv
initenv
を行っているときに、プロジェクトの名称とデータベースファイルのパスを決められます。
これがTrac
のタイトルとして反映されます。たとえばこのTrac
なら真剣な悪ふざけになっています。 どうやらUTF-8なら2バイト文字でもいいみたいです。
- このへんで
Trac
の管理者アカウントを登録しておきましょう。[email protected] ~:$ trac-admin ~/your_trac_project permission add foo TRAC_ADMIN
これで、ユーザfoo
が管理者になりましたので、foo
としてhttp-auth-basic
(以下Basic認証と記述)でログインできるように設定します(後述)。
Trac
についての、uwsgi
用とnginx
用のconfigを作ります。
わたしはこうしました:
- /etc/uwsgi/apps-available/trac.xml
-
<uwsgi> <socket>127.0.0.1:7777</socket> <plugin>python</plugin> <!--この行が意外と重要--> <env>TRAC_ENV=/home/trac/project-directory</env> <module>trac.web.main:dispatch_request</module> </uwsgi>
- /etc/nginx/sites-available/trac
-
server { listen 80; listen 443 ssl; server_name x86-64.jp; ssl_certificate /path/to/ssl-cert.pem; ssl_certificate_key /path/to/ssl-key.key; root /home/trac/your_trac_project; location /favicon.ico { } location /robots.txt { } if ($scheme = http) { return 301 https://$server_name$request_uri; } location / { include uwsgi_params; uwsgi_pass 127.0.0.1:7777; } location /login { include uwsgi_params; uwsgi_param REMOTE_USER $remote_user; uwsgi_pass 127.0.0.1:7777; auth_basic "Trac"; auth_basic_user_file "/path/to/your/.htpasswd"; } }
uwsgi
用のconfで書いたソケットはportが7777なので、こちらのconfでもuwsgi_pass
を7777に設定しておきます。
このようにして、nginx
にアクセスがあったとき、uwsgi
を通してTrac
のコンテンツを引っ張りにいく設定にします。 ちなみにこのTrac
はSSL-enabledなので、ところどころSSLに関する設定が入っています。
htpasswd
を使って、Basic認証に使うアカウントを生成します。
Apacheを入れていないUbuntuではそんなコマンドないかもしれないですが、apache-utils
をインストールすればOKです(記事は省略)[email protected] ~:$ htpasswd -c /path/to/your/.htpasswd foo [email protected] ~:$ chgrp www-data /path/to/your/.htpasswd [email protected] ~:$ chmod 750 /path/to/your/.htpasswd
これによってユーザfoo
が含まれる.htpasswd
が生成されたので、このユーザでログインすることでTrac
のWebインタフェースからの管理ができるようになりました。
個人的にはここでroot
以外が.htpasswd
を読めるのがきもい。まあしょうがない。
- 上で書いたconfigをenableします。
[email protected] ~:# ln -s /etc/nginx/sites-available/trac /etc/nginx/sites-enabled/trac [email protected] ~:# ln -s /etc/uwsgi/apps-available/trac.xml /etc/uwsgi/apps-enabled/trac.xml
uwsgi
とnginx
をrestart
して完成。[email protected] ~:# service uwsgi restart [email protected] ~:# service nginx restart
ああそういえば:
エラーが発生したときは、結構な確率でパーミッションがおかしいです。
とくにTrac
を運用するにあたってwww-data
が読み書きできなくてはいけないファイルは、
your_trac_project/conf/trac.ini
your_trac_project/db/trac.db
が大事です。これらのファイルについて
www-data
がrとwの権限を持っているかチェックしましょう。
それからハマりどころとして、
uwsgi
の設定にてPythonのプラグインを使うことを明記しないとちゃんと動かなかったのでメモ。
ざっとこんなところかしら。なんか抜けがある気がするので暇な時に検証します。
Comments
No comments.