<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: ucan_lab</title>
    <description>The latest articles on DEV Community by ucan_lab (@ucan_lab).</description>
    <link>https://dev.to/ucan_lab</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F355320%2F8c25177e-a42f-4764-8e29-d07e22e29785.jpg</url>
      <title>DEV Community: ucan_lab</title>
      <link>https://dev.to/ucan_lab</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/ucan_lab"/>
    <language>en</language>
    <item>
      <title>How to install and set up Laravel's local development environment with Docker Compose</title>
      <dc:creator>ucan_lab</dc:creator>
      <pubDate>Fri, 07 May 2021 11:19:25 +0000</pubDate>
      <link>https://dev.to/ucan_lab/how-to-install-and-set-up-laravel-s-local-development-environment-with-docker-compose-5bcf</link>
      <guid>https://dev.to/ucan_lab/how-to-install-and-set-up-laravel-s-local-development-environment-with-docker-compose-5bcf</guid>
      <description>&lt;h2&gt;
  
  
  Introduction
&lt;/h2&gt;

&lt;p&gt;This article explains how to build a LEMP environment for PHP, nginx, and MySQL with Docker and Docker Compose.&lt;/p&gt;

&lt;h2&gt;
  
  
  Prerequisites
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Docker&lt;/li&gt;
&lt;li&gt;Git
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;$ docker -v
Docker version 20.10.5, build 55c4c88

$ git --version
git version 2.31.1
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  How to enable Docker Content Trust (DCT)
&lt;/h3&gt;

&lt;p&gt;DCT is a security feature that protects your Docker image from spoofing and tampering.&lt;br&gt;
It works automatically when the push, build, create, pull, or run command is executed.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;$ echo export DOCKER_CONTENT_TRUST=1 &amp;gt;&amp;gt; ~/.zshrc
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;&lt;a href="https://docs.docker.com/engine/security/trust" rel="noopener noreferrer"&gt;https://docs.docker.com/engine/security/trust&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Repository
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/ucan-lab/docker-laravel" rel="noopener noreferrer"&gt;https://github.com/ucan-lab/docker-laravel&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Container Structures
&lt;/h2&gt;

&lt;p&gt;It has a three-tier structure consisting of an application server, a web server, and a database server.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;├── app - service running php-fpm
├── web - service running nginx
└── db - service running mysql
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  How to use a new project
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Step1. Create a new repository from template
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fi.imgur.com%2F1UuNYLH.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fi.imgur.com%2F1UuNYLH.png"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Click &lt;code&gt;Use this template&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fi.imgur.com%2FDc7n5d6.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fi.imgur.com%2FDc7n5d6.png"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Create a repository for &lt;code&gt;my-project&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fi.imgur.com%2FbtHLRsF.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fi.imgur.com%2FbtHLRsF.png"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;If you use the template repository, all commits will be combined into one. &lt;/p&gt;

&lt;h3&gt;
  
  
  Step2. Clone your GitHub repository
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;$ git clone git@github.com:ucan-lab/my-project.git
$ cd my-project
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Step3. Create a Laravel Project
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;$ make create-project
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Step4. Show the Laravel Welcome page
&lt;/h3&gt;

&lt;p&gt;&lt;a href="http://localhost" rel="noopener noreferrer"&gt;http://localhost&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fi.imgur.com%2F6nS45tR.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fi.imgur.com%2F6nS45tR.png"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Step5. First commit and push
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;$ git add .
$ git commit -m "laravel install"
$ git push -u origin HEAD
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  How to use an existing project
&lt;/h2&gt;

&lt;h3&gt;
  
  
  (Optional) Delete the local repository
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;$ docker-compose down -v --rmi all
$ cd ..
$ rm -rf my-project
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Step1. Clone your GitHub repository
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;$ git clone git@github.com:ucan-lab/my-project.git
$ cd my-project
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Step2. Initialize your local environment
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;$ make init
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Step3. Show Laravel Welcome page
&lt;/h3&gt;

