π³ Docker utilizado na execução do meu site / blog pessoal.
Uma coleção de ferramentas, serviços e imagens executados em docker: Laravel, Laravel Octane, FrankenPHP, Grafana, MongoDB, MySQL, Netdata, Php, Portainer, Prometheus, Redis, Soketi, Traefik e Uptime Kuma.
tree --sort=name --dirsfirst -a -I ".git|.DS_Store"
.
βββ grafana
β βββ datasources
β β βββ ds-prometheus.yml
β βββ .env.container
β βββ docker-compose.yml
βββ mongodb
β βββ .env.container
β βββ docker-compose.yml
β βββ mongod.conf
βββ mysql
β βββ scripts
β β βββ init.sh
β β βββ init.sql
β βββ ssl
β β βββ .gitignore
β βββ .env.container
β βββ docker-compose.yml
β βββ my.cnf
βββ netdata
β βββ configs
β β βββ alarms
β β β βββ cgroups.conf
β β β βββ cpu.conf
β β β βββ mysql.conf
β β β βββ ram.conf
β β βββ modules
β β β βββ go.d
β β β βββ mysql.conf
β β β βββ redis.conf
β β β βββ traefik.conf
β β βββ orchestrators
β β β βββ go.d.conf
β β βββ health.conf
β β βββ netdata.conf
β βββ docker-compose.yml
βββ php
β βββ configs
β β βββ conf.d
β β β βββ opcache.ini
β β βββ queue
β β β βββ templates
β β β β βββ laravel-horizon.conf.tpl
β β β β βββ laravel-worker.conf.tpl
β β β βββ supervisord.conf
β β βββ php-local.ini
β β βββ php-production.ini
β βββ services
β β βββ app
β β β βββ .env.container
β β β βββ docker-compose.yml
β β βββ queue
β β β βββ .env.container
β β β βββ docker-compose.yml
β β βββ scheduler
β β βββ .env.container
β β βββ docker-compose.yml
β βββ Dockerfile
β βββ docker-entrypoint.sh
βββ portainer
β βββ docker-compose.yml
βββ prometheus
β βββ configs
β β βββ prometheus.yaml
β βββ docker-compose.yml
βββ redis
β βββ docker-compose.yml
β βββ redis.conf
βββ scripts
β βββ cloudflare-ips-ufw.sh
β βββ deploy-new-version.sh
β βββ self-signed-SSL.sh
βββ soketi
β βββ .env.container
β βββ docker-compose.yml
βββ traefik
β βββ dynamic
β β βββ 10-tls.yml
β β βββ app-service.yml
β β βββ dashboard.yml
β β βββ middlewares.yml
β β βββ routers.yml
β β βββ services.yml
β βββ letsencrypt
β β βββ .gitignore
β βββ .gitignore
β βββ docker-compose.yml
βββ uptime
β βββ docker-compose.yml
βββ .dockerignore
βββ .editorconfig
βββ .env.compose
βββ .gitignore
βββ LICENSE
βββ Makefile
βββ README.md
βββ blog-bockerized.service
βββ docker-compose.yml
Dentro do GIT de um projeto em Laravel Octane no root do projeto, baixe esse mesmo repositΓ³rio para uma pasta chamada docker
com o seguinte comando:
$ git clone https://github.com/allysonsilva/blog-docker docker && cd docker
- A pasta de
docker
deve estar no root do projeto / aplicação em Laravel.- O nome da pasta pode ser alterado na env de
DOCKER_FOLDER
no arquivo de.env
dentro da pastadocker
.
- O nome da pasta pode ser alterado na env de
Deve estar como da seguinte forma:
.
βββ /var/www/app
βββ app
βββ bootstrap
βββ config
βββ database
βββ docker <-------
βββ ...
- Dentro da pasta de
docker
, executemake docker/config-env docker_folder=./docker
para criar o arquivo.env
com os valores corretamente. - Copie o arquivo de
.dockerignore
para a pasta root da aplicação comcp .dockerignore ./../
. - Abrir o arquivo
docker/.env
e editar as variΓ‘veis deAPP_DOMAIN
eAPP_SECONDARY_DOMAIN
para o valor do domΓnio da aplicação para que os certificados da Let's Encrypt possam ser criados por meio do desafio DNS com Cloudflare.- A renovação dos certificados acontecem de forma automΓ‘tica pelo Traefik.
- Editar a variΓ‘vel
CF_DNS_API_TOKEN
seguindo a recomendação https://go-acme.github.io/lego/dns/cloudflare/#api-tokens.
Obs: Todos os comandos a seguir devem ser executados de dentro da pasta de docker
.
Execute docker compose up
para que possam ser criados networks do docker que serΓ£o usandos nos containers da stack.
Apenas na primeira execução do build, deve-se adicionar o parÒmetro de no_cache_from=true
, nas demais build, esse parΓ’metro nΓ£o Γ© obrigatΓ³rio / necessΓ‘rio.
Dentro da pasta docker
execute os seguintes comandos:
# Build das multi-stage parts
make docker/app/vendor/build no_cache_from=true
make docker/app/frontend/build no_cache_from=true
make docker/app/dependencies/build no_cache_from=true
# Build do APP
make docker/app/build
Executa o script para criar os certificados auto-assinados:
./docker/scripts/self-signed-SSL.sh --service=mysql --cert-server-host=mysql
Abrir o arquivo de docker/mysql/.env
e editar os valores das credencias de login do MySQL.
Subir o container com make docker/database/up
e para fazer healthcheck utilize make docker/healthcheck container=app_mysql
onde app_mysql
Γ© o nome do container do MySQL.
Abrir o arquivo de docker/redis/redis.conf
e editar a diretiva de requirepass
para o password de sua preferΓͺncia.
Executar make docker/redis/up
com health em make docker/healthcheck container=app_redis
.
Executar os seguintes comandos:
make docker/service/up context=traefik services="traefik-whoami"
make docker/traefik/up
Executando o container do Soketi π‘
make docker/service/up context=soketi
make docker/service/up context=portainer
make docker/service/up context=prometheus
make docker/service/up context=grafana
VIRTUALIZATION=$(systemd-detect-virt -v) make docker/service/up context=netdata
Executando o container do Uptime Kuma
make docker/service/up context=uptime
Ver arquivo de docker/php/services/app/.env
e editar as variΓ‘veis de ambiente conforme necessΓ‘rio.
O container do aplicativo executa o LARAVEL OCTANE com FrankenPHP, produzindo o seguinte comando principal: php artisan octane:frankenphp
.
Execute com: ./scripts/deploy-new-version.sh
Para executar o container de fila, Γ© o seguinte comando: make docker/queue/up with_version=true
.
O processo principal do container executarΓ‘ o comando supervisord --nodaemon --configuration /etc/supervisor/supervisord.conf
.
Para executar o container de agendamento, Γ© o seguinte comando: make docker/scheduler/up with_version=true
.
O processo principal do container executarΓ‘ o comando crond -l 2 -f -L /var/log/cron.log
.
Please see CHANGELOG for more information about the changes on this package.
Please see CONTRIBUTING for details.
The MIT License (MIT). Please see License File for more information.