2013/03/21

Sphinxで簡単にオレオレWebページ作った時のメモ


先日ひょんなことからSphinxでオレオレWebページを作ったのでその時のメモ。
環境はさくらVPS1GのUbuntu12.04にて。
WebサーバはApacheでも良かったんだろうけど、Nginxで、source部分はGitで管理。


必要なツールのインストール

 
sudo aptitude install nginx apache2-utils git-core python-sphinx make
 

ユーザーやディレクトリなどの基本的な環境設定
方針としてsourceをgitで管理し、そのbareリポジトリも同一サーバ上に乗っける感じにします。
またmakeして生成したHTMLをまんま公開するんで
www-data ユーザー管理のディレクトリ配下にsphinxのプロジェクトを配置する感じで。

ユーザー作成
※ sphinxユーザーはwww-dataのエイリアス
 
sudo useradd -s /usr/bin/git-shell -m -d /home/git git
sudo useradd -s /bin/bash -m -d /home/sphinx -u $(id -u www-data) -o -g www-data sphinx
 

Sphinx source用Gitリポジトリの作成
 
cd /home/git
sudo -u git git init --bare sphinx-source.git
 
hooksやSSH公開鍵の設定なども。
 
## Pushされた際に自動的にHTML をビルドするようにHooksを仕込む
sudo sh -c 'echo "git    ALL=(ALL:ALL) NOPASSWD: /usr/bin/git, /usr/bin/make" >> /etc/sudoers'

cd sphinx-source.git/hooks
sudo cp -ip post-update.sample post-update
sudo sh -c '
cat > post-update << EOF
#!/bin/sh

cd /home/sphinx/project/source && sudo -u sphinx git --git-dir=.git pull
cd /home/sphinx/project        && sudo -u sphinx make html
EOF
'

## SSH公開鍵の設定もやっておく
sudo -u git mkdir -m 700 /home/git/.ssh
sudo -u git sh -c '
cat >> /home/git/.ssh/authorized_keys << EOF
ssh-rsa ****************************************************...
ssh-rsa ****************************************************...

EOF
'
sudo chmod 600 /home/git/.ssh/authorized_keys
 

Sphinx Projectの作成
 
sudo su - sphinx
mkdir project

cd project
sphinx-quickstart
 
ここで対話画面になりますが、
You have two options for placing the build directory for Sphinx output.
Either, you use a directory "_build" within the root path, or you separate
"source" and "build" directories within the root path.
> Separate source and build directories (y/N) [n]: y
sourceとbuildのディレクトリは分けたいんでここだけyと入力しておけば
他はデフォルトで問題ないかと。

(続き)
 
## sourceのGit管理
cd source
git config --global user.name "Sphinx User"
git config --global user.email "null@localhost"
git init
git remote add origin /home/git/sphinx-source.git
git add .
git commit -am "First Commit"

### 初回Push
exit
cd /home/sphinx/project/source
sudo git push -u origin master
sudo chown -R git. /home/git/sphinx-source.git/
sudo chown -R sphinx. /home/sphinx/project/source/.git/
 

Nginxの設定
静的コンテンツなんで特に突っ込んだことする必要もないんだろうけど、、
 
cd /etc/nginx/

## Basic認証設定
sudo mkdir auth
sudo htpasswd -c auth/sphinx hogehoge
sudo htpasswd    auth/sphinx hugahuga
  # 2回目以降は-cオプションは不要、ユーザーごとにパスワード設定

sudo sh -c 'cat >> site-available/sphinx << EOF
server {
    listen 80
    server_name sphinx.example.com;

    root /home/sphinx/project/build/html;
    index index.html;

    auth_basic "Basic Auth";
    auth_basic_user_file "/etc/nginx/auth/sphinx";

    accsess_log "/var/log/nginx/sphinx-accsess.log";
    error_log "/var/log/nginx/sphinx-error.log";
}
EOF
'

sudo ln -s ../site-available/sphinx sites-enabled/sphinx.example.com

sudo service nginx configtest
sudo service nginx reload
 


こんな感じでやっておけば、
 
git clone git@sphinx.example.com:sphinx-source.git
 
してsourceの部分だけいじることに専念できて、
Pushすれば自動的に
http://sphinx.example.com
のWeb画面も更新って感じで結構使い勝手良いのではないでしょうか。

突っ込んで色々やったほうがいいこともあるかもですが、
クイックスタート的にはこれで十分ではないかと。


ではではお疲れ様でしたー。