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円/月)

CPU2コア3コア4コア6コア10コア
メモリ1GB2GB4GB8GB16GB
HDD100GB200GB400GB800GB1TB
お試しサービス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


// ログを常時表示 メールサーバ構築する時に重宝する

tail -f /var/log/maillog


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

service --status-all


// シャットダウンして再起動

shutdown -r now

追記 バッチファイル(シェルスクリプト)の作成と実行

一つ一つコマンドを実行してVPSを作成するのは大変なので、実行したいコマンドを並べたファイルを作成してshコマンドで自動実行いたしましょう。

バッチファイル作成

vi xxx.sh


中身は実行したいコマンドを並べる

shコマンドを実装する

sh xxx.sh

以上でシェルスクリプトが動きます。

完全に決まりきったコマンドを実行させたいときに便利ですね。

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                                  

sshのショートカット名

HostName xxx.x.xxx.xxx

サーバのIPアドレス

Port 22

接続するポート番号

User root

VPSサーバのユーザー名

IdentityFile ~/.ssh/vpsxxxxxxxxx-xxx.key

さっき移動したkey

これでsshのショートカットが完成しましたのでsshで接続してみましょう。
ssh 
無事、接続が出来ましたらここの章は終了です。接続出来なかった場合はもう一度設定する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 

次に、ファイルのタイムスタンプにローカル時間(日本時間)を使用するようにします。

最後尾に、

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

ウェブコンテンツを保存する場所を記載します。

バーチャルホストを使わない方もいるかもしれませんので、デフォルトのポイントとしてちゃんと記述しておきます。

ここはDocumentRootと同じディレクトリパスに変更。

のパスを直したら、その中にある

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行目あたりに

*: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の場合

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

Options FollowSymLinks

AllowOverride All

Order allow,deny

Allow from all

bbb.comの場合

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

Options FollowSymLinks

AllowOverride All

Order allow,deny

Allow from all

ドメインを追加したら随時手動でフォルダを作成して下さい。

フォルダ構成はこんな感じがオススメです。

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
ps aux
grep [h]ttpd grep [a]pache

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


このPを

ServerLimit

MaxClients

に割り当てればメモリリークしない計算となります。

Apacheの設定変更

それでは計算した値を割り当てるためにhttpd.confを編集していきます。
vi /etc/httpd/conf/httpd.conf

設定する値

StartServers P×5/256

MinSpareServers P×5/256

MaxSpareServers P×10/256

ServerLimit P

MaxClients P

MaxRequestsPerChild 1000

設定が完了いたしましたら、リスタートをしましょう。
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パッケージを使います。

rpm --import http://vault.centos.org/RPM-GPG-KEY-CentOS-7

rpm --import http://rpms.famillecollet.com/RPM-GPG-KEY-remi

// remi リポジトリ追加

yum install http://rpms.famillecollet.com/enterprise/remi-release-7.rpm

追加しましたら確認してみましょう。
yum list --enablerepo=remi --enablerepo=remi-php73 

これでphpのバージョンが5.6.30になりました。

追記 2017年05月11日

これでphpのバージョンが7.3になりました。

追記 2020年06月30日

それではインストールしたいパッケージを選んで一気にインストールしてみましょう。

// 今回インストールするパッケージ

// php、php-devel、php-mbstring、php-mcrypt、php-mysql

// php-phpunit-PHPUnit、php-pecl-xdebug、php-gd


// インストール

yum install --enablerepo=remi --enablerepo=remi-php73 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 7.3.xになっていると思います。これで新しい機能をガシガシ使えるようになりました。

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行目あたり

/">
-----୨୧-----୨୧-----୨୧-----‎
-----୨୧-----୨୧-----୨୧-----‎
-----୨୧-----୨୧-----୨୧-----‎
/">
-----୨୧-----୨୧-----୨୧-----‎
-----୨୧-----୨୧-----୨୧-----‎
-----୨୧-----୨୧-----୨୧-----‎

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-php73 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点です。

Apache 2.4

Require ip 127.0.0.1

Require ip ::1

Apache 2.2

Order Deny,Allow

Deny from All

Allow from 127.0.0.1

Allow from ::1

Apache 2.4

Require ip 127.0.0.1

Require ip ::1

Apache 2.2

Order Deny,Allow

Deny from All

Allow from All

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
プロトコルの設定

= imap pop3 lmtp

protocols = imap pop3

次は認証系設定を変えていきます。
vi /etc/dovecot/conf.d/10-auth.conf
平文での認証を許可を不許可にする

= yes

disable_plaintext_auth = no

認証方式の設定

auth_mechanisms = plain

auth_mechanisms = plain login

メールボックスの形式を指定。
vi /etc/dovecot/conf.d/10-mail.conf

メールボックスの形式を指定

=

mail_location = maildir:~/Maildir

最後にpostfixからの認証要求を受け付けるようにしときましょう。
vi /etc/dovecot/conf.d/10-master.conf
Postfixからの認証要求の受付

/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認証に対応していないメーラを拒否

記述間違いをしていたので削除

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を使う

コメントを外す

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

コメントを外す

= yes

ssl = yes

秘密鍵と公開鍵証明書の設定

ssl_cert =

ssl_key =

ssl_cert =

ssl_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(ウェブアリーナ)
info: postmaster

↓↓↓↓↓

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
内部からの時刻同期を許可

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 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日かかっています。何度も何度もエラーを出し続けました。

同期する ディレクトリ内をリモート側のhoge内に同期する

rsync -auzP -e ssh 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個くらいコマンドを実行する関数があるみたい。

これで説明以上になります。この技術はかなり使い勝手が良く、ものすごく便利なので覚えて置いて損はないです。

参考にしたサイト

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

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





































著者プロフィール
Sharetube