さくらVPS + ruby環境で自動化諸々の、備忘録/306014

7月14日にはじめてさくらVPSに登録して、LinuxとかSSHってものに触り始めて4日目の素人の悪戦苦闘な試行錯誤的、備忘録。

  • 概要
    • 目的

24時間365日動いているサーバーを使って、毎時/毎日/毎週/毎月自動的にrubyのプログラムを実行したい。
理想は、

1.Rubyプログラムが毎日指定時刻/指定時間おきに走る
2.一週間に1回または、一ヶ月に1回、上記のプログラムを走らせた結果をまとめる
3.まとめたログが、メールで飛んでくる

こういう状況を創りたい。

    • サーバーレンタル + ドメイン取得

さくらVPSとお名前.comで仮想サーバーとドメインを取得

    • 環境設定
      • ドメイン設定

お名前.comにて、さくらVPSを登録

      • Unixことはじめ
      • SSHによるログイン

Poderosaをインストール。ログイン。
認証鍵云々は、割愛

目的

24時間365日動いているサーバーを使って、毎時/毎日/毎週/毎月自動的にrubyのプログラムを実行したい。

理想は、

1.Rubyプログラムが毎日指定時刻/指定時間おきに走る
2.一週間に1回または、一ヶ月に1回、上記のプログラムを走らせた結果をまとめる
3.まとめたログが、メールで飛んでくる

こういう状況を創りたい。

400ページ近くの、サイトにお世話になりました。特にお世話になったものについては、後段でURLを貼るが、残り数百のサイトについては、把握しきれていないので、こちらでお礼を申し上げます。有難う御座いました。

サーバーレンタル + ドメイン取得

さくらVPSとお名前.comで仮想サーバーとドメインを取得

さくらVPS

VPSとは、Virtual Private Server(仮想専用サーバ)の略で、
root権限も持てる、擬似的な自分専用サーバのこと、のようです。

今回使ったさくらのVPSは月額980円で

memory 512MB
HDD 20GB
CPU Virtual 2 core
Network 100Mbps(share)
IPv4 Address ×1
OS CentOS 5 86_64

こんなのがついていました。
レンタルサーバーと違って、色んなソフトや高機能な管理画面が入っていないし、そういった機能へのサポートも無いが、代わりに自由にできる、というサービスの模様。

お名前.com

年間.comドメインが300円のセールをやっていたので、お名前.comでドメインを取得しました。

環境設定

ここから、順次環境を設定していきたい。

Linux/UNIXことはじめ

さくらのVPSでは、SSH(Secure SHell)と呼ばれるプログラムを使って、遠隔操作することで、サーバーをコントロールする事ができるようです。
Unixのコマンドリストはここ

SSHによるログイン

Windows上で動くSSHをサポートしているターミナルエミュレータPoderosaというのをインストールしました。

ホスト:49.212.***.***(さくらから割り当てられたIPアドレス)
プロトコル:SSH2
ポート:SSH(22)
アカウント・パスワード:初期はrootと、さくらで作られたPass
エンコーディング:shift-jis
改行の送信:LF

など設定し、ログイン。

ドメイン設定

お名前.comにてドメイン登録。
たまに、.comドメインが300円/年間のセールをやっている模様。


お名前.comにて、さくらVPSを登録。

ここに書いてある通り

お名前.comにログイン
[ドメイン設定 > ネームサーバーの設定 > レンタルDNSレコード設定] と進む
対象のドメインを選んで、[入力画面へ進む] をクリック。
サブドメインを使うなら、[ホスト名]に入力、使わないなら、何も入れない。サブドメインありなし両方にする場合は、それぞれを追加。
[VALUE]にIPアドレスを入力。その後、[確認画面へ進む] をクリック。次の画面で、[設定する] をクリック。
手続きが終わったら、[ドメイン設定 > ネームサーバーの設定 > ネームサーバーの情報変更] へ。
対象のドメインを選んで、[ネームサーバー情報を入力する] に、「01.dnsv.jp」と「02.dnsv.jp」を入力。確認画面 を経て、[設定する] で終了。

暫くたつと(〜数時間?)ドメインが浸透して、取ったドメインにアクセスすると、VPSサーバーに行けるようになるが、まだwwwサーバーをインストールしていないので、このままではアクセスできない。サーバーに諸々、プログラムをインストールする必要がある。

サーバーインストールの概要

yumというパッケージインストールシステムを起動するコマンドを使うと、楽チンに色んなソフトウェアがインストールできます。

yum install softwarename
yum update softwarename
yum remove softwarename
yum search searchkeywords

などがあるようです。

yum -y install xxxx

のようにすると、全ての問い合わせにYes(y)と答えるオプションのようです。

vim(エディタ)のインストール

SSHでログインした状態から

yum -y install vim-enhanced

vimと呼ばれるエディタをインストールし

alias vi='vim'

によって、aliasを関連付けします。
(viというコマンドでvimというエディタが起動するようにする)

rubyのインストール(apache, sqlを含む)
  • ruby本体のインストール

このへんこのへんを参考に、Rubyをインストールします。

sudo yum -y install zlib-devel
cd /usr/local/src
sudo wget ftp://ftp.ruby-lang.org/pub/ruby/1.8/ruby-1.8.7-p371.tar.gz
sudo tar zxvf ruby-1.8.7-p371.tar.gz
sudo rm -rf ruby-1.8.7-p371.tar.gz

cd ruby-1.8.7-p371
sudo ./configure
sudo make
sudo make test
make install
cd ext/zlib
sudo ruby extconf.rb --with-zlib-include=/usr/include --with-zlib-lib=/usr/lib
sudo make
make install

