2013年1月27日日曜日

ServersMan@VPS サーバ構築 (Django版)

ServersMan@VPS Entryプランでサーバを構築して、Djangoを使うまでのアレコレをスクリプトに纏めたので、公開しておきます。

apt-get でインストールできないパッケージがイロイロあるので、ソースからビルドしたり..
結構、面倒でした。

1.環境

OS : Ubuntu10.04 (32bit)

2.概要

主な流れは、次の通り。

  • Serversman を削除
  • iptables で、ファイヤーウォール設定
  • apt-get で mosh denyhosts mysql-server などをインストール
  • Python2.7
  • pip
  • Django MySQL-python
  • MeCab mecab-ipadic mecab-python (形態素解析できます)
  • mod_wsgi
  • /etc/apache2/httpd.conf に wsgi の設定

利用する場合は、<IPアドレス> と <ユーザ名> を書きかえてください。

3.手順

-- ここから --
※ L:はローカル(PC)、R:はリモート(VPS) です。

L:$ ssh root@<IPアドレス> -p 3843
> パスワード入力

R:# vi setup.sh
--
#!/bin/sh
/etc/init.d/smadmd stop
dpkg -P smadmin
dpkg -P serversman
### iptables ###
iptables -F
iptables -X
iptables -P INPUT DROP
iptables -P OUTPUT ACCEPT
iptables -P FORWARD DROP
iptables -A INPUT -i lo -j ACCEPT
iptables -A OUTPUT -o lo -j ACCEPT
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT -p tcp --dport 80 -j ACCEPT
iptables -A INPUT -p tcp --dport 3843 -j ACCEPT
iptables -A INPUT -p udp -m udp --dport 60000:61000 -j ACCEPT
iptables-save > /etc/iptables.rules
fl="/etc/network/if-pre-up.d/iptables_start"
cat > $fl <<_EOF_
#!/bin/sh
/sbin/iptables-restore < /etc/iptables.rules
exit 0
_EOF_
chmod 755 $fl
### Install PKG ###
sed -i".bak" -e 's/archive.ubuntu.com/jp.archive.ubuntu.com/g' /etc/apt/sources.list
apt-get update
apt-get install python-software-properties
add-apt-repository ppa:keithw/mosh
apt-get update
apt-get upgrade
apt-get install mosh language-pack-ja denyhosts phpmyadmin mysql-server gcc zlib1g-dev g++ apache2-dev
### Python2.7 ###
# apt-get install gcc zlib1g-dev
cd /usr/local/src
wget http://python.org/ftp/python/2.7/Python-2.7.tar.bz2
tar jxvf Python-2.7.tar.bz2
cd Python-2.7
./configure --prefix=/usr/local
make
make install
### pip ###
cd /usr/local/src
wget http://pypi.python.org/packages/source/s/setuptools/setuptools-0.6c11.tar.gz
tar xzvf setuptools-0.6c11.tar.gz
cd setuptools-0.6c11
/usr/local/bin/python2.7 setup.py install
easy_install pip
pip install yolk Django==1.3 MySQL-python
### MeCab ###
# apt-get install g++
cd /usr/local/src
wget http://mecab.googlecode.com/files/mecab-0.99.tar.gz
tar zxvf mecab-0.99.tar.gz
cd mecab-0.99/
./configure --enable-utf8-only
make
make install
ldconfig
cd /usr/local/src
wget http://mecab.googlecode.com/files/mecab-ipadic-2.7.0-20070801.tar.gz
tar zxvf mecab-ipadic-2.7.0-20070801.tar.gz
cd mecab-ipadic-2.7.0-20070801/
./configure --with-charset=utf8
make
make install
cd /usr/local/src
wget http://mecab.googlecode.com/files/mecab-python-0.99.tar.gz
tar zxvf mecab-python-0.99.tar.gz
cd mecab-python-0.99/
python setup.py build
python setup.py install
### mod_wsgi ###
# apt-get install apache2-dev
cd /usr/local/src
wget https://modwsgi.googlecode.com/files/mod_wsgi-3.4.tar.gz
tar xzf mod_wsgi-3.4.tar.gz
cd mod_wsgi-3.4
./configure --with-python=/usr/local/bin/python2.7 --with-apxs=/usr/bin/apxs2
make
make install
fl="/etc/apache2/httpd.conf"
cat > $fl <<_EOF_
LoadModule wsgi_module /usr/lib/apache2/modules/mod_wsgi.so
WSGIScriptAliasMatch / /home/akira/django/django.wsgi
WSGIScriptAliasMatch ^/site([^/]+) /home/site\$1/django/django.wsgi
_EOF_
a2enmod userdir
mkdir /etc/skel/public_html
/etc/init.d/apache2 restart
### USER ###
adduser <ユーザ名> --ingroup sudo
usermod -L root
##
cd
rm setup.sh
--
R:# sh setup.sh
R:# exit

