allysonsilva / blog-docker

🐳 Docker utilizado no meu site / blog pessoal

Home Page:http://alysonsilva.dev

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool



Blog Laravel Dockerized


🐳 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.

Estrutura do RepositΓ³rio

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

πŸ”§ Configuração Inicial

⬇️ Clonar o repositΓ³rio

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

πŸ—‚οΈ Organização

  • 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 pasta docker.

Deve estar como da seguinte forma:

.
└── /var/www/app
                β”œβ”€β”€ app
                β”œβ”€β”€ bootstrap
                β”œβ”€β”€ config
                β”œβ”€β”€ database
                β”œβ”€β”€ docker <-------
                └── ...

πŸͺ‘ Comandos / Instruçáes

  • Dentro da pasta de docker, execute make 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 com cp .dockerignore ./../.
  • Abrir o arquivo docker/.env e editar as variΓ‘veis de APP_DOMAIN e APP_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.

🐳 Execução dos Containers Docker

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.

πŸ—οΈ Build da imagem da aplicação

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

Executando o container do MySQL

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.

Executando o container do Redis

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.

Executando o container do Traefik

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

Executando o container do Portainer

make docker/service/up context=portainer

Executando o container do Prometheus e Grafana

make docker/service/up context=prometheus
make docker/service/up context=grafana

Executando o container do Netdata

VIRTUALIZATION=$(systemd-detect-virt -v) make docker/service/up context=netdata

Executando o container do Uptime Kuma

make docker/service/up context=uptime

Executando o container do APP πŸš€

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

Executando o container da QUEUE 🚦

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.

Executando o container da SCHEDULER ⏲️

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.

Screenshots de Algumas Ferramentas

Netdata Netdata

Grafana Grafana

Uptime Kuma Uptime Kuma

Traefik Traefik

πŸ“ Changelog

Please see CHANGELOG for more information about the changes on this package.

🀝 Contributing

Please see CONTRIBUTING for details.

License

The MIT License (MIT). Please see License File for more information.

About

🐳 Docker utilizado no meu site / blog pessoal

http://alysonsilva.dev

License:MIT License


Languages

Language:Shell 54.9%Language:Makefile 22.5%Language:Dockerfile 19.2%Language:Smarty 3.3%