Sorry, Japanese only.
OS は Cent OS 6 の 64 bit 版を想定しています. VPS のセットアップメモですが,Cent OS 共通の話題も多く含まれています.なお,セキュリティ上の都合により一部は伏せさせていただいております.
項目 | 説明 |
---|---|
OS | Cent OS 6 64 bit |
Disk | 50 GB |
Memory | 512 MB |
VPS | Osukini Server LT |
最終更新 | 11/December/2012 |
自分の覚書として書いているので安全性や完全性については保証いたしかねます.
Osukini Server を契約後,OS の再インストールから最小セットアップを選択する.今回は標準的に使われる Apache を使わず, MySQL もとりあえずは必要ないので一からセットアップすることにする.
useradd -m USERNAME
passwd USERNAME
USERNAME
は適宜自分の名前に変更する.二行目でパスワードを設定する.
ssh-keygen -t rsa
~/.ssh/id_rsa.pub
をリモートの ~/.ssh/authorized_keys
に追記パスワードによるログインを禁止.以下を追記する.(コメントを修正でもOK)
PasswordAuthentication no
ChallengeResponseAuthentication no
sshd を再起動してパスワードでログイン出来ないことを確認.
service sshd restart
Permission denied (publickey).
と表示されれば成功.セキュリティアップデートは自動でインストールしておくのが良い.
# yum install yum-cron
# service yum-cron start
# chkconfig yum-cron on
普段は root にならないほうが望ましいので, sudo を用いて必要なときだけ root になるようにする.
# visudo
で %wheel ALL=(ALL) ALL
の行のコメントを外す.#
がコメントなので,それを消せば良い.
# gpasswd -a USERNAME wheel
USERNAME
は自分のユーザー名にして実行する.これでグループ wheel
に USERNAME
を追加したことになる.
もし,以下の設定でソースコードからインストールしたソフトウエアをsudo
を使って実行したい場合には/usr/local/bin
をsecure_path
に加えておく必要がある.
Defaults secure_path = /usr/local/bin:/usr/local/sbin:/sbin:/bin:/usr/sbin:/usr/bin
のように書き換える.
最小セットアップでは開発ツールが一切入っていないので最低限のものをインストールする.
# yum install gcc gcc-c++ make
Extra Packages for Enterprise Linux
Cent OS はパッケージ管理システムから使えるパッケージが少ないので, EPEL でパッケージを追加する.
$ curl -O http://ftp.iij.ad.jp/pub/linux/fedora/epel/6/i386/epel-release-6-7.noarch.rpm
$ sudo rpm -ivh epel-release-6-7.noarch.rpm
paco - a source code pacKAGE oRGANIZER for Unix/Linux
paco はソースコードからインストールしたソフトウエアを管理してくれる. 当然ながらソースコードから入れたソフトウエアは自動アップデートの対象にはならない.
EPEL に収録されているのでインストールは簡単.
$ yum install paco
インストール済みのソフトウエアの確認は paco -ai
でできる.
tmux は GNU screen の代替ソフトウエアで縦分割や高速な動作を特徴としている. tmux を利用するためには libevent も必要なので,インストールする.
EPEL でも利用可能なので簡単に済ますならば yum install tmux
でインストールできる.ただ,すこし古いのでここではソースコードからインストールする.
$ tar xzf libevent-2.0.21-stable.tar.gz
$ cd libevent-2.0.21-stable
$ ./configure
$ make
$ sudo /usr/local/bin/paco -D make install
$ tar xzf tmux-1.7.tar.gz
$ cd tmux-1.7
$ ./configure
$ make
$ sudo /usr/local/bin/paco -D make install
これだけだと,tmux の起動時にtmux: error while loading shared libraries: libevent-2.0.so.5: cannot open shared object file: No such file or directory
と言われるのでさらに以下の設定をする.
/etc/ld.so.conf.d/local.conf
を開き
/usr/local/lib
と記述する.最後にsudo ldconfig
を実行し,libevent-2.0.so.5
を見つけられるようにする.
Cent OS 6 の Python は少し古いので最新版をインストールする. 最初にビルドに必要な依存ライブラリをいくつかインストールしている.GUI関係はインストールしていない.
$ yum install bzip2-devel readline-devel zlib-devel sqlite-devel openssl-devel gdbm-devel
$ curl -O http://www.python.org/ftp/python/2.7.3/Python-2.7.3.tar.bz2
$ tar xjf Python-2.7.3.tar.bz2
$ cd Python-2.7.3
$ ./configure
$ make
$ sudo paco -D make install
$ curl -O http://python-distribute.org/distribute_setup.py
$ sudo /usr/local/bin/python distribute_setup.py
$ sudo /usr/local/bin/easy_install pip
最後の方で distribute や pip もインストールしている.これによって簡単に 3rd-party のライブラリがインストールできる.
Firewall の iptables は難解なので簡単にセットアップできる ufw を使う. Pythonのセットアップを終えておくこと.
$ tar xzf ufw-0.33.tar.gz
$ sudo python setup.py install
$ sudo chmod -R g-w /etc/default/ufw /lib/ufw/ufw-init /etc/ufw/ /usr/local/sbin/ufw
起動スクリプトをインストール
$ sudo cp /lib/ufw/ufw-init /etc/init.d/ufw
/etc/init.d/ufw
を開き,冒頭のコメントの最後に# chkconfig: - 95 04
を追記する.
最後に設定を行って仕上げ
$ sudo ufw limit SSH
$ sudo service iptables stop
$ sudo service ufw start
$ sudo chkconfig iptables off
$ sudo chkconfig ufw on
Webサーバーとして最も有名なのは Apache だが,それほどスペックの高くないサーバーではより軽量な nginx の方が良い.動的ページを動かさなければセットアップも nginx の方が簡単だが動的ページは自力では動かせないので別のソフトウエアの助けを借りることになる(uWSGI など).
$ curl -O http://nginx.org/packages/centos/6/noarch/RPMS/nginx-release-centos-6-0.el6.ngx.noarch.rpm
$ sudo rpm -ivh nginx-release-centos-6-0.el6.ngx.noarch.rpm
$ sudo yum install nginx
$ sudo service nginx start
$ sudo chkconfig nginx on
Firewall でポートを開けておくのを忘れない. ufw なら ufw allow WWW
, Cent OS 6 標準の場合には sudo system-config-firewall-tui
で設定する.
設定ファイルは /etc/nginx/
以下にあり,設定ファイルの検証は nginx -t
でできる.
Supervisor: A Process Control System
Supervisor はスクリプトをデーモン化するためのソフトウエア.次のセクションの RhodeCode や uWSGI などを常時起動させるために使うと便利.
Python を使っているので先に Python のインストールを終えておくこと. EPEL にも収録されているので yum install supervisor
でもインストールできる.
$ sudo pip install supervisor
インストールは一瞬だが,SuperVisor 自体をデーモン化してあげる必要がある.ついでに必要なファイルを配置する. EPEL でインストールした場合には以下のファイルコピーは不要.
$ sudo cp /usr/local/lib/python2.7/site-packages/supervisor/skel/sample.conf /etc/supervisord.conf
以下の内容を/etc/init.d/supervisord
に保存する. EPEL にはからインストールした場合には不要.EPEL に含まれていたのものをベースにしている.
#!/bin/bash
#
# supervisord This scripts turns supervisord on
#
# Author: Y.Okamura (update for pip installed supervisor)
# Mike McGrath (based off yumupdatesd)
#
# chkconfig: - 95 04
#
# description: supervisor is a process control utility. It has a web based
# xmlrpc interface as well as a few other nifty features.
# processname: supervisord
# config: /etc/supervisord.conf
# pidfile: /var/run/supervisord.pid
#
# source function library
. /etc/rc.d/init.d/functions
RETVAL=0
supervisord="/usr/local/bin/supervisord"
PIDFILE="/var/run/supervisord.pid"
CONFIG="/etc/supervisord.conf"
start() {
echo -n $"Starting supervisord: "
$supervisord -j "$PIDFILE" -c "$CONFIG"
RETVAL=$?
echo
[ $RETVAL -eq 0 ] && touch /var/lock/subsys/supervisord
}
stop() {
echo -n $"Stopping supervisord: "
killproc supervisord
echo
[ $RETVAL -eq 0 ] && rm -f /var/lock/subsys/supervisord
}
restart() {
stop
start
}
case "$1" in
start)
start
;;
stop)
stop
;;
restart|force-reload|reload)
restart
;;
condrestart)
[ -f /var/lock/subsys/supervisord ] && restart
;;
status)
status supervisord
RETVAL=$?
;;
*)
echo $"Usage: $0 {start|stop|status|restart|reload|force-reload|condrestart}"
exit 1
esac
exit $RETVAL
次にサービスを有効化しておしまい.
$ sudo service supervisord start
$ sudo chkconfig supervisord on
RhodeCode は Github や BitBucket のようなリポジトリ管理システムのオープンソース実装.
git は yum でもインストールできるが, RhodeCode で使うためにはソースコードから入れたほうが良い. また,RhodeCode には専用のユーザーを追加して,そのユーザーで動かすことが推奨される. Python を使っているので先に Python のインストールを終えておくこと.
$ sudo yum install curl-devel expat-devel perl-ExtUtils-MakeMaker gettext-devel asciidoc xmlto
$ tar xzf git-1.8.0.1.tar.gz
$ make configure
$ ./configure --prefix /usr/local/ --without-tcltk
$ make all doc
$ sudo paco -D make install install-doc install-html
$ sudo pip install virtualenv
$ sudo useradd -rm -d /var/rhodecode -g nobody rhodecode
virtualenv は RhodeCode の環境を独立させるために使う. RhodeCode をインストールすると沢山のモジュールがバージョン指定でインストールされるが, virtualenv を使えば他の環境に影響を与えずにすむ. ここから専用ユーザーで作業する.
$ sudo su - rhodecode
$ virtualenv rhodecode
$ . ~/rhodecode/bin/activate
$ pip install rhodecode
これでインストールが終わるのでセットアップに移る.セットアップはドキュメントを参照する.
$ paster make-config RhodeCode production.ini
$ mkdir repo
$ paster setup-rhodecode production.ini
これでリポジトリの場所を聞かれたら/var/rhodecode/repo
と答えれば OK
次のコマンドを実行すると立ち上がる.
$ paster serve production.ini
ローカルで ssh USERNAME@VPS-ADDR -L 5000:localhost:5000
としてリモートの5000番ポートをローカルの5000番ポートに Port Forwarding することでhttp://127.0.0.1:5000/
で試すことができる.恒久的に起動させるためには Supervisor を使うと簡単で,以下の内容を/etc/supervisord.conf
に追記する.
[program:rhodecode]
command=/var/rhodecode/rhodecode/bin/paster serve /var/rhodecode/production.ini
autostart=true
autorestart=unexpected
user=rhodecode
stdout_logfile=/var/rhodecode/stdout.log
stderr_logfile=/var/rhodecode/stderr.log
directory=/var/rhodecode
sudo supervisorctl reread
で読み込んで実行すればデーモンとして実行される.
nginx での設定例は以下の通り.proxy.conf
はドキュメントにある.
# HTTPS server
#
upstream rc {
server 127.0.0.1:5000;
}
server {
listen 443;
server_name yourserver;
ssl on;
ssl_certificate cert.pem;
ssl_certificate_key cert.key;
ssl_session_timeout 5m;
ssl_protocols SSLv2 SSLv3 TLSv1;
ssl_ciphers HIGH:!aNULL:!MD5;
ssl_prefer_server_ciphers on;
location / {
root /usr/share/nginx/html;
index index.html index.htm;
}
location /rhodecode {
alias /var/rhodecode/rhodecode/lib/python2.7/site-packages/rhodecode/public;
satisfy any;
auth_basic "closed site";
auth_basic_user_file /somewhere/.htpasswd;
try_files $uri @rhode;
}
location @rhode {
proxy_pass http://rc;
include /etc/nginx/proxy.conf;
}
}
この例では SSL を使用し,さらにrhodecode
というディレクトリのなかにRhodeCodeを設置している.このようにサブディレクトリに設置する場合にはproduction.ini
の[filter:proxy-prefix]
の3行下をprefix = rhodecode
として,さらに[app:main]
の2行下のfilter-with = proxy-prefix
のコメントを外す.こうすることで RhodeCode をサブディレクトリに設置できる.
munin はシステムの状態を監視するためのツール.インストールはyum install munin
プラグインは/etc/munin/plugins
に配置されている.必要なものを取捨選択しておく.
munin-nodeの開始
sudo service munin-node start
sudo chkconfig munin-node on
Cronは自動的に登録されるので手動で登録する必要は無い.最後に適切に/etc/munin/munin.conf
を書き換えておしまい.