Linphoneユーザ管理ウェブフロントエンドをLaravelにより作成します。php-fpmのDockerコンテナ内にlaravel-authをインストール、これをベースにLinphoneのユーザ認証・データベースに合うようにコードを修正・ファイルを追加します。
データベース管理にphpmyadminを使用するため、nginx、mariadb, phpmyadminコンテナも必要となります。
以下その手順です。
- Dockerネットワークの作成
- Docker-Composeファイルの作成
- Dockerfileの作成
- laravel-authのインストール
ログイン画面
ユーザホーム画面
Laravel GitHub
Laravelドキュメント
laravel-auth
1. Dockerネットワークの作成
各コンテナ共通のネットワークbr0を作成します。
$ docker network create --driver=bridge --subnet=172.18.0.0/16 br0
2. Docker-Composeファイルの作成
nginx, mariadb, phpmyadmin, php-fpmから成る Docker-Composeファイル を作成します。各イメージ毎に Laravel に必要な追加パッケージ、機能拡張などは別途 Dockerfile で指定します。
注) Letsencrypt+nginxリバースプロキシーによるDockerコンテナを稼働していることが前提条件。以下も参照のこと。
docker-compose.yml
version: '3'
services:
mariadb:
container_name: laravel-mariadb
image: mariadb
restart: always
volumes:
- ./db:/var/lib/mysql
environment:
- MYSQL_ROOT_PASSWORD=xxxxxxxx
- MYSQL_DATABASE=laravel
- MYSQL_USER=laravel
- MYSQL_PASSWORD=xxxxxxxx
networks:
proxy-tier:
ipv4_address: 172.18.0.5
# nginx
nginx:
container_name: nginx
image: nginx:alpine
tty: true
environment:
- VIRTUAL_HOST=test.site.com
- VIRTUAL_ROOT=/var/www/html
- VIRTUAL_PORT=80
# - VIRTUAL_PROTO=fastcgi
- LETSENCRYPT_HOST=test.site.com
- [email protected]
volumes:
# shared nginx default.conf between host and container
- ./nginx_default.conf:/etc/nginx/conf.d/default.conf
# shared the directory /var/www/html in php-fpm container
- ./html/laravel-auth:/var/www/html
# shared the directory /var/www/html in phpmysql-fpm container
- ./html/phpmyadmin:/var/www/html/phpmyadmin
external_links:
- nginx-proxy-letsencrypt
restart: always
networks:
proxy-tier:
ipv4_address: 172.18.0.6
# php-fpm-laravel
php-fpm-laravel:
container_name: php-fpm-laravel
build:
context: ./docker_files
dockerfile: php7.2-fpm-alpine-laravel
tty: true
expose:
- "9000"
ports:
- 8000:8000
volumes:
# for laravel php framework
- ./html:/var/www/html
depends_on:
- laravel-mariadb
restart: always
networks:
proxy-tier:
ipv4_address: 172.18.0.7
# phpmyadmin-fpm
phpmyadmin:
container_name: phpmyadmin-fpm
build:
context: ./docker_files
dockerfile: phpmyadmin-alpine
tty: true
expose:
- "9000"
environment:
- PMA_HOST=laravel-mariadb
- PMA_PORT=3306
- PMA_ABSOLUTE_URI=http://localhost/phpmyadmin
volumes:
- ./html/phpmyadmin:/var/www/html
- /sessions
depends_on:
- laravel-mariadb
restart: always
networks:
proxy-tier:
ipv4_address: 172.18.0.8
networks:
proxy-tier:
external:
name: br0
volumes:
shared:
external: true
3. Dockerfileの作成
Laravel に必要なパッケージ・機能拡張を含んだイメージファイルを作成するため、別途 Dockerfile で標準イメージをカスタマイズします。
phpmyadmin:Dockerfile
$ mkdir docker_files
$ cd docker_files
$ nano phpmyadmin-alpine
FROM phpmyadmin/phpmyadmin:fpm-alpine
RUN apk add --no-cache bash nano \
&& docker-php-ext-install mysqli \
&& docker-php-ext-enable mysqli
Laravel:Dockerfile
$ nano php7.2-fpm-alpine-laravel
FROM php:7.2-fpm-alpine
# Set working directory
WORKDIR /var/www/html
RUN apk add --no-cache bash nano libpng-dev freetype-dev libjpeg-turbo-dev zip libxml2-dev icu-dev nodejs-current npm \
&& docker-php-ext-install mysqli \
&& docker-php-ext-enable mysqli \
&& docker-php-ext-configure gd --with-freetype-dir=/usr/include/ --with-jpeg-dir=/usr/include/ \
&& docker-php-ext-install -j$(nproc) gd pdo pdo_mysql zip \
&& docker-php-ext-enable gd pdo pdo_mysql zip \
&& docker-php-ext-install intl \
&& docker-php-ext-enable intl
# Install Composer and Laravel
COPY composer_installer.sh /var/www/html
RUN ./composer_installer.sh && mv composer.phar /usr/local/bin/composer
RUN chown -R www-data:www-data /var/www/html
RUN composer global require laravel/installer \
&& ln -s /root/.composer/vendor/laravel/installer/bin/laravel /usr/local/bin/laravel
Laravel に必要な composer のインストールスクリプトを作成します(以下参照)。
$ nano composer_installer.sh
#!/bin/sh
EXPECTED_CHECKSUM="$(wget -q -O - https://composer.github.io/installer.sig)"
php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');"
ACTUAL_CHECKSUM="$(php -r "echo hash_file('sha384', 'composer-setup.php');")"
if [ "$EXPECTED_CHECKSUM" != "$ACTUAL_CHECKSUM" ]
then
>&2 echo 'ERROR: Invalid installer checksum'
rm composer-setup.php
exit 1
fi
php composer-setup.php --quiet
RESULT=$?
rm composer-setup.php
exit $RESULT
4. laravel-authのインストール
ホストマシンのhtmlフォルダ内(docker-composeファイルを格納しているディレクトリ)でgit cloneコマンドにより、laravel-authをダウンロードします。
$ git clone https://github.com/jeremykenedy/laravel-auth.git laravel-auth
laravel-authディレクトリに移動し、.envファイルを作成します。
$ cd laravel-auth
$ cp .env.example .env
.envファイルでデータベースとsmtpメールサーバの設定をします。事前にデータベースの作成とsmtpメールサーバの情報が必要となります。
DB_CONNECTION=mysql
DB_HOST=mariadb
DB_PORT=3306
DB_DATABASE=laravelAuth
DB_USERNAME=your_user_name
DB_PASSWORD=your_password
MAIL_DRIVER=smtp
MAIL_HOST=smtp.mailtrap.io
MAIL_PORT=2525
MAIL_USERNAME=xxxxxxxxxxxxxx
MAIL_PASSWORD=xxxxxxxxxxxxxx
MAIL_ENCRYPTION=null
[email protected]
MAIL_FROM_NAME="${APP_NAME}"
以下コマンドにより各コンテナを起動します。
$ docker-compose up -d
Laravelコンテナに入ります。
$ docker exec -ti php-fpm-laravel bash
laravel-authディレクトリに移動し以下コマンドを実行します。
# cd laravel-auth
# composer update
# php artisan vendor:publish --tag=laravelroles && php artisan vendor:publish --tag=laravel2step
# chmod -R 755 ../laravel-auth
# php artisan key:generate
# php artisan migrate
# composer dump-autoload
# php artisan db:seed
# npm install
# npm run dev
or
#npm run production
Laravelによるローカルサーバを起動します。
# php artisan serve --host 172.18.0.9
Laravel development server started: http://172.18.0.9:8000
PHP 7.2.24 Development Server started at Fri Apr 3 00:13:36 2020
ホストマシンからhttp://127.0.0.1:8000にアクセスして以下デフォルト画面が表示されるか確認して下さい。
php artisan serve inside docker
Docker PHP-Core-Extensionsドキュメント
次のVol.2で修正コード、追加ファイルを記載します。