L:$ mosh <ユーザ名>@<IPアドレス> -p 3843
R:$ mkdir django
R:$ cd ~/django
R:$ vi django.wsgi
--
import os, sys, site
site.addsitedir(os.path.dirname(__file__))
os.environ['DJANGO_SETTINGS_MODULE'] = 'mysite.settings'
import django.core.handlers.wsgi
application = django.core.handlers.wsgi.WSGIHandler()
--

2013年1月10日木曜日

ServersMan@VPS sshfs で リモートマウント

ふと、「ssh でサーバ(Ubuntu10.04)のディレクトリをマウントする方法は無いのか??」と思い、Google で検索してみると、みごとにヒット。

クライアント側(Xubuntu12.04)に sshfs をインストールするだけでした。
すばらしい。

1.インストール (クライアント側)

$ sudo apt-get install sshfs

2.マウント用ディレクトリを作る

$ mkdir <マウントポイント>

<マウントポイント> : 任意のディレクトリ名

3.マウント

$ sshfs [-p <接続ポート>] [アカウント@]<サーバ>:[ディレクトリ] <マウントポイント>

<サーバ> の後ろの ":" を忘れないように。

4.アンマウント

$ fusermount -u <マウントポイント>

これさえあれば、FTP も必要無いし、クライアント側の環境でプログラムも書けるし、イッキに便利になると思う。
とりあえず、一歩前進。

参考
http://l-w-i.net/t/ubuntu/sshfs_001.txt

2013年1月5日土曜日

ServersMan@VPS Python2.7を使う(その2)

Ubuntu10.04 で、Python2.7とDjango1.3を使うのに、試行錯誤中。

Django の公式ドキュメントには、
Apache と mod_wsgi の組み合わせは、推奨の Django の実運用環境です。
と、あります。

Django1.3 の指定は、django.wsgi に記述することで OK だけど、Python のバージョンを指定する方法が分からない..

WSGI のドキュメントには、WSGIPythonHome で指定できるように書かれているが、これはダメでした。

で、なんとか解決できそうな目処がついたので、メモっておきます。

1.Python2.7 インストール

Python 本体は、/usr/local に入れました。

# apt-get install gcc zlib1g-dev
# cd /usr/local/src
# wget http://python.org/ftp/python/2.7/Python-2.7.tar.bz2
# tar jxvf Python-2.7.tar.bz2
# cd Python-2.7
# ./configure --prefix=/usr/local
# make
# make install

2.mod_wsgi インストール

apt-get install libapache2-mod-wsgi でインストールすると、システムで使っている
Python2.6.5 が適用されるので、ソースから make しました。

# apt-get install apache2-dev
# cd /usr/local/src
# wget https://modwsgi.googlecode.com/files/mod_wsgi-3.4.tar.gz
# tar xzf mod_wsgi-3.4.tar.gz
# cd mod_wsgi-3.4
# ./configure --with-python=/usr/local/bin/python2.7 --with-apxs=/usr/bin/apxs2
# make
# make install

こちらに、入りました。
/usr/lib/apache2/modules

モジュールを有効にします。
# vi /etc/apache2/httpd.conf
--
LoadModule wsgi_module /usr/lib/apache2/modules/mod_wsgi.so
WSGIScriptAlias / /home/USERNAME/django/django.wsgi
--
# /etc/init.d/apache2 restart

※ とりあえず、ユーザディレクトリ(/home/..)で動作を確認。

3.virtualenv インストール

Django を、ユーザのディレクトリに入れる為に、virtualenv をインストール。

$ cd
$ mkdir src
$ cd ~/src
$ wget http://pypi.python.org/packages/source/v/virtualenv/virtualenv-1.6.4.tar.gz
$ tar xzf virtualenv-1.6.4.tar.gz
$ cd virtualenv-1.6.4
$ python virtualenv.py --python=/usr/local/bin/python2.7 ~/mypython

アクティブにします。
$ source ~/mypython/bin/activate

4.Django1.3 インストール

$ pip install Django==1.3

5.django.wsgi を作る

