【入門】LinuxサーバーにApacheとMySQLをインストールしながら学ぶLinuxコマンド_環境構築

# はじめに
エンジニア1年目の学習すべき内容の代表例として、Linuxコマンドの学習が挙げられると思います。
<br>ただ、Linux基礎に関する書籍は、VirtualBoxでコマンドをポチポチ打って学習するものが多いと思います。そのため、本記事ではLinuxサーバーを使いながら、ハンズオン形式で、Linuxコマンドを学習したいと思います。
<br>また、今回は[【入門】シェルスクリプトでバッチ処理を実装する](https://qiita.com/st19/private/f459434c221abadd234e)の環境構築も行なっていきます。

# 作るもの（環境構築するもの）

* Linuxインストールと設定
* Apacheインストールと設定
* MySQLインストールと設定

# 本記事で登場するLinuxコマンド一覧
| コマンド | コマンド説明 | オプション・サブコマンド |
|---|---|---|
|yum|yumコマンドはCentOS等のRedHat系のLinuxディストリビューションで使用されるRPMパッケージを管理するコマンド|`-y`: 問い合わせに対して「Yes」を返す|
|vim|vimエディターで、ファイルを編集する際に使用される|---|
|ssh|サーバーとリモートで通信する場合に使用されるコマンド|`-p`:ポート番号を指定する|
|su|（スーパー）ユーザーに変更する。|---|
|sudo|スーパーユーザーもしくは別のユーザーとしてコマンドを実行する際に使用される。 |---|
|systemctl|サービスを管理するコマンド|`start`: サービスを開始する。 <br> `enable`：システム起動時に、サービスを自動的に開始する。 <br> `restart`: サービスを再起動する|
|semanege|SElinuxの管理で使用するコマンド|---|
|grep|文字列を検索する|---|
|cp|ファイル・ディレクトリをコピーする|---|
|mkdir|ディレクトリを作成する|---|
|pwd|現在作業しているディレクトリを表示する|---|
|ls|ファイル・ディレクトリを一覧で表示する|---|

# Linuxインストールと設定

### 仮想サーバー(Virtual Private Server)を契約し、LinuxのCent0S8をインストールする

[さくらVPS](https://vps.sakura.ad.jp/)を契約します。CentOS8のサポートが2021年末に終了するので、CentOS Stream8をインストールしました。

![スクリーンショット 2022-01-25 23.32.07.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/491470/d6b80775-4371-5451-2f57-a06bee00a5a7.png)


### Linuxの初期設定をする。

サーバーのファイルを編集するために、エディターをインストールします。vim, nano, Emacs等のエディターがありますが、今回は一般的に使用されるvimをインストールします。
<br> CentOS等のRed Hat系のLinuxディストリビューションソフトウェアだと、yumコマンドを使用します。オプションに　-y を入れると「すべての問い合わせにyes」と回答します。

```
// suコマンド : rootユーザーになる
$ su -

// yumコマンド：RPMパッケージを管理するコマンド
# yum -y install vim
```

インストールしたvimを使用して、SSHサーバーの設定ファイルを編集します。

```
// cdコマンド：カレントディレクトリの位置を変更する。
# cd /etc/ssh

// sshd_configファイルのバックアップをとる。
// cpコマンド：ファイルをコピーする。
# cp sshd_config sshd_config.old 

// lsコマンド：ファイルを一覧表示する。
# ls
sshd_config sshd_config.old


// vimコマンド：ファイルを開く 
# vim /etc/ssh/sshd_config
```
/etc/ssh/sshd_configファイルを以下のように変更しました。

| 変更箇所 | 変更前 | 変更後 |
|---|---|---|
|17行目|#Port 22|Port 10022|
|43行目|#PermitRootLogin yes|PermitRootLogin no|

続いてSELinuxの設定をします。SELinuxは、Linuxのセキュリティをより強固にするモジュールです。先程、変更したSSHポート番号をSELinuxでも許可されるように設定します。

```
// SeLinuxパッケージをインストール
# yum -y install policycoreutils-python-utils

// semanegeコマンド：SElinuxの管理で使用するコマンド
// SELinuxで10022番ポートを許可する
# semanage port -a -t ssh_port_t -p tcp 10022

// 10022番ポートを許可されているかを確認する。
// grepコマンド：ファイル中の文字列を検索する
# semanage port -l | grep ssh
ssh_port_t                     tcp      10022, 22
```

ファイアーウォールの設定も変更し、10022番ポートからのアクセスを通過させるようにします。

```
// ファイアウォールの設定ファイルをコピーする。
# cp /usr/lib/firewalld/services/ssh.xml /etc/firewalld/services/

// 設定ファイルのバックアップをとる
# cp /etc/firewalld/services/ssh.xml /etc/firewalld/services/ssh_bk.xml

// 設定ファイルを編集する。
# vim /etc/firewalld/services/ssh.xml
```

| 変更箇所 | 変更前 | 変更後 |
|---|---|---|
|5行目|　port="22"|　port="10022"　|

ファイヤウォールの設定を反映する。

```
# firewall-cmd --reload
# systemctl restart sshd

```



SSHコマンドで、サーバーとリモートで通信を行う

```
// sshコマンド： 
$ ssh -p 10022 centuser@xxx.xxx.xx.xx
```

作業用のディレクトリを作成します。
ユーザーのホームディレクトリ（/home/user）の配下に、作業用ディレクトリを新規作成する。

```
// 現在、自分がいる作業ディレクトリを確認する。
$ pwd
/home/user

// 作業用ディレクトリ(work01)を新規作成する。
$ mkdir work01

// ディレクトリにあるファイル・ディレクトリを確認する
$ ls
work01 
```

# Apacheインストールと設定

Apacheのパッケージ名のhttpdをインストールし、起動する。
Webで公開するファイルが置かれたディレクトリをドキュメントルートと呼びます。
ドキュメントルートにHTMLファイルを格納すると、Web(外部)から閲覧することができます。

```
// sudoコマンド : スーパーユーザーもしくは別のユーザーとしてコマンドを実行する
// httpdをインストールする
$ sudo yum -y install httpd

// httpdを起動する
$ sudo systemctl start httpd.service

// 自動的に起動するように設定する
$ sudo systemctl enable httpd.service

// HTMLを作成し、
$ sudo vim /var/www/html/helloworld.html

```

```
<html>
<head>
<title>Hello world</title>
</head>
<body>
<p>Hello world ! This is a test page</p>
</body>
</html>
```

http:/IPアドレス/helloworld.htmlにアクセスすると、Webページが確認できました。
![スクリーンショット 2022-01-26 0.02.15.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/491470/29e2ec21-0ec0-1cbe-403a-ca9e39123e0b.png)


# MySQLインストールと設定
Webサービスにとって必要な不可欠なデータベースをインストールし、起動します。

``` 
sudo yum -y install mysql-server
sudo systemctl start mysqld
sudo systemctl enable mysqld
```

MySQLのインストールは終了です。

Linux, Apache、MySQLの環境構築が完了しました。
[【入門】シェルスクリプトでバッチ処理を実装する](https://qiita.com/st19/private/f459434c221abadd234e)に続きます。