開始するには、PHPと Composer 、PHP依存関係管理ツールを実行できるコンテナー化された環境を作成する必要があります。 そうすれば、ローカルのマシンや開発サーバーにローカルのPHP環境をインストールしなくても、新しいLaravelアプリケーションを最初からブートストラップできるようになります。
このガイドでは、 Ubuntu 20.04にDockerComposeを使用してLaravelをインストールする方法に関するチュートリアルに基づいて、この環境をセットアップする方法について合理化された手順を提供します。 このガイドで提供されるDockerComposeファイル内で使用される各オプションの詳細な手順については、そのチュートリアルを参照してください。
ホームフォルダにアプリケーション用の新しいディレクトリを作成します。
- mkdir ~/landing-laravel
- cd ~/landing-laravel
次に、を作成します docker-compose.yml
コンテナ化された環境を定義するファイル。 このファイルでは、という名前のサービスを設定します app
、これは、後で設定するDockerfileを使用して構築されたカスタムDockerイメージに基づいています。
ビルド引数 user
と uid
、両方ともで定義されています docker-compose.yml
ファイルとビルド時にDockerfileで使用されるファイルは、ローカルマシンまたは開発サーバーで自分のユーザー名とuidを反映するように変更する必要があります。 現在のユーザーのuidを確認するには、次のように入力します。
- echo $UID
Output1000
The user
と uid
変数はビルド時に利用可能になり、Dockerfileで使用されて新しいユーザーを作成します。 app
ローカルマシンまたは開発サーバー上の現在のシステムユーザーと同じユーザー名とuidを持つサービス。 これにより、コンテナーとDockerを実行するホストの両方からのアプリケーションファイルを操作する際のアクセス許可と所有権の問題を回避できます。
新しいを作成します docker-compose.yml
選択したテキストエディタを使用してファイルします。 ここ、 nano
使用されている:
- nano docker-compose.yml
次のコンテンツをこのファイルにコピーし、Dockerを実行するシステム上の自分のユーザー名とuidに応じて、強調表示された値を適切な値に置き換えることを忘れないでください。
version: "3.7"
services:
app:
build:
args:
user: sammy
uid: 1000
context: ./
dockerfile: Dockerfile
image: landing-app
restart: unless-stopped
working_dir: /var/www/
volumes:
- ./:/var/www
networks:
- landing
networks:
landing:
driver: bridge
完了したら、ファイルを保存して閉じます。 使用している場合 nano
、を押すことでそれを行うことができます CTRL
+X
、 それから Y
と ENTER
確認するために。
次に、で参照されるDockerfileを設定します docker-compose.yml
ファイル。カスタムイメージを設定します。 app
サービス:
- nano Dockerfile
このDockerfileはデフォルトから拡張されています php:7.4-fpm
Dockerイメージ。 それは使用します user
と uid
ArtisanおよびComposerコマンドを実行できる新しいユーザーを作成するための変数。 また、LaravelとComposer実行可能ファイルに必要ないくつかのPHP依存関係をインストールします。
次のコンテンツをDockerfileにコピーします。
FROM php:7.4-fpm
# Arguments defined in docker-compose.yml
ARG user
ARG uid
# Install system dependencies
RUN apt-get update && apt-get install -y \
git \
curl \
libpng-dev \
libonig-dev \
libxml2-dev \
zip \
unzip
# Clear cache
RUN apt-get clean && rm -rf /var/lib/apt/lists/*
# Install PHP extensions
RUN docker-php-ext-install pdo_mysql mbstring exif pcntl bcmath gd
# Get latest Composer
COPY --from=composer:latest /usr/bin/composer /usr/bin/composer
# Create system user to run Composer and Artisan Commands
RUN useradd -G www-data,root -u $uid -d /home/$user $user
RUN mkdir -p /home/$user/.composer && \
chown -R $user:$user /home/$user
# Set working directory
WORKDIR /var/www
USER $user
完了したら、ファイルを保存して閉じます。 次に、次の方法で環境を立ち上げることができます。
- docker-compose up -d
このコマンドは、Docker Composeをデタッチモードで実行します。つまり、バックグラウンドで実行されます。 カスタムイメージを使用して初めて環境を起動すると、Docker Composeは、必要なコンテナを作成する前に、イメージを自動的に構築します。 これが完了するまでに少し時間がかかる場合があります。 次のような出力が表示されます。
OutputCreating network "landing-laravel_landing" with driver "bridge"
Building app
Step 1/11 : FROM php:7.4-fpm
---> fa37bd6db22a
...
Step 10/11 : WORKDIR /var/www
---> Using cache
---> 769afd5d44d8
Step 11/11 : USER $user
---> Using cache
---> 841eb5852b69
Successfully built 841eb5852b69
Successfully tagged landing-app:latest
WARNING: Image for service app was built because it did not already exist. To rebuild this image you must use `docker-compose build` or `docker-compose up --build`.
Creating landing-laravel_app_1 ... done
次の方法で、環境が稼働していることを確認できます。
- docker-compose ps
Output Name Command State Ports
------------------------------------------------------------------------
landing-laravel_app_1 docker-php-entrypoint php-fpm Up 9000/tcp
一度 app
サービスが稼働している場合は、PHP依存関係管理ツールであるComposerを実行して、新しいLaravelアプリケーションをブートストラップできます。 そのためには、次を使用します docker compose exec
でコマンドを実行するには app
PHPがインストールされているサービス。
次のコマンドは、DockerComposeを使用して実行します composer create-project
、に基づいてLaravelの新規インストールをブートストラップします laravel/laravel
パッケージ:
- docker-compose exec app composer create-project laravel/laravel --prefer-dist application
Creating a "laravel/laravel" project at "./application"
Installing laravel/laravel (v8.4.0)
- Downloading laravel/laravel (v8.4.0)
- Installing laravel/laravel (v8.4.0): Extracting archive
Created project in /var/www/application
> @php -r "file_exists('.env') || copy('.env.example', '.env');"
Loading composer repositories with package information
Updating dependencies
Lock file operations: 104 installs, 0 updates, 0 removals
…
Package manifest generated successfully.
71 packages you are using are looking for funding.
Use the `composer fund` command to find out more!
> @php artisan key:generate --ansi
Application key set successfully.
このインストールにより、新しい .env
デフォルトに基づくファイル .env.example
Laravelに付属するファイル。 The .env
ファイルにはデータベースのクレデンシャルとその他の機密性の高いアプリケーション設定が含まれており、アプリが実行される環境ごとに一意である必要があります。 開発環境のセットアップが完了したら、このファイルを編集するために戻ってきます。
次に、アプリケーションファイルをと同じディレクトリにコピーします。 docker-compose.yml
これにより、Laravelの環境変数ファイルをDockerComposeと共有できます。 次に、を削除できます application
Composerによって作成されたディレクトリ:
- cp -rT application .
- rm -rfv application
これでアプリケーションはブートストラップされましたが、ブラウザーからアプリにアクセスできるようにするには、DockerComposeファイルにいくつかのサービスを含める必要があります。 アン nginx
サービスは、Nginx Webサーバーを使用してアプリケーションにサービスを提供し、 db
サービスは、アプリケーションのMySQLデータベースをホストします。
まず、次の方法で環境をダウンにします。
- docker-compose down
OutputStopping landing-laravel_app_1 ... done
Removing landing-laravel_app_1 ... done
Removing network landing-laravel_landing
これにより、この環境に関連付けられているすべてのコンテナとネットワークが削除されます。 編集する前に docker-compose.yml
新しいサービスを追加するファイル、コンテナと構成ファイルを共有する新しいディレクトリを作成します。 Laravel PHPアプリケーションを処理するようにNginxを適切に設定するには、これが必要になります。
- mkdir -p docker-compose/nginx
次に、新しいを作成します landing-laravel.conf
カスタムNginxサーバーブロックを含むファイル。 後で、このファイルを内で共有するボリュームを設定します nginx
サービスコンテナ。
次のコマンドで新しいNginx構成ファイルを開きます。
- nano docker-compose/nginx/landing-laravel.conf
次のサーバーブロックは、外部サービスを使用してLaravelアプリケーションを提供するようにNginxを構成します(app
)PHPコードを処理します。 このコンテンツを独自のNginx構成ファイルにコピーします。
server {
listen 80;
index index.php index.html;
error_log /var/log/nginx/error.log;
access_log /var/log/nginx/access.log;
root /var/www/public;
location ~ \.php$ {
try_files $uri =404;
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_pass app:9000;
fastcgi_index index.php;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param PATH_INFO $fastcgi_path_info;
}
location / {
try_files $uri $uri/ /index.php?$query_string;
gzip_static on;
}
}
完了したら、ファイルを保存して閉じます。
次に、 docker-compose.yml
ファイル:
- nano docker-compose.yml
次の構成を含めます nginx
以前に構成されたものと同じレベルのサービス app
サービス。 これにより、に基づいて新しいサービスが作成されます nginx:alpine
画像、およびポート上のすべてのリクエスト 8000
Dockerが実行されているホストのポートにリダイレクトされます 80
サービスコンテナ内。 アプリケーションファイルに加えて、Laravelアプリケーション用のNginxの構成ファイルを含むボリュームも共有します。
nginx:
image: nginx:alpine
restart: unless-stopped
ports:
- 8000:80
volumes:
- ./:/var/www
- ./docker-compose/nginx:/etc/nginx/conf.d/
networks:
- landing
次に、次の構成ブロックを含めます。 db
サービス。 これにより、デフォルトのMySQL 8イメージに基づいてサービスが作成され、Laravelの環境ファイルで定義された値を取得してデータベースアクセスを設定します。
db:
image: mysql:8
restart: unless-stopped
environment:
MYSQL_DATABASE: ${DB_DATABASE}
MYSQL_ROOT_PASSWORD: ${DB_PASSWORD}
MYSQL_PASSWORD: ${DB_PASSWORD}
MYSQL_USER: ${DB_USERNAME}
networks:
- landing
これがあなたの更新方法です docker-compose.yml
終了すると、ファイルは次のようになります。
version: "3.7"
services:
app:
build:
args:
user: sammy
uid: 1000
context: ./
dockerfile: Dockerfile
image: landing-app
restart: unless-stopped
working_dir: /var/www/
volumes:
- ./:/var/www
networks:
- landing
nginx:
image: nginx:alpine
restart: unless-stopped
ports:
- 8000:80
volumes:
- ./:/var/www
- ./docker-compose/nginx:/etc/nginx/conf.d/
networks:
- landing
db:
image: mysql:8
restart: unless-stopped
environment:
MYSQL_DATABASE: ${DB_DATABASE}
MYSQL_ROOT_PASSWORD: ${DB_PASSWORD}
MYSQL_PASSWORD: ${DB_PASSWORD}
MYSQL_USER: ${DB_USERNAME}
networks:
- landing
networks:
landing:
driver: bridge
注:共有ボリュームとネットワークの説明など、Laravel環境のコンテナ化の詳細については、 Ubuntu20.04にDockerComposeを使用してLaravelをインストールする方法に関する完全ガイドを参照してください。
編集が完了したら、ファイルを保存して閉じます。 最後に、Laravel dot envファイルを更新します(.env
)MySQLデータベースホスト構成を、MySQLサービスが実行されるホストにポイントします。 db
:
- nano .env
The .env
インストール時にComposerによって自動的に生成されるファイルには、変更したいデフォルト値がいくつか含まれています。 APP_NAME
そしてその APP_URL
. データベース DB_HOST
変数は、MySQLが実行されるサービスを指すように変更する必要があり、で定義されているように、サービス名で参照できます。 docker-compose.yml
ファイル。 この例では、 db
データベースサービスの名前として、これはコンテナ化されたネットワークで名前の付いたホストとして利用可能になります db
.
あなたの .env
したがって、次の例をベースとして使用します。 強調表示された値は、開発中のアプリケーションの状態を反映するためにここで更新されました。
APP_NAME=LandingLaravel
APP_ENV=local
APP_KEY=base64:ffYPNP8kPeQDf8gE/qh3kWjk59p6gFY66kCKhhKUa2w=
APP_DEBUG=true
APP_URL=http://localhost:8000
LOG_CHANNEL=stack
LOG_LEVEL=debug
DB_CONNECTION=mysql
DB_HOST=db
DB_PORT=3306
DB_DATABASE=landing-db
DB_USERNAME=landing-user
DB_PASSWORD=dev-password
...
このファイルの他のセクションを変更する必要はありませんが、特定のユースケースに自由に調整してください。
内容の編集が完了したら、ファイルを保存して閉じます。
これで、更新された環境を次のように起動できます。
- docker-compose up -d
OutputCreating network "landing-laravel_landing" with driver "bridge"
Creating landing-laravel_app_1 ... done
Creating landing-laravel_db_1 ... done
Creating landing-laravel_nginx_1 ... done
完全な環境が整ったら、ブラウザで localhost
またはポート上のリモートサーバーのIPアドレス 8000
:
http://localhost:8000
すべてが期待どおりに機能する場合は、次のようなページが表示されます。
このシリーズの次のパートでは、リンクテーブルを設定するためのデータベース移行を作成します。