CentOS 7でLAMP環境構築

なんとデフォで、php5.4がインストールされてしまうので注意

今回は自宅用の開発サーバーの用意をするのでセキュリティ適当です。
本当ならsshのポートを変更したり、鍵用意したり、iptabale(firewall)の設定が必要。


ユーザーは
「dev-user」
で操作します。


OSのバージョン確認
```
> cat /etc/redhat-release
CentOS Linux release 7.9.2009 (Core)
```



## sudoでroot操作できるようにする
```
> vi /etc/sudoers

↓コメントアウトをはずす
%wheel  ALL=(ALL)       NOPASSWD: ALL
```
dev-userをwheelグループに入れる
```
> usermod -G wheel dev-user
```

いったんログアウト後、ログインすると反映される。

## インストール
```
最初はupdate
> yum update

apacheインストール
> yum -y install httpd httpd-tools httpd-devel httpd-manual open_ssl mod_ssl

mysqlインストール
> yum -y install http://dev.mysql.com/get/mysql-community-release-el7-5.noarch.rpm


php7.4 のインストール
> ls /etc/yum.repos.d/ | grep remi-php
remi-php54.repo
remi-php70.repo
remi-php71.repo
remi-php72.repo
remi-php73.repo
remi-php74.repo
remi-php80.repo
remi-php81.repo
remi-php82.repo

> yum -y install http://rpms.famillecollet.com/enterprise/remi-release-7.rpm
> yum install --disablerepo=* --enablerepo=epel,remi,remi-safe,remi-php74  php php-mbstring php-xml php-xmlrpc php-gd php-pdo php-pecl-mcrypt php-mysqlnd php-pecl-mysql php-pear composer
```


## php.ini変更
cpコマンドなどで、バックアップを取っておくことをお勧めする
```
> vi /etc/php.ini

; phpのバージョンを非公開に
expose_php = Off

; アップロードできるファイルのサイズを大きくしておく
post_max_size = 20M
upload_max_filesize = 20M

; タイムゾーンの設定
date.timezone = "Asia/Tokyo"

; 日本語文字化け対策
mbstring.language = Japanese
mbstring.internal_encoding = UTF-8
mbstring.http_input = UTF-8
mbstring.http_output = pass
mbstring.encoding_translation = On
mbstring.detect_order = auto
mbstring.substitute_character = none

; ショートタグ
short_open_tag = On

; セッションパス(.htaccessで設定してもOK)
session.save_path = "/var/lib/php/session"
```


#### セッション用ディレクトリの権限を変更
何度か試したがapache2.4ではこのディレクトリ以外の
任意のディレクトリにはセッションを保存できなかった。
apache側で変更できるディレクトリの制限がかけられているようです。
```
> chown -R dev-user:dev-user /var/lib/php/session
```


ここまでは↓この方のサイトを参考にしました。
非常に説明が丁寧、操作も丁寧、ぜひこっちを見たほうがいい。
https://www.rem-system.com/centos-httpd-php73/

## 噂のSELinux
phpでセッションファイルが作られず
その原因がSELinuxと上記のディレクトリ指定でした。
SELINUX=disabledに変更しサーバーを再起動。
```
> vi /etc/selinux/config

↓に変更
SELINUX=disabled 
```


## Apacheの設定

今回はバーチャルドメインで設定します。
1つの開発サーバーで複数のサイトをテストすることが多いので。
```
> httpd -v
Server version: Apache/2.4.6 (CentOS)
Server built:   Mar 24 2022 14:57:57
```

設定ファイルを少し変更（変更箇所のみ記載しています）
```
> vi /etc/httpd/conf/httpd.conf

// User、Group を開発用のユーザーに変更
User dev-user
Group dev-user

// サーバーのIPを指定
Listen 192.168.1.45:80

// バーチャルドメインの設定
NameVirtualHost *:80
IncludeOptional conf.d/*.conf

```

