さくらのVPSで公開サーバーとLAMPの環境を構築する自分用のまとめ
modellaxでのサーバー構築は、さくらのVPSで行っている。
テーマ制作とコアプラグインの開発、ブログのリニューアルが一息ついたので、サーバーの構築について作業中に断片的にメモってたところをまとめておくことにする。
飽くまで俺のまとめなので参考にする人は注意してね。
まぁ当然だがVPSなり専用サーバーは、共用サーバーのように借りてドメイン設定したらすぐ使える!みたいな親切設計にはなっていない。今回は以前会社に務めていたときのGMOのVPSのときのような断片的な情報ではなく(というか、あの時あんまり分かってなかった部分あったし)、この記事ではそこそこ詳しめに書いていこうと思う。
尚、今回はCent OS 6.x系を利用。自分が二度同じことをやってもここに書いた内容を上から順にこなすだけでできることが理想。
まず最初は絶対にユーザーの作成を
VPSにOSをインストール後は初期状態ではrootユーザーのみしか存在しない(あたりまえだけど)。
rootユーザーをそのまま使うと、全てのコマンドが無制限で実行できてしまい、誤操作をした時に取り返しがつかないことになるため、まずはroot以外のユーザーを作成する。
useradd cattle
次にパスワードを作成。パスワードは入力しても表示はされないので、ミスのないように注意する。
passwd cattlePassword
上記を実行すると、新規のパスワードの入力、パスワードの入力確認が求められる。
とりあえずこれでユーザーの作成は終わり。
・・・ただ、上記で作成しているユーザーにはスーパーユーザーの権限がない状態だ。
これだと、サーバー作業の要所要所でroot権限が必要な際に一々ログインし直す(=本末転倒な)ことになるので、上記のユーザーでスーパーユーザーコマンドのsudoをできるようにしなければならない。
今回は/etc/sudoersでの直接ユーザー記載を使わず、wheelグループに属させることで対応する。
usermod -G wheel cattle
ユーザーの変更でグループをwheelへ。
そして、wheelグループに属するものからsudoを実行できるようにするため、以下のコマンドを実行して開いたviエディタの内容を編集する。
visudo
上記を実行するとエディタが開く。以下を有効化する。
## Allows people in group wheel to run all commands %wheel ALL=(ALL) ALL
これで、上記のユーザーでsudoが実行できるようになる。
SSHの設定
自分がよく使うPoderosa用の設定をrootユーザーで行う。
尚、今回の説明ではSSHのポートは一般的なポート番号を前提に進める。
# The strategy used for options in the default sshd_config shipped with # OpenSSH is to specify options with their default value where # possible, but leave them commented. Uncommented options change a # default value. #Port 22
上記はそのまま。一般的なSSHポート番号22番が利用できる。
常にパスワードでログインしたい場合は、以下の設定はYesに。
パスワードでのログインをできなくする(公開鍵認証を行う)場合はnoに。
# To disable tunneled clear text passwords, change to no here!<br>#PasswordAuthentication yes #PermitEmptyPasswords no PasswordAuthentication yes
rootユーザーではSSHを利用できないように以下を設定する。
# Authentication: PermitRootLogin no
iptablesの初期設定
SSHで作業している場合、DROPの順序次第で誤って接続拒否をしてしまう場合があるのでそれくらい。
セキュリティ関係を強化する場合、シェルスクリプトでやってあげた方がいいし、書くと長くなるので割愛。
VSFTPDでのFTPサーバーの設置
通常のyumでのパッケージを利用する。
スーパーユーザーにて、以下を実行
sudo yum install vsftpd
パッケージのダウンロードが開始される。
完了したら、インストールするかどうかを聞いてくるので、「y」でインストール。
確認しもってやりたいので上記のコマンドでオプションは付けていないが、インストール確認が面倒くさいなら、「-y」オプションをつける。
インストール完了後、/etc/vsftpd/vsftpd.confを編集する。
そして、全てのデーモンの設定ファイルに言えることだが、必ずデフォルトの設定ファイルはバックアップしておくこと!
以下、当該ファイルの設定項目をピックアップ。下記に記しているもの以外は全てデフォルトで利用する。
# ログイン関係の基本設定 anonymous_enable=NO local_enable=YES # ログの設定 xferlog_enable=YES xferlog_file=/var/log/vsftpd.log xferlog_std_format=NO # ファイル入出力(アスキーモード)の設定 ascii_upload_enable=YES ascii_download_enable=YES # ログインユーザーの設定 chroot_list_file=【chroot_listのファイルパス】 # ログインユーザーの設定(ホワイトリスト形式) userlist_enable=YES userlist_deny=NO userlist_file=【ftpusersのファイルパス】 # サーバー内のfile/dirの削除の設定 ls_recurse_enable=YES # ローカルタイムの設定 use_localtime=YES # パッシブモードの設定 pasv_addr_resolve=YES pasv_address=【FTP利用予定のホストアドレス(例:example.com)】 pasv_min_port=【パッシブモードの最小ポート番号】 pasv_max_port=【パッシブモードの最大ポート番号】 # 暗号化関係の設定 ssl_enable=YES rsa_cert_file=【サーバー証明書のファイルパス】 require_ssl_reuse=NO force_local_logins_ssl=NO force_local_data_ssl=NO
chroot_list(【chroot_listのファイルパス】で指定するファイル)は空ファイルとする。
そして、ftpusersファイルの設定をする。(【ftpusersのファイルパス】で指定するファイル)
# ログイン可能なユーザーを記載する user1 user2 user3
「/etc/pki/tls/certs」に移動して、自己サーバー証明書を作成する。(【サーバー証明書のファイルパス】で指定するファイル)
sudo make 【作成したいサーバー証明書のファイル名】 Country Name (2 letter code) [GB]:【国名、大概は「JP」】 State or Province Name (full name) [Berkshire]:【県名】 Locality Name (eg, city) [Newbury]:【市区町村】 Organization Name (eg, company) [My Company Ltd]:【自分のサイトのアドレス、例:example.com】 Organizational Unit Name (eg, section) []:【記入しなくてもOK】 Common Name (eg, your name or your server's hostname) []:【FTPのホスト名、例:example.com】 Email Address []:【自分のメアド】
VSFTPDの設定ファイルはとりあえず以上でOK。
・・・なのだが、まだ続き。
パッシブモードについての重要なこと。
上記の設定ではパッシブモードの設定をしているにも関わらず、このままだとVSFTPDを起動してもパッシブモードで接続できない。
かといって、iptablesでVSFTPDの設定で指定した最大・最小のポート番号を全開けするとかダメ、絶対。
パッシブモードで空きポートを自動的に開かせるため、iptablesの設定ファイルを編集する。「/etc/sysconfig/iptables-config」を編集。
IPTABLES_MODULES="ip_conntrack_ftp ip_nat_ftp"
これを設定しておくことでiptables側で自動的に空いてるポートを開いてくれる。
以上の設定後にVSFTPDを起動する。
service vsftpd start
設定がうまく行っていれば、VSFTPDの起動メッセージが出る。
あとは、各種FTPクライアントで接続できればFTPサーバーの設置はOK。
Remiリポジトリの追加
通常のyumリポジトリではApacheやPHP、MySQLの好みのバージョンがないのでremiリポジトリを作る。
ホームユーザーなどの作業用ディレクトリに移動して、RPMファイルをダウンロードする。
Remiリポジトリの他にEPELリポジトリも必要にはなるが、多分さくらのVPSでCentOSを選択した場合、既にインストール済となっているので割愛。
wget http://rpms.famillecollet.com/enterprise/remi-release-6.rpm sudo rpm -Uvh remi-release-6.rpm sudo yum --enablerepo=remi list
wgetでRPMファイルダウンロード。rpmコマンドでremiをインストールする。
enablerepoでremiを指定してきちんとインストールされたか確認。
Apacheの設定
使い慣れた2.2がyumリポジトリにあるので今回はそれをそのまま利用する。
2.4は以前Magento2の環境構築の際に使用したが、過去のバージョンに慣れてしまったロートルなcattlemuteにはいまいち使いづらかったので見送り。
sudo yum install httpd
公開するディレクトリを作成。
sudo mkdir /home/【ユーザー名】/public
/etc/httpd/conf/httpd.confを編集する。
ここではバーチャルホストの形式で公開するのに必要最低限の設定だけを記載する。
Listen 80 # 公開用に80番ポートを指定 ~~ ServerAdmin example@example.com ~~ <VirtualHost *:80> # 公開するディレクトリ指定 DocumentRoot /home/【ユーザー】/public # 上記のドメイン名 ServerName example.com ~~ </VirtualHost> ~~ <Directory "/home/【ユーザー】/public"> # CGIを有効化、公開サーバーディレクトリにファイルがないときの一覧表示をしない Options Includes ExecCGI FollowSymLinks ~~ # htaccessを有効化 AllowOverride All ~~ </Directory> ~~ # index.*の定義、左に指定したものが優先される DirectoryIndex index.html index.php ~~ # CGIにPerl実行を設定 AddHandler cgi-script .cgi .pl
実際は</>内で指定している外側に、</>で指定したいくつかの設定が残っているので、それらはコメントアウトしておく。
設定完了後、Apacheを起動する。
sudo service httpd start
正常に起動できればOK。
MySQLのインストール
Cent OS 6.x系でもyumに最初から入っているのは何故か5.1。古い・・・古すぎるよ・・・。
そこでできれば5.5~5.6にしたいわけだが、通常のMySQL環境の構築に使うであろう「MySQL-server」「MySQL-devel」「MySQL-client」をふっつーにenablerepo=epel,remiでインストールしようとしちゃダメ。
何故ならば、送信メールサーバー設置するときに使用するPostfixが、CentOSデフォルトで入っているMySQLの古いバージョンと依存関係にあるから。
なので、こいつらをインストールする前に「MySQL-shared-compat」を先にインストールする。
パッケージの名前の通り、依存関係にあるパッケージの問題を解決してくれる。
ところが、何故かリポジトリには「MySQL-shared-compat」がないときがあるので、RPMを別途直接ダウンロードする必要がある。
yumでパッケージされているバージョンと同じものをMySQLの公式アーカイブからwgetを使って取得する。
cd 【作業用ディレクトリ】 wget 【MySQL-shared-compat.rpmのURL】 sudo yum install 【取得したMySQL-shared-compat.rpm】
上記をインストール後、「MySQL-server」「MySQL-devel」をインストールしていく。
sudo yum install enablerepo=epel,remi mysql-server mysql-devel
「MySQL-client」も同一バージョンがなければ、MySQL-shared-compatと同様にパッケージをインストールする。
もし、好みバージョンや、パッケージごとのバージョン違いが俺みたく怖い場合は全部wgetで取得後全てインストール。
インストールが完了したらmysqlコマンドが実行できるかを確認すること。
PHPのインストール
こちらはMySQLほどバージョンが古いわけではないのでPHP 5.6ならあっさりと終わる。
PHP 5.6入れとくなら最初からMySQLも5.4くらいは入れておけよ・・・と突っ込みたくなる。
とりあえず、必要なパッケージは「php56-php」「php56-php-mysqlnd」「php56-php-devel」「php56-php-mbstring」「php56-php-mcrypt」「php56-php-xml」あたりをとりあえず揃えておくことにする。
後はサーバーで動かすフレームワークやCMSと相談して順次パッケージを足せばいいだろう。
sudo yum install php56-php php56-php-mysqlnd php56-php-devel php56-php-mbstring php56-php-mcrypt php56-php-xml
依存関係のパッケージは適宜入れる。
インストール後の作業としては、phpコマンドで実行できるように、パスを通したところにシンボリックリンクを作ってphp –versionとかでテスト。
インストールしてからそのままの状態だと、「php56」でシンボリックリンクが作成されていたりするからね。
サーバーの構築&LAMP環境を作った後の作業
index.phpでphpinfo()を出してみたりとか、mysqlでDB作成をテストしたりとか。
phpMyAdminが必要な場合はそれも入れたり、WordPress動かしたりする場合はPostfixやDovecotでメールサーバー作ったりとか、サーバーを全部SSL化するならcertbot使ってApacheとかにサーバー証明書貼ったりとかとにかく色々することがある。
が、とりあえず、基本的な環境としては以上で仕上がるので、後は自分好みにカスタマイズしていくだけとなる。
少々長くなったが、こんなところ。
というか、前からこの記事は下書きにして少しずつ書き溜めていたけど、作業的にはそこまででもないのにいざ文にしようとすると長いよ・・・。
本当はPostfixとかDovecotのことも書きたかったけど、疲れたのでここまでとしておく。