Debian に Apache＋PHP Laravel＋Node.js 環境を構築する

# はじめに

最近は Linux 環境を構築する場合でも コンテナーを利用するのが一般的ですが、素の Debian で Laravel を動かす機会があったので構築手順を記録として残しておきます。

## 動作環境

新しめのバージョンならたいてい動作するとは思いますが、以下の環境にインストールしました。

* Azure Virtual Machine
* Debian bullseye (バージョン 11）

# 目次

* [1. 基本モジュールのインストール](#1-基本モジュールのインストール)
* [2. Apache のインストール](#2-apache-のインストール)
* [3. PHP のインストール](#3-php-のインストール)
* [4. Node.js のインストール](#4-nodejs-のインストール)

# 1. 基本モジュールのインストール

1. Web アクセス系とかユーティリティ
    ```bash
    $ sudo apt update
    $ sudo apt install -y openssl curl wget git zip unzip vim tzdata
    ```
1. このあと使う環境変数を定義しておく（以下を `/etc/profile` に追記する）
    ```bash
    $ sudo vim /etc/profile
    ```
    ```bash:/etc/profile
    # TimeZone
    export TZ=Asia/Tokyo
    
    # Locale
    export LANG=ja_JP.UTF-8
    
    # for Apache 
    export APACHE_RUN_USER=www-data
    export APACHE_RUN_GROUP=www-data
    export APACHE_PID_FILE=/var/run/apache2/apache2.pid
    export APACHE_RUN_DIR=/var/run/apache2
    export APACHE_LOCK_DIR=/var/lock/apache2
    export APACHE_LOG_DIR=/var/log/apache2
    
    # for PHP & Composer
    export PHP_VERSION=8.0
    export COMPOSER_HOME=/.composer
    export PATH="$PATH:${COMPOSER_HOME}/vendor/bin"
    ```
1. 環境変数を有効にするためログインし直す。または（面倒なら） `/etc/profile` を読み込む
    ```bash
    $ . /etc/profile
    ```


# 2. Apache のインストール

1. Laravel を使うため Rewrite モジュールも入れておく
    ```bash
    $ sudo apt install -y apache2
    $ sudo a2enmod rewrite
    ```

# 3. PHP のインストール

1. まずは指定バージョンをインストールするための準備
    ```bash
    $ sudo apt install -y gnupg2 ca-certificates lsb-release apt-transport-https
    $ wget -qO - https://packages.sury.org/php/apt.gpg | sudo apt-key add -
    $ echo "deb https://packages.sury.org/php/ $(lsb_release -sc) main" | sudo tee /etc/apt/sources.list.d/php.list
    ```
1. 指定バージョンの PHP をインストール（基本モジュールと Apache 連携のみ）
    ```bash
    $ sudo apt update
    $ sudo apt install -y php${PHP_VERSION} php${PHP_VERSION}-cli php${PHP_VERSION}-common libapache2-mod-php${PHP_VERSION}
    $ sudo update-alternatives --set php /usr/bin/php${PHP_VERSION}
    $ php -v    # PHP のバージョンを確認
    ```
1. Composer をインストール
    ```bash
    $ php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');"
    $ php -r "if (hash_file('sha384', 'composer-setup.php') === '55ce33d7678c5a611085589f1f3ddf8b3c52d662cd01d4ba75c0ee0459970c2200a51f492d557530c71c15d8dba01eae') { echo 'Installer verified'; } else { echo 'Installer corrupt'; unlink('composer-setup.php'); } echo PHP_EOL;"
    sudo php composer-setup.php  --install-dir=/usr/bin --filename=composer
    $ php -r "unlink('composer-setup.php');"
    $ sudo mkdir -p $COMPOSER_HOME
    $ sudo chmod 777 -R $COMPOSER_HOME
    $ composer -V    # composer コマンドのバージョンを確認
    ```
1. Laravel での開発に必要な拡張機能をインストール
    * DebugKit と PHPUnit、XDebug も使えるようにしておく
    * PDO は PostgreSQL と MySQL を入れておく
    ```bash
    $ sudo apt install -y php${PHP_VERSION}-curl php${PHP_VERSION}-zip php${PHP_VERSION}-bcmath php${PHP_VERSION}-mbstring php${PHP_VERSION}-xml php${PHP_VERSION}-sqlite3 php${PHP_VERSION}-dom php${PHP_VERSION}-xmlwriter php${PHP_VERSION}-xdebug php${PHP_VERSION}-pgsql php${PHP_VERSION}-mysql
    $ php -m    # インストールされた拡張機能を確認
    ```
1. ついでに Laravel インストーラーも入れておく
    ```bash
    $ composer global require laravel/installer
    $ laravel -V    # laravel コマンドのバージョンを確認
    ```

# 4. Node.js のインストール

1. npm と yarn は流行りや好みもあるのでどちらでも動くようにインストールしておく
    ```bash
    $ curl--sL https://deb.nodesource.com/setup_16.x | sudo bash -
    $ sudo apt install -y nodejs
    $ sudo npm install -g yarn
    $ node -v    # Node.js のバージョンを確認
    $ npm -v     # npm コマンドのバージョンを確認
    $ yarn -v    # yarn コマンドのバージョンを確認
    ```