• follow us in feedly
scroll_icon
shuffle_button
VPSの構築をマスターする手順書 in ボクとサーバの2週間戦争。

VPSの構築をマスターする手順書 in ボクとサーバの2週間戦争。

Author:
ProgrammerboxProgrammerbox
Release Date:
VPSの構築をマスターする手順書 in ボクとサーバの2週間戦争。

このまとめは Programmer box の記事です

突然ですが、Programmerboxのサーバを移行しました。移行にあたってどんなレンタルサーバが良いのか迷いましたが、お名前.comのVPS(KVM)に致しました。移行にする時のサーバ構築にちょくちょくハマってしまいましたので次に構築する時にハマらないようにここに忘備録として手順と設定方法を書いていきたいと思います。

構築するサーバの目的

様々なサーバがあると思いますが、今回はWeb寄りのベーシックな構築を行いたいと思います。
自分自身の要望としては

    ・前のサーバより多くのアクセスを捌けるようにしたい。
    ・バーチャルドメインで運用して行きたい。
    ・FTPでファイルを上げれるようにしたい。
    ・メールの送受信を行いたい。
    ・とにかく自由にサーバをいじりたい。

まぁ、こんなもんでしょうか。
やはり、自由にカスタマイズ出来るという点が魅力ですね、VPSは。

お名前.comのVPS(KVM)で構築する

VPSと言っても様々な企業が出していますが、今回はお名前.comのVPS(KVM)で構築致します。何処が良いかは個人個人違うと思いますので、自由に選ぶと良いかと思います。何故ならば何処も負けじと料金と性能の差が変わらなくなって来た為です。個人的にオススメなのはお名前.comか、さくらですね。

VPSとは?

バーチャル・プライベート・サーバ(仮想専用サーバ、英語:virtual private server、略称:VPS)とは、一台の物理的なサーバコンピュータ上で仮想的なサーバコンピュータを何台も起動する技術(仮想機械; Virtual Machine)によってつくられた仮想的なサーバコンピュータである。 VPSは、ホスティングサーバ(レンタルサーバ)事業者のサービスの一つとしても提供されている。これらのサービスは、上記の技術を用いることで、管理者権限が付与される自由度の高い専用サーバを、従来的な専用サーバよりも大幅に安い価格で契約者に提供することを可能にしている。VPS(仮想専用サーバ)は、物理的なサーバを一台占有する「専用サーバ」に比べて処理能力は劣るものの、構成の自由度は専用サーバとほぼ変わらない

出典:バーチャル・プライベート・サーバ - Wikipedia

	

VPS(kvm)メモリ2GBプランの性能を試してみました

プラン別の性能はこちらです。
  メモリ
1GBプラン
メモリ
2GBプラン
メモリ
4GBプラン
メモリ
8GBプラン
メモリ
16GBプラン
初期費用

無料

現在は0円

5,680円

9,681円

16,680円

月額費用
(1ヶ月払い)
940円 1,380円 3,880円 7,880円 15,880円
年額費用
(1ヶ月あたり)
9,999円
(833円/月)
13,846円
(1,153円/月)
38,918円
(3,243円/月)
79,027円
(6,585円/月)
159,248円
(13,271円/月)
CPU 2コア 3コア 4コア 6コア 10コア
メモリ 1GB 2GB 4GB 8GB 16GB
HDD 100GB 200GB 400GB 800GB 1TB
お試しサービス 15日間無料
で、実際の性能は?という事でAB負荷テストを行いました。 1秒で同時に捌ける限界がアベレージ73アクセスでしたので、ギリギリの同時アクセス70で350接続の結果。
理論上1日で捌けるアクセス数は518万アクセスですが、サーバは色んな仕事をしますので実際は300万アクセスくらいでしょうか。集中アクセスに耐えられるのは1分間で4,000くらいですね。

追記 2017年07月26日
 2015年頃に書いた自分を恨みたいです。ど恥ずかしい事書いてありますね。
動的のシステムによりけりですが、2GBでは同時接続(ここで言う同時接続はアナリティクスを指標にしましょう)70接続がいいところでしょう。

1分間で割ると1秒に1アクセスくらいです。
計算上1日のアクセス上限は100,800です。

そして、そもそもユーザーは一気にくるものです。バズや大きいメディアやテレビで紹介された時を想像するといいでしょう。平均を計算しても全く意味がありません。

平常時のピークタイムで35%くらいのパワーで回せている状況でないと想定外のアクセスが来た時に対応できません。と言うかサーバー落ちます。

落ちるとどうなるかと言うと接続していたユーザーを逃すばかりか、これから入ってこようとしたユーザーも逃します。


なので、最近では複数台のVPSで構成して運営しています。

クラウドは1000万PVに到達したら移行したいと考えています。

OSはCent OS 6.2 (64bit)で構築します

デフォルトOSですし、一番情報が出回っていますので構築しやすいです。
お名前のVPS(KVM)が揃えてくれているOS一覧。
CentOS 5.9,6.2,6.3,6.4 (32bit/64bit)
Debian GNU/Linux 6.0,7.0 (32bit/64bit)
Fedora 17.18 (32bit/64bit)
FreeBSD 9.1,9.2 (32bit/64bit)
Ubuntu 12.04LTS 12.10,13.04 (32bit/64bit)
Scientific Linux 6.2,6.3 (32bit/64bit)
Arch Linux 2011.08.19 (32bit/64bit)

便利なコマンド集

黒い画面で便利したい時。
// 自動起動するサーバ確認
chkconfig --list

// postfixの設定に対して検索が出来る 設定多めのメールサーバなので重宝する
postconf | grep size_limit

// ログを常時表示 メールサーバ構築する時に重宝する
tail -f /var/log/maillog

// サービスの現在のステータスを調べるコマンド サーバが現在どんな状況なのかを確認したい時
service --status-all 

// シャットダウンして再起動
shutdown -r now

SSHで接続出来るようにする

サーバをレンタルしてから一番初めに設定しなくてはならないのがsshで接続する設定ですね。

お名前VPS(KVM)は鍵認証のみ許可していますので、お名前のコントロールパネルにログインしましょう。ログインしましたら、SSH Key Pairをダウンロードして下さい。

その次にターミナル or コマンドプロンプトを開いて
ls -a
と、叩いて、.sshがあるかどうかを探して下さい。

ある人はそのままで

.sshがなかった人は.sshを作りパーミッションの変更を。
mkdir .ssh
chmod 700 .ssh
ディレクトリを作成しましたら.sshの中に先ほどダウンロードしたvpsxxxxxxxxx-xxx.keyというファイルを移動しましょう。
mv ~/Downloads/vpsxxxxxxxxx-xxx.key(ダウンロードしてきたファイル) ~/.ssh/
移動させましたら次はsshのショートカットを作成致します。

.sshに移動してvimでconfigというファイルを作成しましょう。
cd .ssh
vi config
vimが起動しますので以下の記述を自分の設定に書き換えて保存して下さい。
Host          test                        # sshのショートカット名
 HostName     xxx.x.xxx.xxx               # サーバのIPアドレス
 Port         22                          # 接続するポート番号
 User         root                        # VPSサーバのユーザー名
 IdentityFile ~/.ssh/vpsxxxxxxxxx-xxx.key # さっき移動したkey
これでsshのショートカットが完成しましたのでsshで接続してみましょう。
ssh test
無事、接続が出来ましたらここの章は終了です。接続出来なかった場合はもう一度設定するipアドレスや鍵がちゃんと合っているか見直してみましょう。

開発環境を整える

sshでサーバに接続出来きましたので早速サーバ構築に行きたい所ですが、VPS(KVM)は殆ど何も入っていない状態ですので、ローカルで当たり前に使っていたコマンドが使えません。やはり、いつも使っているコマンドは使いたいですので、yumをアップデートしたり、便利なコマンドをインストールしましょう。

yum関連

はじめにyumをアップデート。
yum update
アップデートが完了しましたら、次はyumのグループリストを確認して開発者ツールなるものをインストール。
yum grouplist
yum groupinstall "Development tools"