$ cd
$ mkdir django
$ cd django
$ vi django.wsgi
--
import os, sys, site
site.addsitedir('/home/USERNAME/django')
os.environ['DJANGO_SETTINGS_MODULE'] = 'mysite.settings'
sys.path.append('/home/USERNAME/mypython/lib/python2.7/site-packages')
import django.core.handlers.wsgi
application = django.core.handlers.wsgi.WSGIHandler()
--

※ site.addsitedir でプロジェクトのディレクトリーを、sys.path.append でDjango本体のパスを指定しています。

6.Django プロジェクトを作る。

ここからは、チュートリアルを参考に。

$ cd ~/django
$ django-admin.py startproject mysite
$ cd mysite
$ python manage.py startapp polls

で、一応、動作確認まで、こぎつけることが出来ました。

2013年1月1日火曜日

ServersMan@VPS Python2.7を使う

Ubuntu10.04に入っている Python は、バージョン 2.6.5 。
いつも使っているバージョン(2.7)を使いたいので、ユーザのホームディレクトリに入れておきます。

1.ライブラリ(gcc,zlib)を入れておきます。

$ sudo apt-get install gcc zlib1g-dev

2.Python2.7 インストール

$ cd
$ mkdir local
$ mkdir src
$ cd ~/src
$ wget http://python.org/ftp/python/2.7/Python-2.7.tar.bz2
$ tar jxvf Python-2.7.tar.bz2
$ cd Python-2.7
$ ./configure --prefix=$HOME/local
$ make
$ make install

3.Virtualenv インストール

$ cd ~/src
$ wget http://pypi.python.org/packages/source/v/virtualenv/virtualenv-1.6.4.tar.gz
$ tar xzf virtualenv-1.6.4.tar.gz
$ cd virtualenv-1.6.4
$ python virtualenv.py --python=$HOME/local/bin/python2.7 ~/mypython
$ source ~/mypython/bin/activate

4.Django1.3 インストール

ついでに、Django1.3 も入れておきましょう。

$ pip install Django==1.3
$ pip install yolk
$ yolk -l

参考

https://plus.google.com/105835326498095858930/posts/8QFA2vPcMAR

2012年12月31日月曜日

ServersMan@VPS テザリングでssh接続

VPSに、スマホのテザリングでssh接続すると、ブチブチ切れまくり。
回線速度が遅いからかなぁ??とか、相性の問題かなぁ??とか、しばらく悩んだ。

ネットで調べてみると、どうも、テザリングのNATが怪しい。

ちなみに、動作環境は、以下の通り。

スマホ: MEDIAS N-04C (root化済み)
回線  : イオンSIM
アプリ: Barnacle Wifi Tether
ローカルPC: LaVie Ligth BL100/S (Xubuntu 12.04)

いろいろな回避方法があるみたいだけど、とりあえず、サーバ側の設定を変更してみた。

/etc/ssh/sshd_config に、2行追加。
ClientAliveInterval 15
ClientAliveCountMax 3

こちらを参考にさせて頂きました。
http://hnw.jp/documents/unixmemo/ssh-keepalive.html

しかし、これでもダメなので、Mosh を使ってみることに。

Mosh とは
http://mosh.mit.edu/

1.ローカルPC(Xubuntu12.04)へ Mosh インストール

L:$ sudo apt-get install mosh

2.ServersMan@VPS(Ubuntu10.04)へ Mosh インストール

R:# apt-get install python-software-properties
R:# add-apt-repository ppa:keithw/mosh
R:# apt-get update
R:# apt-get install mosh
R:# apt-get install language-pack-ja

※ ロケールを設定しておかないと、接続できませんでした。

3.ServersMan@VPS(ubuntu10.04)のsshポート変更

デフォルトの 22 に戻しておきます。

R:# vi /etc/ssh/sshd_config

Port 22

4.ローカルPC から、VPSに接続

L:$ mosh USERNAME@xxx.xxx.xxx.xx

実際に使ってみると、レスポンスも良くって、とても快適です。
でも、Port 22 は、リスクがあるので、本番環境では使えないなぁ。残念。

おまけ

# vi mosh.sh
--
#!/bin/sh
sed -i".bak" -e 's/Port 3843/Port 22/g' /etc/ssh/sshd_config
/etc/init.d/ssh reload
sed -i".bak" -e 's/archive.ubuntu.com/jp.archive.ubuntu.com/g' /etc/apt/sources.list
apt-get update
apt-get install python-software-properties
add-apt-repository ppa:keithw/mosh
apt-get update
apt-get install mosh language-pack-ja
--