zlib-develがあると、tar.gz形式とか解凍できるようになるみたいです。
今回は、私のローカル環境に合わせて、Rubyの1.8.7をインストールしました。

  • gemのインストール

gemは、yumのRuby版だと理解しています。

gem install xxxx

で諸々パッケージをインストールできます。

wget http://production.cf.rubygems.org/rubygems/rubygems-1.3.7.tgz
tar xzf rubygems-1.3.7.tgz
cd rubygems-1.3.7
ruby setup.rb
gem update --system

sqliteというデータベースソフトをインストールします

cd /usr/local/src
wget http://www.sqlite.org/sqlite-amalgamation-3.7.2.tar.gz
tar xzf sqlite-3.7.2.tar.gz
cd sqlite-amalgamation-3.7.2
./configure
make
sudo make install
  • gemを使って、Railsをインストール
gem install rake
gem install rails
gem install sqlite3-ruby
  • passenger

Passengerは、Railsアプリケーションを実行するためのApacheモジュールだそうです。ApacheというのはWebサーバーソフトウェアで、これがあると、サーバーをウェブで公開できるようになるみたいです。

gem install passenger
passenger-install-apache2-module

ここなどを参考に対話的に

yum -y install openssl-devel readline-devel

など、Passengerのインストールの際に足りないと怒られるパッケージ諸々をinstallします。

上手くいくと、途中で

Please edit your Apache configuration file, and add these lines:

LoadModule passenger_module /usr/local/lib/ruby/gems/1.8/gems/passenger-3.0.7/ext/apache2/mod_passenger.so
PassengerRoot /usr/local/lib/ruby/gems/1.8/gems/passenger-3.0.7
PassengerRuby /usr/local/bin/ruby

こういうのが出てくるので、控えます。

Deploying a Ruby on Rails application: an example

Suppose you have a Rails application in /somewhere. Add a virtual host to your
Apache configuration file and set its DocumentRoot to /somewhere/public:

<VirtualHost *:80>
	ServerName www.yourhost.com
	DocumentRoot /somewhere/public    # <-- be sure to point to 'public'!
	<Directory /somewhere/public>
	AllowOverride all              # <-- relax Apache security settings
	Options -MultiViews            # <-- MultiViews must be turned off
	</Directory>
</VirtualHost>

こういうのも出てくるので、控えます。

vi /etc/httpd/conf/httpd.conf

で、控えを書き込みます。

/sbin/service httpd restart

httpdをリスタートします。

ftpdのインストール

FTPdの中でもVerySecureらしいvsftpdをインストールします。
これを入れて設定すると、FFFTPなどでアクセスできるようになるみたいです。
vsftpdはここここを参考に入れました。

yum -y install vsftpd

でインストールして、

vi /etc/vsftpd/vsftpd.conf

でコンフィグファイルを編集。
大体参考サイト通りにやると上手くいきました。

と、これで、

このへんこのへんも参考に、ユーザリスト等なども編集し、

cd /var/www
chown -R ユーザー名. フォルダ名

などしてやります。(アクセス権限を与えないと、FTPでファイルが見れても、Up/Downできません)

設定が完了したら、

/etc/init.d/vsftpd restart

FTPサーバーを再起動させます。

postfix+dovecotのインストール(メールサーバー)

ここを参考に参考ページ中間から↓の、postfixというメールサーバーをインストールします。
ここもかなり参考になりました。

ちなみに、

chkconfig xxxxx on

などすると、サーバー再起動時に、自動的にプログラムも立ち上がるようです。

crontabのインストール

crontabという、設定時間ごとに、自動でプログラムを起動できるものがあります。

yum install crontabs

でインストールし、

crontab -u root -e
などで設定を編集します。

sh(シェルスクリプト)について

SSHのコマンドをまとめて、-.shの形で書いたものを、シェルスクリプトと言います。
ただし拡張子無しでも機能するようですが、シェルスクリプトとわかりやすいように、shと書いておくようです。

sh ./xxxx.sh

のように書くと、スクリプトが実行されていきます。

crontab + sh

設定の編集方法はこちら


・改行コードがLFじゃないと、引数を上手くよみこまない。
・きちんとcd /絶対パス/ するか、/絶対パス指定/ するかしないと、フォルダを超えたアクセスが機能しない

などに苦労しました。

crontabにPATHを通すのも重要です。

crontabの設定ファイルの設定イメージは

#!/bin/sh
PATH=$PATH:/usr/local/bin:/bin:/usr/bin:usr/local/bin/ruby
MAILTO = root
#4日おきに、5時0分に実行ファイルに権限を付加
0 5 */4 * * chmod +x /var/www/html/xxxx/xxxx.sh
#その1分後に実行
1 5 */4 * * sh /var/www/html/xxxx/xxxx.sh

こういう感じです。

一方、shファイルの方は、rubyを利用するものが

#!/usr/local/bin/ruby
cd /var/www/html/xxxx/
ruby ./xxxxxx.rb ../in/xxxxxx.txt ../out/xxxxxx.csv 100

みたいなイメージ
shellだけのものが

#!/bin/sh
#this file is for twitter follower log
cd /var/www/html/xxxxxx/
#バックアップファイルをCopy
cp -p ./superlog.csv ./backup/superlog_`date +%Y%m%d`.csv
# mailを送信#1
uuencode /var/www/html/xxxxxx/superlog.csv `date +%Y%m%d`_superlog.csv | mail -s "mail title" mailaddress@mail.com
#ファイル削除
rm -f /var/www/html/xxxxxx/log.csv

こういったイメージです。

.htaccess

ここのサイトや、ここのサイトを参考に、上記の実行ファイルやログが載っているフォルダについて、アクセスにパスワードが必要なように設定しました。