便利なコマンドをインストールする

ここで良く使うコマンドをインストールしましょう。
yum install wget
yum install man
yum install cyrus*
yum install mail
yum install telnet
yum install tree 

パケットフィルタリングの設定をする

ファイヤーウォール設定ですね、使用するポートだけを許可するようにしました。ここでファイヤーウォールの設定を一気に済ませとけば、各サーバを構築する時にiptablesを設定している時の開き忘れを防げます。
//----------------------
//ファイヤーウォール設定
//----------------------
// 現在の設定の確認
iptables -L

// FORWARDは使わない
iptables -P FORWARD DROP

// まずは全許可に
iptables -P INPUT ACCEPT

// デフォルトのルールを全て削除
iptables -F

// 自分自身からのパケットは全許可
iptables -A INPUT -i lo -j ACCEPT

// SSH許可 or SSH自分(255.255.255.255)だけ許可
iptables -A INPUT -p tcp --dport 22 -j ACCEPT
 or
iptables -A INPUT -s 255.255.255.255 -p tcp --dport 22 -j ACCEPT

// FTPの接続を許可
iptables -A INPUT -p tcp --dport 20 -j ACCEPT
iptables -A INPUT -p tcp --dport 21 -j ACCEPT
iptables -A INPUT -p tcp --dport 60000:60030 -j ACCEPT

// FTPSの接続の許可
iptables -A INPUT -p tcp --dport 990 -j ACCEPT
iptables -A INPUT -p tcp --dport 989 -j ACCEPT
iptables -A INPUT -p tcp --dport 50021:50040  -j ACCEPT

// SMTP(送信メール)の許可
iptables -A INPUT -p tcp --dport 25 -j ACCEPT

// DNS関係
iptables -A INPUT -p tcp --dport 53 -j ACCEPT
iptables -A INPUT -p udp --dport 53 -j ACCEPT

// http, https の接続を許可
iptables -A INPUT -p tcp --dport 80 -j ACCEPT
iptables -A INPUT -p tcp --dport 443 -j ACCEPT

// POP(受信メール)の許可
iptables -A INPUT -p tcp --dport 110 -j ACCEPT

// NTPサーバの通信許可
iptables -A INPUT -p tcp --dport 123 -j ACCEPT

// SUBMISSION ポートを開放
iptables -A INPUT -p tcp --dport 587 -j ACCEPT

// imaps
iptables -A INPUT -p tcp --dport 993 -j ACCEPT

// pop3s
iptables -A INPUT -p tcp --dport 995 -j ACCEPT

// PINGを許可
iptables -A INPUT -p icmp -j ACCEPT

// TCPの接続開始と応答、FTPデータなどを許可
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

// 設定したルール以外のパケットを拒否
iptables -P INPUT DROP

// 設定セーブ
service iptables save

// iptables再起動
service iptables restart

DNS設定

DNS設定に関しては様々なサービスでやり方が異なるのでそのサービスのやり方をググったりしながら設定をしましょう。この設定が一番大事ですので、必ず設定して下さい。

ここではお名前.comのVPS(KVM)を借りている事を想定して説明させて頂きます。

まず、お名前.comのドメインNaviにログインして頂き
ドメイン設定のタブをクリックして下さい。

選択しましたら

次はネームサーバーの設定の中にあるネームサーバの変更をクリックして下さい。
変更するドメインにチェックを入れましたら、下の方にあるVPS(KVM)設定するをクリック。

次は確認画面ですのでもう一度設定するをクリックしますとネームサーバの移行が始まります。

ネームサーバの移行は時間がかかりますので一番最初にやっておくと良いかもしれません。 移行が完了しますとお名前.comからメールが送られて来ますので、その完了メールを受信してからようやくDNS関連の設定が出来るようになります。

先ほど同じようにドメイン設定のタブをクリックしてネームサーバ変更の所にある、DNS関連機能の設定をクリックすると画面が変わりましたらDNSレコード設定を利用するを選択し、変更したいドメインを選んで頂き入力画面に進みましょう。

指定なし、imap、mail、pop、smtpの五つは最低限必要な設定ですのでやっておきましょう。必要ならばwwwも追加しておくと良いかもしれません。

最終的にはこんな感じになっていれば大丈夫です。
これでドメインNaviの設定は終わり、次はサーバーNaviのDNS逆引き設定を行いましょう。

この設定は簡単でサーバーNaviにログインして、借りているVPSのコントロールパネルにログインするとDNS逆引き設定するところがありますのでDNS設定を行ったドメインを登録して下さい。

FTPサーバ構築

一番初めにFTPサーバを構築していきたいと思います。最初に入れておけば面倒なconf関連の編集がVimではなくお気に入りのエディタで出来るようになりますので、ボクは最初に入れるようにしています。

vsftpdインストール

では、yumでFTPサーバをインストールしてみましょう。
yum install vsftpd
Complete致しましたらサーバを再起動した時に自動で起動するようにしておきましょう。
chkconfig vsftpd on

vsftpdの設定

終わりましたらconfを編集します。
vi /etc/vsftpd/vsftpd.conf
vsFTPdの設定
 
まず、初期状態では匿名による接続を許可していますので、これを許可しないようにしましょう。
anonymous_enable=YES
↓
anonymous_enable=NO
変更。
 
 
アスキーモードでのアップロードを許可
アスキーモードでのダウンロードを許可
この設定をしとかないとFTPソフトで同期などの機能が全く使えなくなります。
#ascii_upload_enable=YES
#ascii_download_enable=YES
↓
ascii_upload_enable=YES
ascii_download_enable=YES 
 
 
次に、ファイルのタイムスタンプにローカル時間(日本時間)を使用するようにします。
最後尾に、
use_localtime=YESを追加。
 
 
そして、データのやりとりで使用するPASVモードで使用するポートの範囲を指定します。
pasv_min_port=60000
pasv_max_port=60030
の2行をさらに追加。
このままの状態ですと、rootで接続出来ませんのでもう2ファイルの設定も変更しましょう。user_listとftpusersのファイルにrootと記述されている所をコメントアウトするだけです。
vi /etc/vsftpd/user_list
vi /etc/vsftpd/ftpusers
root
↓
# root
編集が終わりましたらvftpdを再起動させましょう。
service vsftpd restart
これで無事に設定は終了しましたので、FTPソフトの設定は各自設定して下さい。

追記 FTPアカウント毎にホームディレクトリの設定

FTPに接続するユーザごとにホームディレクトリを指定し、上位階層へのアクセスを拒否する設定しなければならない場面は多いと思いますので、追記にて書かせて頂きます。 なお、FTPで設定する内容を全て終わらせている事を前提にし、ユーザー作成に関しても下の章(13-2)にて説明しているので省かせて頂きます。

1. user_conf ディレクトリを作成して、各ユーザーの設定を記述する

vsftpd に移動します。
cd /etc/vsftpd/
移動しましたら、user_conf を作ります。
mkdir user_conf
その中に、詳細設定したいユーザー名のファイルを作ります。
vi /etc/vsftpd/user_conf/hoge
次にそのユーザーのルートを決める記述をします。
local_root=/home/foo/hoge
通常ならこれだけで設定は完了なのですが、chroot_listの設定をしていなかったので反映されません。と言うことで次はchroot_listの設定をしていきます。

2. vsftpd.conf で chroot_list系の設定を変更する

設定を変更する為にvimでファイルを開きましょう
vi /etc/vsftpd/vsftpd.conf
多分 # でコメントアウトされていると思いますので削除して設定を反映させましょう。検索してもなかったら一番下に記述してください。
chroot_list_enable=YES
chroot_list_file=/etc/vsftpd/chroot_list

3. chroot_listの設定をする

chroot_listファイルを編集するためにvimを。
# vi chroot_list
上位階層へのアクセスを拒否したいユーザー名を記述して保存しましょう。
hoge
これで設定の方は完了です、最期にリスタートをして
service vsftpd restart
FTPソフトで確認を。

