🐳 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
dockerdeve estar no root do projeto / aplicação em Laravel.- O nome da pasta pode ser alterado na env de
DOCKER_FOLDERno arquivo de.envdentro 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=./dockerpara criar o arquivo.envcom os valores corretamente. - Copie o arquivo de
.dockerignorepara a pasta root da aplicação comcp .dockerignore ./../. - Abrir o arquivo
docker/.enve editar as variáveis deAPP_DOMAINeAPP_SECONDARY_DOMAINpara 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_TOKENseguindo 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/buildExecuta o script para criar os certificados auto-assinados:
./docker/scripts/self-signed-SSL.sh --service=mysql --cert-server-host=mysqlAbrir 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/upExecutando o container do Soketi 📡
make docker/service/up context=soketimake docker/service/up context=portainermake docker/service/up context=prometheus
make docker/service/up context=grafanaVIRTUALIZATION=$(systemd-detect-virt -v) make docker/service/up context=netdataExecutando o container do Uptime Kuma
make docker/service/up context=uptimeVer 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.





