さくらVPSセットアップの腰が軽くなるフロー

サクラ

手軽なレンサバかコスパのVPSかと悩ましい所なんですが、レンサバで運営してるサイトにて最近503エラーが増えてきたので、今までのさくらVPSより約7倍高速らしいSSDプランを試用してみることに。

さくらVPSは今一つ借りてますが、重い処理でも結構サクサク動いてくれてて、厳密に測定はしてませんが、やはり同価格帯のレンサバに比べると速い。でも設定・管理が面倒だからなぁ。という感じで腰が重くなります。セットアップは頻繁に行う作業じゃないので忘れちゃうんですね。

そんなわけで次回から重い腰が軽くなるようにフローにしておきました。といってもドットインストールが基本です。要所をピックアップして、あとはWINの場合とFTPサーバーを追加してあります。この記事だけで次から構築が完結できるメモという感じで。

 

1. さくらVPS 申し込み。

メールでVPSのIPとrootのパスがもらえる。

 

2. VPS起動

さくらVPSコンパネにログインしてVPS起動。

最近は初回起動時に自動的にパッケージを最新にするようで、”Updating RPMS on system: _”で1時間くらいかかる。なのでさくらからメールがくるより先にVPSを起動しておくと、メールがくるのと同時に作業に入れる。

#03 さくらのVPSを起動しようのスクリーンショット#03 さくらのVPSを起動しよう

 

3. SSHでログイン

SSHでrootでログイン。MACならドットインストール通り。WinならPuTTYなんかのSSHクライアントで。詳しくはさくらVPSでスタートダッシュ決めるには結局どーすりゃいいの?を参照。

  1. 最初にyum updateで全てのパッケージをアップデート。
  2. 日本語設定。
    mac$ ssh root@xxx.xxx.xxx.xxx
    vim /etc/sysconfig/i18n
    LANG="ja_JP.UTF-8"
  3. ログアウト→ログイン→dateで日本語確認。

#04 さくらのVPSへ接続してみようのスクリーンショット#04 さくらのVPSへ接続してみよう

 

4. 作業用ユーザー作成&wheelグループに登録

  1. userの所は任意のユーザー名。
    useradd user
    passwd user
    usermod -G wheel user
    visudo
  2. visudo内で下の行を検索、先頭のコメントを外しrootと同じ実行権限を与える。
    # %wheel ALL=(ALL) ALL
  3. 新しいuserでログインしてsudoを確認。
    sudo -s

#05 作業用ユーザーを設定しようのスクリーンショット#05 作業用ユーザーを設定しよう

 

5. 鍵認証でSSHできるように

