Tracと彼の友人であるGitolite、Nginx、UWSGI

おそらく誰もが素晴らしいOpenSourceプロジェクトTracを知っています。これにより、ソフトウェア開発のワークフローを整理できます。 ただし、その展開と構成は簡単な作業ではありません。 インターネット上の情報は散在しており、多くの場合、すでに古くなっています。 Nginx + UWSGIの束でGitoliteと統合されたTracを設定することにより、私はこれを自分で確認することができました。



タンバリンとの短い序曲の後、私はこのドキュメントを作成しました。これは、Tracプロジェクトを展開するためのほぼ段階的な指示です。 これが他の誰かに役立つことを願っています。



この手順は、基本的なLinux管理の知識とPythonパッケージのインストールシステムを持つユーザーを対象としています。 Ubuntu 12.04ディストリビューションを新たにインストールしたシステムでの展開プロセスについてはすぐに説明しますが、この情報は他のLinuxアセンブリのファンにとって役立つと思います。



Tracプロジェクトの初期化



Tracがシステムにインストールされていない場合、次の手順に従ってください。



sudo apt-get install python-pip sudo pip install babel sudo pip install "Trac==1.0"
      
      





次に、プロジェクトの場所ディレクトリを初期化する必要があります。 次の手順に従ってください:



 sudo adduser --disabled-password --gecos 'Trac' trac sudo addgroup tracsys sudo adduser trac tracsys sudo adduser `whoami` tracsys sudo mkdir -p /var/www/trac sudo trac-admin /var/www/trac initenv sudo chown -R nobody:tracsys /var/www/trac sudo chmod -R g+rwXs /var/www/trac tracd -p 8000 /var/www/trac/
      
      





tracsysグループの操作とプロジェクトディレクトリへの権限の割り当てを除いて、すべてが非常に簡単です。 しかし、これは、gitoliteとの統合と、Nginx + UWSGIバンドルに基づいたプロジェクトをホストする組織に影響を及ぼしました。



NginxとUWSGIを使用したホスティング



UWSGIはWSGIアプリケーションサーバーです。 Tracプロジェクトをその下で実行するには、WSGIアプリケーションの形式で提示する必要があります。 以下のスクリプトを使用してこれを行うことは難しくありません。 ファイル/home/trac/wsgi_trac.pyにコピーし、ユーザーtracを所有者にします。 次に、NginxおよびUWSGI構成ファイルを作成する必要があります。 Nginxの場合、このような場合のファイルは標準ですが、UWSGIの場合は微妙です。 WSGIは、ユーザーtracおよびグループtracsysの権限で開始されます。 wsgi_trac.nginxおよびwsgi_trac.uwsgi構成ファイルを以下にリストします。



wsgi_trac.py


 import os import sys import trac.web.main sys.stdout=sys.stderr os.environ['TRAC_ENV'] = '/var/www/trac' application = trac.web.main.dispatch_request
      
      





wsgi_trac.nginx


 server { listen 80; server_name trac.local; location / { include uwsgi_params; uwsgi_pass 127.0.0.1:5544; } }
      
      





wsgi_trac.uwsgi


 [uwsgi] uid=trac gid=tracsys chmod-socket=777 chown-socket=trac chdir = /home/trac socket = 127.0.0.1:5544 module = wsgi_trac:application processes = 2 master = 1
      
      





Nginxおよび/またはUWSGIがインストールされていない場合は、インストールします。 シンボリックリンクを使用して、構成ファイルをアクティブにし、サービスを再起動します。

 sudo apt-get install nginx uwsgi uwsgi-plugin-python sudo ln -s /home/trac/wsgi_trac.nginx /etc/nginx/sites-enabled/trac.conf sudo ln -s /home/trac/wsgi_trac.uwsgi /etc/uwsgi/apps-enabled/trac.ini sudo service nginx restart sudo service uwsgi restart
      
      







AccountManagerPluginプラグインのインストール



Trac 1.0ディストリビューションには、ユーザーアカウントを管理できるコンポーネントは含まれていません。 このために、さまざまなプラグインが使用されます。 この例では、 AccountManagerPluginプラグインが使用されます。 それをダウンロードして、卵の配布のようにビルドします。 結果のファイルを拡張子.eggでプラグインディレクトリにコピーします。この例では/ var / www / trac / pluginsです。 行をtrac.iniファイルに追加します。

 [components] trac.web.auth.LoginModule = disabled acct_mgr.web_ui.LoginModule = enabled acct_mgr.web_ui.RegistrationModule = enabled
      
      





HtDigest形式のファイルはパスワードの保存に使用されます。このため、 trac.iniファイルにも次の行を追加します。

 [account-manager] authentication_url = force_passwd_change = False hash_method = HtDigestHashMethod htdigest_realm = trac htpasswd_hash_type = crypt password_file = /var/www/trac/db/users.htdigest password_store = HtDigestStore persistent_sessions = False refresh_passwd = False user_lock_max_time = 0 verify_email = False
      
      





その後、ユーザーの登録を許可するアイテムがWebインターフェイスに表示されます。 ユーザーを登録します。 そして、コマンドを実行して管理者を任命します。

 trac-admin /var/www/trac permission add <  > TRAC_ADMIN
      
      





