YAMAGUCHI::weblog

土足で窓から失礼いたします。今日からあなたの息子になります。 当年とって92歳、下町の発明王、エジソンです。

さくらのVPSのプラン乗り換えをした

はじめに

こんにちは、Python界の情弱です。いま「さくらのVPS 512」を借りてるんですが、プランが変更になって1Gが同じ料金で使えるようになりました。いまなら乗り換えると1ヶ月無料になるっていうんで、ちょろっと移行してみました。

ちなみに、今日から会社勤めとなった方々、おめでとうございます。とりあえずIT系に入って技術職するなら「さくらのVPS 1G」を1年分借りて、次のような本でLinuxサーバの管理なんかをしてみるのをおすすめします。rootがもらえるのでやりたい放題です。ハードウェアを買うわけではないので狭い家でも関係なくサーバの管理ができて、グローバルIPも取得できてWebアプリケーションも公開できます。「俺プログラマだから!」って人もLinuxの簡単な管理くらいはできたほうが、実装の際にボトルネックのイメージが沸くのでお勧めします。1万円なんて飲み会3回分くらいじゃん!*1

Linuxの教科書 改訂版 (マイコミムック) (MYCOMムック)

Linuxの教科書 改訂版 (マイコミムック) (MYCOMムック)

ログ

山括弧でくくられているところは適宜読み替え。

sshd起動

まずなにはともあれリモートコンソールでログインしてからsshdを起動。

  • リモートコンソール
$ sudo service ssh start
SSHの設定変更

パスワードログイン禁止、ルートログイン禁止、公開鍵認証の設定、ポート番号の変更くらい

  • new host
$ sudo vi /etc/ssh/sshd_config
- Port 22
+ Port <port number>
- #PasswordAuthentication yes
+ PasswordAuthentication no
- PermitRootLogin yes
+ PermitRootLogin no
RSAAuthentication yes
PubkeyAuthentication yes
- #AuthorizedKeysFile %h/.ssh/authorized_keys
+ AuthorizedKeysFile %h/.ssh/authorized_keys
$ mkdir ~/.ssh

まだsshdは再起動しない。ローカルにある公開鍵をコピーする。

  • local
% scp ~/.ssh/id_rsa.pub <new_host>:~/.ssh/authorized_keys

これでsshdを再起動する。

  • new host
$ sudo service ssh restart

これで無事に公開鍵認証できるようになった。

  • local
% ssh <username>@<new_host> -p <port>
ポートの設定

まずは基本的にwwwとsshだけ開放しておく。(あとでDNSも開ける)

% sudo ufw default deny
% sudo ufw allow 80/tcp
% sudo ufw allow 80/udp
% sudo ufw allow <SSH port>/tcp
% sudo ufw allow <SSH port>/udp
% sudo ufw enable
% sudo ufw status
Status: active

To                         Action      From
--                         ------      ----
<ssh port>/tcp                  ALLOW       Anywhere
80/tcp                     ALLOW       Anywhere
80/udp                     ALLOW       Anywhere
<ssh port>/udp                  ALLOW       Anywhere
shellと設定ファイルの変更

自分は設定ファイルをGitレポジトリで管理しているのでまずgitが必要。またshellはzshを普段は使っている。

  • new host
$ sudo apt-get install zsh-beta git-core
$ sudo vi /etc/shells
+ /usr/bin/zsh
$ chsh -s /usr/bin/zsh <username>

これで一旦ログアウトしてもう一度ログイン。無事にzshに変わった。次は設定ファイルを取得。まずその前にGitHub用のSSH秘密鍵をコピーしておく。

  • local
% scp -P <port> ~/.ssh/github <username>@<new_host>:~/.ssh/
  • new host
% git clone git@github.com:ymotongpoo/dotfiles.git .dotfiles
% ln -s .dotfiles/.zshrc .zshrc
% ln -s .dotfiles/.linux_env .os_env
% ln -s .dotfiles/.screenrc .screenrc
% ln -s .dotfiles/.versions .versions
% ln -s .dotfiles/.pythonbrewrc .pythonbrewrc

必要なファイルをシンボリックリンク張っていく。毎回手でやってるんだよな、これ。

Pythonの設定

pythonbrewで設定します。設定はここの通り。

ただし若干設定が事前に必要なので行う。

  • new host
% sudo apt-get install build-essential curl zlib
% git clone https://github.com/utahta/pythonbrew.git
% cd pythonbrew
% chmod +x pythonbrew-install
% ./pythonbrew-install

あとは上記のリンクの通り。

ホームディレクトリのsync

rsyncでホームディレクトリをsyncしておきます。dotディレクトリやdotファイルはsyncしないようにしときます。

  • new host
% cd ~
% rsync -vrz --rsh='ssh -p<port>' --exclude=".*" <username>@<old_host>:~/ .
cronの設定

まずcron用に動かすPythonスクリプトで使う仮想環境を作って、ライブラリをインストールする。こんな感じ。

% pybrew venv create dev && pybrew venv use dev
(dev) % sudo apt-get install libxslt-dev libyaml-dev 
(dev) % pip install lxml pit flask sphinx

cronでpythonbrewの仮想環境を使うように若干変更を加える。といってもvirtualenv関連のパスを変更するだけ。

#!/bin/bash
export LANG=ja_JP.UTF-8
export ENV_NAME=dev
export VIRTUALENV_PATH=/home/<username>/.pythonbrew/venvs/Python-2.7.2/$ENV_NAME
export PYTHON=$VIRTUALENV_PATH/bin/python

$PYTHON spam-egg.py

crontabの設定をかっぱらってくる。

  • old host
% sudo cp /var/spool/cron/crontabs/<username> /home/<username>/crontab.txt && chown <username> ~/crontab.txt
% scp -P <port> ~/crontab.txt <username>@<new_host>:~/old_crontab.txt
% sudo cat ~/old_crontab.txt > /var/spool/cron/crontabs/<username>
bindの設定

自宅ネットワーク用のDNSも立ててたのでそれも移行する。まずBindのインストール。設定はこのへんで。

% sudo apt-get install bind9
% scp -P <port> <old_host>:/etc/bind/named.conf.local ~
% scp -P <port> <old_host>:/etc/bind/<zone file> ~
% sudo mv named.conf.local <zone file> /etc/bind
% sudo ufw allow 53/tcp
% sudo ufw allow 53/udp

これで大丈夫なのでbindを起動。

% sudo service bind9 start
nginxの設定

WEBサーバも立てているのでnginxの設定をしておく。nginxの設定ファイルをコピー。

  • new host
% scp -P <port> <old_host>:/etc/nginx/nginx.conf .
% sudo mv nginx.conf /etc/nginx/

適当に設定してnginxを起動。

% sudo service nginx start
ホスト名の変更

いよいよDNSレコードを変更するべく、新しいマシンのホスト名を変更。Ubuntu 10.04なので、/etc/hostnameと/etc/hostsを変更。

DNSレコードの変更

お名前.comでドメイン取ってるんで、そのDNSレコードで登録されているIPアドレスを変更。これで全部完了!

*1:ステマじゃないです。さくらインターネットからは1銭ももらってないです。