Aggiorna la configurazione di deployment per utilizzare ClusterIP e aggiungi Ingress per la gestione SSL
All checks were successful
GKE Auto-Deploy / build-and-deploy (push) Successful in 36s
All checks were successful
GKE Auto-Deploy / build-and-deploy (push) Successful in 36s
This commit is contained in:
@@ -48,8 +48,6 @@ jobs:
|
|||||||
# --- PARTE NUOVA: TEMPLATING E APPLY ---
|
# --- PARTE NUOVA: TEMPLATING E APPLY ---
|
||||||
- name: Deploy to GKE
|
- name: Deploy to GKE
|
||||||
run: |
|
run: |
|
||||||
echo "Ecco i file presenti nella cartella:"
|
|
||||||
ls -R
|
|
||||||
gcloud container clusters get-credentials ${{ env.CLUSTER_NAME }} --zone ${{ env.CLUSTER_ZONE }}
|
gcloud container clusters get-credentials ${{ env.CLUSTER_NAME }} --zone ${{ env.CLUSTER_ZONE }}
|
||||||
|
|
||||||
# 1. Installiamo envsubst (se non c'è già nell'immagine, di solito c'è ma per sicurezza)
|
# 1. Installiamo envsubst (se non c'è già nell'immagine, di solito c'è ma per sicurezza)
|
||||||
|
|||||||
@@ -1,238 +0,0 @@
|
|||||||
# Troubleshooting 404 Error
|
|
||||||
|
|
||||||
Se ottieni un errore 404 visitando il sito, segui questi passaggi:
|
|
||||||
|
|
||||||
## 1. Esegui lo Script di Debug
|
|
||||||
|
|
||||||
Sul server, nella directory del progetto:
|
|
||||||
|
|
||||||
```bash
|
|
||||||
chmod +x debug-server.sh
|
|
||||||
./debug-server.sh
|
|
||||||
```
|
|
||||||
|
|
||||||
Questo script ti mostrerà:
|
|
||||||
- Stato del container
|
|
||||||
- Logs
|
|
||||||
- File presenti in nginx
|
|
||||||
- Configurazione rete
|
|
||||||
- Labels Traefik
|
|
||||||
|
|
||||||
## 2. Problemi Comuni e Soluzioni
|
|
||||||
|
|
||||||
### ❌ Container non in esecuzione
|
|
||||||
|
|
||||||
**Verifica:**
|
|
||||||
```bash
|
|
||||||
docker ps -a | grep vue-demo-app
|
|
||||||
```
|
|
||||||
|
|
||||||
**Soluzione:**
|
|
||||||
```bash
|
|
||||||
docker-compose up -d
|
|
||||||
```
|
|
||||||
|
|
||||||
### ❌ File mancanti in /usr/share/nginx/html/
|
|
||||||
|
|
||||||
**Verifica:**
|
|
||||||
```bash
|
|
||||||
docker exec vue-demo-app ls -la /usr/share/nginx/html/
|
|
||||||
```
|
|
||||||
|
|
||||||
**Dovrebbe mostrare:**
|
|
||||||
- index.html
|
|
||||||
- assets/ (directory)
|
|
||||||
|
|
||||||
**Soluzione se i file mancano:**
|
|
||||||
```bash
|
|
||||||
# Rebuild completo
|
|
||||||
docker-compose down
|
|
||||||
docker-compose build --no-cache
|
|
||||||
docker-compose up -d
|
|
||||||
```
|
|
||||||
|
|
||||||
### ❌ Rete web_proxy non esiste
|
|
||||||
|
|
||||||
**Verifica:**
|
|
||||||
```bash
|
|
||||||
docker network ls | grep web_proxy
|
|
||||||
```
|
|
||||||
|
|
||||||
**Soluzione:**
|
|
||||||
```bash
|
|
||||||
docker network create web_proxy
|
|
||||||
docker-compose restart
|
|
||||||
```
|
|
||||||
|
|
||||||
### ❌ Container non sulla rete corretta
|
|
||||||
|
|
||||||
**Verifica:**
|
|
||||||
```bash
|
|
||||||
docker inspect vue-demo-app --format='{{range $key, $value := .NetworkSettings.Networks}}{{$key}}{{"\n"}}{{end}}'
|
|
||||||
```
|
|
||||||
|
|
||||||
**Soluzione:**
|
|
||||||
```bash
|
|
||||||
docker network connect web_proxy vue-demo-app
|
|
||||||
docker-compose restart
|
|
||||||
```
|
|
||||||
|
|
||||||
### ❌ Variabile DOMAIN non configurata
|
|
||||||
|
|
||||||
**Verifica:**
|
|
||||||
```bash
|
|
||||||
cat .env
|
|
||||||
```
|
|
||||||
|
|
||||||
**Soluzione:**
|
|
||||||
```bash
|
|
||||||
echo "DOMAIN=tuo-dominio.com" > .env
|
|
||||||
docker-compose down
|
|
||||||
docker-compose up -d
|
|
||||||
```
|
|
||||||
|
|
||||||
### ❌ Traefik non trova il container
|
|
||||||
|
|
||||||
**Verifica labels:**
|
|
||||||
```bash
|
|
||||||
docker inspect vue-demo-app | grep -A 20 Labels
|
|
||||||
```
|
|
||||||
|
|
||||||
**Verifica logs Traefik:**
|
|
||||||
```bash
|
|
||||||
docker logs traefik | grep vue-demo
|
|
||||||
```
|
|
||||||
|
|
||||||
**Possibili problemi:**
|
|
||||||
1. Dominio nel .env non corrisponde al DNS
|
|
||||||
2. Traefik non è sulla stessa rete del container
|
|
||||||
3. Labels Traefik non corretti
|
|
||||||
|
|
||||||
**Soluzione:**
|
|
||||||
```bash
|
|
||||||
# Ricrea container con labels corretti
|
|
||||||
docker-compose down
|
|
||||||
docker-compose up -d
|
|
||||||
|
|
||||||
# Verifica che entrambi siano sulla rete web_proxy
|
|
||||||
docker network inspect web_proxy
|
|
||||||
```
|
|
||||||
|
|
||||||
### ❌ Nginx restituisce 404
|
|
||||||
|
|
||||||
**Test diretto:**
|
|
||||||
```bash
|
|
||||||
# Ottieni IP del container
|
|
||||||
CONTAINER_IP=$(docker inspect vue-demo-app --format='{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}')
|
|
||||||
|
|
||||||
# Test diretto (dall'interno del server)
|
|
||||||
curl http://$CONTAINER_IP
|
|
||||||
```
|
|
||||||
|
|
||||||
**Se questo funziona ma il dominio no, il problema è Traefik.**
|
|
||||||
**Se anche questo restituisce 404, il problema è nginx/build.**
|
|
||||||
|
|
||||||
**Soluzione problemi nginx:**
|
|
||||||
```bash
|
|
||||||
# Verifica file
|
|
||||||
docker exec vue-demo-app cat /usr/share/nginx/html/index.html
|
|
||||||
|
|
||||||
# Verifica configurazione nginx
|
|
||||||
docker exec vue-demo-app nginx -t
|
|
||||||
|
|
||||||
# Rebuild se necessario
|
|
||||||
docker-compose build --no-cache
|
|
||||||
docker-compose up -d
|
|
||||||
```
|
|
||||||
|
|
||||||
## 3. Verifica Configurazione Traefik
|
|
||||||
|
|
||||||
Assicurati che Traefik sia configurato correttamente:
|
|
||||||
|
|
||||||
### Verifica entrypoints:
|
|
||||||
```bash
|
|
||||||
docker inspect traefik | grep -i entrypoint
|
|
||||||
```
|
|
||||||
|
|
||||||
Dovrebbe avere:
|
|
||||||
- `web` su porta 80
|
|
||||||
- `websecure` su porta 443
|
|
||||||
|
|
||||||
### Verifica cert resolver:
|
|
||||||
```bash
|
|
||||||
docker inspect traefik | grep -i letsencrypt
|
|
||||||
```
|
|
||||||
|
|
||||||
Dovrebbe avere il resolver `letsencrypt` configurato.
|
|
||||||
|
|
||||||
### Verifica rete:
|
|
||||||
```bash
|
|
||||||
docker network inspect web_proxy
|
|
||||||
```
|
|
||||||
|
|
||||||
Traefik e vue-demo-app devono essere entrambi su questa rete.
|
|
||||||
|
|
||||||
## 4. Test Manuale Completo
|
|
||||||
|
|
||||||
```bash
|
|
||||||
# 1. Verifica DNS
|
|
||||||
nslookup tuo-dominio.com
|
|
||||||
|
|
||||||
# 2. Verifica rete
|
|
||||||
docker network inspect web_proxy
|
|
||||||
|
|
||||||
# 3. Verifica container
|
|
||||||
docker ps | grep vue-demo
|
|
||||||
|
|
||||||
# 4. Test interno
|
|
||||||
docker exec vue-demo-app wget -O - http://localhost
|
|
||||||
|
|
||||||
# 5. Verifica logs
|
|
||||||
docker logs vue-demo-app
|
|
||||||
docker logs traefik | grep vue-demo
|
|
||||||
|
|
||||||
# 6. Test dal server
|
|
||||||
curl -H "Host: tuo-dominio.com" http://localhost
|
|
||||||
|
|
||||||
# 7. Test esterno
|
|
||||||
curl https://tuo-dominio.com
|
|
||||||
```
|
|
||||||
|
|
||||||
## 5. Rebuild Completo (Last Resort)
|
|
||||||
|
|
||||||
Se nulla funziona:
|
|
||||||
|
|
||||||
```bash
|
|
||||||
# Stop tutto
|
|
||||||
docker-compose down
|
|
||||||
|
|
||||||
# Rimuovi immagini vecchie
|
|
||||||
docker rmi vue-demo:latest
|
|
||||||
docker system prune -f
|
|
||||||
|
|
||||||
# Verifica .env
|
|
||||||
cat .env
|
|
||||||
|
|
||||||
# Rebuild completo
|
|
||||||
docker-compose build --no-cache
|
|
||||||
|
|
||||||
# Verifica rete
|
|
||||||
docker network ls | grep web_proxy || docker network create web_proxy
|
|
||||||
|
|
||||||
# Avvia
|
|
||||||
docker-compose up -d
|
|
||||||
|
|
||||||
# Controlla logs
|
|
||||||
docker-compose logs -f
|
|
||||||
```
|
|
||||||
|
|
||||||
## 6. Contatta Supporto
|
|
||||||
|
|
||||||
Se dopo tutti questi passaggi il problema persiste, raccogli le seguenti informazioni:
|
|
||||||
|
|
||||||
```bash
|
|
||||||
./debug-server.sh > debug-output.txt
|
|
||||||
docker-compose logs > docker-logs.txt
|
|
||||||
```
|
|
||||||
|
|
||||||
E invia i file di output per ulteriore analisi.
|
|
||||||
@@ -20,14 +20,43 @@ spec:
|
|||||||
ports:
|
ports:
|
||||||
- containerPort: 80
|
- containerPort: 80
|
||||||
---
|
---
|
||||||
|
# NOTA: Il servizio ora è ClusterIP (interno), non più LoadBalancer.
|
||||||
|
# Non costa nulla e non ha IP pubblico diretto.
|
||||||
apiVersion: v1
|
apiVersion: v1
|
||||||
kind: Service
|
kind: Service
|
||||||
metadata:
|
metadata:
|
||||||
name: ${APP_NAME}-service
|
name: ${APP_NAME}-service
|
||||||
spec:
|
spec:
|
||||||
type: LoadBalancer
|
type: ClusterIP
|
||||||
selector:
|
selector:
|
||||||
app: ${APP_NAME}
|
app: ${APP_NAME}
|
||||||
ports:
|
ports:
|
||||||
- port: 80
|
- port: 80
|
||||||
targetPort: 80
|
targetPort: 80
|
||||||
|
---
|
||||||
|
# LA PARTE NUOVA: INGRESS
|
||||||
|
apiVersion: networking.k8s.io/v1
|
||||||
|
kind: Ingress
|
||||||
|
metadata:
|
||||||
|
name: ${APP_NAME}-ingress
|
||||||
|
annotations:
|
||||||
|
# Queste due righe attivano la magia SSL automatica
|
||||||
|
cert-manager.io/cluster-issuer: "letsencrypt-prod"
|
||||||
|
kubernetes.io/tls-acme: "true"
|
||||||
|
spec:
|
||||||
|
ingressClassName: nginx
|
||||||
|
tls:
|
||||||
|
- hosts:
|
||||||
|
- ${APP_NAME}.demo.bytebuilder.it
|
||||||
|
secretName: ${APP_NAME}-tls
|
||||||
|
rules:
|
||||||
|
- host: ${APP_NAME}.demo.bytebuilder.it
|
||||||
|
http:
|
||||||
|
paths:
|
||||||
|
- path: /
|
||||||
|
pathType: Prefix
|
||||||
|
backend:
|
||||||
|
service:
|
||||||
|
name: ${APP_NAME}-service
|
||||||
|
port:
|
||||||
|
number: 80
|
||||||
@@ -1,66 +0,0 @@
|
|||||||
# Script di Manutenzione
|
|
||||||
|
|
||||||
Script utili per la gestione e manutenzione del server.
|
|
||||||
|
|
||||||
## cleanup-docker.sh
|
|
||||||
|
|
||||||
Script per liberare spazio Docker rimuovendo:
|
|
||||||
- Container fermati
|
|
||||||
- Immagini non utilizzate
|
|
||||||
- Volumi orfani
|
|
||||||
- Network non utilizzati
|
|
||||||
|
|
||||||
### Utilizzo
|
|
||||||
|
|
||||||
```bash
|
|
||||||
# Rendi eseguibile
|
|
||||||
chmod +x cleanup-docker.sh
|
|
||||||
|
|
||||||
# Esegui manualmente
|
|
||||||
./cleanup-docker.sh
|
|
||||||
```
|
|
||||||
|
|
||||||
### Automazione con Cron
|
|
||||||
|
|
||||||
Per eseguire la pulizia automaticamente ogni settimana:
|
|
||||||
|
|
||||||
```bash
|
|
||||||
# Apri crontab
|
|
||||||
crontab -e
|
|
||||||
|
|
||||||
# Aggiungi questa riga per eseguire ogni domenica alle 3:00
|
|
||||||
0 3 * * 0 /opt/vue-demo/cleanup-docker.sh >> /var/log/docker-cleanup.log 2>&1
|
|
||||||
```
|
|
||||||
|
|
||||||
## Monitoraggio Spazio
|
|
||||||
|
|
||||||
### Verifica spazio disco
|
|
||||||
```bash
|
|
||||||
df -h
|
|
||||||
```
|
|
||||||
|
|
||||||
### Verifica spazio Docker
|
|
||||||
```bash
|
|
||||||
docker system df
|
|
||||||
docker system df -v # output dettagliato
|
|
||||||
```
|
|
||||||
|
|
||||||
### Analizza dimensioni immagini
|
|
||||||
```bash
|
|
||||||
docker images --format "table {{.Repository}}\t{{.Tag}}\t{{.Size}}"
|
|
||||||
```
|
|
||||||
|
|
||||||
### Trova container più grandi
|
|
||||||
```bash
|
|
||||||
docker ps -s
|
|
||||||
```
|
|
||||||
|
|
||||||
## Limiti Raccomandati
|
|
||||||
|
|
||||||
Con 8GB di spazio totale:
|
|
||||||
- Sistema operativo: ~2-3GB
|
|
||||||
- Docker + Traefik: ~500MB
|
|
||||||
- Applicazioni: ~2-3GB
|
|
||||||
- Spazio libero buffer: ~2GB minimo
|
|
||||||
|
|
||||||
**Alert**: Se lo spazio libero scende sotto 1GB, esegui subito la pulizia Docker.
|
|
||||||
@@ -1,34 +0,0 @@
|
|||||||
#!/bin/bash
|
|
||||||
|
|
||||||
# Script di manutenzione per liberare spazio Docker
|
|
||||||
# Esegui periodicamente per mantenere pulito il server
|
|
||||||
|
|
||||||
echo "=== Docker Space Cleanup ==="
|
|
||||||
echo ""
|
|
||||||
|
|
||||||
echo "Spazio prima della pulizia:"
|
|
||||||
docker system df
|
|
||||||
|
|
||||||
echo ""
|
|
||||||
echo "Rimuovo container fermati..."
|
|
||||||
docker container prune -f
|
|
||||||
|
|
||||||
echo ""
|
|
||||||
echo "Rimuovo immagini non utilizzate..."
|
|
||||||
docker image prune -a -f
|
|
||||||
|
|
||||||
echo ""
|
|
||||||
echo "Rimuovo volumi non utilizzati..."
|
|
||||||
docker volume prune -f
|
|
||||||
|
|
||||||
echo ""
|
|
||||||
echo "Rimuovo network non utilizzati..."
|
|
||||||
docker network prune -f
|
|
||||||
|
|
||||||
echo ""
|
|
||||||
echo "Spazio dopo la pulizia:"
|
|
||||||
docker system df
|
|
||||||
|
|
||||||
echo ""
|
|
||||||
echo "Spazio disco totale:"
|
|
||||||
df -h /
|
|
||||||
@@ -1,24 +0,0 @@
|
|||||||
#!/bin/bash
|
|
||||||
|
|
||||||
echo "=== QUICK DEBUG ==="
|
|
||||||
echo ""
|
|
||||||
|
|
||||||
echo "1. Logs del container:"
|
|
||||||
docker logs vue-demo-app --tail 50
|
|
||||||
echo ""
|
|
||||||
|
|
||||||
echo "2. Processi in esecuzione nel container:"
|
|
||||||
docker exec vue-demo-app ps aux
|
|
||||||
echo ""
|
|
||||||
|
|
||||||
echo "3. File presenti in nginx:"
|
|
||||||
docker exec vue-demo-app ls -la /usr/share/nginx/html/
|
|
||||||
echo ""
|
|
||||||
|
|
||||||
echo "4. Porta 80 in ascolto?"
|
|
||||||
docker exec vue-demo-app netstat -tlnp 2>/dev/null || docker exec vue-demo-app ss -tlnp 2>/dev/null || echo "netstat/ss non disponibile"
|
|
||||||
echo ""
|
|
||||||
|
|
||||||
echo "5. Test configurazione nginx:"
|
|
||||||
docker exec vue-demo-app nginx -t
|
|
||||||
echo ""
|
|
||||||
@@ -1,68 +0,0 @@
|
|||||||
# Esempio Configurazione Traefik
|
|
||||||
|
|
||||||
Questa directory contiene un esempio di configurazione Traefik per il server di produzione.
|
|
||||||
|
|
||||||
## Setup Iniziale
|
|
||||||
|
|
||||||
1. Crea la directory sul server:
|
|
||||||
```bash
|
|
||||||
mkdir -p /opt/traefik/letsencrypt
|
|
||||||
cd /opt/traefik
|
|
||||||
```
|
|
||||||
|
|
||||||
2. Copia il file docker-compose.yml in questa directory
|
|
||||||
|
|
||||||
3. Modifica l'email per Let's Encrypt:
|
|
||||||
```bash
|
|
||||||
nano docker-compose.yml
|
|
||||||
# Modifica: tua-email@example.com
|
|
||||||
```
|
|
||||||
|
|
||||||
4. Crea la rete Docker:
|
|
||||||
```bash
|
|
||||||
docker network create traefik-network
|
|
||||||
```
|
|
||||||
|
|
||||||
5. Avvia Traefik:
|
|
||||||
```bash
|
|
||||||
docker-compose up -d
|
|
||||||
```
|
|
||||||
|
|
||||||
6. Verifica che sia attivo:
|
|
||||||
```bash
|
|
||||||
docker ps
|
|
||||||
docker logs traefik
|
|
||||||
```
|
|
||||||
|
|
||||||
## Note di Sicurezza
|
|
||||||
|
|
||||||
- **Dashboard**: La configurazione include il dashboard Traefik con autenticazione basic
|
|
||||||
- Per generare una nuova password per il dashboard:
|
|
||||||
```bash
|
|
||||||
# Installa htpasswd se necessario: apt-get install apache2-utils
|
|
||||||
htpasswd -nb admin tuapassword
|
|
||||||
```
|
|
||||||
- In produzione, considera di rimuovere completamente il dashboard o limitarlo a IP specifici
|
|
||||||
|
|
||||||
## Configurazione Domini
|
|
||||||
|
|
||||||
Dopo aver avviato Traefik, i tuoi container con le labels corrette saranno automaticamente esposti con:
|
|
||||||
- Certificati SSL Let's Encrypt
|
|
||||||
- Redirect automatico HTTP → HTTPS
|
|
||||||
- Routing basato sul dominio
|
|
||||||
|
|
||||||
## Troubleshooting
|
|
||||||
|
|
||||||
### Certificati non vengono generati
|
|
||||||
- Verifica che la porta 80 sia accessibile pubblicamente
|
|
||||||
- Controlla i logs: `docker logs traefik`
|
|
||||||
- Verifica che il dominio punti all'IP del server
|
|
||||||
- Assicurati che il file `acme.json` abbia i permessi corretti:
|
|
||||||
```bash
|
|
||||||
chmod 600 letsencrypt/acme.json
|
|
||||||
```
|
|
||||||
|
|
||||||
### Container non raggiungibili
|
|
||||||
- Verifica che il container sia sulla rete `traefik-network`
|
|
||||||
- Controlla i logs di Traefik per errori
|
|
||||||
- Verifica le labels del container con: `docker inspect nome-container`
|
|
||||||
@@ -1,66 +0,0 @@
|
|||||||
# Esempio di configurazione Traefik
|
|
||||||
# Da usare come riferimento per configurare Traefik sul server di produzione
|
|
||||||
|
|
||||||
version: '3.8'
|
|
||||||
|
|
||||||
services:
|
|
||||||
traefik:
|
|
||||||
image: traefik:v2.10
|
|
||||||
container_name: traefik
|
|
||||||
restart: unless-stopped
|
|
||||||
security_opt:
|
|
||||||
- no-new-privileges:true
|
|
||||||
command:
|
|
||||||
# Dashboard
|
|
||||||
- "--api.dashboard=true"
|
|
||||||
|
|
||||||
# Provider Docker
|
|
||||||
- "--providers.docker=true"
|
|
||||||
- "--providers.docker.exposedbydefault=false"
|
|
||||||
- "--providers.docker.network=traefik-network"
|
|
||||||
|
|
||||||
# Entrypoints
|
|
||||||
- "--entrypoints.web.address=:80"
|
|
||||||
- "--entrypoints.websecure.address=:443"
|
|
||||||
|
|
||||||
# Redirect HTTP to HTTPS
|
|
||||||
- "--entrypoints.web.http.redirections.entryPoint.to=websecure"
|
|
||||||
- "--entrypoints.web.http.redirections.entryPoint.scheme=https"
|
|
||||||
|
|
||||||
# Let's Encrypt
|
|
||||||
- "--certificatesresolvers.letsencrypt.acme.email=tua-email@example.com"
|
|
||||||
- "--certificatesresolvers.letsencrypt.acme.storage=/letsencrypt/acme.json"
|
|
||||||
- "--certificatesresolvers.letsencrypt.acme.httpchallenge=true"
|
|
||||||
- "--certificatesresolvers.letsencrypt.acme.httpchallenge.entrypoint=web"
|
|
||||||
|
|
||||||
# Logs
|
|
||||||
- "--log.level=INFO"
|
|
||||||
- "--accesslog=true"
|
|
||||||
|
|
||||||
ports:
|
|
||||||
- "80:80"
|
|
||||||
- "443:443"
|
|
||||||
|
|
||||||
volumes:
|
|
||||||
- /var/run/docker.sock:/var/run/docker.sock:ro
|
|
||||||
- ./letsencrypt:/letsencrypt
|
|
||||||
|
|
||||||
networks:
|
|
||||||
- traefik-network
|
|
||||||
|
|
||||||
labels:
|
|
||||||
# Dashboard (opzionale, rimuovi in produzione se non necessario)
|
|
||||||
- "traefik.enable=true"
|
|
||||||
- "traefik.http.routers.dashboard.rule=Host(`traefik.tuodominio.com`)"
|
|
||||||
- "traefik.http.routers.dashboard.entrypoints=websecure"
|
|
||||||
- "traefik.http.routers.dashboard.tls=true"
|
|
||||||
- "traefik.http.routers.dashboard.tls.certresolver=letsencrypt"
|
|
||||||
- "traefik.http.routers.dashboard.service=api@internal"
|
|
||||||
# Autenticazione basic per dashboard
|
|
||||||
# Username: admin, Password: changeme (genera il tuo con: htpasswd -nb admin password)
|
|
||||||
- "traefik.http.routers.dashboard.middlewares=dashboard-auth"
|
|
||||||
- "traefik.http.middlewares.dashboard-auth.basicauth.users=admin:$$apr1$$8EVjn/nj$$GiLUZqcbueTFeD23SuB6x0"
|
|
||||||
|
|
||||||
networks:
|
|
||||||
traefik-network:
|
|
||||||
external: true
|
|
||||||
Reference in New Issue
Block a user