2010年1月3日日曜日

Install Tutorial: Ubuntu 9.10, Apache with SSL, Subversion over HTTP / HTTPs(digest authentication), and Trac

例によって
Install Tutorial: Ubuntu 9.04, Apache with SSL, Subversion over HTTP / HTTPs, and Trac - NewInstance
http://en.newinstance.it/2009/08/27/tutorial-ubuntu-904-apache-with-ssl-subversion-over-http-https-and-trac/
を元ネタ・たたき台にする。


-http/httpsで同じコンテンツが見られるようにする
-Subversion/tracの認証はdigest

SVNクライアントはrapidsvn,kdesvnなどが良い。

SSLの証明書については
[SOLVED] HOWTO How to renew an expired Dovecot IMAP/POP3 SSL certificate - Ubuntu Forums
http://ubuntuforums.org/showthread.php?t=707161
などを参照。

sudo cat /etc/ssl/private/ssl-cert-snakeoil.key
であらかじめ入っているものが見られる。


apt-getでのインストール時に必要であれば--no-install-recommendsというオプションをつける。


Apache2,Subversionをいれる。
$ sudo apt-get install subversion curl apache2 libapache2-svn

-Apache2の設定を整理する
$ sudo a2dissite default
$ sudo /etc/init.d/apache2 stop

http/httpsで同じ内容を見せる際にdefault/default-sslの両方の内容を同じように編集するのは無駄なので片寄せする
$ cd /etc/apache2/sites-available/
$ sudo cp default 100-default
$ sudo cp default 101-default-core
$ sudo cp default-ssl 102-default-ssl

100と102が101の設定をincludeするように設定する。
101を変更すれば100(http),102(https)のディレクトリ構成が同時に変更される。


最初と最後のVirtualHostの行を削る
$ sudo gedit 101-default-core
ServerAdmin webmaster@localhost

DocumentRoot /var/www
<Directory />
Options FollowSymLinks
AllowOverride None
</Directory>
<Directory /var/www/>
Options Indexes FollowSymLinks MultiViews
AllowOverride None
Order allow,deny
allow from all
</Directory>

ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/
<Directory "/usr/lib/cgi-bin">
AllowOverride None
Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
Order allow,deny
Allow from all
</Directory>

ErrorLog /var/log/apache2/error.log

# Possible values include: debug, info, notice, warn, error, crit,
# alert, emerg.
LogLevel warn

CustomLog /var/log/apache2/access.log combined

Alias /doc/ "/usr/share/doc/"
<Directory "/usr/share/doc/">
Options Indexes MultiViews FollowSymLinks
AllowOverride None
Order deny,allow
Deny from all
Allow from 127.0.0.0/255.0.0.0 ::1/128
</Directory>

最初と最後のVirtualHost以外を消してIncludeに置き換える
$ sudo gedit 100-default
<VirtualHost *:80>
Include /etc/apache2/sites-available/101-default-core
</VirtualHost>

VirtualHost内のServerAdmin~Directoryタグの内容をIncludeに置き換える
$ sudo gedit 102-default-ssl
<IfModule mod_ssl.c>
<VirtualHost _default_:443>
Include /etc/apache2/sites-available/101-default-core

# SSL Engine Switch:
# Enable/Disable SSL for this virtual host.
SSLEngine on
$ sudo gedit ../ports.conf
IfModuleの所にNameVirtualHost *:443を追加する
NameVirtualHost *:80
Listen 80

<IfModule mod_ssl.c>
# SSL name based virtual hosts are not yet supported, therefore no
# NameVirtualHost statement here
NameVirtualHost *:443
Listen 443
</IfModule>

siteのload
$ sudo a2ensite 100-default
$ sudo a2ensite 102-default-ssl

Apacheの起動
$ sudo a2enmod ssl
$ sudo /etc/init.d/apache2 start

動作確認
$ curl http://localhost/
$ curl -k https://localhost/


/varの容量を割り当てるのは熟練した運用の経験が必要な為、/home以下に各種環境を構築する

$ sudo mkdir /home/svn
任意のproject名でdirectoryを作る。ここでは「project1」
$ sudo mkdir /home/svn/project1
$ sudo chown www-data.www-data /home/svn/project1
$ sudo -u www-data svnadmin create /home/svn/project1

(必要に応じてバックアップ$ sudo cp /etc/apache2/mods-available/dav_svn.conf /etc/apache2/mods-available/dav_svn.conf.bak)
$ sudo gedit /etc/apache2/mods-available/dav_svn.conf

末尾に以下を追加
<Location /svn/project1>
DAV svn
SVNPath /home/svn/project1
AuthType Digest
AuthName "project1"
AuthUserFile /etc/subversion/project1.passwd
Require valid-user
</Location>

$ sudo htdigest -c /etc/subversion/project1.passwd "project1" svnuser
-cは新しくpasswdファイルを作る場合。""の中はAuthNameで設定したもの。最後が追加するユーザー名。
$ sudo a2enmod auth_digest
$ sudo /etc/init.d/apache2 restart

*ここではpasswordは「test」にした場合
$ curl --digest http://svnuser:test@localhost/svn/project1/
$ curl --digest -k https://svnuser:test@localhost/svn/project1/


tracのインストール

$ sudo apt-get install trac libapache2-mod-python
$ sudo mkdir /home/trac
$ sudo chown www-data.www-data /home/trac

100と102に読み込まれるtracの共通設定103を作る。
$ sudo gedit /etc/apache2/sites-available/103-default-trac

<Location /trac>
SetHandler mod_python
PythonInterpreter main_interpreter
PythonHandler trac.web.modpython_frontend
PythonOption TracEnvParentDir /home/trac
PythonOption TracUriRoot /trac
PythonOption PYTHON_EGG_CACHE /tmp
</Location>

<LocationMatch "/trac/[[:alnum:]]+/login">
AuthType Digest
AuthName "trac"
AuthUserFile /etc/trac/trac.passwd
Require valid-user
</LocationMatch>

100(http)に103を読み込む
$ sudo gedit /etc/apache2/sites-available/100-default
<VirtualHost *:80>
Include /etc/apache2/sites-available/101-default-core
Include /etc/apache2/sites-available/103-default-trac
</VirtualHost>


102(https)に103を読み込む
$ sudo gedit /etc/apache2/sites-available/102-default-ssl
<IfModule mod_ssl.c>
<VirtualHost _default_:443>
Include /etc/apache2/sites-available/101-default-core
Include /etc/apache2/sites-available/103-default-trac

101と103を読み込むものを作ってそれを100,102で読み込んでも良い。

$ sudo htdigest -c /etc/trac/trac.passwd "trac" svnuser
$ sudo -u www-data trac-admin /home/trac/project1 initenv

Project Name [My Project]> project1
Database connection string [sqlite:db/trac.db]>
Repository type [svn]>
Path to repository [/path/to/repos]> /home/svn/project1

$ sudo /etc/init.d/apache2 restart
$ sudo -u www-data trac-admin /home/trac/project1 permission add svnuser TRAC_ADMIN


sites-availableに単体で完結しないsite設定があるのが気持ち悪い場合はどうしたものか。
-/etc/subversion/project1.passwd
-/etc/trac/trac.passwd
これらsvnとtracの認証のpasswdはrealmを同じにすれば統一出来るので一括して変更が可能になる。


to doというか備忘録というか後でやるLDAP
http://blog.acmelab.org/2007/09/02/ubuntu-server-setup-lampldapsvntracmoinmoin/

0 件のコメント:

コメントを投稿