【CentOS 7】ConoHaVPSで初期設定からLAMP環境構築まで

ミスがありましたらご指摘お願いいたします。

----
この記事はCentOS8では一部挙動が異なるようですので
8版をリライトしました(おとなしく7を使うと良いと思いますが)

 - [初期設定編](https://blog.collapse-natsu.com/post/centos8-conoha-lamp-p1)
 - [LAMP構築〜SSLまで編](https://blog.collapse-natsu.com/post/centos8-conoha-lamp-p2)


----

#前提
ConoHaVPSでLAMP環境構築するまでの手順
当方の環境はMac

#LAMP構築


##初期設定
conoHaでVPSの申し込みをしてください
申し込みをしてない方は[こちら](https://px.a8.net/svt/ejp?a8mat=3BI37L+5JG8FM+50+4YTBTT)

###サーバーを作成
<img width="754" alt="スクリーンショット 2020-07-17 22.53.52.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/174757/8cd5a60e-9e09-5107-8c39-7137cf83e967.png">

今回はCentOSでやっていきます。
rootパスワードとネームタグは自由に。
作成後、ネームタグをクリックすると下記のような画面に行きます。

<img width="815" alt="スクリーンショット 2019-03-06 1.08.04.png" src="https://qiita-image-store.s3.amazonaws.com/0/174757/85dce192-f4ff-c215-df0c-212073cfca8e.png">


###ssh接続
ssh接続というのは
sshという規格を用いてサーバーに接続するんだな程度の認識で良いです

それでは接続していきましょう。
ターミナルから下記を入力します

**※先頭の$ についてはコマンドですよという記載上の表現なので、コマンドとして入力はしないでください**

```local:localTerminal
$ ssh root@IPアドレス
```

`Are you sure you want to continue connecting (yes/no)?`と接続しても大丈夫？的なこと聞かれたら`yes`と打つ。

パスワードを求められるので、サーバー作成時に設定したrootパスワードを入力する。

```VPS:VPS
[root@IPアドレス ~]#
```
上記のようになれば接続成功。

###ユーザー作成
Windowsでいうこんなイメージ
<img width="495" alt="スクリーンショット 2019-03-06 0.52.08.png" src="https://qiita-image-store.s3.amazonaws.com/0/174757/a8a995aa-5f20-d247-5594-6ccc3c6c3dc2.png">

Rootユーザはサーバーでの操作にログが残らず、さらにサーバーに対してあらゆる事ができてしまい危険です。
ですので、ログを残すためや操作に制限を与えるためユーザーを作成します。

```VPS:VPS
[root@IPアドレス ~]# adduser ユーザー名
[root@IPアドレス ~]# passwd ユーザー名
ユーザー ユーザー名 のパスワードを変更。
新しいパスワード:
新しいパスワードを再入力してください:
passwd: すべての認証トークンが正しく更新できました。
```
`adduser ユーザー名`でユーザー追加します。
`passwd ユーザー名`でユーザーにパスワードを設定します。
新しいパスワードを求められるので入力します。
画面には入力情報出ませんので注意。

次にWheelグループに追加します。
Wheelグループは`sudo`というコマンドを用いて、rootユーザーと同等のレベルでコマンドが実行できるグループです。

rootユーザと同等なら、rootユーザ使えば良いと思いますが下記のような利点があります

- 作成したユーザのパスワードを使うのでrootユーザのパスワードを知る必要がない
- sudoをできるかどうかはrootユーザが決める(多人数で操作する際に利点)
- sudoでのコマンド結果は、すべてログに残る

```VPS:VPS
[root@IPアドレス ~]# gpasswd -a ユーザー名 wheel
ユーザ ユーザー名 をグループ wheel に追加
```
`gpasswd`はユーザーが所属するグループの情報を管理します。`-a`オプションをつけることで指定ユーザーをグループに追加できます。
ちゃんとユーザーができているか確認します。
パスワードを求められたら、ユーザーに設定したパスワードを入力します。

```VPS:VPS
[root@IPアドレス ~]# su ユーザー名

#こうなったら成功
[ユーザー名@IPアドレス root]$
```
`su`はユーザー変更するコマンドです。
ユーザー名を与えないと、rootユーザーになることを意味します。

作成したユーザーにsshで接続しましょう。
`exit`を入力して、rootに戻ります。
もう一度`exit`をして、接続を切ります。
ちなみに`exit`はログアウトのコマンドです。


下記のコマンドを叩くとパスワードを求められるので入力します。

```VPS:VPS
$ ssh ユーザー名@IPアドレス
ユーザー名@IPアドレス's password:

#こうなったら成功
[ユーザー名@IPアドレス ~]$
```

以降から作成したユーザーで接続します。

作成したユーザーで接続できるようになったので、安全性を高めるためにrootユーザーにsshで接続できないようにします。

```VPS:VPS
[ユーザー名@IPアドレス ~]$ sudo vim /etc/ssh/sshd_config
```
このようにずらっと、sshに関する設定が記述されています。
<img width="514" alt="スクリーンショット 2019-03-06 3.04.41.png" src="https://qiita-image-store.s3.amazonaws.com/0/174757/235f1769-4269-d8aa-ac6f-2378c63bf41c.png">

`/PermitRootLogin`と入力します。

```
PermitRootLogin yes
```
`Shift+A`を押し、INSERTモード（入力できる状態）になり、`yes`を`no`に変えます。
変更後`esc`を押し、`wq`で保存して終了します。

変更を反映させます。

```
[ユーザー名@IPアドレス ~]$ sudo systemctl restart sshd
```

これでこのようにログインすることはできなくなりました。

```local:localTerminal
$ ssh root@IPアドレス
```

###公開鍵認証でVPS接続
[公開鍵認証とは](https://knowledge.sakura.ad.jp/3543/)

鍵をローカルで生成します。

```local:localTerminal
$ cd ~/.ssh
$ ssh-keygen -t rsa -b 2048
```
`cd ~/.ssh`で鍵置き場に移動します。
もしなかったら、`mkdir ~/.ssh`で作成し、`chmod 700 ~/.ssh`としましょう。
`chmod`は各ユーザーがそのファイルやフォルダにどんなことができるかを制限するコマンドです。

移動したら鍵を生成します。
`ssh-keygen`で生成します。
`-t`でタイプを指定します。`rsa`は主流な暗号の種類です。
`-b`で鍵の長さ(byte)を指定します。

入力すると保存する鍵名を聞かれるので、適当に`conoha`にしました。空にすると`id_rsa`という名前で作られます。

```
Generating public/private rsa key pair.
Enter file in which to save the key (/.ssh/id_rsa): conoha(好き名前で)
```
Enterを押すと、次にパスフレーズが求められます。

```
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
```
パスフレーズは、鍵を使うのに必要なパスワードです。
念には念をってやつですね。
二回入力すると、生成が開始されます。
こんな感じのがでたらOKです。

```
+---[RSA 2048]----+
〜　　　省略　　　　　〜
+----[SHA256]-----+
```
`ls ~/.ssh`として、確認してみると、設定した名前で二つのファイルが出来上がっています。

```local:localTerminal
$ ls ~/.ssh
conoha conoha.pub
```
.pubの方が公開鍵になります。
公開鍵に対して秘密鍵で認証するので、conoha.pubのほうをサーバーにアップロードします。

サーバー側にまだ、鍵を置く場所がないので作成します。
ユーザーでログインし、下記のコマンドを叩きます。

```VPS:VPS
[ユーザー名@IPアドレス ~]$ mkdir ~/.ssh
[ユーザー名@IPアドレス ~]$ chmod 700 ~/.ssh
```
つぎにアップロードします。
conoha.pubの部分は適宜読み替えてください。

```local:localTerminal
$ scp ~/.ssh/conoha.pub ユーザー名@IPアドレス:~/.ssh/authorized_keys
```
これでサーバーに作った`.ssh`配下に`authorized_keys`という名前でアップロードされました。
`scp`はファイル転送を行うコマンドです。

`authorized_keys`ってなんだ？状態なので、VPS側で下記のコマンドを入力します。

```VPS:VPS
[ユーザー名@IPアドレス ~]$ sudo vim /etc/ssh/sshd_config
```
開いたら
`/AuthorizedKeysFile`と入力し、Enterを押します。
するとこのような記述があります。

```
AuthorizedKeysFile      .ssh/authorized_keys
```
これは、ssh接続で使う公開鍵の場所と名前を示しています。
先ほどアップロードしたものを指しています。

次に公開鍵認証で接続できるように設定します。
`/PubkeyAuthentication`を入力し、Enterを押します。

```
#PubkeyAuthentication yes
```
となっているのが表示されるかと思います。

CentOS7.4におけるsshdは、デフォルトで公開鍵認証で接続できるようになっているのでこのままで問題ありません。
念の為`#`を外しておいてもいいかもしれません。

ここまでで、公開鍵認証での接続ができるようになっているので試してみましょう。
conohaの部分は適宜ローカルで作成した鍵の名前に読み替えてください。

```local:localTerminal
$ ssh -i ~/.ssh/conoha ユーザー名@IPアドレス
```
鍵生成時に設定したパスフレーズ(鍵生成の際に入力したもの)が求められるので、入力してあげます。
ログインできたら公開鍵でのログイン成功です。
もうパスワードでのログインはしなくていいので無効化しましょう。

```VPS:VPS
[ユーザー名@IPアドレス ~]$ sudo vim /etc/ssh/sshd_config

#パスワードでの認証しない
PasswordAuthentication no
```
これで保存し、再度` sudo systemctl restart sshd.service`で変更を反映します。

###蛇足
```local:localTerminal
$ ssh -i ~/.ssh/conoha ユーザー名@IPアドレス
```
毎回こんなの打ちたくないので、先に定義してもっと簡単に接続できるようにしましょう。

```local:localTerminal
$ cd ~/.ssh
$ vi config
```
configファイルを作成し、以下を入力します。

```
Host conoha
  HostName IPアドレス
  User ユーザー名
  Port 22
  IdentityFile ~/.ssh/鍵名
```
`HOST conoha`の箇所を`ssh conoha`のように使用するので、適当に決めてください。

保存すると、

```local:localTerminal
$ ssh conoha
```
で接続できます。

###ポート番号変更
sshのポートは22がデフォルトなので、変えてやらないと攻撃を受けるリスクが高まるので変えましょう。

```VPS:VPS
[ユーザー名@IPアドレス ~]$ sudo vim /etc/ssh/sshd_config
```
を実行し、Port 22と書かれている部分をコメントアウトして、新しく指定しましょう。

```
#Port 22
Port 10022
```

sshdの再起動をして変更を反映させます。

```VPS:VPS
[ユーザー名@IPアドレス ~]$ sudo systemctl restart sshd.service
```

次にfirewallのsshのポート番号が22になっているので変えてあげます。

```
[ユーザー名@IPアドレス ~]$ sudo vim /etc/firewalld/zones/public.xml

<?xml version="1.0" encoding="utf-8"?>
<zone>
  <short>Public</short>
  <description>For use in public areas. You do not trust the other computers on networks to not harm your computer. Only selected incoming connections are accepted.</description>
  <service name="dhcpv6-client"/>
  <service name="ssh"/>
  #追加
  <port protocol="tcp" port="10022"/> 
</zone>
```
変更を反映させるために再起動します。

```
[ユーザー名@IPアドレス ~]$ sudo systemctl restart firewalld.service
```

再起動したら、ポートが変わっているか確認します。

```
[ユーザー名@IPアドレス ~]$ sudo firewall-cmd --list-all
#これが出ればOK
ports: 10022/tcp
```
確認できたら、忘れずローカルの`config`も変えてあげましょう

```
Host conoha
  HostName IPアドレス
  User ユーザー名
  Port 10022 #ココ
  IdentityFile ~/.ssh/鍵名
```
####もしも締め出されてsshできなくなったら

ConoHaのサイトからサーバーを選択し、コンソールを押してください。

<img width="1192" alt="スクリーンショット 2019-08-09 0.22.47.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/174757/7a01fb5d-dd9f-d06a-0d54-14d05d9b16fb.png">

よく見るターミナルがweb上で開かれるので、ユーザー名とパスワードを入力してログインできるはずなので、やらかした設定を見直しましょう

##Apache
[ココ](https://support.conoha.jp/vps/school/hellovps03/#sec05)を参考にやっていきます。
rootユーザーに切り替えて、`yum`を使ってインストールします。
>yumとは、RedHat系ディストリビューションのパッケージ管理システムの事です。
>リポジトリと呼ばれるパッケージ置き場からのパッケージをダウンロードし、インストール、アンインストール、更新をする事ができます。その際、各パッケージの依存関係を自動的に解決し、関連するパッケージがどれなのか教えてくれたり、必要な場合は、関連パッケージをダウンロードしてそのまま更新してくれたりしてくれます。また、システム全体を更新する事も可能です。

```VPS:VPS
[ユーザー名@IPアドレス ~]$ su
[root@IPアドレス ~]# yum -y install httpd
```
これでApacheがインストールできたので起動します。
起動成功しても何も表示されないので動いていることも確認しましょう。

```VPS:VPS
#起動
[root@IPアドレス ~]# systemctl start httpd 
#確認
[root@IPアドレス ~]# systemctl status httpd
#サーバー起動時に自動起動
[root@IPアドレス ~]# systemctl enable httpd
```
つぎにちゃんとサイトが表示できるか確認するために、HTMLファイルを置きます。
デフォルトではドキュメントルートは`/var/www/html/`になっています。
>ドキュメントルートとは、Webサーバ（HTTPサーバ）やFTPサーバが外部に公開するファイルなどが置かれたフォルダ/ディレクトリ。

```VPS:VPS
[root@IPアドレス ~]# vi /var/www/html/index.html
```
`i`キーを押し、適当に入力して、`esc`を押した後`wq`で保存して終了します。
ブラウザのURLに`http://<VPSのIPアドレス>/index.html`を入力してアクセスします。
入力した文字が表示されたら成功ですが、表示できなかった場合、それは`firewall`が接続をブロックしているからかもしれません。

http、httpsの接続を許可したいので、ポートの開放を行いましょう。

```VPS:VPS
[root@IPアドレス ~]# sudo firewall-cmd --permanent --add-service=http
[root@IPアドレス ~]# sudo firewall-cmd --permanent --add-service=https
#リロード
[root@IPアドレス ~]# sudo firewall-cmd --reload
```
これでアクセスしてみましょう。

##MariaDB(MySQL)
[ココ](https://support.conoha.jp/vps/school/hellovps04/?btn_id=school-hellovps03_school-hellovps04)を参考にやっていきます。

>MariaDBは、MySQL派生として開発されている、オープンソースの関係データベース管理システム 
rootで、Apacheの時と同様に`yum`を使います。

```VPS:VPS
#インストール
[root@IPアドレス ~]# yum -y install mariadb-server
#起動
[root@IPアドレス ~]# systemctl start mariadb
#確認
[root@IPアドレス ~]# systemctl status mariadb
#サーバー起動時に自動起動
[root@IPアドレス ~]# systemctl enable mariadb
```
起動したら初期設定をしていきます。
MariaDBのrootユーザーのパスワードを設定します。
もし質問があった場合、基本`y`を押していきます。

```VPS:VPS
[root@IPアドレス ~]# mysql_secure_installation
```

>・Remove anonymous users? [Y/n]
[n]にすると誰でもログインが出来るようになるので[Y]にします
・Disallow root login remotely? [Y/n]
[n]にするとリモートでrootログインが出来るようになり、セキュリティのため[Y]にします。
・Remove test database and access to it? [Y/n]
テストのデータベースを削除するかどうかです。必要ないので[Y]にします。
・Reload privilege tables now? [Y/n]
ここまでの設定をすぐに反映するかどうかです。[Y]で反映させます。

初期設定が終わったので、試しにログインしてみます。
先ほど設定したパスワードを入力します。

```VPS:VPS
[root@IPアドレス ~]# mysql -u root -p
#ログインできたら終了する
MariaDB [(none)]> exit
```
##PHP
[ここ](https://support.conoha.jp/vps/school/hellovps05/?btn_id=school-hellovps04-sidebar_school-hellovps05z)を参考にやっていきます。

>PHP 7.2は「remi」というリポジトリにあるため、これを追加する必要があります。「remi」の追加には別のリポジトリとなる「epel」の追加が必要ですが、ConoHaで提供しているCentOS7.4のテンプレートでは
デフォルトで追加されており利用可能な状態になっています。
>`yum -y install epel-release`でepelを追加できます

ConoHaはこのまま

```VPS:VPS
#Remi のリポジトリ情報をインストール
[root@IPアドレス ~]# rpm -Uvh http://rpms.famillecollet.com/enterprise/remi-release-7.rpm
#PHPインストール
[root@IPアドレス ~]# yum -y install --enablerepo=remi,remi-php72 php php-devel php-mbstring php-mysqlnd php-pdo php-gd
#PHP反映
[root@IPアドレス ~]# systemctl restart httpd
```
これでPHPの環境ができました。 
HTMLファイルを作成した時のように、PHPファイルを作成しましょう。
作成したら同様にアクセスして確認してみましょう。

###phpMyAdminを入れたい方
[こちら](https://support.conoha.jp/vps/school/hellovps06/?btn_id=school-hellovps05_school-hellovps06)を参考に


おつかれさまでした。
これでLAMP環境構築できました。
テンプレートからLAMPは構築済みのが使えますが、勉強の意味でも自分でやってみました。
ミスなどの指摘歓迎です。

#参考にさせていただいたサイト
https://qiita.com/EisKern/items/3a12bd61ba572e8430d9#firewalld%E3%81%A7%E8%A8%AD%E5%AE%9A

https://qiita.com/kenokada/items/105007df710adec237db#ssh%E3%81%AE%E3%83%9D%E3%83%BC%E3%83%88%E7%95%AA%E5%8F%B7%E3%82%92%E5%A4%89%E6%9B%B4

https://support.conoha.jp/vps/school/hellovps02/?btn_id=school-hellovps03-sidebar_school-hellovps02

https://www.imd-net.com/column/13339/