Docker用のLaravelテンプレート
Laravelでプロジェクトを作成する機会が増えたので、できるだけ自動化できるようにテンプレートを作成してみました。
環境
Nginx:Latest PHP:7.3.0 Laravel:5.7 MariaDB:Latest
ディレクトリ構成
docker-laravel-template ├── data │ ├── db │ └── logs ├── docker-compose.yml ├── init.sh(初回起動バッチ) ├── src(配下にLaravelプロジェクトを作成) └── web ├── app.docker ├── default.txt(defaut.confの雛形) └── php.ini
基本的にinit.shに必要な情報を記載する。
init.sh
#!/bin/bash # Laravel Project Name export LARAVEL_PROJECT_NAME=sample # nginx setting for docker-compose.yml export CONTAINER_NAME_NGINX=laravel_nginx # php setting for docker-compose.yml export CONTAINER_NAME_PHP=laravel_php # mariadb setting for docker-compose.yml export CONTAINER_NAME_DB=laravel_db export ROOT_PASSWORD=password export DB_NAME=db_laravel # replace default.conf cat web/default.txt | sed -e "s/laravel/${LARAVEL_PROJECT_NAME}/g" > web/default.conf # run docker-compose docker-compose up -d # create laravel project docker-compose exec php composer create-project --prefer-dist laravel/laravel ${LARAVEL_PROJECT_NAME} "5.7.*" # create env cd src/${LARAVEL_PROJECT_NAME} cat .env.example | sed -e "s/DB_HOST=127.0.0.1/DB_HOST=${CONTAINER_NAME_DB}/g"\ -e "s/DB_DATABASE=homestead/DB_DATABASE=${DB_NAME}/g"\ -e "s/DB_USERNAME=homestead/DB_USERNAME=root/g"\ -e "s/DB_PASSWORD=secret/DB_PASSWORD=${ROOT_PASSWORD}/g" > .env # generate laravel key docker-compose exec php php ${LARAVEL_PROJECT_NAME}/artisan key:generate
docker-compose.yml
version: '3' services: nginx: container_name: ${CONTAINER_NAME_NGINX} image: nginx:latest ports: - "80:80" volumes: - ./web/default.conf:/etc/nginx/conf.d/default.conf - ./src:/var/www/html - ./data/logs/:/var/log/nginx/ depends_on: - php external_links: - db restart: always php: container_name: ${CONTAINER_NAME_PHP} build: context: ./web dockerfile: app.docker volumes: - ./src:/var/www/html restart: always db: image: mariadb container_name: ${CONTAINER_NAME_DB} environment: MYSQL_ROOT_PASSWORD: ${ROOT_PASSWORD} MYSQL_DATABASE: ${DB_NAME} volumes: - ./data/db:/var/lib/mysql command: mysqld --character-set-server=utf8 --collation-server=utf8_unicode_ci restart: always
app.docker
FROM php:7.3.0-fpm COPY php.ini /usr/local/etc/php/ RUN apt-get update -y && apt-get upgrade -y && apt-get install mysql-client git vim unzip zip -y RUN docker-php-ext-install mysqli pdo pdo_mysql # install composer ENV COMPOSER_ALLOW_SUPERUSER 1 ENV COMPOSER_HOME /composer ENV PATH $PATH:/composer/vendor/bin RUN curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer
default.txt
server { listen 80; server_name _; root /var/www/html/laravel/public; index index.php index.html; access_log /var/log/nginx/access.log; error_log /var/log/nginx/error.log; location / { try_files $uri /index.php?$args; } location ~ \.php$ { fastcgi_split_path_info ^(.+\.php)(/.+)$; fastcgi_pass php:9000; fastcgi_index index.php; include fastcgi_params; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; } }
php.ini
[Date] date.timezone = "Asia/Tokyo" [mbstring] mbstring.internal_encoding = "UTF-8" mbstring.language = "Japanese" memory_limit = 64M
今回のソースはGithubにあげてます。
github.com