手軽なレンサバかコスパのVPSかと悩ましい所なんですが、レンサバで運営してるサイトにて最近503エラーが増えてきたので、今までのさくらVPSより約7倍高速らしいSSDプランを試用してみることに。
さくらVPSは今一つ借りてますが、重い処理でも結構サクサク動いてくれてて、厳密に測定はしてませんが、やはり同価格帯のレンサバに比べると速い。でも設定・管理が面倒だからなぁ。という感じで腰が重くなります。セットアップは頻繁に行う作業じゃないので忘れちゃうんですね。
そんなわけで次回から重い腰が軽くなるようにフローにしておきました。といってもドットインストールが基本です。要所をピックアップして、あとはWINの場合とFTPサーバーを追加してあります。この記事だけで次から構築が完結できるメモという感じで。
1. さくらVPS 申し込み。
メールでVPSのIPとrootのパスがもらえる。
2. VPS起動
さくらVPSコンパネにログインしてVPS起動。
最近は初回起動時に自動的にパッケージを最新にするようで、”Updating RPMS on system: _”で1時間くらいかかる。なのでさくらからメールがくるより先にVPSを起動しておくと、メールがくるのと同時に作業に入れる。
3. SSHでログイン
SSHでrootでログイン。MACならドットインストール通り。WinならPuTTYなんかのSSHクライアントで。詳しくはさくらVPSでスタートダッシュ決めるには結局どーすりゃいいの?を参照。
- 最初にyum updateで全てのパッケージをアップデート。
- 日本語設定。
mac$ ssh root@xxx.xxx.xxx.xxx vim /etc/sysconfig/i18n LANG="ja_JP.UTF-8"
- ログアウト→ログイン→dateで日本語確認。
4. 作業用ユーザー作成&wheelグループに登録
-
userの所は任意のユーザー名。
useradd user passwd user usermod -G wheel user visudo
- visudo内で下の行を検索、先頭のコメントを外しrootと同じ実行権限を与える。
# %wheel ALL=(ALL) ALL
- 新しいuserでログインしてsudoを確認。
sudo -s
5. 鍵認証でSSHできるように
MACはドットインストール通り。WinはPuTTYgenで鍵作成して公開鍵はコピペでVPSに保存。
- 秘密鍵と公開鍵をローカルで作成。
- 作業用ユーザーでログイン。
- ホームに公開鍵の保管場所を作る。
[vps作業ユーザーのホームにて] vps$ mkdir .ssh vps$ chmod 700 .ssh [macにて] mac$ ssh-keygen -t rsa -v mac$ ls -la .ssh mac$ chmod 600 .ssh/id_rsa.pub mac$ scp ~/.ssh/id_rsa.pub user@xxx.xxx.xxx.xxx:~/.ssh/authorized_keys mac$ ssh -i ~/.ssh/id_rsa user@xxx.xxx.xxx.xxx mac$ ssh user@xxx.xxx.xxx.xxx // -iオプションでid_rsaを指定する場合は省略できる
Winの場合
- 秘密鍵はIPアドレスとか適当な名前でファイルに保存。
- サーバーにて作業用ユーザーのホームに.ssh/authorized_keysを作成。
- vimで公開鍵をペースト。忘れずにパーミッション変更。
vim .ssh/authorized_keys chmod 600 .ssh/authorized_keys
- SSHクライアントに秘密鍵設定&パスワード不要でログイン確認。
6. SSHの設定
秘密鍵でSSH接続できるようになったので、VPSのログイン設定を強化。
- sshd_configを編集。
sudo -s cp /etc/ssh/sshd_config /etc/ssh/sshd_config.org vim /etc/ssh/sshd_config
/etc/ssh/sshd_config内で下記箇所を変更。
Port YOUR_PORT_NUMBER // ポート番号変更 22 → 1024-65535の間で適当に変更 PasswordAuthentication no // パスワードログインの禁止 PermitRootLogin no // rootログインの禁止
- sshd再起動。
service sshd restart
- 新しいポートでログイン&今まで通りにログインできない事を確認。
7. ファイアーウォールの設定
ポートを閉じて他のサーバーからVPSを守る。SSHとHTTPとFTPとMySQLのポートは空けとく。
- iptables編集。
sudo -s vim /etc/sysconfig/iptables
- /etc/sysconfig/iptables
※XXXXXにさっき設定したSSHのポート番号
*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, FTP PASV, MySQL -A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport XXXXX -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 50000:50030 -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反映。
service iptables restart iptables -L
8. Apacheを入れる
Webサーバーを入れる。httpd.confのコメントは実際には記述しないように。ドットインストールのWebページを設定してみようも同時にやるが、ファイルアップはFTP入れてから一緒にテストする。バーチャルホストの設定も最後。
- httpdインストール。
yum install httpd chkconfig httpd on cp /etc/httpd/conf/httpd.conf /etc/httpd/conf/httpd.conf.org vim /etc/httpd/conf/httpd.conf
- httpd.conf内。
ServerTokens Prod // 404などのエラーページのOS情報をなくす ServerSignature Off // エラーページのapache情報をなくす ファイル一覧を表示しない&.htaccessを使えるように <Directory "/var/www/html">の中 Options -Indexes FollowSymLinks // Indexesの前にハイフンを追加 AllowOverride All </Directory>
- apache起動。
service httpd configtest // httpd.confの記述チェック service httpd start
- ブラウザでIPアドレス入れてアパッチのページ確認。
- ドキュメントルートにファイル置けるように権限追加。
chown -R user:user /var/www/html
9. PHPを入れる
個人的にpearと、phpmyadminの為にmcryptも入れとく。
-
yum install php php-devel php-mysql php-mbstring php-gd php-pear php-mcrypt php -v // インストール確認 cp /etc/php.ini /etc/php.ini.org vim /etc/php.ini
- php.ini内の下記箇所を変更。意味はさくらVPSでスタートダッシュ決めた後はこーすりゃいいの?を参照。
error_log = /var/log/php_errors.log include_path = ".:/usr/share/pear" // pearのpathは各自違うかも mbstring.language = Japanese mbstring.internal_encoding = UTF-8 mbstring.http_input = auto mbstring.detect_order = auto expose_php = Off date.timezone = Asia/Tokyo
- apache再起動してPHP反映。
service httpd restart
- おまけ:pearにPagerパッケージ追加。
pear install Pager
10. MySQLサーバーを入れる
MySQLサーバーはレンタルサーバー・自宅サーバー設定・構築のヒントさんの説明も分かりやすいです。
- MySQLインストール&設定編集。
yum install mysql-server cp /etc/my.cnf /etc/my.cnf.org vim /etc/my.cnf
- my.cnf内の[mysqld] [mysqld_safe] の間に追加。
character_set_server=utf8 default-storage-engine=InnoDB innodb_file_per_table [mysql] default-character-set=utf8 [mysqldump] default-character-set=utf8
-
service mysqld start mysql_secure_installation // rootのパス設定以外はデフォルトで chkconfig mysqld on mysql -u root -p
おまけ:主要SQL
select user,host from mysql.user; // ユーザー一覧
insert into user set user="user", password=password("pass"), host="host"; // ユーザ追加
show databases; // DB一覧
drop database test; // DB削除
CREATE DATABASE test; // DB作成
11. FTPサーバーを入れる
基本的にさくらVPSにFTPサーバー(vsftpd)を1時間で導入の通り。
- vsftpdインストール。
yum -y install vsftpd cp /etc/vsftpd/vsftpd.conf /etc/vsftpd/vsftpd.conf.org vim /etc/vsftpd/vsftpd.conf
- vsftpd.conf内。
#匿名アクセスを禁止に。 anonymous_enable=YES ↓ anonymous_enable=NO #ファイルのパーミッションをグループ書き込み可の664に。 local_umask=022 ↓ local_umask=002 #アスキーモードを有効に。 #ascii_upload_enable=YES #ascii_download_enable=YES ↓ ascii_upload_enable=YES ascii_download_enable=YES #シグニチャを隠蔽。 // 最新Verにはないかも #ftpd_banner=Welcome to blah FTP service. ↓ ftpd_banner=Welcome to blah FTP service. #ホームディレクトリ上層を参照できるユーザー設定 #chroot_list_enable=YES #chroot_list_file=/etc/vsftpd/chroot_list ↓ chroot_list_enable=YES chroot_list_file=/etc/vsftpd/chroot_list #サブフォルダを含む一括アップロード・ダウンロードを許可 #ls_recurse_enable=YES ↓ ls_recurse_enable=YES #---ファイルの最後に以下の設定を追加--- #/etc/vsftpd/user_listのユーザーだけを許可。 userlist_deny=NO #タイムスタンプ時間をローカル時間にする。(環境により必要なし) #use_localtime=YES #設定を簡単にするためにPASVのポート範囲を限定。 pasv_min_port=50000 pasv_max_port=50030 #ユーザーの初期アクセスディレクトリ。 #wwwで/home/ユーザー名/www local_root=www #ユーザのホームディレクトリより上位のディレクトリへの移動を不許可に。 chroot_local_user=YES #.ファイルをアップ可能に force_dot_files=YES
- ユーザーリストにFTPユーザーを追加。chroot_listはとりあえず空で。再起動。
vim /etc/vsftpd/user_list echo > /etc/vsftpd/chroot_list /etc/rc.d/init.d/vsftpd start chkconfig vsftpd on
- FTPクライアントで接続確認。名前とパスはuser_listに登録したユーザーので。この段階ではたぶん/home/ユーザー名/wwwがないから失敗するので、テスト前にwwwを作るか、Apacheのドキュメントルートのシンボリックリンク張っとく。
ln -s /var/www/html www
12. 不要なデーモンをストップ
ちと情報が古い気もしますが、さくら社長ブログにある不要デーモンを切っておく。
13. 再起動
コンパネかコンソールからreboot。
14. ドメインを使えるように
VirtualHostの設定。詳しくは下の記事で。
-
mkdir -p /var/www/html/example.com chown -R user:user /var/www/html/example.com vim /etc/httpd/conf.d/example.com.conf
- example.com.conf内
<VirtualHost *:80> ServerAdmin info@example.com #管理者のメアド DocumentRoot /var/www/html/example.com #ドキュメントルート ServerName example.com #設定するドメイン ServerAlias www.example.com // wwwありドメインをwwwなしにリダイレクト RewriteEngine on RewriteCond %{HTTP_HOST} ^www\.example\.com$ RewriteRule ^/(.*) http://example.com/$1 [R=301,L] ErrorLog logs/example.com-error_log #ログ名 CustomLog logs/example.com-access_log common #ログ名 </VirtualHost>
- httpd.confを編集。
httpd.conf内の下記箇所を変更。vim /etc/httpd/conf/httpd.conf
NameVirtualHost *:80 // VirtualHost有効に
- apache再起動して反映。
service httpd configtest // httpd.confの記述を一応チェック service httpd restart
- テストでブラウザで表示してみる。内容はなんでもいい。ローカルのhostsファイルにドメイン記述してテスト。もしくはDNSを向けておく。
vim /var/www/html/example.com/index.html
15. 毎日ログをチェックする
試用期間中はメール送れないの。試用期間すぎたらMailTo設定すればメアドにしとく。
- logwatchインストール。
yum install logwatch cp /etc/logwatch/conf/logwatch.conf /etc/logwatch/conf/logwatch.conf.org vim /etc/logwatch/conf/logwatch.conf
- logwatch.conf内。
MailTo = info@example.com
perlやるとき
今は開発してないですがスクリプト動かしたいとき設定するので。
- logwatchインストール。
yum install perl perl-Jcode ln -s /usr/bin/perl /usr/local/bin/perl //一応シンボリックリンク張る。
- /etc/httpd/conf/httpd.conf内。
#ディレクトリインデックスにcgi追加 DirectoryIndex index.html index.php index.cgi #実行したいディレクトリでCGI,SSIの許可 <Directory "/var/www/html"> Options +ExecCGI AddHandler cgi-script .cgi .pl </Directory> #日本語化け対策 AddDefaultCharsetをコメントアウト #AddDefaultCharset UTF-8
記事にすると長くなりましたが、全体の作業は1時間くらいで終わりました。あとはメールサーバーですが、ここが最大のネックかも。近々まとめたいと思います。