追記 2013/1/6

クライアントから接続する時のsshポート番号を指定出来ました。

L:$ echo "Port 3843" > ~/.ssh/config

こちら -> http://pspfour.blog106.fc2.com/blog-entry-1069.html

2012年12月25日火曜日

新東名高速道路を初走行。

有休休暇をとって、少し早い冬休みに突入。
昨日(12/24)は、横浜→大阪に移動。

新東名高速道路が開通してから、初めての走行でした。
カーブも緩やかで、アップダウンも少なく、とても快適。
早く、全線開通しないかなぁ。

遠州森町PAで、ちょっとおしゃれなオブジェを見つけ、パチリと一枚。


ドライブのナビは、スマホに標準で入っている「ナビ」アプリで。
車に付いてるナビ君は、地図情報が古いので、新東名を走っている間は、空中散歩状態。(^^;;

今さらですが、「ナビ」アプリ、最高!!

2012年12月23日日曜日

ServersMan@VPS ファイアウォール設定

Ubuntu のファイアウォールは、UFW がスタンダードっぽいので、これを使ってみます。

1.インストール

# apt-get install ufw

2.設定

とりあえず、ssh(3843)と www(80)を許可しておきます。
※ ssh(3843)を許可しておかないと、サーバにログインできなくなります。(これ大事)

# ufw allow 3843
# ufw allow 80

3.ファイアーウォール有効化

ファイアーウォールを有効にします。
次回サーバ起動時も自動的に立ち上がってくれるので、楽ちん。

# ufw enable

4.ステータス確認

# ufw status verbose

デフォルトで「外からの通信は全て拒否」「中からの通信は全て許可」となっています。
Default: deny (incoming), allow (outgoing)

5.denyhosts

ついでに、denyhosts も入れておきましょう。

# apt-get install denyhosts

--
初期化からの流れは以下の通り。
※ 以下、L:はローカル(PC)、R:はリモート(VPS) です。

L:$ ssh root@xxx.xxx.xxx.xx -p 3843
R:# adduser USERNAME --ingroup sudo
R:# usermod -L root
R:# su - USERNAME
R:$ sudo apt-get update
R:$ sudo apt-get upgrade
R:$ sudo apt-get install xubuntu-desktop ufw denyhosts
R:$ sudo ufw allow 3843
R:$ sudo ufw allow 80
R:$ sudo ufw enable
R:$ sudo ufw status verbose
R:$ exit
R:# exit
L:$ xhost +
L:$ ssh -XC USERNAME@xxx.xxx.xxx.xx -p 3843
R:$ xfce4-appfinder &

2013/1/6 追記

UFW は、OpenVZ と相性が良くないそうです。
すなおに、iptables で設定しました。

1.iptables 設定

iptables -F
iptables -X
iptables -P INPUT DROP
iptables -P OUTPUT ACCEPT
iptables -P FORWARD DROP
iptables -A INPUT -i lo -j ACCEPT
iptables -A OUTPUT -o lo -j ACCEPT
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT -p tcp --dport 80 -j ACCEPT
iptables -A INPUT -p tcp --dport 3843 -j ACCEPT
iptables -A INPUT -p udp -m udp --dport 60000:61000 -j ACCEPT

2.設定内容を保存

iptables-save > /etc/iptables.rules

3.Ubuntu 起動時に有効化

vi /etc/network/if-pre-up.d/iptables_start
--
#!/bin/sh
/sbin/iptables-restore < /etc/iptables.rules
exit 0
--
chmod 755 /etc/network/if-pre-up.d/iptables_start

※ シェルスクリプトを書いて、権限を付与します。

おまけ

### iptables ###
iptables -F
iptables -X
iptables -P INPUT DROP
iptables -P OUTPUT ACCEPT
iptables -P FORWARD DROP
iptables -A INPUT -i lo -j ACCEPT
iptables -A OUTPUT -o lo -j ACCEPT
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT -p tcp --dport 80 -j ACCEPT
iptables -A INPUT -p tcp --dport 3843 -j ACCEPT
iptables -A INPUT -p udp -m udp --dport 60000:61000 -j ACCEPT
iptables-save > /etc/iptables.rules
fl="/etc/network/if-pre-up.d/iptables_start"
cat > $fl <<_EOF_
#!/bin/sh
/sbin/iptables-restore < /etc/iptables.rules
exit 0
_EOF_
chmod 755 $fl