サイトの設定
※アクセス制限の記述方法が変わっているので注意
```
> vi /etc/httpd/conf.d/testsite.conf
<VirtualHost *:80>
        ServerName testsite.localhost
        DocumentRoot /var/www/testsite

        <Directory /var/www/testsite>
                AllowOverride ALL
                Order deny,allow
                Allow from all
                Options +ExecCGI -Indexes
                Require all granted
        </Directory>
</VirtualHost>

```

## MySQL

##### 設定ファイル
```
> vi /etc/my.cnf

[mysqld]
sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES
↓に変更
sql_mode=NO_ENGINE_SUBSTITUTION

// 検索文字
innodb_ft_min_token_size=2
ft_min_word_len=2
```
STRICT_TRANS_TABLESを外したのは
insert時に「xxx doesn’t have a default value」のエラーが出るから

##### DBを作る(MySQL5.6)
DB名：dbname
ユーザー名：username
パスワード：passwd
```
systemctl start mysqld
mysql
mysql> create database dbname;
mysql>  GRANT ALL PRIVILEGES ON dbname.* TO username@localhost IDENTIFIED BY 'passwd' WITH GRANT OPTION;
mysql>  flush privileges;

抜ける
Ctrl-C
```
###### (MySQL8.1)
```
systemctl start mysqld
mysql
mysql> create database dbname;
mysql> CREATE USER 'username'@'localhost' IDENTIFIED BY 'passwd';
mysql> GRANT all ON dbname.* TO 'username'@'localhost';
mysql>  flush privileges;

抜ける
Ctrl-C
```




## Webサイトの用意

まだFTPの設定をしていなかったので、ひとまずディレクトリとファイルを作る
```
> mkdir /var/www/testsite

何か文字を入れて保存してください
> vi /var/www/testsite/index.php

権限を変更（httpd.confで指定したユーザーにしてください）
> chown -R dev-user:dev-user /var/www/testsite
```

起動
```
> systemctl start httpd
```








## アクセスしてみる
ローカル環境なのでwindowsの方は
C:\Windows\System32\drivers\etc\hosts
それ以外は大体/etc/hostsにあると思います。

そのファイルに下記を追加
192.168.1.45      testsite.localhost

「192.168.1.45」はこのサーバーのIPアドレスを入力
普通のWi-Fiルータでも、MACアドレスに対し固定IPを割り当てられるので、設定すると便利です。

サーバーのIPアドレスやMACアドレスは
ifconfigで調べられます。
```
> ifconfig
lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
        inet 127.0.0.1  netmask 255.0.0.0
        inet6 ::1  prefixlen 128  scopeid 0x10<host>
        loop  txqueuelen 1000  (Local Loopback)
        RX packets 49010  bytes 4408956 (4.2 MiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 49010  bytes 4408956 (4.2 MiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

p3p1: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.11.45  netmask 255.255.255.0  broadcast 192.168.11.255
        inet6 fe80::e69c:22b8:b2c2:bc9d  prefixlen 64  scopeid 0x20<link>
        ether f2:4d:a2:fb:5c:76  txqueuelen 1000  (Ethernet)
        RX packets 875505  bytes 848619646 (809.3 MiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 555773  bytes 51142199 (48.7 MiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

virbr0: flags=4099<UP,BROADCAST,MULTICAST>  mtu 1500
        inet 192.168.122.1  netmask 255.255.255.0  broadcast 192.168.122.255
        ether 52:54:00:87:17:c9  txqueuelen 1000  (Ethernet)
        RX packets 0  bytes 0 (0.0 B)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 0  bytes 0 (0.0 B)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
```
p3p1の箇所にある

inet 192.168.11.45
がIPアドレス

ether f2:4d:a2:fb:5c:76
がMACアドレスになります。

ブラウザにこれを打ち込む
http://testsite.localhost/

以上

## 感想
本当に結構今まで何回か設定してきたし、そのメモのバックアップもとってきたつもり。
だったけど、PCが壊れたり引っ越ししたりでバックアップファイルやらもどこかへ行ってしまい
毎回1から調べてインストールっていう手間を行っていたので、今回まとめる事が出来て大満足。
修正や加筆は続けます。