さくらVPS + ruby環境で自動化諸々の、備忘録/306014
7月14日にはじめてさくらVPSに登録して、LinuxとかSSHってものに触り始めて4日目の素人の悪戦苦闘な試行錯誤的、備忘録。
- 概要
- 目的
24時間365日動いているサーバーを使って、毎時/毎日/毎週/毎月自動的にrubyのプログラムを実行したい。
理想は、
1.Rubyプログラムが毎日指定時刻/指定時間おきに走る
2.一週間に1回または、一ヶ月に1回、上記のプログラムを走らせた結果をまとめる
3.まとめたログが、メールで飛んでくる
こういう状況を創りたい。
-
- サーバーレンタル + ドメイン取得
さくらVPSとお名前.comで仮想サーバーとドメインを取得
-
- 環境設定
- ドメイン設定
- 環境設定
お名前.comにて、さくらVPSを登録
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本体のインストール
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のインストール
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
こういったイメージです。