【さくらVPS】CentOS7+PHP7+Apache | 秘密鍵+firewall+ユーザー作成+rootとパスワードログイン無効化

#本記事について
さくらVPS仮想サーバーでサイトをアップするまでに初期設定で行ったことです。
### インストール
・centOS7
・Apache
・php7
・mariadb

### 設定
・firewall(http、https、sshのみ許可)
・scp手順
・秘密鍵生成
・ユーザーの作成
・rootユーザーとパスワードログインの無効化

#さくらVPSのコントロールパネルにログインし、centOSのインストール

ログインはマストではありませんが、あくまで今回の忘備録として記載します。
ログイン後、コントロールパネルから各種設定にいきサーバーのosをいったん初期化。
次にOSインストールで、centOS7を選択。標準インストールします。この時設定するパスワードはssh等でログインする際に必要なので必ずメモしておくことが大事です。

今回はOSを初期化しましたが、しなくてもいいかもしれません。
初期に何のOSが入っているかまでは確認していませんが。また初期のパスワードは、VPS契約時に発行されているものになります。
サーバーにsshでログイン後、変更することも可能ですが、ここでその説明は割愛します。

またコントロールパネルでOSをインストールしなくてもsshからでもできるはずです。

(2件目契約時に最初からssh試みたがタイムアウトだったので、最初はコントロールパネルに入りOSインストールする必要ありかもです)


#Apacheやphpやデータベースなどをインストールする

##sshでサーバーにログインする

ここからはコントロールパネルではなく、sshでログインして行います。