&lt;p&gt;&lt;a href="http://localhost" rel="noopener noreferrer"&gt;http://localhost&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fi.imgur.com%2F6nS45tR.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fi.imgur.com%2F6nS45tR.png"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  If you want to specify the version of Laravel
&lt;/h2&gt;

&lt;p&gt;Rewrite &lt;code&gt;Makefile&lt;/code&gt; and execute.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;laravel-install:
    docker-compose exec app composer create-project --prefer-dist "laravel/laravel=6.*" .
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Remarks
&lt;/h2&gt;

&lt;h3&gt;
  
  
  docker-compose.yml
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;version: "3.9"
volumes:
  php-fpm-socket:
  db-store:
services:
  app:
    build:
      context: .
      dockerfile: ./infra/docker/php/Dockerfile
    volumes:
      - type: volume
        source: php-fpm-socket
        target: /var/run/php-fpm
        volume:
          nocopy: true
      - type: bind
        source: ./backend
        target: /work/backend
    environment:
      - DB_CONNECTION=mysql
      - DB_HOST=db
      - DB_PORT=3306
      - DB_DATABASE=${DB_NAME:-laravel_local}
      - DB_USERNAME=${DB_USER:-phper}
      - DB_PASSWORD=${DB_PASS:-secret}

  web:
    build:
      context: .
      dockerfile: ./infra/docker/nginx/Dockerfile
    ports:
      - target: 80
        published: ${WEB_PORT:-80}
        protocol: tcp
        mode: host
    volumes:
      - type: volume
        source: php-fpm-socket
        target: /var/run/php-fpm
        volume:
          nocopy: true
      - type: bind
        source: ./backend
        target: /work/backend

  db:
    build:
      context: .
      dockerfile: ./infra/docker/mysql/Dockerfile
    ports:
      - target: 3306
        published: ${DB_PORT:-3306}
        protocol: tcp
        mode: host
    volumes:
      - type: volume
        source: db-store
        target: /var/lib/mysql
        volume:
          nocopy: true
    environment:
      - MYSQL_DATABASE=${DB_NAME:-laravel_local}
      - MYSQL_USER=${DB_USER:-phper}
      - MYSQL_PASSWORD=${DB_PASS:-secret}
      - MYSQL_ROOT_PASSWORD=${DB_PASS:-secret}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h4&gt;
  
  
  version
&lt;/h4&gt;

&lt;p&gt;Docker Compose file version&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://docs.docker.com/compose/compose-file" rel="noopener noreferrer"&gt;https://docs.docker.com/compose/compose-file&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://docs.docker.com/compose/compose-file/compose-versioning/#version-3" rel="noopener noreferrer"&gt;https://docs.docker.com/compose/compose-file/compose-versioning/#version-3&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
&lt;p&gt;Note: When specifying the Compose file version to use, make sure to specify both the major and minor numbers. If no minor version is given, 0 is used by default and not the latest minor version. As a result, features added in later versions will not be supported. For example:&lt;br&gt;
&lt;/p&gt;
&lt;/blockquote&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;version: "3"
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;version: "3"&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;version: "3.0"
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h4&gt;
  
  
  volumes
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://docs.docker.com/compose/compose-file/compose-file-v3/#volumes" rel="noopener noreferrer"&gt;https://docs.docker.com/compose/compose-file/compose-file-v3/#volumes&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Define named volumes with the top-level &lt;code&gt;volumes&lt;/code&gt; key to reuse volumes across multiple services.&lt;/p&gt;

