uwsgiTracを1.0.1にアップグレードしましたくりすです。本サイトのTracを0.12.3から1.0.1にアップグレードしましたので、その手順をメモしておきます。ねらい今回Tracを1.0.1にアップグレードするにあたって、単なるアップグレードではなく、サーバの構成をより細分化することも目的としました。構成の細分化とはここでいう構成の細分化とは、システムに搭載する個々のアプリケーションの影響範囲をできるだけ小さくする工夫です。tracところが、パッケージマネージャを使う方法には次のようなデメリットがあります:パッケージマネージャで提供されるアプリケーションは必ずしも最新版ではないシステム全体に対してインストールすることになってしまうので、サーバの構成への影響が大きいレンタルサーバなどを使っていてroot権限を持っていない場合などは、そもそもこの方法を用いることができないそこで、virtualenvを用いて、専用のPython環境を構築することにしました。virtualenvって何だvirtualenvとは、Python環境のセットを好きなだけ錬成するしくみ、つまりPythonの仮想環境です。virtualenvを使うと、システムのPythonに影響を及ぼさない一般ユーザの権限でもライブラリのインストールが容易/etcや/usrなどに余計なファイルを作らないパッケージマネージャで入れたライブラリと競合しない必要なだけ専用のPython環境を作ることができる​Pythonのバージョンが選べるといったメリットを得ることができます。以下、例示しているディレクトリは/home/trac/curが従来のTrac環境、/home/trac/newが新しいTrac環境を表します。各自の環境に合わせて読み替えてください。virtualenvのセットアップvirtualenvはサラのUbuntuには入っていませんでしたので、インストール。python-virtualenvまず、現在のデータをコピーします。/home/trac/new​rsyncコマンドにおいて、末尾の`/`のあるなしは極めて重要です。/home/trac/new下にvirtualenvを生成します。envそうすると、5秒ほどで専用のPython環境/home/trac/new/envが爆誕します。trac_python_envとすれば、/home/trac/new/trac_python_envが生まれます。新しく作ったPython環境を起動します。env/bin/activateそうすると、先ほど生成したPython仮想環境が起動し、(env)$というプロンプトに変化します。(env)という表示は、envという名称のvirtualenvを使用していることを示します。virtualenvを使った、最新版Tracのインストール新しく作ったPython環境においては、基本的にeasy_installあるいはpipを用いて追加モジュールのインストールをします。中にはGenshi(後述)などコンパイルを要するモジュールもあるので、build-essentialを用意しておいたほうがよいでしょう。tracを実行します。root権限やsudoは不要。python-devとしてこれをインストールしてやると、Genshiの高速化機能の恩恵を受けることができます。Tracを0.12.3から1.0.1にアップグレードするTracのアップグレードについては詳しい手順は​公式ドキュメントに譲ります。upgradeこれで、Tracは最新版(1.0.1)になりました。最後に、uwsgiの設定を更新しましょう。uwsgiの設定を書き換える本ブログの一番最初の記事に記載していますtrac.xmlがベースです。これを/etc/uwsgi/sites-available/trac.xmlとして準備します。最新版のuwsgi(2.0)では異なる部分が結構あるので、その場合以下は参考にできないかもしれません。アップグレードなので/etc/uwsgi/sites-enabled/trac.xmlは既に/etc/uwsgi/sites-available/trac.xmlのシンボリックリンクとして存在します。nginxの設定には変更はありません。最後に、uwsgiを再起動してアップグレード作業は完了です。restart次はnginxを1.4.4に、uwsgiを2.0にアップグレードしたいので勉強します。あとUpstartを用いて、uwsgiをソケットアクティベーション型の運用にしたいですね。(0)2つめのTracをホストしてみました大学や仕事のこと、私的なことなどといったプライベートなあれこれもチケット管理しようといった考えから、公開用であるこのTracプロジェクトとは別に、認証もかけて自分専用のプロジェクトをホストしようと思いました。同じホスト(同じサーバ)で2つのTracをホストした理由は、単にSSL証明書を節約するためです。例によって、任意のパスにTrac用のディレクトリを作成し、Trac化します。詳細は以前の投稿を参照のほど。/privateを設定し、パスを変える方法は失敗でした。いうと、Tracにprivateというハンドラがないからです。それから、uwsgiのSocketポートを変えただけでも、同様にだめでした。そんなにたくさん試行錯誤はしていません。使うやつなのでポート番号くらい非defaultでもいいだろということで、別のポートでlistenすることにしました。}}uwsgi_passのSocketポート番号は、ほかに走っているuwsgiアプリケーションと違うのに気をつけてください。同じだと破滅が起こります。このconfをsites-enabledにシンボリックリンク張って、uwsgiとnginxを再起動して完了。(0)nginxとuwsgiを使ってTracをホストしようこのTracをセットアップするのに多くの時間を費やし、文献を読みあさったのでここに手順やハマりどころをまとめておきます。そこらの文献というのはなぜかコマンドをどの権限やパスで実行するか明記していないケースがあるので、この記事ではコマンドの説明をするときはbashっぽくプロンプトの部分から記述します。12.04.2)以降、ホスト名はreimuと表します(このホストがreimu.x86-64.jpだから)必要なものをパッケージマネージャなり公式サイトなりから引っ張ってきます。わたしはaptを使って手を抜きました。依存環境などもまるまる降ってくるし、アップデートの適用もシステムと一緒にできるという恩恵にあずかれます。trac-gittrac-gitはTracでgit使いたいから入れておいたもので、必須ではありません。Uwsgi?わたしはWebサイトごとにユーザを作るスタイルを採用しているので、Trac用にユーザを作っちゃいます。tracnginxが走るグループは、環境によってはwww-dataではないかもしれません(httpdとか)ユーザ分けとかどうでもいい場合はwww-dataさんが参照できるディレクトリを用意するだけで大丈夫です。Tracのプロジェクトが入るディレクトリを適当に作り、Tracに付属しているTrac-admin?コマンドでそのディレクトリをTrac化します。Trac用のユーザを作らなかった場合はwww-data)で行います。initenvinitenvを行っているときに、プロジェクトの名称とデータベースファイルのパスを決められます。これがTracのタイトルとして反映されます。このTracなら真剣な悪ふざけになっています。UTF-8なら2バイト文字でもいいみたいです。このへんでTracの管理者アカウントを登録しておきましょう。TRAC_ADMINこれで、ユーザfooが管理者になりましたので、fooとしてhttp-auth-basic(以下Basic認証と記述)でログインできるように設定します(後述)。Tracについての、uwsgi用とnginx用のconfigを作ります。}}uwsgi用のconfで書いたソケットはportが7777なので、こちらのconfでもuwsgi_passを7777に設定しておきます。このようにして、nginxにアクセスがあったとき、uwsgiを通してTracのコンテンツを引っ張りにいく設定にします。ちなみにこのTracはSSL-enabledなので、ところどころSSLに関する設定が入っています。htpasswdを使って、Basic認証に使うアカウントを生成します。/path/to/your/.htpasswdこれによってユーザfooが含まれる.htpasswdが生成されたので、このユーザでログインすることでTracのWebインタフェースからの管理ができるようになりました。個人的にはここでroot以外が.htpasswdを読めるのがきもい。上で書いたconfigをenableします。/etc/uwsgi/apps-enabled/trac.xmluwsgiとnginxをrestartして完成。restartああそういえば:エラーが発生したときは、結構な確率でパーミッションがおかしいです。Tracを運用するにあたってwww-dataが読み書きできなくてはいけないファイルは、your_trac_project/conf/trac.iniyour_trac_project/db/trac.dbが大事です。これらのファイルについてwww-dataがrとwの権限を持っているかチェックしましょう。それからハマりどころとして、uwsgiの設定にてPythonのプラグインを使うことを明記しないとちゃんと動かなかったのでメモ。なんか抜けがある気がするので暇な時に検証します。athttp://trac.edgewall.org/。