Duas aplicações no docker compartilhando o mesmo banco de dados
[Finalizado Pelo Aluno]
Olá,
Estou usando o setup docker que você forneceu.
Rodou sem erros.
Só que surgiu uma necessidade minha de em vez de subir uma aplicação no docker, subir duas aplicações.
A primeira aplicação irá se comunicar com a segunda aplicação consumindo alguns serviços e ambas irão compartilhar o mesmo banco de dados.
Fiz algumas tentativas replicando toda a configuração da primeira aplicação para a segunda aplicação, modificando as portas do nginx.
Até funcionou, mas o banco não.
Você consegue me dizer com base nesse seu setup
Oque eu preciso fazer para rodar as duas aplicações compartilhando o mesmo banco de dados?
Obrigado!
Olá, Carlos! Tudo bem?
Neste caso, deixo as aplicações na mesma rede:
docker network create example-network;
docker-compose.yaml
db:
image: mysql:8.0
platform: linux/x86_64
restart: unless-stopped
environment:
MYSQL_ROOT_PASSWORD: root
MYSQL_ROOT_HOST: "%"
ports:
- 3308:3306
volumes:
- ./.docker/mysql8/dbdata:/var/lib/mysql8
networks:
- example-network
networks:
example-network:
external: true
driver: bridge
Ola Carlos blz!
acho que não compreendi muito bem seu exemplo:
tentei colocar os dois mysql na mesma porta mas deu erro.
coloquei em portas diferentes funcionou porem não é o mesmo banco, são bancos diferentes
o nginx tabem parou de funcionar os dois host, agora so funciona o host app1
coloquei alguns trechos dos arquivos da minha configuração, como eu disse os mesmos arquivos que tem em app1 tem em app2, eu so mudei as portas.
host app1
laravel.conf app 1
host app2
docker-compose.yml app 1
docker-compose.yml app 2
A network está certa.
Agora em ambos os docker-compose.yml, a network precisa estar dessa forma:
networks:
laravel:
external: true
driver: bridge
Dessa forma, vc vai conseguir chamar outro serviço definido no outro docker-compose.yaml
teste aqui, mas ainda não consegui funcionar
esse é o meu docker-compose.yml
tem a mesma configuração para as duas aplições a unica diferença que na referencia do nginx em cada arquivo esta com portas diferentes.
app1 rodando na porta 8989:80 e app2 rodando na porta 8990:80
http://localhost:8989/ funciona mas http://localhost:8990/ nao funciona
não sei se tenho que mudar alguma coisa no arquivo laravel.conf de cada aplicação, porque ja alterei as portas do nginx mas ambas estão assim:
nao sei se resolveu seu problema, quando precisei usar mesmo banco com aplicações diferentes no docker eu criei um container mysql separado
O seu docker-compose.yaml do primeiro projeto está certo, do segundo precisa estar da mesma forma (usando portas diferentes, claro).
É importante deletar os containers primeiro (docker compose down), isso vai remover a antiga network que não é externa.
Em seus arquivos .env o DB_HOST será o mesmo: db
testei aqui e agora funcionou!
http://localhost:8989/
http://localhost:8990/
tem alguma configuração que eu possa fazer para invez de usar
http://localhost:8989/
http://localhost:8990/
usar:
http://application1.local
http://application2.local
obrigado!
Que bom que deu certo.
Até é possível fazer isso, mas vai te dar um bom trabalho, porque precisa criar um virtualhost no seu arquivo de hosts e direcionar através do nginx.
Como é local, recomendo acessar pela porta mesmo, é assim que acesso normalmente.
porque voce nao usa o portainer com traefik? Com isso vc consegue rodar várias aplicacoes no mesmo droplet. Geralmente assim: producao.seudominio.com e homologa.seudominio.com;
Precisa estar logado para conseguir responder a este ticket!
Clique Aqui Para Entrar!