Laravel with LAMPスタック on CentOS7 環境構築

## パッケージを最新化する

```sh
sudo yum update -y
```

## SELinuxを無効化

`SELINUX` を `disabled` に変更

```sh
sudo vi /etc/selinux/config
```
変更後、サーバーを再起動する

## 一般権限ユーザーを作成し、パスワードを設定する

```sh
sudo adduser {username}
sudo passwd {username}
sudo usermod -aG wheel {username}
```

ここで一旦 exit でログアウトし、作成したユーザーでログイン入り直す

## rootユーザーで直接SSH接続を許可しない設定に変更する

SSHの設定ファイルの `PermitRootLogin` を `no` に設定する

```sh
sudo vi /etc/ssh/sshd_config
sudo systemctl restart sshd
```

## Apacheをインストールする

```sh
sudo yum install -y httpd mod_ssl
sudo systemctl start httpd
sudo systemctl enable httpd
```

## MariaDBをインストールする

```sh
sudo vi  /etc/yum.repos.d/MariaDB.repo
sudo yum install -y MariaDB-server MariaDB-client
sudo systemctl start mariadb
sudo systemctl enable mariadb
```

MariaDB.repoは以下の通り

```repo
# MariaDB 10.4 CentOS repository list - created 2020-03-31 02:40 UTC
# http://downloads.mariadb.org/mariadb/repositories/
[mariadb]
name = MariaDB
baseurl = http://yum.mariadb.org/10.4/centos7-amd64
gpgkey=https://yum.mariadb.org/RPM-GPG-KEY-MariaDB
gpgcheck=1
```

MariaDBを初期化する

```sh
sudo mysql_secure_installation
```

> Switch to unix_socket authentication [Y/n]

上記のみ n で、その他はすべて y でOK

## PHPをインストールする

```sh
sudo yum -y install epel-release
sudo rpm -Uvh http://rpms.famillecollet.com/enterprise/remi-release-7.rpm
sudo yum install -y --enablerepo=remi,remi-php73 php php-devel php-mbstring php-mysqlnd php-pdo php-gd php-xml php-bcmath php-imagick php-intl php-pecl-zip
```

`post_max_size` および `upload_max_filesize` を `128M` に変更する

```sh
sudo vi /etc/php.ini
sudo systemctl restart httpd
```

## Composerをインストール

```sh
php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');"
php -r "if (hash_file('sha384', 'composer-setup.php') === 'e0012edf3e80b6978849f5eff0d4b4e4c79ff1609dd1e613307e16318854d24ae64f26d17af3ef0bf7cfb710ca74755a') { echo 'Installer verified'; } else { echo 'Installer corrupt'; unlink('composer-setup.php'); } echo PHP_EOL;"
php composer-setup.php
php -r "unlink('composer-setup.php');"
sudo mv composer.phar /usr/local/bin/composer
```

## Node.jsをインストール

```sh
curl -sL https://rpm.nodesource.com/setup_12.x | sudo bash -
sudo yum install -y nodejs
```

## Yarnをインストール

パッケージマネージャーにYarnを使う場合、以下のコマンドでインストールする

```sh
curl -sL https://dl.yarnpkg.com/rpm/yarn.repo | sudo tee /etc/yum.repos.d/yarn.repo
sudo yum install -y yarn
```

## Laravelプロジェクトのセットアップ

MariaDBにデータベースを作成しておく。

以下のコマンドでMariaDBにログインし、

```sh
mysql -u root -p
```

データベースを作成する

```sql
create database {database} charset utf8mb4;
exit;
```

Composerに必要なパッケージを追加

```sh
sudo yum install -y zip unzip
```

インストーラーをインストールする

```sh
composer global require laravel/installer
echo 'export PATH=$HOME/.config/composer/vendor/bin:$PATH' >> ~/.bash_profile
source ~/.bash_profile
```

`/var/www` 以下の権限を設定する

```sh
sudo usermod -a -G apache {username}
sudo chown -R {username}:apache /var/www
sudo chmod 2775 /var/www
find /var/www -type d -exec sudo chmod 2775 {} \;
find /var/www -type f -exec sudo chmod 0664 {} \;
```

プロジェクトを作成

```sh
cd /var/www
laravel new {project}
```

```sh
cd {project}
cp .env.example .env
vi .env # 適宜
php artisan key:generate
```

apacheからファイルを書き込めるように権限を設定する

```sh
sudo chown -R apache /var/www
sudo chgrp -R apache /var/www
sudo chmod 2775 /var/www
find /var/www -type d -exec sudo chmod 2775 {} \;
find /var/www -type f -exec sudo chmod 0664 {} \;
```

apacheの設定を追加

```sh
sudo vi /etc/httpd/conf.d/{project}.conf
sudo systemctl restart httpd
```

内容は以下を参考に

```apache
<VirtualHost *:80>
  ServerName {host}
  DocumentRoot /var/www/{project}/public
  Options Indexes FollowSymLinks

  <Directory "/var/www/{project}/public">
    AllowOverride All
    <IfVersion < 2.4>
      Allow from all
    </IfVersion>
    <IfVersion >= 2.4>
      Require all granted
    </IfVersion>
  </Directory>

</VirtualHost>
```

ブラウザで {host} に設定したアドレスにアクセスし、Laravelのページが表示されればOK

## 参考

- [MariaDB - Setting up MariaDB Repositories - MariaDB](https://downloads.mariadb.org/mariadb/repositories/)
- [ネコでもわかる！さくらのVPS講座 〜第一回：VPSてなんだろう？〜 | さくらのナレッジ](https://knowledge.sakura.ad.jp/7938/)
- [Introduction - Composer](https://getcomposer.org/doc/00-intro.md)
- [nodesource/distributions: NodeSource Node.js Binary Distributions](https://github.com/nodesource/distributions)