以前から気になっていましたが、さくらの VPS で満足していました。しかし、さくら VPS で目的を達成することができないため、次の選択肢として考えていた SaaSes の VPS の Osukini サーバー ST を契約しました。
さくらの VPS と SaaSes の VPS 比較
価格面では初期費用がかかるのと、最低3ヶ月毎からの契約ではあるのが、さくら VPS との違いとなりますが、月額費用がさくらの VPS 同価格で表記上2倍以上のメモリと HDD があります。また、アダルトサイト OK ということも公式サイトに載っています。
サーバー | 初期費用 | 月額料金 | HDD | メモリ |
---|---|---|---|---|
さくらの VPS 512 | 0 | 980円 | 20GB | 512MB |
SaaSes の Osukini サーバー ST | 6000円 | 980円 | 100GB | 1GB |
Osukini サーバー ST の契約動機
普段はさくらの VPS をいくつか契約していますが、今回はデータを収集して処理するタイプのサービスの拡張を行っているため、HDD の容量が20GBでは足りません。同じ金額で HDD が5倍になるのと、メモリが2倍になることを考えると、ある程度処理がもっさりしたとしてもメリットが大きいかと思いましたので契約しました。
この VPS の活かし方と価格面について
また、価格面でさくらの VPS は上位プランになれば初期費用が増えていきますが、SaaSes は初期費用がなくなります。例え動作がもっさりしていても圧倒的な HDD の量も考えると、nginx などを入れて画像サーバーなどとしても良いのじゃないかと期待しています。また、データベースサーバーとして運用したりと容量の多さを活かした使い方ができそうです。
SaaSes の VPS に SSH で接続する
SaaSes では root ユーザーでのログインが禁止され、info でのユーザーログインができるようになっています。問い合わせたところ、それ以外については OS のデフォルトの設定のままだそうです。
まず設定するには接続する必要があります。SSH で info ユーザーでログインします。IP アドレスは自分が割り当てられたものを当てはめてください。最終的には SFTP で GUI からファイルのアップロードを行って簡単に管理できるようにサーバーを設定していきます。
1 | ssh info@192.168.0.1 -p 22 |
重要な設定が変更できるようにログイン後 root になります。
1 | su - |
CentOS のバージョンチェック
今回は CentOS の 64bit で設定させて頂いております。まず CentOS のバージョンチェックをします。調べるには以下のコマンドを使います。
1 | rpm -qa | grep centos-release |
この記事を書いている現在のバージョンは 5.7 です。
1 | centos-release-5-7.el5.centos |
古い場合などはアップグレードします。
1 | yum upgrade |
sudo コマンドに info ユーザーを加える
まずは root にならなくてもある程度の作業ができるように info ユーザーに sudo が使えるようにします。以下のコマンドで sudo の設定ファイルを開きます。
1 | /usr/sbin/visudo |
以下のように info ユーザーを加えます。
1 | info ALL=(ALL) ALL |
以上で info ユーザーで作業ができるようになります。
vim をインストールする
私が vim が好きなだけですが、root でログインした状態で続けて vim をインストールしておきます。
1 | yum -y install vim-enhanced |
root 及び info ユーザーの .bashrc を編集します。
1 | vim ~/.bashrc |
以下のように vi に対して vim へのエイリアスを設定しておきます。ついでに他にも便利なエイリアスを一緒に設定しておきます。
1 2 3 4 5 | alias vi='vim' alias ls="ls -G" alias ll="ls -alF" alias la="ls -A" alias l="ls -CF" |
終わったら以下のコマンドで .bashrc をリロードします。
1 | source .bashrc |
SSH のポート番号を変更する
以下のコマンドで SSH の設定ファイルを編集します。
1 | vim /etc/ssh/sshd_config |
#Port 22 というところがありますので、そこのコメントアウトを外して Port 10022 などに変更します。
1 | Port 10022 |
その後以下のようにして SSH を再起動し反映します。
1 | sudo /etc/init.d/sshd restart |
SaaSes の VPS は最初から iptables が設定されており、10022 などのポート番号は空いていません。管理画面にログインして全ポート開放をします。ポートについては後から必要な分以外を塞ぎますので問題ありません。
1 | ssh info@192.168.0.1 -p 10022 |
追記: 全ポートの開放をしない方法
記事拝見致しました。初期設定の一般ユーザー名はお客様により異なります。(変更は自由です) また一時的にであっても全ポートの全開放をしたくない場合、こちらの方法でsshが使用するポートの変更が可能です。ご参考にどうぞ。 http://t.co/QTiNnFPZ
公開鍵認証を設定する
自分のパソコンのターミナルで ssh-keygen を実行する。
1 2 3 4 5 | ssh-keygen Generating public/private rsa key pair. Enter file in which to save the key (/Users/hoge/.ssh/id_rsa): // ファイル作成場所 Enter passphrase (empty for no passphrase): // パスフレーズを入力する Enter same passphrase again: // パスフレーズをもう一度入力する |
すると ~/.ssh ディレクトリに以下のようにファイルが生成されます。
1 2 3 | -rw------- 1 hoge staff 1743 5 14 16:29 id_rsa -rw-r--r-- 1 hoge staff 402 5 14 16:29 id_rsa.pub -rw-r--r--@ 1 hoge staff 3911 5 11 02:28 known_hosts |
id_rsa.pub をサーバのユーザーディレクトリの .ssh/ フォルダの中に authorized_keys という名前で保存する。フォルダがなければ、まずは以下のようにサーバー側に必要なディレクトリの作成から始めます。
1 2 | cd ~ mkdir .ssh |
次にローカルから .ssh フォルダの中に対して以下のようにしてファイルを転送します。
1 | scp -P 10022 ~/.ssh/id_rsa.pub info@192.168.0.1:~/.ssh/authorized_keys |
転送が終わったらサーバー側でパーミッションを調整します。
1 2 | chmod 700 ~/.ssh chmod 600 ~/.ssh/authorized_keys |
この段階で公開鍵認証を使ったログインができる状態になります。この状態を公開鍵認証のみでのログインできる状態に変更します。変更するためにはまず以下のファイルを編集します。ついでにいろいろ設定もします。
1 | sudo vi /etc/ssh/sshd_config |
PermitRootLogin を no にすることで root によるログインを禁止することができます。without-password を設定すればパスワードによるログインを禁止することができますが、SaaSes の VPS ではここがデフォルトで no になっていますので、no になっている人は確認するだけで良いです。
1 | PermitRootLogin no |
次に PasswordAuthentication を no にすることで root のみならず全てのユーザーでパスワードによるログインを禁止することができます。これで認証鍵を持っていなければログインすることができなくなります。
1 | PasswordAuthentication no |
PermitEmptyPasswords を no に設定することで空のパスワードでのログインを禁止することができます。こちらも SaaSes の VPS ではデフォルトで no になっていますので no になっていることを確認すれば良いです。
1 | PermitEmptyPasswords no |
設定が完了したら SSH の設定を反映させましょう。
1 | sudo /etc/init.d/sshd restart |
認証鍵の設定ですが、きちんと設定が反映されているかをチェックする際はこの段階でログアウトせずに別のウィンドウでログインできるかを試すべきです。万が一設定に問題があった場合、一度ログアウトしてしまうと二度とログインできなくなります。
1 | ssh info@192.168.0.1 -p 10022 |
うまく設定できていればパスワードを入力しなくてもログインできるようになり、認証鍵を持っていないコンピューターからは一切接続できなくなります。認証鍵を無くさないように注意しましょう。
また、さくらの VPS は管理画面から仮想のコンソールが使えるため、例えば公開鍵が消滅した時は管理画面からコンソールでパスワードでのログインを有効化することができますが、SaaSes は仮想のコンソールがないため公開鍵がなくなった場合は初期化するしかありません。サポートに作業依頼を出すことで、パスワードでのログインを有効化してもらうことができるかもしれませんが、おそらく費用が発生する可能性もありますので、少し心配ですが公開鍵認証を使わないという選択肢もありますので、ご自分の状況に合わせて考えてみてください。
ファイアウォールを設定します
まず以下のファイルを作成します。
1 | sudo vi /etc/sysconfig/iptables |
詳しくない場合は以下のコードを使うと良さそうです。主にカスタマイズするとしたら18行目から23行目を変更します。SSH と HTTP のみを使う、MySQL は localhost で使うし FTP は使わないならば、それに応じて塞ぎます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 | *filter :INPUT ACCEPT [0:0] :FORWARD ACCEPT [0:0] :OUTPUT ACCEPT [0:0] :RH-Firewall-1-INPUT - [0:0] -A INPUT -j RH-Firewall-1-INPUT -A FORWARD -j RH-Firewall-1-INPUT -A RH-Firewall-1-INPUT -i lo -j ACCEPT -A RH-Firewall-1-INPUT -p icmp --icmp-type any -j ACCEPT -A RH-Firewall-1-INPUT -p 50 -j ACCEPT -A RH-Firewall-1-INPUT -p 51 -j ACCEPT -A RH-Firewall-1-INPUT -p udp --dport 5353 -d 224.0.0.251 -j ACCEPT -A RH-Firewall-1-INPUT -p udp -m udp --dport 631 -j ACCEPT -A RH-Firewall-1-INPUT -p tcp -m tcp --dport 631 -j ACCEPT -A RH-Firewall-1-INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT # SSH, HTTP, FTP1, FTP2, MySQL -A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 10022 -j ACCEPT -A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 80 -j ACCEPT -A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 20 -j ACCEPT -A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 21 -j ACCEPT -A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 3306 -j ACCEPT -A RH-Firewall-1-INPUT -j REJECT --reject-with icmp-host-prohibited COMMIT |
コピーする場合に改行のところにスペースがあるとエラーになります。無駄なスペースが入っていないか調べるようにしましょう。問題がなさそうでしたら、以下のコマンドで iptables を再起動します。
1 | sudo /etc/rc.d/init.d/iptables restart |
利用されていないデーモンを終了する
bluetooth など通常は使わないサービスが起動しているので、不必要なデーモンを終了します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 | sudo /sbin/chkconfig auditd off sudo /sbin/chkconfig autofs off sudo /sbin/chkconfig avahi-daemon off sudo /sbin/chkconfig bluetooth off sudo /sbin/chkconfig cups off sudo /sbin/chkconfig firstboot off sudo /sbin/chkconfig gpm off sudo /sbin/chkconfig haldaemon off sudo /sbin/chkconfig hidd off sudo /sbin/chkconfig isdn off sudo /sbin/chkconfig kudzu off sudo /sbin/chkconfig lvm2-monitor off sudo /sbin/chkconfig mcstrans off sudo /sbin/chkconfig mdmonitor off sudo /sbin/chkconfig messagebus off sudo /sbin/chkconfig netfs off sudo /sbin/chkconfig nfslock off sudo /sbin/chkconfig pcscd off sudo /sbin/chkconfig portmap off sudo /sbin/chkconfig rawdevices off sudo /sbin/chkconfig restorecond off sudo /sbin/chkconfig rpcgssd off sudo /sbin/chkconfig rpcidmapd off sudo /sbin/chkconfig smartd off sudo /sbin/chkconfig xfs off sudo /sbin/chkconfig yum-updatesd off |
停止するデーモンについては以下の記事内でかなり詳しく解説されていますので参考にしましょう。
他にも以下のような設定をしたいところですが、SaaSes の VPS では設定することができませんでした。もしかしたら私の設定ミスかもしれませんが、他の VPS の設定の際にもこの記事を参考にするためにメモだけでも残しておきます。
- 要らないコンソールを無効にする
- selinuxを無効にする
yum リポジトリを追加する
wget でリポジトリをダウンロードします。
1 2 3 | wget http://download.fedora.redhat.com/pub/epel/5/x86_64/epel-release-5-4.noarch.rpm wget http://rpms.famillecollet.com/el5.x86_64/remi-release-5-8.el5.remi.noarch.rpm wget http://packages.sw.be/rpmforge-release/rpmforge-release-0.5.2-2.el5.rf.x86_64.rpm |
ダウンロードしたリポジトリを追加します。
1 | sudo rpm -Uvh epel-release-5-4.noarch.rpm remi-release-5-8.el5.remi.noarch.rpm rpmforge-release-0.5.2-2.el5.rf.x86_64.rpm |
Fedora EPEL を無効化します。
1 | sudo vi /etc/yum.repos.d/epel.repo |
以下のように epel を enabled=0 にします。
1 2 3 4 5 6 7 8 | [epel] name=Extra Packages for Enterprise Linux 5 - $basearch #baseurl=http://download.fedoraproject.org/pub/epel/5/$basearch mirrorlist=http://mirrors.fedoraproject.org/mirrorlist?repo=epel-5&arch=$basearch failovermethod=priority enabled=0 gpgcheck=1 gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL |
RPMForge を無効にします。
1 | sudo vi /etc/yum.repos.d/rpmforge.repo |
以下のように rpmforge を enabled=0 にします。
1 2 3 4 5 6 7 8 9 | [rpmforge] name = RHEL $releasever - RPMforge.net - dag baseurl = http://apt.sw.be/redhat/el5/en/$basearch/rpmforge mirrorlist = http://apt.sw.be/redhat/el5/en/mirrors-rpmforge #mirrorlist = file:///etc/yum.repos.d/mirrors-rpmforge enabled = 0 protect = 0 gpgkey = file:///etc/pki/rpm-gpg/RPM-GPG-KEY-rpmforge-dag gpgcheck = 1 |
LAMP 環境を構築する
Apache と PHP と MySQL をインストールします。
1 | sudo yum --enablerepo=remi,epel,rpmforge install httpd-devel php-devel php-mysql php-pear mysql-server |
Apache モジュールを停止する
Apache の設定は以下でやります。
1 | sudo vi /etc/httpd/conf/httpd.conf |
私もひとつずつ調べならが停止したら参考記事のようなモジュール設定になりました。
149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 | #LoadModule auth_basic_module modules/mod_auth_basic.so #LoadModule auth_digest_module modules/mod_auth_digest.so #LoadModule authn_file_module modules/mod_authn_file.so #LoadModule authn_alias_module modules/mod_authn_alias.so #LoadModule authn_anon_module modules/mod_authn_anon.so #LoadModule authn_dbm_module modules/mod_authn_dbm.so #LoadModule authn_default_module modules/mod_authn_default.so LoadModule authz_host_module modules/mod_authz_host.so #LoadModule authz_user_module modules/mod_authz_user.so #LoadModule authz_owner_module modules/mod_authz_owner.so #LoadModule authz_groupfile_module modules/mod_authz_groupfile.so #LoadModule authz_dbm_module modules/mod_authz_dbm.so #LoadModule authz_default_module modules/mod_authz_default.so #LoadModule ldap_module modules/mod_ldap.so #LoadModule authnz_ldap_module modules/mod_authnz_ldap.so #LoadModule include_module modules/mod_include.so LoadModule log_config_module modules/mod_log_config.so #LoadModule logio_module modules/mod_logio.so #LoadModule env_module modules/mod_env.so #LoadModule ext_filter_module modules/mod_ext_filter.so #LoadModule mime_magic_module modules/mod_mime_magic.so LoadModule expires_module modules/mod_expires.so #LoadModule deflate_module modules/mod_deflate.so LoadModule headers_module modules/mod_headers.so #LoadModule usertrack_module modules/mod_usertrack.so LoadModule setenvif_module modules/mod_setenvif.so LoadModule mime_module modules/mod_mime.so #LoadModule dav_module modules/mod_dav.so LoadModule status_module modules/mod_status.so #LoadModule autoindex_module modules/mod_autoindex.so #LoadModule info_module modules/mod_info.so #LoadModule dav_fs_module modules/mod_dav_fs.so #LoadModule vhost_alias_module modules/mod_vhost_alias.so LoadModule negotiation_module modules/mod_negotiation.so LoadModule dir_module modules/mod_dir.so #LoadModule actions_module modules/mod_actions.so #LoadModule speling_module modules/mod_speling.so #LoadModule userdir_module modules/mod_userdir.so LoadModule alias_module modules/mod_alias.so LoadModule rewrite_module modules/mod_rewrite.so #LoadModule proxy_module modules/mod_proxy.so #LoadModule proxy_balancer_module modules/mod_proxy_balancer.so #LoadModule proxy_ftp_module modules/mod_proxy_ftp.so #LoadModule proxy_http_module modules/mod_proxy_http.so #LoadModule proxy_connect_module modules/mod_proxy_connect.so #LoadModule cache_module modules/mod_cache.so #LoadModule suexec_module modules/mod_suexec.so #LoadModule disk_cache_module modules/mod_disk_cache.so #LoadModule file_cache_module modules/mod_file_cache.so #LoadModule mem_cache_module modules/mod_mem_cache.so #LoadModule cgi_module modules/mod_cgi.so #LoadModule version_module modules/mod_version.so |
mod_autoindex を無効にしたので以下のように関連項目を ifModule で囲います。
592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 648 649 650 651 652 653 654 655 656 657 658 | <IfModule mod_autoindex.c> IndexOptions FancyIndexing VersionSort NameWidth=* HTMLTable # # AddIcon* directives tell the server which icon to show for different # files or filename extensions. These are only displayed for # FancyIndexed directories. # AddIconByEncoding (CMP,/icons/compressed.gif) x-compress x-gzip AddIconByType (TXT,/icons/text.gif) text/* AddIconByType (IMG,/icons/image2.gif) image/* AddIconByType (SND,/icons/sound2.gif) audio/* AddIconByType (VID,/icons/movie.gif) video/* AddIcon /icons/binary.gif .bin .exe AddIcon /icons/binhex.gif .hqx AddIcon /icons/tar.gif .tar AddIcon /icons/world2.gif .wrl .wrl.gz .vrml .vrm .iv AddIcon /icons/compressed.gif .Z .z .tgz .gz .zip AddIcon /icons/a.gif .ps .ai .eps AddIcon /icons/layout.gif .html .shtml .htm .pdf AddIcon /icons/text.gif .txt AddIcon /icons/c.gif .c AddIcon /icons/p.gif .pl .py AddIcon /icons/f.gif .for AddIcon /icons/dvi.gif .dvi AddIcon /icons/uuencoded.gif .uu AddIcon /icons/script.gif .conf .sh .shar .csh .ksh .tcl AddIcon /icons/tex.gif .tex AddIcon /icons/bomb.gif core AddIcon /icons/back.gif .. AddIcon /icons/hand.right.gif README AddIcon /icons/folder.gif ^^DIRECTORY^^ AddIcon /icons/blank.gif ^^BLANKICON^^ # # DefaultIcon is which icon to show for files which do not have an icon # explicitly set. # DefaultIcon /icons/unknown.gif # # AddDescription allows you to place a short description after a file in # server-generated indexes. These are only displayed for FancyIndexed # directories. # Format: AddDescription "description" filename # #AddDescription "GZIP compressed document" .gz #AddDescription "tar archive" .tar #AddDescription "GZIP compressed tar archive" .tgz # # ReadmeName is the name of the README file the server will look for by # default, and append to directory listings. # # HeaderName is the name of a file which should be prepended to # directory indexes. ReadmeName README.html HeaderName HEADER.html # # IndexIgnore is a set of filenames which directory indexing should ignore # and not include in the listing. Shell-style wildcarding is permitted. # IndexIgnore .??* *~ *# HEADER* README* RCS CVS *,v *,t </IfModule> |
mod_proxy を無効にしたので以下のコマンドを実行します。
1 | sudo mv /etc/httpd/conf.d/proxy_ajp.conf /etc/httpd/conf.d/proxy_ajp.conf.stop |
MySQL の root を作る
次に MySQL の設定ファイルを編集します。
1 | sudo vi /etc/my.cnf |
以下のように設定ファイルを編集します。実際には mysqld の character-set-server を追加、mysqldclient、mysql、mysqldump を下に追加する作業になると思います。また、MySQL5.5 の場合 [mysqld] のところは default-character-set の代わりに character-set-server を使うため、予めそのように設定しています。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 | [mysqld] datadir=/var/lib/mysql socket=/var/lib/mysql/mysql.sock user=mysql # Default to using old password format for compatibility with mysql 3.x # clients (those using the mysqlclient10 compatibility package). old_passwords=1 # character-set character-set-server=utf8 skip-character-set-client-handshake # Disabling symbolic-links is recommended to prevent assorted security risks; # to do so, uncomment this line: # symbolic-links=0 [mysqld_safe] log-error=/var/log/mysqld.log pid-file=/var/run/mysqld/mysqld.pid [client] default-character-set=utf8 [mysql] default-character-set=utf8 [mysqldump] default-character-set=utf8 |
以下のコマンドで MySQL を自動起動するように設定します。
1 | sudo /sbin/chkconfig mysqld on |
MySQL を起動します。初回は初期化が始まります。
1 | sudo /etc/rc.d/init.d/mysqld start |
root ユーザのパスワードを設定する。
1 | sudo mysqladmin -u root password 'パスワード' |
APC をインストールする
APC は PHP の中間コードのキャッシュや最適化を行う拡張モジュールだそうです。まず以下のコマンドでインストールします。
1 | sudo pecl install APC |
いろいろ聞かれるので進めていくと以下のようなメッセージが表示されます。
1 2 3 4 5 6 | Build process completed successfully Installing ‘/usr/lib64/php/modules/apc.so’ Installing ‘/usr/include/php/ext/apc/apc_serializer.h’ install ok: channel://pecl.php.net/APC-3.1.9 configuration option “php_ini” is not set to php.ini location You should add “extension=apc.so” to php.ini |
php.ini に extension=apc.so という記述を追加しろとのころです。
1 | sudo vi /etc/php.ini |
どこでも良いですが末尾に記述を追加します。
1 | extension=apc.so |
バーチャルホストを設定する
バーチャルホストを設定します。Web サイトの公開用ディレクトリの設定とバーチャルホストの有効化を行います。まず以下のコマンドで Apache の設定を行います。
1 | sudo vi /etc/httpd/conf/httpd.conf |
以下の行を見つけてコメントアウトを外して、バーチャルホストを有効化します。
1 | NameVirtualHost *:80 |
次に以下のようにバーチャルホストを設定していきます。
1 2 3 4 5 6 7 8 9 10 | <VirtualHost *:80> DocumentRoot "/var/www/vhosts/example.com/web" ServerName example.com <Directory "/var/www/vhosts/example.com/web"> order deny,allow allow from All Options FollowSymLinks AllowOverride All </Directory> </VirtualHost> |
最後に設定した場所にファイルが置けるようにディレクトリを作りユーザーを自分に変更しておきます。ユーザーが root のままだと普通にディレクトリを作ることができません。
1 2 | sudo mkdir /var/www/vhosts sudo chown info /var/www/vhosts |
あとは SFTP で初期ディレクトリに /var/www/vhosts を設定して接続すれば info ユーザーでディレクトリなどを作りサイトのファイルを公開することができます。
nginx をインストールする
nginx をインストールする場合はこの段階で行うと良いです。具体的な方法については以下の記事で解説していますので参考にしてください。
終わりに
ベンチマークなどはまだ取っていません。データが大きすぎて格納するのに1日がかりですので、また来週の月曜日くらいにベンチマークや体感速度などについて感想を書かせて頂きます。またそれまでに運用してみて、今回のこの記事の設定が完璧であるかどうかについての確認も行います。おそらく大丈夫だとは思いますが。
コメント