パソコンのターミナル(コマンドライン)を開き、どこからでもいいので、
`ssh root@123.123.123.123`を打ち、パスワードを求めらるので入力します。
※公開鍵等を設定すれば、パスワード入力が不要になります。
詳細はこちらをご覧下さい。→ [sshと公開鍵を使ってサーバーにログイン](http://qiita.com/non0311/items/04222771ef9aa1970f7a)

##yum update から ミドルウェアのインストール

最初にアップデートをかけました。これはマストでもないかもしれません。
`[root@localhost ~]# yum update`
結構長い時間がかかります。

そのあと、絶対的に必要なミドルウェアをいれます。

###Apacheのインストール
`[root@localhost ~]# yum -y install httpd`
これがないとサーバーとして機能しません

###gitとzipとvimのインストール
`[root@localhost ~]# yum -y install git zip vim`
gitやzipがないと、このあとインストールするphp関連のところがインストールできません。unzipもあっても良いかもしれません。
実際には、最初にyum updateかけてあるので、gitもzipもvimもすでにインストール済みでした。

###データベースのインストール
mySQLかmariaDBがどちらが良いかは割愛します。てかどっちでも良いと思います。
`[root@localhost ~]# yum -y install mariadb mariadb-server`

###php7と関連のパッケージのインストール

phpをインストールするためにepelとremiをインストールします。
後者remiについてはyum updateの関係かすでにインストール済みでした。
`yum -y install epel-release`
`rpm -Uvh http://rpms.famillecollet.com/enterprise/remi-release-7.rpm`

phpは確実にバージョン7がいいと思います。
`[root@localhost ~]# yum -y install --enablerepo=remi,epel,remi-php70 php php-intl php-mbstring php-pdo php-mysqlnd`

これでミドルウェアのインストールは終了です。

念のためアパッチサーバーとデータベースを自動起動にしておきましょう。(後者はなぜかうまくいかなかったがとりあえずパス)
`systemctl enable httpd`
`systemctl enable mysqld`

#コードの書かれたファイルをどこにアップするのが良いか

sshでログイン後、ls -la でカレントディレクトリの中身を見ると下記のとおりになっています。

    [root@localhost ~]# ls -la
    合計 32
    dr-xr-x---.  5 root root 4096  7月  5 10:38 .
    dr-xr-xr-x. 17 root root 4096  7月  5 08:19 ..
    -rw-------   1 root root   30  7月  6 00:50 .bash_history
    -rw-r--r--.  1 root root   18 12月 29  2013 .bash_logout
    -rw-r--r--.  1 root root  176 12月 29  2013 .bash_profile
    -rw-r--r--.  1 root root  176 12月 29  2013 .bashrc
    drwxr-xr-x   3 root root   17 10月 31  2016 .cache
    drwxr-xr-x   3 root root   17 10月 31  2016 .config
    -rw-r--r--.  1 root root  100 12月 29  2013 .cshrc
    drwxr-----   3 root root   18 10月 31  2016 .pki
    -rw-r--r--.  1 root root  129 12月 29  2013 .tcshrc
    [root@localhost ~]# 

`cd ../`として一個上の階層にいくとたくさんのディレクトリが見つかります。
結論的にはコードの書かれたコードをどこにおくかといったら、
/homeの中か、
/var/www/htmlの中がいいでしょう。

##ドキュメントルートの中身を確認

`vi /etc/httpd/conf/httpd.conf`
このファイルをエディタで開き、『document route』と書かれている部分を見るとおそらく次のようになっています。
`/var/www/html`

結論的には、このデフォで設定されているディレクトリ以下にファイルをアップしました。
このdocument routeを変更して、/home以下に設定するにもありかもしれません。

#scpでリモートにファイル転送をする

手間なく一気にいきます。
一回vpsサーバからログアウトし、自分のpcから

`scp -r ./ root@123.123.123.123:/var/www/html/`

-rというオプションで、ディレクトリ以下も一気に転送しています。

ちなみにローカルPCの現在の ./以下には下記のよう感じです。ゴミファイル(.DS_)は消しましょう。

    n-MacBook:src non$ ls -la
    total 48
    drwxr-xr-x   13 non  staff   442  7  5 07:56 .
    drwxr-xr-x   11 non  staff   374  7  4 01:52 ..
    -rw-r--r--@   1 non  staff  8196  7  5 01:18 .DS_Store
    drwxr-xr-x   15 non  staff   510  7  4 03:18 category
    drwxr-xr-x    5 non  staff   170  7  5 07:56 css
    drwxr-xr-x  202 non  staff  6868  7  4 01:44 img
    -rw-r--r--    1 non  staff  3142  7  5 07:56 index.html
    drwxr-xr-x   17 non  staff   578  7  5 05:58 info
    drwxr-xr-x    7 non  staff   238  7  5 07:56 policy
    drwxr-xr-x   11 non  staff   374  7  5 07:56 tpl
    n-MacBook:src non$ 

サーバーにコマンドで転送するとこんな感じです。

    [root@localhost ~]# cd /var/www/html/
    [root@localhost html]# 
    [root@localhost html]# ls -la
    合計 40
    drwxr-xr-x 10 root root  134  7月  6 01:28 .
    drwxr-xr-x  4 root root   31  7月  6 00:55 ..
    drwxr-xr-x  2 root root 4096  7月  6 01:27 category
    drwxr-xr-x  2 root root   59  7月  6 01:27 css
    drwxr-xr-x  2 root root 8192  7月  6 01:28 img
    -rw-r--r--  1 root root 3142  7月  6 01:28 index.html
    drwxr-xr-x  2 root root 4096  7月  6 01:28 info
    drwxr-xr-x  2 root root  132  7月  6 01:28 policy
    drwxr-xr-x  2 root root 4096  7月  6 01:28 tpl
    [root@localhost html]# 

うまくscpでアップできたのが確認できます。

※結局はあとあと、scpでアップしたものではなく、gitの鍵を作成し、リポジトリに登録したあと、クローンする手法にしています。毎回プルすれば最新のコードが入るように。

#ファイヤーオールの設定

censOs7からiptableではなくなっている。

`systemctl status firewalld.service`

最初はhtml許可されてないので、追記するかstopすれば大丈夫。

もしくは、http https ssh のみを許可する。

現在のzoneの確認
firewall-cmd --get-default-zone

追加
firewall-cmd --add-service=http --permanent
firewall-cmd --add-service=https --permanent
firewall-cmd --add-service=ssh --permanent (publicならデフォで有効になっている)

確認と再起動
firewall-cmd --list-services --zone=public --permanent
systemctl restart firewalld

#アパッチの設定

documentrouteはとりあえずデフォルトのままにし、
`AllowOverride All`は追記しておく。デフォはnoneになっているはず。
これでdocumentrouteに、.htaccessが置けるので、そこで、phpをhtmlファイルでも読めるようにしておく。
`AddType application/x-httpd-php .htm .html`

#sshログインの際の公開鍵の設定

ローカルPCで鍵を作成する。パスフレーズななしで作成。名前もid_rsaにはしてない。
`ssh-keygen -t rsa`

.pub(公開鍵)をさくらのサーバーに持っていく。
本当はrootではなくユーザ分けしたほうが良いのだろうが。

/root/.ssh/

ここでファイル名をもともとの、◯◯.pubでなく、authorized_keysにする。
`mv ◯◯.pub authorized_keys`

これで毎回パスワードを打たなくても、ローカルからさくらへログインできる
`ssh root@123.123.100.100 -i ~/.ssh/◯◯_rsa`

#sshのconfig設定 (ssh接続を簡略化する)

ローカルPCの ~/.ssh/config に下記を追記。(なければファイルごと作成)

    Host ◯◯△△
      HostName     123.123.100.100 (◯◯.comとかでも平気)
      User         root (root以外でログイン出来れば他のユーザー名でも良い)
      IdentityFile ~/.ssh/◯◯_rsa

これで、`ssh ◯◯△△`だけでログインできるようになります。

#ユーザーの作成

これでユーザーとユーザー別のディレクトリが出来る
`useradd hoge`

パスワードの設定
`passwd hoge`

鍵を下記のディレクトリを作成し置いておこう
mkdir /home/hoge/.ssh

#rootユーザーログインの無効化と、パスワードログインの無効化

`vi /etc/ssh/sshd_config`

`PermitRootLogin yes`をnoに変更する
`PasswordAuthentication yes`をnoに変更する

`systemctl restart sshd`

#さくらサーバーでドメイン登録

今回は他社取得のドメインなので、
まずはさくらサーバーのコントロールパネルに入り、ドメインの登録をします。
ゾーン登録も続けて行うと、ネームサーバーが指定されます。
 `ns1.dns.ne.jp`
 `ns2.dns.ne.jp`

指定されたネームザーバを
他社(お名前ドットコム、ムームドメイン)のコントロールパネルから、登録します。