読者です 読者をやめる 読者になる 読者になる

akimachoのはてなブログ

ICTとデザインのためのブログ

GMOクラウドVPSの初期設定メモ

はじめに

GMOクラウドVPS上でCentOS 6.2 x64を利用してみたのでメモ。

構築するのは、PerlPSGIアプリを動かすための環境です。

さくらVPSは使ったことがあるのですが、GMOVPSははじめてでした。

VPSのコンソール画面がさくらVPSのインタフェースと変わっていて、慣れないかも。

ログイン

$ ssh root@xxx.xxx.xxx.xxx

とりあえず、システムアップデート。

# yum update -y

初期設定

# vi /etc/sysconfig/i18n

以下のように設定。

LANG="ja_JP.UTF-8"
SYSFONT="latarcyrheb-sun16"

ユーザの作成と設定

ユーザを作成し、パスワードの設定

# useradd hoge
# passwd hoge

sudoを使えるようにする

# usermod -G wheel hoge

visudoで設定。コメントをはずします。

## Allows people in group wheel to run all commands
%wheel  ALL=(ALL)       ALL

再度ログインして、確認。

$ ssh hoge@xxx.xxx.xxx.xxx
hoge@xxx.xxx.xxx.xxx's password: ← 設定したパスワードを入力します

SSH設定

サーバー側の作業用ユーザのホームディレクトリ下に、.sshディレクトリを作成します。

$ mkdir ~/.ssh
$ chmod 700 ~/.ssh

クライアント側で、鍵の生成と転送を行います。

$ ssh-keygen -t rsa -v
$ chmod 600 XXX.pub ← 公開鍵のパーミッション設定
$ scp XXX.pub hoge@xxx.xxx.xxx.xxx:~/.ssh/authorized_keys ← 公開鍵の転送
hoge@xxx.xxx.xxx.xxx's password: ← パスワードの入力

SSHに関して、ポート番号の変更・パスワード認証の禁止・ルートログインの禁止を有効にします。

# vi /etc/ssh/sshd_config

以下のように設定します。

# Port 22となっているのをPort 54321に変更。
Port 54321
# パスワード認証を禁止する
PasswordAuthentication no
# ルートログインを禁止する
PermitRootLogin no

設定を反映します。

# service sshd restart

ログインするためのシェルスクリプトlogin.shを作っておく

#!/bin/sh
ssh -i XXX hoge@xxx.xxx.xxx.xxx -p 54321

実行できるようにする

chmod +x login.sh

ファイアウォールの設定

指定したポート番号を開放しておく。例えばSSH用のポート番号54321とか。

ドットインストールのさくらのVPS入門 を参考にしました。

http://dotinstall.com/lessons/basic_sakura_vps/8010

# cp /etc/sysconfig/iptables /etc/sysconfig/iptables.org ← バックアップ
# vi /etc/sysconfig/iptables

以下のように編集します。

*filter
:INPUT    DROP    [0:0]
:FORWARD  DROP    [0:0]
:OUTPUT   ACCEPT  [0:0]
:SERVICES -       [0:0]
-A  INPUT -i  lo  -j  ACCEPT
-A  INPUT -p  icmp  --icmp-type echo-request  -m  limit --limit 1/s --limit-burst 4 -j  ACCEPT
-A  INPUT -p  tcp --tcp-flags ALL NONE -j DROP
-A  INPUT -p  tcp ! --syn -m state --state NEW -j DROP
-A  INPUT -p  tcp -m  state --state ESTABLISHED,RELATED -j ACCEPT
-A  INPUT -p  tcp -m  state --state NEW -j SERVICES
-A  INPUT -p  udp --sport 53  -j  ACCEPT
-A  INPUT -p  udp --sport 123 --dport 123 -j  ACCEPT
-A  SERVICES  -p  tcp --dport 54321 -j  ACCEPT
-A  SERVICES  -p  tcp --dport 80    -j  ACCEPT
-A  SERVICES  -p  tcp --dport 443   -j  ACCEPT
COMMIT

ファイアウォールの更新

# service iptables restart

一応、確認します。

# iptables -L | grep "54321"
ACCEPT     tcp  --  anywhere             anywhere            tcp dpt:54321

よく使うツールの導入

# yum groupinstall -y "Development Tools"
# yum install -y vim git tree wget

など…

ミドルウェアの導入

MySQL、Nginx、PerlDaemon toolsを導入します。

MySQL

以下のサイトから公式RPMパッケージをダウンロードします。

http://dev.mysql.com/downloads/repo/yum/

# rpm -ivh http://dev.mysql.com/get/mysql57-community-release-el6-7.noarch.rpm

余談

MySQL 5.7だと初期設定が今までと勝手が違うようで、パスワードの設定で行き詰まってしまいました。なので、今回はMySQL5.6を導入します。

でも性能がだいぶ向上しているようなので、いろいろ調べたうえで再挑戦してみたいと思います。

MySQL5.6のインストール

MySQL 5.6をインストールするために、/etc/yum.repos.d/mysql-community.repoを編集します。

# vi /etc/yum.repos.d/mysql-community.repo

MySQL 5.6を有効にします。

[mysql-connectors-community]
name=MySQL Connectors Community
baseurl=http://repo.mysql.com/yum/mysql-connectors-community/el/6/$basearch/
enabled=1
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-mysql

[mysql-tools-community]
name=MySQL Tools Community
baseurl=http://repo.mysql.com/yum/mysql-tools-community/el/6/$basearch/
enabled=1
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-mysql

