├── docker ├── php │ └── custom.ini └── nginx │ └── laravel.conf ├── .gitignore ├── .editorconfig ├── Dockerfile ├── .env.example ├── README.md └── docker-compose.yml /docker/php/custom.ini: -------------------------------------------------------------------------------- 1 | [PHP] 2 | post_max_size = 100M 3 | upload_max_filesize = 100M -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | /node_modules 2 | /public/hot 3 | /public/storage 4 | /storage/*.key 5 | /vendor 6 | .env 7 | .env.backup 8 | .phpunit.result.cache 9 | docker-compose.override.yml 10 | Homestead.json 11 | Homestead.yaml 12 | npm-debug.log 13 | yarn-error.log 14 | /.idea 15 | /.vscode 16 | /.docker 17 | -------------------------------------------------------------------------------- /.editorconfig: -------------------------------------------------------------------------------- 1 | root = true 2 | 3 | [*] 4 | charset = utf-8 5 | end_of_line = lf 6 | indent_size = 4 7 | indent_style = space 8 | insert_final_newline = true 9 | trim_trailing_whitespace = true 10 | 11 | [*.md] 12 | trim_trailing_whitespace = false 13 | 14 | [*.{yml,yaml}] 15 | indent_size = 2 16 | 17 | [docker-compose.yml] 18 | indent_size = 4 -------------------------------------------------------------------------------- /docker/nginx/laravel.conf: -------------------------------------------------------------------------------- 1 | server { 2 | listen 80; 3 | index index.php; 4 | root /var/www/public; 5 | 6 | client_max_body_size 51g; 7 | client_body_buffer_size 512k; 8 | client_body_in_file_only clean; 9 | 10 | location ~ \.php$ { 11 | try_files $uri =404; 12 | fastcgi_split_path_info ^(.+\.php)(/.+)$; 13 | fastcgi_pass app:9000; 14 | fastcgi_index index.php; 15 | include fastcgi_params; 16 | fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; 17 | fastcgi_param PATH_INFO $fastcgi_path_info; 18 | } 19 | 20 | location / { 21 | try_files $uri $uri/ /index.php?$query_string; 22 | gzip_static on; 23 | } 24 | 25 | error_log /var/log/nginx/error.log; 26 | access_log /var/log/nginx/access.log; 27 | } -------------------------------------------------------------------------------- /Dockerfile: -------------------------------------------------------------------------------- 1 | FROM php:8.3-fpm 2 | 3 | # set your user name, ex: user=carlos 4 | ARG user=yourusername 5 | ARG uid=1000 6 | 7 | # Install system dependencies 8 | RUN apt-get update && apt-get install -y \ 9 | git \ 10 | curl \ 11 | libpng-dev \ 12 | libonig-dev \ 13 | libxml2-dev \ 14 | zip \ 15 | unzip 16 | 17 | # Clear cache 18 | RUN apt-get clean && rm -rf /var/lib/apt/lists/* 19 | 20 | # Install PHP extensions 21 | RUN docker-php-ext-install pdo_mysql mbstring exif pcntl bcmath gd sockets 22 | 23 | # Get latest Composer 24 | COPY --from=composer:latest /usr/bin/composer /usr/bin/composer 25 | 26 | # Create system user to run Composer and Artisan Commands 27 | RUN useradd -G www-data,root -u $uid -d /home/$user $user 28 | RUN mkdir -p /home/$user/.composer && \ 29 | chown -R $user:$user /home/$user 30 | 31 | # Install redis 32 | RUN pecl install -o -f redis \ 33 | && rm -rf /tmp/pear \ 34 | && docker-php-ext-enable redis 35 | 36 | # Set working directory 37 | WORKDIR /var/www 38 | 39 | # Copy custom configurations PHP 40 | COPY docker/php/custom.ini /usr/local/etc/php/conf.d/custom.ini 41 | 42 | USER $user 43 | -------------------------------------------------------------------------------- /.env.example: -------------------------------------------------------------------------------- 1 | APP_NAME=Laravel 2 | APP_ENV=local 3 | APP_KEY= 4 | APP_DEBUG=true 5 | APP_URL=http://localhost 6 | 7 | LOG_CHANNEL=stack 8 | LOG_DEPRECATIONS_CHANNEL=null 9 | LOG_LEVEL=debug 10 | 11 | DB_CONNECTION=mysql 12 | DB_HOST=db 13 | DB_PORT=3306 14 | DB_DATABASE=laravel 15 | DB_USERNAME=root 16 | DB_PASSWORD=root 17 | 18 | BROADCAST_DRIVER=log 19 | CACHE_DRIVER=file 20 | FILESYSTEM_DISK=local 21 | QUEUE_CONNECTION=sync 22 | SESSION_DRIVER=file 23 | SESSION_LIFETIME=120 24 | 25 | MEMCACHED_HOST=127.0.0.1 26 | 27 | REDIS_HOST=127.0.0.1 28 | REDIS_PASSWORD=null 29 | REDIS_PORT=6379 30 | 31 | MAIL_MAILER=smtp 32 | MAIL_HOST=mailpit 33 | MAIL_PORT=1025 34 | MAIL_USERNAME=null 35 | MAIL_PASSWORD=null 36 | MAIL_ENCRYPTION=null 37 | MAIL_FROM_ADDRESS="hello@example.com" 38 | MAIL_FROM_NAME="${APP_NAME}" 39 | 40 | AWS_ACCESS_KEY_ID= 41 | AWS_SECRET_ACCESS_KEY= 42 | AWS_DEFAULT_REGION=us-east-1 43 | AWS_BUCKET= 44 | AWS_USE_PATH_STYLE_ENDPOINT=false 45 | 46 | PUSHER_APP_ID= 47 | PUSHER_APP_KEY= 48 | PUSHER_APP_SECRET= 49 | PUSHER_HOST= 50 | PUSHER_PORT=443 51 | PUSHER_SCHEME=https 52 | PUSHER_APP_CLUSTER=mt1 53 | 54 | VITE_PUSHER_APP_KEY="${PUSHER_APP_KEY}" 55 | VITE_PUSHER_HOST="${PUSHER_HOST}" 56 | VITE_PUSHER_PORT="${PUSHER_PORT}" 57 | VITE_PUSHER_SCHEME="${PUSHER_SCHEME}" 58 | VITE_PUSHER_APP_CLUSTER="${PUSHER_APP_CLUSTER}" -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | 2 | # Setup Docker Para Projetos Laravel (8, 9, 10, 11 ou 12) 3 | [Assine a Academy, e Seja VIP!](https://academy.especializati.com.br) 4 | 5 | ### Passo a passo 6 | Clone Repositório 7 | ```sh 8 | git clone https://github.com/especializati/setup-docker-laravel.git 9 | ``` 10 | 11 | Clone os Arquivos do Laravel 12 | ```sh 13 | git clone https://github.com/laravel/laravel.git app-laravel 14 | ``` 15 | 16 | 17 | Copie os arquivos docker-compose.yml, Dockerfile e o diretório docker/ para o seu projeto 18 | ```sh 19 | cp -rf setup-docker-laravel/* app-laravel/ 20 | ``` 21 | ```sh 22 | cd app-laravel/ 23 | ``` 24 | 25 | 26 | Crie o Arquivo .env 27 | ```sh 28 | cp .env.example .env 29 | ``` 30 | 31 | 32 | Atualize **APENAS** essas variáveis de ambiente do arquivo .env (as demais devem permanecer como estão) 33 | ```dosini 34 | APP_NAME="Especializa Ti" 35 | APP_URL=http://localhost:8989 36 | 37 | DB_CONNECTION=mysql 38 | DB_HOST=db 39 | DB_PORT=3306 40 | DB_DATABASE=laravel 41 | DB_USERNAME=root 42 | DB_PASSWORD=root 43 | 44 | CACHE_DRIVER=redis 45 | QUEUE_CONNECTION=redis 46 | SESSION_DRIVER=redis 47 | 48 | REDIS_HOST=redis 49 | REDIS_PASSWORD=null 50 | REDIS_PORT=6379 51 | ``` 52 | 53 | 54 | Suba os containers do projeto 55 | ```sh 56 | docker compose up -d 57 | ``` 58 | 59 | 60 | Acessar o container 61 | ```sh 62 | docker compose exec app bash 63 | ``` 64 | 65 | 66 | Instalar as dependências do projeto 67 | ```sh 68 | composer install 69 | ``` 70 | 71 | 72 | Gerar a key do projeto Laravel 73 | ```sh 74 | php artisan key:generate 75 | ``` 76 | 77 | 78 | Acessar o projeto 79 | [http://localhost:8989](http://localhost:8989) 80 | -------------------------------------------------------------------------------- /docker-compose.yml: -------------------------------------------------------------------------------- 1 | services: 2 | # image project 3 | app: 4 | build: 5 | context: . 6 | dockerfile: Dockerfile 7 | restart: unless-stopped 8 | working_dir: /var/www/ 9 | volumes: 10 | - ./:/var/www 11 | depends_on: 12 | - redis 13 | networks: 14 | - laravel 15 | 16 | # nginx 17 | nginx: 18 | image: nginx:alpine 19 | restart: unless-stopped 20 | ports: 21 | - "8989:80" 22 | volumes: 23 | - ./:/var/www 24 | - ./docker/nginx/:/etc/nginx/conf.d/ 25 | networks: 26 | - laravel 27 | 28 | # db mysql 29 | db: 30 | image: mysql:5.7.22 31 | restart: unless-stopped 32 | environment: 33 | MYSQL_DATABASE: ${DB_DATABASE:-laravel} 34 | MYSQL_ROOT_PASSWORD: ${DB_PASSWORD:-root} 35 | MYSQL_PASSWORD: ${DB_PASSWORD:-userpass} 36 | MYSQL_USER: ${DB_USERNAME:-username} 37 | volumes: 38 | - ./.docker/mysql/dbdata:/var/lib/mysql 39 | ports: 40 | - "3388:3306" 41 | networks: 42 | - laravel 43 | 44 | # PHPMyAdmin 45 | phpmyadmin: 46 | image: phpmyadmin/phpmyadmin 47 | restart: unless-stopped 48 | ports: 49 | - "8080:80" 50 | environment: 51 | PMA_HOST: db 52 | PMA_PORT: 3306 53 | MYSQL_ROOT_PASSWORD: ${DB_PASSWORD:-userpass} 54 | networks: 55 | - laravel 56 | 57 | # redis 58 | redis: 59 | image: redis:latest 60 | networks: 61 | - laravel 62 | 63 | networks: 64 | laravel: 65 | driver: bridge 66 | --------------------------------------------------------------------------------