これで管理者ができました。管理者の下で、他のユーザーに権限を作成、削除、割り当てることができます。 新しいユーザー登録フォームへのリンクがWebインターフェースでアクティブになっていることに注意してください。ユーザーがプロジェクトに独立して登録していない場合は、無効にします。 AccountManagerPluginプラグイン構成の形式でc RegistrationModuleチェックを外すことにより、プラグイン管理のadminセクションでこれを既に行うことができます。



Gitoliteの統合



Gitリポジトリを管理するための優れたGitoliteツールがあり、これはTracプロジェクトと統合することもできます。 これを行うには、次の手順を実行します。





 sudo apt-get install gitolite sudo adduser --home /home/gitolite --disabled-password --gecos 'Git' git sudo adduser git tracsys sudo su trac cd ~ ssh-keygen -t rsa cp ~/.ssh/id_rsa.pub /tmp/trac.pub exit
      
      





次のステップは、gitユーザーとしてgitolite作業ディレクトリーを初期化することです。 これにより、「$ REPO_UMASK = 0077;」行を修正する必要がある構成ファイルが開きます。 「$ REPO_UMASK = 0007;」へ。 vimに問題がある場合は、ZZを押してください。 ファイル/home/gitolite/.gitolite.rcを編集することで、後でマスクを変更できます。 Tracプロジェクトのディレクトリに割り当てられた権限と同じ権限をリポジトリのディレクトリに割り当てます。

 sudo su git cd ~ gl-setup /tmp/trac.pub exit sudo chown -R git:tracsys /home/gitolite/repositories/ sudo chmod -R g+rwXs /home/gitolite/repositories/
      
      





TracプロジェクトのGitとの統合を可能にするために残っています。 これを行うには、 trac.iniに次の行を追加します。

 [components] tracopt.versioncontrol.git.* = enabled [trac] repository_type = git
      
      





管理パネルの[リポジトリ]セクションで、テストリポジトリgitolite /home/gitolite/repositories/testing.gitを名前testingに、コントロールリポジトリ/ home / gitolite / repositories / gitolite-admin.gitを名前gitolite-adminに接続します。 すべてが正しく行われた場合、両方が表示されるWebインターフェイスメニューに[ソースコード]セクションが表示されます。



すべて順調ですが、Tracプロジェクトのインターフェースを介してGitoliteリポジトリを管理したいと思います。 問題ではありませんが、 trac-GitolitePluginプラグインはこの問題に役立ちます。 上記のページからダウンロードして、eggディストリビューションのようにビルドします。 結果のファイルをプラグインディレクトリにコピーし、 trac.iniファイルに次の行を追加してアクティブにします。

 [components] trac_gitolite.* = enabled [trac] permission_policies = GitolitePermissionPolicy, AuthzPolicy, DefaultPermissionPolicy, LegacyAttachmentPolicy [trac-gitolite] admin_reponame = gitolite-admin admin_real_reponame = gitolite-admin admin_ssh_path = git@localhost:gitolite-admin.git admin_system_user = trac default_private = True all_includes_anonymous = False
      
      





その後、管理パネルに新しいセクションが表示され、ユーザーをGitoliteに追加して、リポジトリに権限を割り当てることができます。 ただし、最初のユーザーの追加中に、git cloneコマンドgit @ localhost:gitolite-admin.git / tmp / bla-blaを実行するとエラーが発生しました。 ユーザーtracの下からこのコマンドを実行し、キーの追加を手動で確認する必要がありましたが、すべて問題なく動作しました。



TracとGitの最も興味深い統合機能の1つを実装することは残っています。これにより、コミットでコードワードを指定してチケットをクローズします。 たとえば、「close#777」という行を含むコミットは、対応するチケットを自動的に閉じます。 これを行うには、まず管理パネルから、またはtrac.iniファイルに次の行を追加して、 CommitTicketUpdaterコンポーネントをアクティブにする必要があります。

 [components] tracopt.ticket.commit_updater.* = enabled
      
      





次に、ディレクトリ/ var / www / trac / hooksなどに、対応するフック実装するPythonスクリプトをダウンロードします。 特定のTracプロジェクトの場所と設定に基づいて設定する必要がある設定セクションがあります。 この場合、次のようになります。

 # config TRAC_ENV = '/var/www/trac' GIT_PATH = '/usr/bin/git' TRAC_ADMIN = '/usr/local/bin/trac-admin' #REPO_NAME = '(default)' # if you are using gitolite or sth similar, you can get the repo name from envir REPO_NAME = os.getenv('GL_REPO')
      
      





Gitoliteには、適切に登録されたフックを整理するための独自のシステムがあり、制御するすべてのリポジトリで機能します。これはまさに必要なものです。 これを行うには、ユーザーgitとして次のコンテンツを含む〜/ .gitolite / hooks / post-receiveファイルを作成します。

 #!/bin/bash python /var/www/trac/hooks/trac-post-receive-hook-0.12-new-commits-from-all-branches.py
      
      





最後に、次のコマンドを実行してこのフックをアクティブにします。

 sudo su git cd ~/.gitolite/hooks/ chmod 755 post-receive gl-setup
      
      





おわりに



私の記事が誰かがこの問題に対処するのに役立つか、少なくとも時間を節約することを願っています。



All Articles