&lt;h4&gt;
  
  
  services.*.build
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://docs.docker.com/compose/compose-file/compose-file-v3/#build" rel="noopener noreferrer"&gt;https://docs.docker.com/compose/compose-file/compose-file-v3/#build&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  services.*.ports
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://docs.docker.com/compose/compose-file/compose-file-v3/#long-syntax-1" rel="noopener noreferrer"&gt;https://docs.docker.com/compose/compose-file/compose-file-v3/#long-syntax-1&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  services.*.volumes
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://docs.docker.com/compose/compose-file/compose-file-v3/#long-syntax-3" rel="noopener noreferrer"&gt;https://docs.docker.com/compose/compose-file/compose-file-v3/#long-syntax-3&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  services.*.environment
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://docs.docker.com/compose/compose-file/compose-file-v3/#environment" rel="noopener noreferrer"&gt;https://docs.docker.com/compose/compose-file/compose-file-v3/#environment&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  app service
&lt;/h3&gt;

&lt;h4&gt;
  
  
  ./infra/docker/php/Dockerfile
&lt;/h4&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;FROM php:8.0-fpm-buster
LABEL maintainer="ucan-lab &amp;lt;yes@u-can.pro&amp;gt;"
SHELL ["/bin/bash", "-oeux", "pipefail", "-c"]

# timezone environment
ENV TZ=UTC \
  # locale
  LANG=en_US.UTF-8 \
  LANGUAGE=en_US:en \
  LC_ALL=en_US.UTF-8 \
  # composer environment
  COMPOSER_ALLOW_SUPERUSER=1 \
  COMPOSER_HOME=/composer

COPY --from=composer:2.0 /usr/bin/composer /usr/bin/composer

