LAMP環境を構築する【CentOS7】

LAMP環境はご存知でしょうか。

Webサービスを始める人にとってはとても大切なLAMP環境。
「まだLAMP環境を構築したことがない」「そもそもLAMP環境とは何か知らない」という方でも理解できる内容にしました。

まずは、LAMP環境とは一体何なのかをしっかりと解説していきます。
なお、この記事ではCentOSで解説を進めていきます。コマンドは多少違いますが、設定部分や手順はあまり変わりません。UbuntuやDebianでのLAMP環境構築の参考にもなるかと思います。

# 目次
1. この記事の対象者
2. LAMP環境とは
3. Linuxインストール
4. Apacheインストール
5. MySQLインストール
6. PHPインストール
7. 最後に

# 1. この記事の対象者
この記事は、以下の読者を対象に書かれています。

- LAMP環境構築をしたことがない
- LAMP環境構築とは何かを知らない
- CentOSインストールはできる
- Linuxコマンドはある程度使える

CentOSインストールが分からないという方は、以下の記事を参考にしてみてください。
[【初心者でもわかる】Linux CentOSのインストール方法まとめ](https://eng-entrance.com/linux-centos-install)

# 2. LAMP環境とは
LAMP環境とは、サーバの環境構築には欠かせないものです。

- **L**inux（リナックス）
- **A**pache（アパッチ）
- **M**ySQL（マイエスキューエル）
- **P**HP（ピーエイチピー）

の頭文字をとって**LAMP**（ランプ）と呼びます。
これらが揃うことによって、Webサービスを提供できる環境が整います。つまり、LAMP環境の構築方法さえ一度知ってしまえば、いつでも簡単にWebサービスを提供できるようになります。

## Linux とは
まず、LinuxはOS(Operating System)のことです。
みなさんがよく使用しているPCにも「Mac OS」や「Windows OS」がインストールされているため、パソコンとして使用できています。

もし、OSが入っていなかった場合は「PCのような見た目の機械」になってしまいます。つまり、電源をつけても真っ暗でうんともすんとも言わない機械ということです。
PCには、何らかのOSが入っているおかげで、私たちは不自由なくパソコンを使用することができているのです。

その中でもLinuxはOSSで、大抵は無料で利用することができます。詳しい説明はここでは割愛しますが、Linuxで有名なのは「CentOS」や「Ubuntu」です。この機会に覚えてしまうといいでしょう。

## Apache とは
次に、Apacheです。
Apacheはアパッチと読みます。Apacheをインストールすることによって、webサーバの機能が使えるようになります。

## MySQL とは
そして、MySQL。
これは、オープンソースのリレーショナルデータベース管理システムです。データを扱うための言語であるSQLを使ってデータの管理をします。データベースと呼ばれる膨大なデータを格納するために必要になります。会員情報やログイン時刻などのデータの保存に使われます。

## PHP とは
最後に、PHPです。
PHPはHypertext Preprocessorの略で、web開発に適したオープンソースの汎用スクリプト言語です。ログイン処理やフォームデータを扱う際などに必要となります。

# 3. Linuxインストール
[CentOS](https://www.centos.org/download/)からISOイメージをダウンロードし、Windowsの[Rufus](https://rufus.ie/)を使って、お持ちのUSBを起動可能なUSBドライブにします。
USBをPCに接続し、BIOS(リンク)を立ち上げてCentOSをインストールします。
正常にインストールが終了したら、Linuxインストールは完了です。

> ちなみに、ここで落とし穴があります。
> それは**違うプラットフォーム用のISOイメージをインストールしてしまう**ことです。
> PC用のものなのかをしっかりと確認してからインストールしましょう。
> 仮に違うプラットフォーム用のISOイメージをインストールしてもCentOSとApacheのインストールは正常に完了しますが、その後のPHPインストールはエラーが出ます。

# 4. Apacheインストール
以下のコマンドをコピペして実行していってください。
ちなみにですが、コード内の`#`は入力しません。

Apacheインストール

```
# yum -y install httpd
```

起動状態の確認

```
# systemctl status httpd
```

Apacheを起動

```
# systemctl start httpd.service
```

自動起動を有効にする

```
# systemctl enable httpd.service
```

自動起動の状態を確認する

```
# systemctl is-enabled httpd.service
```

SElinuxを永続的に無効化（`enforcing`を`disabled`に変更）

```
# vi /etc/selinux/config

SELINUX=disabled
```

firewalldを停止

```
# systemctl stop firewalld
```

firewalldを無効化

```
# systemctl disable firewalld 
```

CentOS再起動

```
# reboot
```

PCのIPアドレスを確認して、ブラウザで`192.168.×.×`にアクセスしてみましょう。
以下のように表示されたら、Apacheインストール完了です。

<img width="1280" alt="apache.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/400431/da42016f-d2f8-e58b-7487-73296cb94387.png">


# 4. MySQLインストール
リポジトリファイルをインストール

```
# yum -y install http://dev.mysql.com/get/mysql-community-release-el7-5.noarch.rpm
```

MySQLインストール

```
# yum -y install mysql mysql-devel mysql-server mysql-utilities
```

my.cnfの編集

```
# vi /etc/my.cnf
```

my.cnf内の`[mysqld]`に以下を追記する

```
character-set-server = utf8
```

MySQL起動

```
# systemctl start mysqld
```

MySQLにログイン（passwordなし、そのままEnterキーでログイン）

```
# mysql -u root -p
```

rootのパスワードを任意のパスワードに変更

```
> UPDATE mysql.user SET password=password('任意のパスワード') WHERE user = 'root';
```

変更の反映

```
> FLUSH PRIVILEGES;
```

MySQLからログアウト

```
> exit;
```

自動起動を有効にする

```
# systemctl enable mysqld.service
```

自動起動の状態を確認する

```
# systemctl is-enabled mysqld.service
```

MySQL再起動

```
# systemctl restart mysqld
```

これでMySQLのインストールは完了です。

# 5. PHPインストール
EPELリポジトリ追加

```
# yum install epel-release
```

Remiリポジトリ追加

```
# rpm -Uvh http://rpms.famillecollet.com/enterprise/remi-release-7.rpm
```

インストール実行

```
# yum install --enablerepo=remi,remi-php70 php php-mbstring php-devel php-pdo php-gd
```

php.iniの編集

```
# vi /etc/php.ini

date.timezone = "Asia/Tokyo"
mbstring.language = Japanese
mbstring.internal_encoding = UTF-8
mbstring.http_input = pass
mbstring.http_output = pass
mbstring.encoding_translation = Off
mbstring.detect_order = auto
mbstring.substitute_character = none
mbstring.func_overload = 0
mbstring.strict_detection = Off
mbstring.http_output_conv_mimetype=
```

Apache再起動

```
# systemctl restart httpd
```

テストファイルを作成

```
# vi /var/www/html/index.php
```

infoを表示するコード↓を記述して保存

```
<?php phpinfo(); ?>
```

ブラウザからアクセスして、以下のように`info`が表示されていればOK。

<img width="1280" alt="phpinfo.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/400431/71f62184-b59b-e100-4303-7564b6e0c669.png">

# 6. 最後に
これでLAMP環境構築は完了です。
Webサイトを公開する時は、`/var/www/html`フォルダ内に公開したいファイルを置きましょう。

# 7. 参考

- [SElinuxの無効化](https://qiita.com/hanaita0102/items/5d3675e4dc1530b255ba)
- [CentOS 7～8 Firewall 無効化](https://server.etutsplus.com/centos-7-disable-firewall/)
- [centos7でLAMP環境を作る](https://qiita.com/KaI_Qiita/items/6a085571e1a75c69fb4c)