追記 FTPをFTPSに変更するレシピ

FTP の通信経路を暗号化して、ファイル転送をより安全に行うためにFTPSにしたいと思います。

FTPSとは?

FTPS (File Transfer Protocol over SSL/TLS) というのは、FTP を SSL/TSL に乗せることでファイル転送を暗号化します。

FTP 単体ではセキュリティー面の不安が残りますし、これからファイル転送の環境を用意するのであれば、こういった暗号化を盛り込んだ方法を選んでおきたいものです。

出典:EZ-NET: vsftpd で FTPS 環境を構築する (CentOS 5.5) : Linux の使い方

	
という事でこの記事を参考にさせていただき追記をしていきます。

まずはetc/pki/tls/certsに移動して vsftpd.pem という名の電子証明書を作成しましょう。
cd /etc/pki/tls/certs/

make vsftpd.pem
いくつか尋ねられますが、適当で大丈夫です。

電子証明書が作成できたら、続いて vsftpd の設定です。
FTPS を利用できるようにするには "/etc/vsftpd/vsftpd.conf" 内で、次の項目を設定して行きましょう。
vi /etc/vsftpd/vsftpd.conf
一番下の方にこれを追記する


pasv_min_port=50021
pasv_max_port=50040

# 電子証明書の場所など
ssl_enable=YES
rsa_cert_file=/etc/pki/tls/certs/vsftpd.pem
force_local_logins_ssl=YES
force_local_data_ssl=YES
allow_anon_ssl=NO