# Enable to use MySQL 5.5
[mysql55-community]
name=MySQL 5.5 Community Server
baseurl=http://repo.mysql.com/yum/mysql-5.5-community/el/6/$basearch/
enabled=0
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-mysql

# Enable to use MySQL 5.6
[mysql56-community]
name=MySQL 5.6 Community Server
baseurl=http://repo.mysql.com/yum/mysql-5.6-community/el/6/$basearch/
enabled=1
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-mysql

[mysql57-community]
name=MySQL 5.7 Community Server
baseurl=http://repo.mysql.com/yum/mysql-5.7-community/el/6/$basearch/
enabled=0
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-mysql

MySQL5.6をインストールします。

# yum install -y mysql-community-client mysql-community-devel mysql-community-server
# rpm -qa | grep "mysql"
# mysql --version
mysql  Ver 14.14 Distrib 5.6.27, for Linux (x86_64) using  EditLine wrapper

MySQLの初期設定を行います。

# chkconfig mysqld on
# chkconfig --list mysqld
# service mysqld start
# ps ax | grep "mysqld"
# mysql_secure_installation
# mysql --version
mysql  Ver 14.14 Distrib 5.6.27, for Linux (x86_64) using  EditLine wrapper

Nginx

参考 : CentOS6.xにてnginxの最新版をインストールする手順

http://nginx.org/en/linux_packages.html#stable

RPMパッケージをダウンロードして、Nginxをインストールします。

# rpm -ivh http://nginx.org/packages/centos/6/noarch/RPMS/nginx-release-centos-6-0.el6.ngx.noarch.rpm
# yum -y install nginx
# nginx -v
nginx version: nginx/1.8.0

起動します。

# chkconfig nginx on
# service nginx start

Perl

perlbrewでローカルにPerlをインストールする。

参考 : perlbrewで構築するモダンなPerl環境

$ curl -kL http://install.perlbrew.pl | bash
$ perlbrew init

.bashrcなどのシェルの設定ファイルに以下の行を加えます。

source ~/perl5/perlbrew/etc/bashrc

Perl 5.20.3をインストールします。

# yum install perl-ExtUtils-MakeMaker
$ perlbrew install-patchperl
$ perlbrew install perl-5.20.3
... ← 15分以上かかりました。気長に待ちましょう
$ perlbrew switch perl-5.20.3
$ perl --version

This is perl 5, version 20, subversion 3 (v5.20.3) built for x86_64-linux
(with 1 registered patch, see perl -V for more detail)
... 略

daemon tools

デーモン監視ツールとして、daemon toolsを使います。

参考 : centos6.5にdaemon toolsをインストールする

# mkdir /package
# chmod 1755 /package
# cd /package
# wget http://cr.yp.to/daemontools/daemontools-0.76.tar.gz
# tar -xzvf daemontools-0.76.tar.gz
# rm daemontools-0.76.tar.gz
# cd admin/daemontools-0.76
# echo gcc -O2 -include /usr/include/errno.h > src/conf-cc
# ./package/install

svscan.confを編集する。

# vim /etc/init/svscan.conf
start on runlevel [12345]
respawn
exec /command/svscanboot

設定ファイルを反映させます。

initctl reload-configuration
initctl start svscan

daemon toolsの使い方に関しては、以下のサイトにメモしました。

https://github.com/akimacho/wiki/wiki/daemontools

Webアプリのデプロイ

Amon2を使ったPSGIアプリをデプロイしてみましょう。なお、Nginxをリバースプロキシとして使っています。

サーバの構成は以下のようになります。

f:id:akimacho:20151115211913p:plain

参考 : Apache、mod_perl さようなら!さくらVPSで Nginx + Starman

$ pwd
/home/hoge/www
$ amon2-setup.pl MyApp
$ cd MyApp
$ vim run ← daemontools用の起動スクリプトを作成する

runスクリプトは以下のようになります。

#!/bin/sh
exec 2>&1
cd /home/hoge/www/MyApp
export PATH=/home/hoge/perl5/perlbrew/bin:/home/hoge/perl5/perlbrew/perls/perl-5.20.3/bin:${PATH}
exec setuidgid hoge carton exec perl -Ilib script/myapp-server --port 8001

パーミッションを設定します。

# chmod +x run
# ln -s /home/hoge/daemontools/MyApp /service/MyApp

Nginxの設定

/etc/nginx/nginx.confを以下のように編集します。

http {
    # 略
    upstream myapp {
        server 127.0.0.1:8001;
    }
    # 略
}

/etc/nginx/conf.d/default.confを以下のように編集します。

server {
    listen       80;
    # 公開したいドメイン名
    server_name  xxxyyyzzz.com;
    # アプリの静的ファイルの置き場
    root         /home/hoge/www/MyApp/static;

    location / {
        if (-f $request_filename) { break; }

        proxy_set_header    Host            $host;
        proxy_set_header    X-Real-IP       $remote_addr;
        proxy_set_header    X-Forwarded-For $proxy_add_x_forwarded_for;
        
        proxy_pass          http://myapp;
    }
}

設定を反映させます。

service nginx restart

http://xxxyyyzzz.com にアクセスしてみると、

f:id:akimacho:20151115203935p:plain

動いていますね。

おわりに

さくらVPSとほぼ同じ要領で環境を構築することができました。

いま、サーバ・インフラ力を鍛えるために以下の2冊を読んでいます。

[24時間365日] サーバ/インフラを支える技術 ?スケーラビリティ、ハイパフォーマンス、省力運用 (WEB+DB PRESS plusシリーズ)

[24時間365日] サーバ/インフラを支える技術 ?スケーラビリティ、ハイパフォーマンス、省力運用 (WEB+DB PRESS plusシリーズ)