Complete stack
This commit is contained in:
2
.env.example
Normal file
2
.env.example
Normal file
@@ -0,0 +1,2 @@
|
|||||||
|
DEV_URL=localhost
|
||||||
|
EXTERNAL_NETWORK=traefiknet
|
||||||
5
.gitignore
vendored
Normal file
5
.gitignore
vendored
Normal file
@@ -0,0 +1,5 @@
|
|||||||
|
.env
|
||||||
|
portainer/*
|
||||||
|
!portainer/.gitkeep
|
||||||
|
traefik/logs/*
|
||||||
|
!traefik/logs/.gitkeep
|
||||||
62
README.md
Normal file
62
README.md
Normal file
@@ -0,0 +1,62 @@
|
|||||||
|
# Local Docker Management - Traefik & Portainer
|
||||||
|
|
||||||
|
Docker stack s reverse proxy (Traefik) a webovým rozhraním pro správu kontejnerů (Portainer).
|
||||||
|
|
||||||
|
## Požadavky
|
||||||
|
|
||||||
|
- Docker & Docker Compose
|
||||||
|
- Nastavené DNS záznamy nebo `/etc/hosts`
|
||||||
|
|
||||||
|
## Instalace
|
||||||
|
|
||||||
|
1. **Konfigurace prostředí**
|
||||||
|
```bash
|
||||||
|
# Přejmenujte soubor .env.example na .env
|
||||||
|
mv .env.example .env
|
||||||
|
|
||||||
|
# Upravte .env soubor dle svých nastavení
|
||||||
|
DEV_URL=dev.linuxak.com
|
||||||
|
EXTERNAL_NETWORK=traefiknet
|
||||||
|
```
|
||||||
|
|
||||||
|
2. **Spuštění**
|
||||||
|
```bash
|
||||||
|
./run up # Spustit stack
|
||||||
|
./run restart # Restartovat stack
|
||||||
|
./run down # Zastavit stack
|
||||||
|
```
|
||||||
|
|
||||||
|
## Přístup ke službám
|
||||||
|
|
||||||
|
| Služba | URL |
|
||||||
|
|--------|-----|
|
||||||
|
| Traefik Dashboard | http://traefik.dev.linuxak.com |
|
||||||
|
| Portainer | http://portainer.dev.linuxak.com |
|
||||||
|
|
||||||
|
## Struktura
|
||||||
|
|
||||||
|
```
|
||||||
|
Stack/
|
||||||
|
├── docker-compose.yml # Definice služeb
|
||||||
|
├── run # Skript pro správu
|
||||||
|
├── .env # Konfigurace prostředí
|
||||||
|
├── traefik/ # Traefik konfigurace a logy
|
||||||
|
└── portainer/ # Portainer data
|
||||||
|
```
|
||||||
|
|
||||||
|
## Persistence
|
||||||
|
|
||||||
|
Složka `portainer` je persistentním úložištěm pro službu Portainer a všechna data této služby zůstanou uložená i po vypnutí stacku, dokud je ručně nesmažete.
|
||||||
|
|
||||||
|
## Přidání nové služby
|
||||||
|
|
||||||
|
Do vašeho `docker-compose.yml` přidejte Traefik labels:
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
labels:
|
||||||
|
- "traefik.enable=true"
|
||||||
|
- "traefik.http.routers.myapp.rule=Host(`myapp.${DEV_URL}`)"
|
||||||
|
- "traefik.http.routers.myapp.entrypoints=web"
|
||||||
|
networks:
|
||||||
|
- ${EXTERNAL_NETWORK}
|
||||||
|
```
|
||||||
58
docker-compose.yml
Normal file
58
docker-compose.yml
Normal file
@@ -0,0 +1,58 @@
|
|||||||
|
services:
|
||||||
|
traefik:
|
||||||
|
image: traefik:latest
|
||||||
|
container_name: traefik
|
||||||
|
restart: always
|
||||||
|
command:
|
||||||
|
- "--global.checknewversion=false"
|
||||||
|
- "--log.level=INFO"
|
||||||
|
- "--log.filepath=/logs/traefik.log"
|
||||||
|
- "--accesslog=true"
|
||||||
|
- "--accesslog.filepath=/logs/access.log"
|
||||||
|
- "--entrypoints.web.address=:80"
|
||||||
|
- "--entrypoints.web.forwardedheaders.trustedips=0.0.0.0/0"
|
||||||
|
- "--entrypoints.websecure.address=:443"
|
||||||
|
- "--entrypoints.websecure.forwardedheaders.trustedips=0.0.0.0/0"
|
||||||
|
- "--api.dashboard=true"
|
||||||
|
- "--providers.docker=true"
|
||||||
|
- "--providers.docker.endpoint=unix:///var/run/docker.sock"
|
||||||
|
- "--providers.docker.network=${EXTERNAL_NETWORK}"
|
||||||
|
- "--providers.docker.exposedbydefault=false"
|
||||||
|
- "--providers.docker.watch=true"
|
||||||
|
- "--providers.file.filename=/etc/traefik/traefik_dynamic.yml"
|
||||||
|
- "--providers.file.watch=true"
|
||||||
|
labels:
|
||||||
|
- "traefik.enable=true"
|
||||||
|
- "traefik.http.routers.traefik-dashboard.rule=Host(`traefik.${DEV_URL}`)"
|
||||||
|
- "traefik.http.routers.traefik-dashboard.entrypoints=web"
|
||||||
|
- "traefik.http.routers.traefik-dashboard.service=api@internal"
|
||||||
|
ports:
|
||||||
|
- "80:80"
|
||||||
|
- "443:443"
|
||||||
|
volumes:
|
||||||
|
- /var/run/docker.sock:/var/run/docker.sock:ro
|
||||||
|
- ./traefik/traefik_dynamic.yml:/etc/traefik/traefik_dynamic.yml:ro
|
||||||
|
- ./traefik/logs:/logs
|
||||||
|
networks:
|
||||||
|
- ${EXTERNAL_NETWORK}
|
||||||
|
|
||||||
|
portainer:
|
||||||
|
image: portainer/portainer-ce:latest
|
||||||
|
container_name: portainer
|
||||||
|
restart: always
|
||||||
|
volumes:
|
||||||
|
- /var/run/docker.sock:/var/run/docker.sock
|
||||||
|
- ./portainer:/data
|
||||||
|
labels:
|
||||||
|
- "traefik.enable=true"
|
||||||
|
- "traefik.http.routers.portainer.rule=Host(`portainer.${DEV_URL}`)"
|
||||||
|
- "traefik.http.routers.portainer.entrypoints=web"
|
||||||
|
- "traefik.http.routers.portainer.service=portainer"
|
||||||
|
- "traefik.http.services.portainer.loadbalancer.server.port=9000"
|
||||||
|
networks:
|
||||||
|
- ${EXTERNAL_NETWORK}
|
||||||
|
|
||||||
|
networks:
|
||||||
|
traefiknet:
|
||||||
|
name: ${EXTERNAL_NETWORK}
|
||||||
|
external: true
|
||||||
0
portainer/.gitkeep
Normal file
0
portainer/.gitkeep
Normal file
34
run
Executable file
34
run
Executable file
@@ -0,0 +1,34 @@
|
|||||||
|
#!/bin/zsh
|
||||||
|
|
||||||
|
# Load parameters
|
||||||
|
ACTION=$1
|
||||||
|
ENV_FILE=".env"
|
||||||
|
|
||||||
|
# Check if .env file exists
|
||||||
|
if [[ ! -f $ENV_FILE ]]; then
|
||||||
|
echo "Error: $ENV_FILE file not found!"
|
||||||
|
echo "Please create $ENV_FILE file with the following variables:"
|
||||||
|
echo "DEV_URL=your.domain.com"
|
||||||
|
echo "EXTERNAL_NETWORK=your_network_name"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Load environment variables
|
||||||
|
source $ENV_FILE
|
||||||
|
|
||||||
|
case "$ACTION" in
|
||||||
|
"up")
|
||||||
|
docker network create $EXTERNAL_NETWORK > /dev/null 2>&1 || true
|
||||||
|
docker compose up -d
|
||||||
|
;;
|
||||||
|
"restart")
|
||||||
|
docker compose restart
|
||||||
|
;;
|
||||||
|
"down")
|
||||||
|
docker compose down
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
echo "Usage: $0 [up|restart|down]"
|
||||||
|
exit 1
|
||||||
|
;;
|
||||||
|
esac
|
||||||
0
traefik/logs/.gitkeep
Normal file
0
traefik/logs/.gitkeep
Normal file
0
traefik/traefik_dynamic.yml
Normal file
0
traefik/traefik_dynamic.yml
Normal file
Reference in New Issue
Block a user