# ここからパッシブの設定を追記
pasv_address=サーバーのアドレス(例 155.5.555.555
pasv_enable=YES

implicit_ssl=YES
listen_port=990
設定が終わったらもう一度リスタートを行いましょう。
service vsftpd restart
これでFTPからFTPSになりました。FTPソフトでもFTPSを指定して初回だけ許可していない電子証明書を許可してください。

webサーバ構築

web開発者にとって必須のサーバですね、構築もそこまで難しくありませんが、バーチャルホストのconfの書く所がググった記事ではバラバラでしたので、そこだけ気をつければ後は問題なく構築出来るような気がします。

Apacheインストール

俗にいうApacheをインストールします。
yum install httpd

Apacheの設定

インストールしましたら早速confをいじりましょう。
vi /etc/httpd/conf/httpd.conf
ServerAdmin
  サーバー管理者のメールアドレスを記載します。
 
ServerName
  DNSで設定したサーバー名とポート番号を記載します。
  (例)ServerName programmerbox.com:80
 
DocumentRoot
  ウェブコンテンツを保存する場所を記載します。
  バーチャルホストを使わない方もいるかもしれませんので、デフォルトのポイントとしてちゃんと記述しておきます。
 
<Directory "/var/www/html">
  ここはDocumentRootと同じディレクトリパスに変更。
 
<Directory "/var/www/html">のパスを直したら、その中にある
AllowOverride None を
↓
AllowOverride All に変更しましょう。これで.htaccessが有効になります。
設定が終わりましたら、自動起動onとhttpdをスタートしましょう。
chkconfig httpd on
service httpd start
スタートしましたら生IP(http://xxx.x.xxx.xxx/)とドメインを叩いて表示されるかどうか確認をしてみて下さい。無事Apache 2 Test Pageと表示されましたらちゃんと動いています。

バーチャルホストの設定

一つのサーバで複数のドメインを運用したい時はバーチャルホストを設定しますと出来るようになるのでオススメです。なお、設定する前に追加するドメインのDNSを忘れずにしておいて下さい。
vi /etc/httpd/conf/httpd.conf
一番下から20行目あたりに
#NameVirtualHost *:80
がありますので、コメントを外して
NameVirtualHost *:80
と、します。これだけでバーチャルホストとして
読んでくれるようになるので、後はhttpd-vhosts.confの中で各ドメインの設定をします。
 
最後にhttpd-vhosts.confというファイルをインクルードするように末行に
# 追加
include /etc/httpd/conf/httpd-vhosts.conf
を、追加して保存。
保存が終わりましたら、インクルードさせるhttpd-vhosts.confを作成しましょう。
vi /etc/httpd/conf/httpd-vhosts.conf
設定はこんな感じで、設定したいドメインとドキュメントルートを設定してください。logに関してはコメントアウトしても大丈夫です。
 
# aaa.comの場合
<VirtualHost *:80>
  ServerAdmin  aaa@aaa.com
  DocumentRoot /var/www/vhosts/aaa.com/httpdocs
  ServerName   aaa.com
  ErrorLog     /var/www/vhosts/aaa.com/error_log
  CustomLog    /var/www/vhosts/aaa.com/access_log common
</VirtualHost>
<Directory /var/www/vhosts/aaa.com/httpdocs>
  Options FollowSymLinks
  AllowOverride All
  Order allow,deny
  Allow from all
</Directory>
 
# bbb.comの場合
<VirtualHost *:80>
  ServerAdmin  bbb@bbb.com
  DocumentRoot /var/www/vhosts/bbb.com/httpdocs
  ServerName   bbb.com
  ErrorLog     /var/www/vhosts/bbb.com/error_log
  CustomLog    /var/www/vhosts/bbb.com/access_log common
</VirtualHost>
<Directory /var/www/vhosts/bbb.com/httpdocs>
  Options FollowSymLinks
  AllowOverride All
  Order allow,deny
  Allow from all
</Directory>
 
ドメインを追加したら随時手動でフォルダを作成して下さい。
 
フォルダ構成はこんな感じがオススメです。
www
├── cgi-bin
├── error
│    ├...
│     ...
├── html(デフォルトのドキュメントルートはここですね。)
├── icons
│    ├...
│     ...       この階層をドメイン名にしてプライマリーな感じで増やしていく。
└── vhosts    ↓
      └── aaa.com
            ├── access_log
            ├── app
            ├── error_log
            └── httpdocs
 
フレームワーク等を導入した時にappに切り替えたり出来たりすると思いますので便利です。
これでwebサーバ構築の章は最小限の設定でしたが、これで終わりにさせて頂きます。

追記 apacheでメモリリークしないようにするチューニング

追記 2017年07月27日
webサーバー+DBサーバーに構成を変えてもまだwebサーバーの方がスワップを使ってしまう現象が起きてしまっていたので色々な原因があるのですが、まず一番疑わしいのはapacheの設定です。

という事で再度、チューニングを行ってみました。

Apacheに割り当て可能なメモリ量を調べる

Apacheが使用しているメモリ総量はこれ↓で計算。
// Apacheに割り当て可能なメモリ量を調べる
ps aux | grep [h]ttpd | grep [a]pache | awk "BEGIN{x=0}{x+=$6}END{ print x }"

Apacheの最大子プロセス数を調べる

 Apacheの子プロセスあたりの平均メモリ使用量はこれ↓で計算。
// Apacheの子プロセスあたりの平均メモリ使用量を調べる
ps aux | grep [h]ttpd | grep [a]pache | awk "BEGIN{x=0}{x+=$6}END{ print x/NR }"

Apacheの最大子プロセス数 : P = (Apacheに割り当て可能なメモリ量) / (Apacheの子プロセスあたりの平均メモリ使用量)


このPを
ServerLimit
MaxClients
に割り当てればメモリリークしない計算となります。

Apacheの設定変更

それでは計算した値を割り当てるためにhttpd.confを編集していきます。
vi /etc/httpd/conf/httpd.conf
# 設定する値
<IfModule prefork.c>
StartServers       P×5/256
MinSpareServers    P×5/256
MaxSpareServers   P×10/256
ServerLimit      P
MaxClients       P
MaxRequestsPerChild  1000
</IfModule>
設定が完了いたしましたら、リスタートをしましょう。
service httpd restart

dbサーバ構築

次はdbサーバを構築していきます。webサービスには必須のサーバですので、ちゃんと設定をこなしていきましょう。

mysql、mysql-server、mysql-develをインストールして自動起動onにしてスタート。
// 記事アップ時点ではこっちでしたが・・・
yum install mysql
yum install mysql-server
yum install mysql-devel

// 追記 2016.03.02時点ではこっちでインストール
yum install http://dev.mysql.com/get/mysql-community-release-el6-5.noarch.rpm
yum install mysql mysql-devel mysql-server mysql-utilities

chkconfig mysqld on
service mysqld start
スタートさせたら最初はパスワードが設定されていないのでmysqlに接続してからクエリを投げてパスワードを設定する。
// 1.rootで入る
mysql -uroot

// 2.パスワードを設定するクエリを投げる
set PASSWORD for root@localhost = PASSWORD("root");

// 3.mysqlをログアウトする
exit
ログアウトしたら先ほど登録したパスワードでmysqlにログインしてみる。
mysql -uroot -proot

exit
追記
厳格な設定(STRICTモード)になっているMySQLの設定を変更する
vi /etc/my.cnf

sql-mode=の記述を
sql-mode="NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION"
にする

service mysqld restart
ここら辺はすんなりいくと思いますので、これでdbサーバ構築の章は終わります。

追記 外部DBサーバーへ接続する方法

2017年07月26日にSharetubeは単一のサーバー構成からWebサーバー+DBサーバーの構成に変更いたしました。
【祝】ようやくSharetubeが単一サーバーでの構成からWebサーバー+DBサーバーの構成にレベルアップ!
	
その時も恒例で2時間くらいハマってしまったので忘備録として記述いたします。

リモート側の設定

では、外部のDBサーバーと接続するためにまずはリモート側(外部)の設定を行います。

my.cnfのbind-address設定

まず初めに bind-address の設定をチェックしてみましょう。お名前VPSでのデフォルト設定では何も設定されていなかったのですが、一応。
vi /etc/my.cnf

// 接続できるipを設定  特に設定していない場合はすべてのipから接続可能になる
bind-address = xxx.x.xxx.xxx

service mysqld restart

ポートの確認

デフォルトではMySQLがTCPポート3306番でListenしているので、 ポートが開いているか確認。
netstat -tlpn
0.0.0.0:3306 ~ LISTEN xxxx/mysqld の表示があればOK。

ファイアーウォール設定

お名前.comのVPSではmysqlを外部サーバーに接続できるようになっていませんのでここでもう一度iptablesの設定を行います。
// MySQLへの外部アクセスを許可
iptables -I INPUT 6 -m state --state NEW -p tcp --dport 3306 -j ACCEPT

// 設定セーブ
service iptables save
// iptables再起動
service iptables restart

[ローカル・リモート]外部から接続できるようにmysqlの中でユーザー設定を行う

上記の設定でようやく接続ができる環境ができました。ここからは実際に接続するコマンドを説明していきます。

接続される側のip例
111.111.111.111

接続する側のip例
222.222.222.222

接続される側の設定

# 接続される側のip例
# 111.111.111.111側の設定方法


# 接続
mysql -u[ユーザー名] -p

#ユーザー一覧表示
mysql> SELECT user,host FROM mysql.user;
+--------+-----------+
| user   | host      |
+--------+-----------+
| root   | 127.0.0.1 |
| root   | ::1       |
| root   | localhost |
+--------+-----------+



# 設定は大まかに2種類あります。

# 外部ホストからの権限を付与
# これは接続するipとデータベース名を特定しての接続設定
grant all privileges on [データベース名].* to [登録するユーザー名]@"[接続するip]" identified by "[パスワード]" with grant option;

# この設定はユーザー名とパスワードだけを設定してどのipでも接続できる設定
grant all privileges on *.* to [登録するユーザー名]@"%" identified by "[パスワード]" with grant option;


# 権限変更を反映
flush privileges;

# リスタート
service mysqld restart

接続する側の設定

# 接続される側のip例
# 222.222.222.222側の設定方法

# 外部サーバーのMySQLへ接続
mysql -h111.111.111.111 -u[設定したユーザー名] -p

# 注意して欲しいのが -p の後にパスワードを記述しないこと。
# 記述するとエラーになります。

外部DBサーバーへ接続する方法 あとがき

意外と外部DBサーバーへ接続するだけでも大変ですね。
webサーバーと切り離せたことでサーバーへの圧迫は格段に減ったのではないでしょうか?注意する点と言えば、web・appサーバーとDBサーバーの物理的な距離に注意しましょう。webサーバーが日本でDBサーバーがアメリカにあったのでは切り離すデメリットの方が優ってしまいかねません。

PHPインストール

特にPHPじゃなきゃいけない訳ではないのですが、個人的にFuelPHPというフレームワークを利用したくてPHPを入れてみる事にしました。それ以外にもPHPは簡単な記述で動きますので軽い感じの事をしたい時は便利です。

yumでlistを確認してみると管理しているPHPは現時点(2013.12.20)で5.3.3でした。
yum list PHP*
折角なので、もっと新しいバージョンをインストールしてみましょう。

remi(Les RPM de Remi - Repository)のrpmパッケージを使います。
// epel リポジトリ追加(32ビット版はx86_64をi386に変更するらしい、未検証)
rpm -Uvh http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm
// remi リポジトリ追加
rpm -Uvh http://rpms.famillecollet.com/enterprise/remi-release-6.rpm
追加しましたら確認してみましょう。
yum list --enablerepo=remi --enablerepo=remi-php56 | grep php
膨大な数が追加されていますね。phpは一番上にあります。5.5.7という新しさになりました。リリースされてまだ8日しか経っていません(この文章を書いている時点で)新しすぎてバグが心配な方は最新の安定板と言われている5.5をインストールする事をお勧め致します。

これでphpのバージョンが5.6.30になりました。
追記 2017年05月11日

それではインストールしたいパッケージを選んで一気にインストールしてみましょう。
// 今回インストールするパッケージ
// php、php-devel、php-mbstring、php-mcrypt、php-mysql
// php-phpunit-PHPUnit、php-pecl-xdebug、php-gd

// インストール
yum install --enablerepo=remi --enablerepo=remi-php56 php php-devel php-mbstring php-mcrypt php-mysql php-phpunit-PHPUnit php-pecl-xdebug php-gd
インストールが終わりましたらPHPのバージョンを確認してみましょう。
php --version
無事に5.5.7 5.6.30になっていると思います。これで新しい機能をガシガシ使えるようになりました。

php.iniの設定

このままのphp.iniの設定だと使いづらいと思いますので、ボクなりのセッティングしたところを載せときますので参考にして編集して下さい。
#----
#色々
#----
# PHPが扱うメモリ
memory_limit = 128M
↓
memory_limit = 512M
406行目あたり
 
# エラーレベル
error_reporting = E_ALL & ~E_DEPRECATED & ~E_STRICT
↓
error_reporting = E_ALL
462行目あたり
 
# エラー表示
display_errors = Off
↓
display_errors = Off(ローカルならOnで本番環境ならOff)
479行目あたり
 
# 諸々の送信出来るサイズ
post_max_size = 8M
↓
post_max_size = 128M
673行目あたり
 
# デフォルト文字コード
;default_charset = "UTF-8"
↓
default_charset = "UTF-8"
693行目あたり
 
# アップロード出来るサイズ
upload_max_filesize = 2M
↓
upload_max_filesize = 64M
805行目あたり
 
# 場所(FuelPHPを導入する時にこれを設定していないとFuelPHPインストールする時点でエラーになる。)
;date.timezone =
↓
date.timezone = "Asia/Tokyo"
883行目あたり
 
 
#---------
#session系
#---------
# GCプロセスが 始動する間隔(1/1000)
session.gc_divisor = 1000(少し古いPHPだと100なのだが、5.5.7は1000になってた。)
↓
session.gc_divisor = 1000
1430行目あたり
 
# セッションが消されるまでの時間(秒単位)
session.gc_maxlifetime = 1440
↓
session.gc_maxlifetime = 4320
 
# キャッシュされたセッションページの有効期間(分単位)
session.cache_expire = 180
↓
session.cache_expire = 540
 
 
#--------------
#マルチバイト系
#--------------
# 日本だと明示的に設定
;mbstring.language = Japanese
↓
mbstring.language = Japanese
1665行目あたり
 
# 文字コード指定
;mbstring.internal_encoding = UTF-8
↓
mbstring.internal_encoding = UTF-8
1671行目あたり
 
# 入力される文字コード
;mbstring.http_input = UTF-8
↓
mbstring.http_input = UTF-8
 
# 文字コードを変換しないようにする
;mbstring.http_output = pass
↓
mbstring.http_output = pass
 
# 内部文字エンコーディングへの変換を無効にする
;mbstring.encoding_translation = Off
↓
mbstring.encoding_translation = Off
php.iniの設定はこんな感じでしょうか。

これでPHPインストールの章を終わりたいと思います。

phpMyAdminインストール

phpもインストール完了したという事でphoMyAdminの方もインストールしたいと思います。
// 記事アップ時点ではこっちでしたが・・・
yum --enablerepo=epel install phpMyAdmin

// 追記 2016.02.12時点ではこっちでインストール
yum install -y --enablerepo=remi,remi-php56 phpMyAdmin
インストールが完了しましたら、確認してみましょうか。
rpm -ql phpMyAdmin

phpMyAdmin.confの設定

ずらずらとインストールされた事が確認出来ましたね、その一番上から3行目あたりまでが設定ファイルですので設定を変えていきます。
vi /etc/httpd/conf.d/phpMyAdmin.conf
まず、デフォルトで
aaa.com/phpMyAdmin/
aaa.com/phpmyadmin/
 
でアクセス出来るようになってしまっているのでエイリアスの変更を(大事)。
 
Alias /phpMyAdmin /usr/share/phpMyAdmin
Alias /phpmyadmin /usr/share/phpMyAdmin
を削除かコメントアウトしていただき
 
Alias /[パスを自由設定] /usr/share/phpMyAdmin
 
としましょう。
 
名前は長ければ長い程良いとは思いますが、忘れない程度の名前にする事が大事です。
 
 
最後にアクセス出来るIPを設定をします。
厳しくするなら家&会社のIPアドレスのみなど制限をかけた方が良いかもしれません。
ここでは全ての人が入れるように設定します。(ログイン画面に)
変更する点は2点です。
 
<Directory /usr/share/phpMyAdmin/>
   <IfModule mod_authz_core.c>
     # Apache 2.4
     <RequireAny>
       Require ip 127.0.0.1
       Require ip ::1
     </RequireAny>
   </IfModule>
   <IfModule !mod_authz_core.c>
     # Apache 2.2
     Order Deny,Allow
     Deny from All
     Allow from 127.0.0.1
     Allow from ::1
   </IfModule>
</Directory>
↓
<Directory /usr/share/phpMyAdmin/>
   <IfModule mod_authz_core.c>
     # Apache 2.4
     <RequireAny>
       Require ip 127.0.0.1
       Require ip ::1
     </RequireAny>
   </IfModule>
   <IfModule !mod_authz_core.c>
     # Apache 2.2
     Order Deny,Allow
     Deny from All
     Allow from All
   </IfModule>
</Directory>
 
Allow from 127.0.0.1
↓
Allow from All
に変更して
 
Allow from ::1
を削除して下さい。
 
これで全てのバーチャルホストでphpMyAdminを参照出来るようになりました。
次はログイン画面で認証する時にどの認証にするかの設定を行います。デフォルトだとベーシック認証になっていますのでここではクッキー認証に切り替えたいと思います。
vi /etc/phpMyAdmin/config.inc.php
$cfg["Servers"][$i]["auth_type"]     = "http";
↓
$cfg["Servers"][$i]["auth_type"]     = "cookie";
 
これでcookie認証に切り替わります。
これでphpMyAdminのインストールと設定は完了です。最後にhhtpdを再起動して設定の読み込みをさせましょう。
service httpd restart
以上でphpMyAdminの章を終わりにさせて頂きます。

メールサーバ構築

webサービスを公開すればメールアドレスも必要になってきますので、メールサーバも構築していきます。この記事の中で一番の難関ですので構築は慎重に行いましょう。

Dovecotインストール

初めに受信系を管理をするdovecotをインストールします。
yum  install dovecot

Dovecotの設定

無事、インストール出来ましたら個別にconfの設定を変えていきます。最初はプロトロルの設定を変更をします。
vi /etc/dovecot/dovecot.conf
プロトコルの設定
#protocols = imap pop3 lmtp
↓
protocols = imap pop3
次は認証系設定を変えていきます。
vi /etc/dovecot/conf.d/10-auth.conf
平文での認証を許可を不許可にする
#disable_plaintext_auth = yes
↓
disable_plaintext_auth = no
 
認証方式の設定
auth_mechanisms = plain
↓
auth_mechanisms = plain login
メールボックスの形式を指定。
vi /etc/dovecot/conf.d/10-mail.conf

メールボックスの形式を指定
#mail_location =
↓
mail_location = maildir:~/Maildir
最後にpostfixからの認証要求を受け付けるようにしときましょう。
vi /etc/dovecot/conf.d/10-master.conf
Postfixからの認証要求の受付
#unix_listener /var/spool/postfix/private/auth {
#  mode = 0666
#}
↓
unix_listener /var/spool/postfix/private/auth {
 mode = 0660
 user = postfix
 group = postfix
}
一通り設定が完了しましたらdovecotの起動と自動起動onに。
/etc/rc.d/init.d/dovecot start
chkconfig dovecot on

Postfixの基本構築

次に送信系の構築を行いたいと思います。postfixに関しては最初から入っていると思いますのでインストールは省略します。もしも入っていない場合はyumでインストールをお願い致します。なお、変更する点が多いので間違えないように気をつけましょう。 まず初めにmain.cfを編集をしていきます。
vi /etc/postfix/main.cf
ここでは例で webprofile.me というドメインを使って説明しています。実際に変更する時はご自分のドメイン名を記述してください。
 
 
# ホスト指定
myhostname = mail.webprofile.me
 
# ドメイン名指定
mydomain = webprofile.me
 
# メール送信時の送信元メールアドレスの@以降に付加するドメイン名を指定
myorigin = $mydomain
 
# 外部からのメール受信を許可するネットワークインターフェースを指定
inet_interfaces = localhost
↓
inet_interfaces = all
 
# メールを受け付ける宛先指定
# 複数のドメインを設定している場合は追加していく
mydestination = $myhostname, localhost.$mydomain, localhost, $mydomain
 
# メールボックス形式を指定
home_mailbox = Maildir/
 
# メールサーバーソフト名をごまかします
smtpd_banner = $myhostname ESMTP unknown
 
 
 
# 末行に追加
# どんなユーザーがいるのかを探れないようにする
disable_vrfy_command = yes
 
# sasl認証に対応していないメーラを拒否
smtpd_sasl_auth_enable = yes
 
# sasl認証を使うよう設定
smtpd_sasl_auth_enable = yes
 
# sasl関連設定
smtpd_sasl_authenticated_header = yes
smtpd_sasl_path = private/auth
smtpd_sasl_security_options = noanonymous
smtpd_sasl_local_domain = $myhostname
smtpd_sasl_type = dovecot
smtpd_recipient_restrictions =
  permit_mynetworks,
  permit_sasl_authenticated,
  reject_unauth_destination
 
# Dovecotと同じ認証を使用する
smtpd_sasl_type = dovecot
cfの設定が終わりましたらpostfixを起動してsaslを自動起動onにしてから起動させましょう。
chkconfig postfix on
chkconfig saslauthd on
/etc/rc.d/init.d/saslauthd start

サーバの秘密鍵を作成

次はメールサーバとの通信をSSLを使って暗号化する設定や鍵を作っていきます。 まず、opensslというコマンドがあるか調べます。(大抵デフォルトで入っているかと思いますが)
man openssl
コマンドがあったら説明がずらずらと流れるのでqを押して戻ります。

ない場合は No manual entry for openssl と表示されますのでインストールしましょう。
yum install openssl
インストールが終わりましたら暗号鍵の置き場所として、/etc/pki/tls/certs が使われているらしいのでそこへ移動して server.key というkeyを2048の長さで作成していきます。

keyを作成する時にpassを設定しろと言われますが、後からpassを消すので簡単なpassを設定しといて下さい。
cd /etc/pki/tls/certs
openssl genrsa -des3 -out server.key 2048
これでserver.keyという名前でRSAの秘密鍵が作成されました。では、早速鍵のpassを解除をやりましょう。最後にserver.keyをroot以外見れないようにパーミッションを変更しておきます。
openssl rsa -in server.key -out server.key
chmod 400 server.key

証明書の作成

ここで休憩がてら、自己認証の事を詳しく知る為に引用を載せときます。

認証マフィアの説明とメールサーバでは自己認証で問題ない理由。

    RSA方式は秘密鍵と公開鍵のペアで暗号複合を行いますので、公開鍵を作成する必要があります。この公開鍵と、鍵の作成者の名前などの識別情報、そしてこの鍵がちゃんと本人によって作成されたことの認証をセットにしたものを公開鍵証明書、又は単に証明書と呼んでいます。

    鍵がちゃんと本人が作成したものであることを認証する者を認証局(CA:Certificate Authority)といい、信頼できる第三者機関(TTP:Trusted Third Party)が行う場合と、本人が自ら行う自己認証があります。

    このTTPによる認証は、法外な料金を要求するため認証マフィアと呼ばれていますが、オンラインショッピングサイトのように「信用」が不可欠な場合は、やむを得ず法外な料金を支払ってTTPによる認証を受けざるを得ません。そうしないと、ブラウザから「このサイトの証明書は信頼できる第三者機関によって認証されたものではありません」などど、あたかも詐欺サイトであるかのようなメッセージを出されてしまします。

    しかし、メールサーバーの場合は利用する人があらかじめ決まっていて詐欺サイトでないことを知っているわけですから、自己認証でなんら差支えありません。ということで、ここでは当然に自己認証の証明書を作成します。

出典:Linux自習室 - サーバーを使い倒す! - メールサーバーを暗号化

	
中々勉強になる文章ですね。では、なんとなくわかったという事で作業を進めて参りましょう。先ほどの /etc/pki/tls/certs に場所にいますか?いなかったらもう一度 cd で飛んで下さい。

公開鍵証明書の作成は openssl req コマンドを使用します。 
openssl req -new -x509 -days 3650 -key server.key -out mail.crt
-new は新規に証明書の作成を行うオプションで
-x509 は証明書の形式で、現在使用されているx.509形式を指定。
-days は証明書の有効期限で、約10年を指定。
-key は使用する秘密鍵で、これに対応する公開鍵が証明書の中に作成されます。
-out は作成される証明書のファイル名です。

なお、このコマンドを実行すると鍵作成者の識別情報の入力を求められますので英文で入録します。自分だけが使うのであれば適当でも問題ありません。

作業が終わると、mail.crtという公開鍵証明書が作成されます。

PostfixのSSL暗号化設定

先ほど作成した鍵を使う為にSSL暗号化設定を行います。 先にmain.cfの方へ追加を書き足しましょう。
vi /etc/postfix/main.cf
# 末行に追加
smtpd_use_tls = yes
smtpd_tls_cert_file = /etc/pki/tls/certs/mail.crt
smtpd_tls_key_file = /etc/pki/tls/certs/server.key
smtpd_tls_session_cache_database = btree:/etc/postfix/smtpd_scache
smtpd_tls_session_cache_timeout = 86400s
次にmaster.cfも変更する場所がありますので変えていきます。
vi /etc/postfix/master.cf
# submissionを使う
# コメントを外す
#submission inet n       -       n       -       -       smtpd
↓
submission inet n       -       n       -       -       smtpd
#  -o smtpd_sasl_auth_enable=yes
↓
  -o smtpd_sasl_auth_enable=yes
 
# smtpsを使う
# コメントを外す
# smtps     inet  n       -       n       -       -       smtpd
↓
smtps     inet  n       -       n       -       -       smtpd
#  -o smtpd_tls_wrappermode=yes
#  -o smtpd_sasl_auth_enable=yes
↓
  -o smtpd_tls_wrappermode=yes
  -o smtpd_sasl_auth_enable=yes

DovecotのSSL暗号化設定

Dovecotの方もssl関連の追加をしていきます。
vi /etc/dovecot/conf.d/10-ssl.conf
# コメントを外す
#ssl = yes
↓
ssl = yes
 
# 秘密鍵と公開鍵証明書の設定
ssl_cert = </etc/pki/dovecot/certs/dovecot.pem
ssl_key = </etc/pki/dovecot/private/dovecot.pem
↓
ssl_cert = </etc/pki/tls/certs/mail.crt
ssl_key = </etc/pki/tls/certs/server.key
設定が終わりましたらこれでメールサーバ構築はひとまず完了です。最後にpostfixとdovecotの再起動を行い設定を通しましょう。
service postfix restart
service dovecot restart
長い長い設定が終わったところですが、まだ動作確認を終えていないので次の章でメールの動作確認を致します。

追記 info や support などユーザー名を使いたい場合

infoやmailというユーザーを作成しても送信はできるけど、受信ができないという謎な現象に悩んでいました。 info@xxx.xxっていうメールアドレス使いたいなーってずっと思っていたのですが、ググりまくったら問題を解決してくれたサイトがございましたのでやりかたを説明します。 初期状態でエイリアスがかかっている名前があるらしく、その名前のメールアドレスを使いたい場合、そのエイリアスを解かないといけないみたいなんです。 で、初期状態でエイリアス設定が行われているアカウント名は以下の通りです。
abuse adm amanda apache bin canna daemon dbus decode desktop dovecot dumper fax ftp-adm ftp-admin ftp ftpadm ftpadmin games gdm gopher halt hostmaster ident info ingres ldap lp mail mailer-daemon mailman-owner mailman mailnull manager marketing mysql named netdump news newsadm newsadmin nfsnobody nobody noc nscd ntp nut operator pcap postfix postgres postmaster privoxy pvm quagga radiusd radvd rpc rpcuser rpm sales security shutdown smmsp squid sshd support sync system toor usenet uucp vcsa webalizer webmaster wnn www xfs 

出典:メールサーバの構築_Postfixの設定 | VPS(仮想専用サーバー)/クラウドなら安心と信頼のWebARENA(ウェブアリーナ) | VPS/クラウドサポート

	
そのエイリアスを解きたい場合は、/etc/aliasesを編集いたします。
vi /etc/aliases
エイリアスを解きたい名前をコメントアウトにする
info:          postmaster
↓↓↓↓↓
#info:          postmaster
コメントアウトをして、保存しましたら新しいエイリアスにするために次のコマンドを打ってください。
newaliases
これで完了です。

上記の設定を行った後、通常のメールアカウント同様にユーザーを作成してから送受信が行えることを確認してください。

ユーザー作成とメール動作確認

ここの章ではroot以外にユーザーを作成して、そのユーザーのメールアドレスでメール動作確認を行いたいと思います。なお、メールクライアントソフトはMacにデフォルトで入っている メール というソフトで行います。

ユーザーを作成した時に自動でユーザーフォルダ直下にMaildirフォルダ作成する

まぁ、そのまんまなのですが、ユーザーを作成した時に最初からMaildirフォルダが生成されたら楽という事でユーザーを作成する前に下準備を行いましょう。
// 新規ユーザ追加時に自動でMaildir形式メールボックス作成
mkdir -p /etc/skel/Maildir/{new,cur,tmp}

// メールボックスパーミッション設定
chmod -R 700 /etc/skel/Maildir/

ユーザー作成

下準備も完了しましたので、早速ユーザーを作成していきます。
// ユーザー作成
useradd [ユーザーの名前]

// パスワード設定
passwd [ユーザーの名前]

メール動作確認 & メールクライアント設定

ではでは、全ての準備がようやく整った所でメール動作確認を行いたいと思います。 作業に取り掛かる前にコマンドで動的にエラーを吐き出すように下準備を行います。
// ログを常時表示 メールサーバ構築する時に重宝する
tail -f /var/log/maillog
これで自動的にコマンドの画面にメールログが吐き出されるようになりますので、このログを見ながら動作確認を行っていきます。

では、Macのメールにてメールアドレス設定を行いましょう。

今回のサーバ設定は

ドメイン:blogreeder.com

ユーザー:article

で、やらせていただきましたが、実際にする時は各自自分の設定で行って下さい。
メール設定をしている内にmaillogが吐き出されているかと思いますので確認して下さい。

上記の構築を完璧にこなしていれば、おそらくですが接続は出来ている筈なので次のステップに進みます。なお、エラーが出て接続出来ない方は大変申し訳ございませんが、エラーログをコピペする等してググって下さい。

接続出来ましたら一度メールアプリを落として、もう一度アプリを立ち上げて下さい。そうしますと識別情報を確認出来ませんとポップアップが現れますので、常に信頼にチェックを入れまして接続をして下さい。これでもうポップアップが現れない筈です。
同じくメールを初めて送信する時も出て来ますので、常に信頼をチェックして接続して下さい。

最後に、ボクがこのメールサーバを構築するのにドハまり(一週間...)してしまいましたので、どこでつまづいてしまったのかを忘備録として残しておきます。

   ・ iptablesでポートを開いていなかった。
   ・ ユーザー直下フォルダ(Maildir)のパーミッションが間違っていた。
   ・ 元から設定があるユーザー名だと(infoとか)
   ・ エイリアスを変更しないとメールが届かない。
   ・ お名前.comVPS(KVM)を借りて15日間無料期間だと
   ・ そもそも25番ポートをお名前.comが禁止していた。

NTPサーバ構築

NTPサーバはサーバ内の時間を常に世界と合わせるという仕事が出来ます。時間がズレていると様々な弊害や予期せぬバグを生む事になりかねないのでしっかり合わせていきましょう。

NTPインストール

初めにNTPをインストールします。
yum install ntp

手動で時間を合わせる

NTPサーバー(ntpd)を起動する際に、大幅に時間がずれていると、NTPサーバーが起動できないので、まずは手動で時間を合わせます。手動で時間合わせをするコマンドは、ntpdateで、これに正しい時間を教えてくれるサーバーを指定して実行します。時間を合わせる元のサーバーは、NICT(独立行政法人・情報通信研究機構)のNTPサーバーにします。

出典:Linux自習室 - サーバーを使い倒す! - 常に正確な時間に合わせる

	
という事らしいので、先ずは時間を合わせてみましょう。
ntpdate ntp.nict.jp

NTPサーバの設定

大体の時間を合わせましたら次は設定を行います。
vi /etc/ntp.conf
内部からの時刻同期を許可
#restrict 192.168.1.0 mask 255.255.255.0 nomodify notrap
↓
restrict 192.168.1.0 mask 255.255.255.0 nomodify notrap
 
 
こっちのサーバの方が正確な時間を取得出来るので変更する
server 0.centos.pool.ntp.org iburst
server 1.centos.pool.ntp.org iburst
server 2.centos.pool.ntp.org iburst
server 3.centos.pool.ntp.org iburst
↓
server ntp.nict.jp iburst
server ntp.jst.mfeed.ad.jp iburst
の二行に変更する
変更を保存しましたら、ntpdをスタートして自動起動onにしましょう。
service ntpd start
chkconfig --level 3 ntpd on 

同期の確認

同期の確認をするにはntpqでオプション-pを付けて確認出来ます。
ntpq -p
    ただし、起動直後はすぐには同期されませんので、10分程度たってから確認すると同期されていることが確認できます。同期の確認は、ntpqコマンドに-pオプションと付けて行います。

    remoteの欄が同期しているサーバーで、先頭に*(アスタリスク)が付いているサーバーが同期しているサーバーです。その他に、+もいつでも接続可能なサーバーとしてマークされているものです。この欄が空白のサーバーは接続不可です。ただし、ntpdが起動して間もないときは、接続テストが完了しておらず、すべて空白(接続不可)となっています。

    その右側の欄のデータのうち、重要なものの意味は次のとおりです。

    st → サーバーが第何階層か
    when → 最後のパケットを受け取ってからの時間(単位:秒)
    poll → ポーリング間隔(単位:秒)
    delay → 平均遅延時間(単位:ミリ秒)
    offset → サーバーとの時間誤差(単位:ミリ秒)
    jitter → 時間のバラつき

出典:Linux自習室 - サーバーを使い倒す! - 常に正確な時間に合わせる

	

追記 構築したサーバでcronを走らせたい

最近、Sharetubeでcronを走らせないと提供できない機能(全てのテーマのランキングetc...)がありましたので、勉強がてらcronを覚えつつどう構築して行くかを簡潔に書いていきたいと思います。

cronを設定するコマンド

crontab -e

記述する書き方

5分おきに/home/hoge/fuga.shを実行するという例

*/5 * * * * /home/hoge/fuga.sh 左から、[分] [時] [日] [月] [曜日] [コマンド] 分は0~59の数字で指定 時は0~23の数字で指定 日は1~31の数字で指定 月は1~12の数字で指定 曜日に関しても数字で指定し、0と7が日曜日、1以降は順に、月、火、水、木、金、土となる コマンドは、設定ファイルでパスを通していないものに関してはフルパスで指定するかカレントディレクトリからの相対パスで指定しなければならない

時間の書き方例

43 23 * * * 23:43に実行 12 05 * * *    05:12に実行 0 17 * * * 17:00に実行 0 17 * * 1 毎週月曜の 17:00に実行 0,10 17 * * 0,2,3 毎週日,火,水曜の 17:00と 17:10に実行 0-10 17 1 * * 毎月 1日の 17:00から17:10まで 1分毎に実行 0 0 1,15 * 1 毎月 1日と 15日と 月曜日の 0:00に実行 42 4 1 * *     毎月 1日の 4:42分に実行 0 21 * * 1-6   月曜日から土曜まで 21:00に実行 0,10,20,30,40,50 * * * * 10分おきに実行 */10 * * * *        10分おきに実行 * 1 * * *         1:00から 1:59まで 1分おきに実行 0 1 * * *         1:00に実行 0 */1 * * *        毎時 0分に 1時間おきに実行 0 * * * *         毎時 0分に 1時間おきに実行 2 8-20/3 * * *      8:02,11:02,14:02,17:02,20:02に実行 30 5 1,15 * *       1日と 15日の 5:30に実行

出典:クーロン(cron)をさわってみるお - Qiita

	
今回は1時間ごとに走らせたかったのでこんな感じで。
# 1時間おきの設定
0 * * * * /home/hoge/fuga.sh

# 1分おきの設定
*/1 * * * * /usr/bin/php /home/hoge/fuga.sh >>/tmp/exec.log 2>>/tmp/exec_error.log

# >>/tmp/exec.log 2>>/tmp/exec_error.log
# これはエラーログと出力ログを書き出します。
なお、走らせるshファイルは事前に作成してパーミッションを変更してきましょう。
chmod 755 /home/hoge/fuga.sh

正しく動いているかどうか確認する方法

以下のファイルに実行結果が吐き出されるので、確認すればOK。
vi /var/log/cron
最後に再起動した時にも自動で起動するようにしよう。
chkconfig  crond on
念のために設定を変更しましたらリスタートも行っておきましょう。
service crond restart

追記 rsyncでリモートサーバーと同期したい

追記 2017年07月29日

メインのwebサーバーを移転しようとしましたたが、画像などのコンテンツの容量が半端なくてどうしようかと悩んでいましたが、勉強してこなかったrsyncをできると思い重い腰を上げてやってみました。

クッソどハマりしてしまいましたが、ようやく使いこなせるようになりました。

まず初めに設定の値を載せときます。
# リモートのユーザー名 : hoge
# リモートのホスト名   : 111.222.333.444
# リモートのディレクトリ名 : /home/hoge/

リモート側でユーザー作成

ユーザー名はシステムで禁止されている名前以外なんでも構いません。
## ここでの説明ではhoge

// ユーザー作成
useradd [ユーザーの名前]

// パスワード設定
passwd [ユーザーの名前]

ローカル側での秘密鍵と公開鍵のペアを生成

# ローカル側で秘密鍵と公開鍵のペアを生成
ssh-keygen -t rsa

# 色々聞かれる
Generating public/private rsa key pair.
#「Enter」を押す
Enter file in which to save the key (/root/.ssh/id_rsa): 
# 秘密鍵のパスフレーズを入力(後でcronで回したいから何も入力しない)
Enter passphrase (empty for no passphrase): 
 # もう一度(エンターのみ)
Enter same passphrase again:

これで秘密鍵と公開鍵のペアが生成されました。 


# 他のユーザーに見られないようにパーミッションを変更
chmod 600 .ssh/id_rsa
 
# リモートに公開鍵を転送
scp .ssh/id_rsa.pub hoge@111.222.333.444:/home/hoge/.ssh/
hoge@111.222.333.444"s password: # hogeのパスワードを入力

リモート側での設定

リモートに接続してください。
# 移動
cd /home/hoge

# 転送した公開鍵をリネーム
mv .ssh/id_rsa.pub .ssh/authorized_keys

# 他のユーザーに見られないようにパーミッションを変更
chmod 700 .ssh
chmod 600 .ssh/authorized_keys

# 既に他のホストの公開鍵が設定されている場合はリネームでなく追記する
cat .ssh/id_rsa.pub >> .ssh/authorized_keys
 # 削除
rm .ssh/id_rsa.pub

所有権を変更する場合

既存のディレクトリを同期先にしたい場合はディレクトリの所有権をhogeに変更しましょう。
# file1の所有者をhogeに変更する
chown hoge file1

# ディレクトリ内(dir)のすべてのファイルおよびディレクトリの所有者をhogeにする
chown -R hoge dir

rsyncで同期

ようやくrsyncで出番ですね。ここまで来るのに自分は2日かかっています。何度も何度もエラーを出し続けました。
# 同期する testディレクトリ内をリモート側のhoge内に同期する
rsync -auzP -e ssh test hoge@111.222.333.444:hoge/
これで以上となります。
同期する容量が多いとサーバーが重くなってしまいますので制限をかけるやり方もあるようです。

追記 PHPからrsyncを実行して外部のサーバーと同期するための方法

追記 2017年07月31日
Sharetubeの例で言うとTwitterのツイートを載せるためにこの方法を実装しました。

流れとしては
Sharetube:アイテム:Twitterでツイートをコンテンツ化するボタンをクリック
↓
scrapingサーバー:スクレイピング
↓
DBサーバー:画像の連番取得&書き込み
↓
scrapingサーバー:画像などのコンテンツを保存しつつ、scrapingサーバーへ画像を転送
↓
Sharetube:Ajaxで戻ってきたjsonからコンテンツ化したHTMLを取得する

こんな感じです。書いていても大変そうだと思いました。2日かけて実装しました。
Sharetubeでコンテンツを取得したいURLを設定してscraping.sharetubeにajaxしてスクレイピングしつつ更に外部DBサーバへ書き込み。そして画像をひとまずscraping.sharetubeに置いてその画像をsharetubeに転送。

・・・完成した。
	
ちょっと特殊事例でscrapingサーバーがローカル側になります。
SharetubeからAjaxでデータを受け取るんですが、ここでもPHPを使用しており、コンテンツを生成しています。

で、吸い上げたコンテンツをSharetubeサーバーに転送する感じです。

ローカル側(PHPで実行する方)の設定

apacheでsuできるようにします。

# 設定ファイル
vi /etc/passwd

apache:x:48:48:Apache:/var/www:/sbin/nologin
↓
apache:x:48:48:Apache:/var/www:/bin/bash
に変更して保存。

apacheユーザの秘密鍵と公開鍵を置く場所を作る

# フォルダ作成
mkdir /var/www/.ssh
rootで作成

# パーミッション変更
chmod 700 /var/www/.ssh

# 所有者をapacheに変更
chown apache /var/www/.ssh

apacheユーザの秘密鍵と公開鍵を作る

# apacheでログイン
 su - apache

# 鍵作る
$ ssh-keygen -t rsa

リモート側の設定

公開鍵あたりの設定は 追記 rsyncでリモートサーバーと同期したい あたりに全く同じ書いているので割愛いたします。 で、ようやく鍵をリモート側に置いたら一度apacheユーザーで試しましょう。
# apacheユーザーで実行してください
# オプションは適当で rsync
rsync -auznP -e ssh [同期させたいパス] [リモート側でのユーザー]@111.222.333.444:[同期させる場所]
これでエラーにならなかったら成功です。あとはPHPからrsyncを実行させるだけです。

PHPでrsyncを実行

# 実行するコマンドを変数に入れる
$cmd = "rsync -auznP -e ssh [同期させたいパス] [リモート側でのユーザー]@111.222.333.444:[同期させる場所]";
# 実行
shell_exec($cmd);

# exec関数でもいい(いや、exec関数の方がベーシックな気がする。)
exec($cmd);
/*
exec($a,$b,$c);
引数
1・実行するコマンドを指定します。
2・変数を指定した場合、コマンドの出力結果を行ごとに配列に格納します。
3・変数を指定した場合、コマンドのステータスが格納されます。
コマンド実行の成功時には「0」、コマンド実行の失敗時には「1」が格納されます。

返り値
・コマンド実行結果の最後の行を返します。
*/

確認したところ6個くらいコマンドを実行する関数があるみたい。
これで説明以上になります。この技術はかなり使い勝手が良く、ものすごく便利なので覚えて置いて損はないです。

参考にしたサイト

今回、この記事を書く為に参考になったサイトを載せときます。

全体で勉強になったサイト

sshで勉強になったサイト

iptablesで勉強になったサイト

vsftpdで勉強になったサイト

追記 FTPSで勉強になったサイト

httpdで勉強になったサイト

メール全般で勉強になったサイト

Postfix関連

Dovecot関連

エラー関連

ユーザーエイリアス関連

yumで勉強になったサイト

追加 リンク切れのため削除。

PHPをアップデートする時に勉強になったサイト

phpMyAdminをインストールする時に勉強になったサイト

追記 cronを作成する時に勉強になったサイト

追記 外部DBサーバーに接続する時に勉強になったサイト

追記 rsyncをやるときに勉強になったサイト

まとめ

本来ならば章を切り分けて記事にしていく方が良いとは思ったのですが、忘備録として残して自分自身が1ページで全部乗っていたら便利だろうなーって考えて1記事で全てを載せました。

ただ、まだまだ構築していく部分は多くて、構築と検証が終わりましたら、随時追加していきたいと考えています。

個人の完全な忘備録として淡々とやり方を書いていますが、この記事を書く為に無駄に一つサーバを借りて検証を行いながら書きました。ですが、全部終わってみるとサーバ構築って楽しいなーってしみじみ感じてしまいます。本当ならば一人では到底出来ない事でしたが、今ではググればなんでも情報が出てくる時代です。誰でも頑張ればサーバ構築は出来るって事ですね。性能比較で考えれば普通のレンタルサーバよりも料金がかなり安くなるのでお勧め致します。

この記事が気に入ったら

いいね!しよう

Sharetubeの最新記事をお届けします

著者プロフィール
Programmerbox

Sharetube中の人「マツオカソウヤ」がプログラミング・webデザインなどの情報をまとめるチャンネル。