MACはドットインストール通り。WinはPuTTYgenで鍵作成して公開鍵はコピペでVPSに保存。

  1. 秘密鍵と公開鍵をローカルで作成。
  2. 作業用ユーザーでログイン。
  3. ホームに公開鍵の保管場所を作る。
    [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の場合

  1. 秘密鍵はIPアドレスとか適当な名前でファイルに保存。
  2. サーバーにて作業用ユーザーのホームに.ssh/authorized_keysを作成。
  3. vimで公開鍵をペースト。忘れずにパーミッション変更。
    vim .ssh/authorized_keys
    chmod 600 .ssh/authorized_keys
  4. SSHクライアントに秘密鍵設定&パスワード不要でログイン確認。

#06 鍵認証を設定しよう (1)のスクリーンショット#06 鍵認証を設定しよう (1)

 

6. SSHの設定

秘密鍵でSSH接続できるようになったので、VPSのログイン設定を強化。

  1. 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ログインの禁止
  2. sshd再起動。
    service sshd restart
  3. 新しいポートでログイン&今まで通りにログインできない事を確認。

#08 SSHの設定をしよう (1)のスクリーンショット#08 SSHの設定をしよう (1)

 

7. ファイアーウォールの設定

ポートを閉じて他のサーバーからVPSを守る。SSHとHTTPとFTPとMySQLのポートは空けとく。

  1. iptables編集。
    sudo -s
    vim /etc/sysconfig/iptables
  2. /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
  3. iptables反映。
    service iptables restart
    iptables -L

#10 ファイアーウォールの設定をしようのスクリーンショット#10 ファイアーウォールの設定をしよう

 

8. Apacheを入れる

Webサーバーを入れる。httpd.confのコメントは実際には記述しないように。ドットインストールのWebページを設定してみようも同時にやるが、ファイルアップはFTP入れてから一緒にテストする。バーチャルホストの設定も最後。

  1. 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
  2. httpd.conf内。
    ServerTokens Prod // 404などのエラーページのOS情報をなくす
    ServerSignature Off // エラーページのapache情報をなくす
    
    ファイル一覧を表示しない&.htaccessを使えるように
    <Directory "/var/www/html">の中
    Options -Indexes FollowSymLinks // Indexesの前にハイフンを追加
    AllowOverride All
    </Directory>
  3. apache起動。
    service httpd configtest // httpd.confの記述チェック
    service httpd start
  4. ブラウザでIPアドレス入れてアパッチのページ確認。
  5. ドキュメントルートにファイル置けるように権限追加。
    chown -R user:user /var/www/html

#11 Webサーバーの設定をしようのスクリーンショット#11 Webサーバーの設定をしよう

 

9. PHPを入れる

個人的にpearと、phpmyadminの為にmcryptも入れとく。

  1. 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
  2. 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
  3. apache再起動してPHP反映。
    service httpd restart
  4. おまけ:pearにPagerパッケージ追加。
    pear install Pager

#15 PHPの設定をしようのスクリーンショット#15 PHPの設定をしよう

 

10. MySQLサーバーを入れる

MySQLサーバーはレンタルサーバー・自宅サーバー設定・構築のヒントさんの説明も分かりやすいです。

  1. MySQLインストール&設定編集。
    yum install mysql-server
    cp /etc/my.cnf /etc/my.cnf.org
    vim /etc/my.cnf
  2. 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
  3. 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作成

#16 MySQLの設定をしようのスクリーンショット#16 MySQLの設定をしよう

 

11. FTPサーバーを入れる

基本的にさくらVPSにFTPサーバー(vsftpd)を1時間で導入の通り。

  1. vsftpdインストール。
    yum -y install vsftpd
    cp /etc/vsftpd/vsftpd.conf /etc/vsftpd/vsftpd.conf.org
    vim /etc/vsftpd/vsftpd.conf
  2. 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
  3. ユーザーリストにFTPユーザーを追加。chroot_listはとりあえず空で。再起動。
    vim /etc/vsftpd/user_list
    echo > /etc/vsftpd/chroot_list
    /etc/rc.d/init.d/vsftpd start
    chkconfig vsftpd on
  4. FTPクライアントで接続確認。名前とパスはuser_listに登録したユーザーので。この段階ではたぶん/home/ユーザー名/wwwがないから失敗するので、テスト前にwwwを作るか、Apacheのドキュメントルートのシンボリックリンク張っとく。
    ln -s /var/www/html www

 

12. 不要なデーモンをストップ

ちと情報が古い気もしますが、さくら社長ブログにある不要デーモンを切っておく。

 

13. 再起動

コンパネかコンソールからreboot。

 

14. ドメインを使えるように

VirtualHostの設定。詳しくは下の記事で。

  1. mkdir -p /var/www/html/example.com
    chown -R user:user /var/www/html/example.com
    vim /etc/httpd/conf.d/example.com.conf
  2. 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>
  3. httpd.confを編集。
    vim /etc/httpd/conf/httpd.conf
    httpd.conf内の下記箇所を変更。
    NameVirtualHost *:80 // VirtualHost有効に
  4. apache再起動して反映。
    service httpd configtest // httpd.confの記述を一応チェック
    service httpd restart
  5. テストでブラウザで表示してみる。内容はなんでもいい。ローカルのhostsファイルにドメイン記述してテスト。もしくはDNSを向けておく。
    vim /var/www/html/example.com/index.html

#13 VirtualHostの設定をしよう (1)のスクリーンショット#13 VirtualHostの設定をしよう (1)

 

15. 毎日ログをチェックする

試用期間中はメール送れないの。試用期間すぎたらMailTo設定すればメアドにしとく。

  1. logwatchインストール。
    yum install logwatch
    cp /etc/logwatch/conf/logwatch.conf /etc/logwatch/conf/logwatch.conf.org
    vim /etc/logwatch/conf/logwatch.conf
  2. logwatch.conf内。
    MailTo = info@example.com

 

perlやるとき

今は開発してないですがスクリプト動かしたいとき設定するので。

  1. logwatchインストール。
    yum install perl perl-Jcode
    ln -s /usr/bin/perl /usr/local/bin/perl //一応シンボリックリンク張る。
  2. /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時間くらいで終わりました。あとはメールサーバーですが、ここが最大のネックかも。近々まとめたいと思います。