RUN apt-get update &amp;amp;&amp;amp; \
  apt-get -y install git libicu-dev libonig-dev libzip-dev unzip locales &amp;amp;&amp;amp; \
  apt-get clean &amp;amp;&amp;amp; \
  rm -rf /var/lib/apt/lists/* &amp;amp;&amp;amp; \
  locale-gen en_US.UTF-8 &amp;amp;&amp;amp; \
  localedef -f UTF-8 -i en_US en_US.UTF-8 &amp;amp;&amp;amp; \
  mkdir /var/run/php-fpm &amp;amp;&amp;amp; \
  docker-php-ext-install intl pdo_mysql zip bcmath &amp;amp;&amp;amp; \
  composer config -g process-timeout 3600 &amp;amp;&amp;amp; \
  composer config -g repos.packagist composer https://packagist.org

COPY ./infra/docker/php/php-fpm.d/zzz-www.conf /usr/local/etc/php-fpm.d/zzz-www.conf
COPY ./infra/docker/php/php.ini /usr/local/etc/php/php.ini

WORKDIR /work/backend
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://hub.docker.com/_/php" rel="noopener noreferrer"&gt;https://hub.docker.com/_/php&lt;/a&gt;

&lt;ul&gt;
&lt;li&gt;&lt;code&gt;FROM &amp;lt;image&amp;gt;:&amp;lt;verion&amp;gt;-&amp;lt;variant&amp;gt;-&amp;lt;os&amp;gt;&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;

&lt;a href="https://laravel.com/docs/8.x/deployment#server-requirements" rel="noopener noreferrer"&gt;&lt;/a&gt;&lt;a href="https://laravel.com/docs/8.x/deployment#server-requirements" rel="noopener noreferrer"&gt;https://laravel.com/docs/8.x/deployment#server-requirements&lt;/a&gt;

&lt;ul&gt;
&lt;li&gt;PHP &amp;gt;= 7.3&lt;/li&gt;
&lt;li&gt;BCMath PHP Extension&lt;/li&gt;
&lt;li&gt;Ctype PHP Extension&lt;/li&gt;
&lt;li&gt;Fileinfo PHP Extension&lt;/li&gt;
&lt;li&gt;JSON PHP Extension&lt;/li&gt;
&lt;li&gt;Mbstring PHP Extension&lt;/li&gt;
&lt;li&gt;OpenSSL PHP Extension&lt;/li&gt;
&lt;li&gt;PDO PHP Extension&lt;/li&gt;
&lt;li&gt;Tokenizer PHP Extension&lt;/li&gt;
&lt;li&gt;XML PHP Extension&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;/ul&gt;

&lt;h4&gt;
  
  
  ./infra/docker/php/php.ini
&lt;/h4&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;zend.exception_ignore_args = off
expose_php = on
max_execution_time = 30
max_input_vars = 1000
upload_max_filesize = 64M
post_max_size = 128M
memory_limit = 256M
error_reporting = E_ALL
display_errors = on
display_startup_errors = on
log_errors = on
error_log = /dev/stderr
default_charset = UTF-8

[Date]
date.timezone = ${TZ}

[mysqlnd]
mysqlnd.collect_memory_statistics = on

[Assertion]
zend.assertions = 1

[mbstring]
mbstring.language = Neutral
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h4&gt;
  
  
  ./infra/docker/php/php-fpm.d/zzz-&lt;a href="http://www.conf" rel="noopener noreferrer"&gt;www.conf&lt;/a&gt;
&lt;/h4&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;[www]
listen = /var/run/php-fpm/php-fpm.sock
listen.owner = www-data
listen.group = www-data
listen.mode = 0666
access.log = /dev/stdout
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  web service
&lt;/h3&gt;

&lt;h4&gt;
  
  
  ./infra/docker/nginx/Dockerfile
&lt;/h4&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;FROM node:16-alpine as node
FROM nginx:1.20-alpine
LABEL maintainer="ucan-lab &amp;lt;yes@u-can.pro&amp;gt;"
SHELL ["/bin/ash", "-oeux", "pipefail", "-c"]

ENV TZ=UTC

RUN apk update &amp;amp;&amp;amp; \
  apk add --update --no-cache --virtual=.build-dependencies g++

# node command
COPY --from=node /usr/local/bin /usr/local/bin
# npm command
COPY --from=node /usr/local/lib /usr/local/lib
# yarn command
COPY --from=node /opt /opt
# nginx config file
COPY ./infra/docker/nginx/*.conf /etc/nginx/conf.d/

WORKDIR /work/backend
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;&lt;a href="https://hub.docker.com/_/node" rel="noopener noreferrer"&gt;https://hub.docker.com/_/node&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://hub.docker.com/_/nginx" rel="noopener noreferrer"&gt;https://hub.docker.com/_/nginx&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  ./infra/docker/nginx/default.conf
&lt;/h4&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;access_log /dev/stdout main;
error_log /dev/stderr warn;

server {
    listen 80;
    root /work/backend/public;

    add_header X-Frame-Options "SAMEORIGIN";
    add_header X-XSS-Protection "1; mode=block";
    add_header X-Content-Type-Options "nosniff";

    index index.html index.htm index.php;

    charset utf-8;

    location / {
        try_files $uri $uri/ /index.php?$query_string;
    }

    location = /favicon.ico { access_log off; log_not_found off; }
    location = /robots.txt  { access_log off; log_not_found off; }

    error_page 404 /index.php;

    location ~ \.php$ {
        fastcgi_pass unix:/var/run/php-fpm/php-fpm.sock;
        fastcgi_index index.php;
        fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name;
        include fastcgi_params;
    }

    location ~ /\.(?!well-known).* {
        deny all;
    }
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;&lt;a href="https://laravel.com/docs/8.x/deployment#nginx" rel="noopener noreferrer"&gt;https://laravel.com/docs/8.x/deployment#nginx&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  db service
&lt;/h3&gt;

&lt;h4&gt;
  
  
  ./infra/docker/mysql/Dockerfile
&lt;/h4&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;FROM mysql/mysql-server:8.0
LABEL maintainer="ucan-lab &amp;lt;yes@u-can.pro&amp;gt;"

ENV TZ=UTC

COPY ./infra/docker/mysql/my.cnf /etc/my.cnf
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;&lt;a href="https://hub.docker.com/r/mysql/mysql-server" rel="noopener noreferrer"&gt;https://hub.docker.com/r/mysql/mysql-server&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  ./infra/docker/mysql/my.cnf
&lt;/h4&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;[mysqld]
# default
skip-host-cache
skip-name-resolve
datadir = /var/lib/mysql
socket = /var/lib/mysql/mysql.sock
secure-file-priv = /var/lib/mysql-files
user = mysql

pid-file = /var/run/mysqld/mysqld.pid

# character set / collation
character_set_server = utf8mb4
collation_server = utf8mb4_0900_ai_ci

# timezone
default-time-zone = SYSTEM
log_timestamps = SYSTEM

# Error Log
log-error = mysql-error.log

# Slow Query Log
slow_query_log = 1
slow_query_log_file = mysql-slow.log
long_query_time = 1.0
log_queries_not_using_indexes = 0

# General Log
general_log = 1
general_log_file = mysql-general.log

[mysql]
default-character-set = utf8mb4

[client]
default-character-set = utf8mb4
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



</description>
      <category>php</category>
      <category>laravel</category>
      <category>docker</category>
    </item>
    <item>
      <title>Build laravel development environment with docker</title>
      <dc:creator>ucan_lab</dc:creator>
      <pubDate>Sat, 09 May 2020 12:05:34 +0000</pubDate>
      <link>https://dev.to/ucan_lab/build-laravel-development-environment-with-docker-1lbo</link>
      <guid>https://dev.to/ucan_lab/build-laravel-development-environment-with-docker-1lbo</guid>
      <description>&lt;p&gt;I created a nice development environment for Laravel 👍&lt;/p&gt;

&lt;h2&gt;
  
  
  Repository
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://github.com/ucan-lab/docker-laravel"&gt;https://github.com/ucan-lab/docker-laravel&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Please try it ⭐️&lt;/p&gt;

&lt;h2&gt;
  
  
  Installing Docker
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://docs.docker.com/docker-for-mac/install/"&gt;https://docs.docker.com/docker-for-mac/install/&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Project Structure
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;.
├── src # Laravel project root directory
└── infra
     ├── docker
     │   ├── mysql
     │   │   ├── Dockerfile
     │   │   └── my.cnf
     │   ├── nginx
     │   │   ├── Dockerfile
     │   │   ├── Dockerfile.production
     │   │   └── default.conf
     │   └── php
     │       ├── Dockerfile
     │       ├── Dockerfile.production
     │       ├── bash
     │       │   ├── .bash_history
     │       │   └── psysh
     │       ├── php-fpm.d
     │       │   └── zzz-www.conf =&amp;gt; unix domain socket config file
     │       ├── php.ini
     │       └── php.production.ini
     └── docker-compose.yml
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  How to use
&lt;/h2&gt;

&lt;p&gt;Read the &lt;a href="https://github.com/ucan-lab/docker-laravel/blob/master/infrastructure/Makefile"&gt;Makefile&lt;/a&gt; for the contents&lt;/p&gt;

&lt;h3&gt;
  
  
  A. Create a new laravel project
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;$ git clone git@github.com:ucan-lab/docker-laravel.git
$ cd docker-laravel
$ mkdir -p src
$ docker compose build
$ docker compose up -d
$ docker compose exec app composer create-project --prefer-dist laravel/laravel .
$ docker compose exec app php artisan key:generate
$ docker compose exec app php artisan storage:link
$ docker compose exec app chmod -R 777 storage bootstrap/cache
$ docker compose exec app php artisan migrate
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="http://localhost"&gt;http://localhost&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  B. Create a clone laravel project
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;$ git clone git@github.com:ucan-lab/docker-laravel.git
$ cd docker-laravel
$ mkdir -p src
$ docker compose build
$ docker compose up -d

$ docker compose exec app composer create-project --prefer-dist "laravel/laravel=6.*" .

$ docker compose exec app php artisan key:generate
$ docker compose exec app php artisan storage:link
$ docker compose exec app chmod -R 777 storage bootstrap/cache
$ docker compose exec app php artisan migrate
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="http://localhost"&gt;http://localhost&lt;/a&gt;&lt;/p&gt;

</description>
      <category>laravel</category>
      <category>docker</category>
      <category>php</category>
    </item>
  </channel>
</rss>
