feat: initial infra repo
- docker-services: 14 generic compose templates (portainer, npm, vaultwarden, gitea, jotty, nextcloud-aio, rustdesk, audiobookshelf, calibre-web, plex, erugo, jswiki, speedtest, watchtower) - install-scripts: bash scripts for Ubuntu server bootstrap, docker, portainer, npm, backup, restore - ansible: 4 playbooks (bootstrap, deploy-services, update-services, security-hardening) + roles skeleton - hermes-install: Hermes CLI setup on macOS - macos-setup: Brewfile + osx-defaults + fish-config - home-nas-tools: metadata index for NAS projects (no binaries) - docs: architecture, security, contributing - README, LICENSE (MIT), .gitignore
This commit is contained in:
@@ -0,0 +1,98 @@
|
||||
# 📦 Docker Services
|
||||
|
||||
> Generické `docker-compose.yml` šablony pro self-hosted služby.
|
||||
> Každá služba má **vlastní složku**, `.env.example` (šablona) a **README** s dokumentací.
|
||||
|
||||
## 🎯 Jak použít
|
||||
|
||||
```bash
|
||||
# 1. Vyber službu
|
||||
cd services/<service>
|
||||
|
||||
# 2. Vytvoř .env z šablony
|
||||
cp .env.example .env
|
||||
nano .env # nastav POUZE potřebné hodnoty (hesla, cesty)
|
||||
|
||||
# 3. Nasaď
|
||||
docker compose up -d
|
||||
|
||||
# 4. Ověř
|
||||
docker compose ps
|
||||
docker compose logs -f
|
||||
```
|
||||
|
||||
## 📚 Rejstřík služeb
|
||||
|
||||
| Služba | Účel | Port | Image |
|
||||
|---|---|---|---|
|
||||
| [`portainer`](portainer/) | Docker UI management | `9000`, `9443` | `portainer/portainer-ce` |
|
||||
| [`nginx-proxy-manager`](nginx-proxy-manager/) | Reverse proxy + HTTPS | `80`, `443`, `81` | `jc21/nginx-proxy-manager` |
|
||||
| [`vaultwarden`](vaultwarden/) | Správce hesel | `2999` | `vaultwarden/server` |
|
||||
| [`nextcloud-aio`](nextcloud-aio/) | Cloud (soubory, kalendář) | `11000` | `nextcloud/all-in-one` |
|
||||
| [`gitea`](gitea/) | Git server | `3000`, `222` | `gitea/gitea` |
|
||||
| [`jotty`](jotty/) | Poznámky & checklisty | `1122` | `mrx23dotcom/jotty` |
|
||||
| [`rustdesk`](rustdesk/) | Remote desktop | `21115-21119` | `rustdesk/rustdesk-server` |
|
||||
| [`audiobookshelf`](audiobookshelf/) | Audio knihovna | `13378` | `advplyr/audiobookshelf` |
|
||||
| [`calibre-web`](calibre-web/) | E-knihovna | `8083` | `linuxserver/calibre-web` |
|
||||
| [`plex`](plex/) | Media server | `32400` | `linuxserver/plex` |
|
||||
| [`erugo`](erugo/) | File sharing | `61080` | `wardy784/erugo` |
|
||||
| [`jswiki`](jswiki/) | Wiki | `9180` | `linuxserver/wikijs` |
|
||||
| [`speedtest`](speedtest/) | Speedtest tracker | `8072` | `linuxserver/speedtest-tracker` |
|
||||
| [`watchtower`](watchtower/) | Auto-update kontejnerů | – | `containrrr/watchtower` |
|
||||
|
||||
## 🧱 Společné konvence
|
||||
|
||||
Všechny compose soubory v tomto adresáři dodržují:
|
||||
|
||||
- **Porty:** nikdy nepoužívat konfliktní porty s ostatními službami
|
||||
- **Volume:** `./data:/data` (host container, snadná záloha)
|
||||
- **Restart:** `unless-stopped`
|
||||
- **Network:** výchozí `bridge`, případně vlastní `*-net`
|
||||
- **User:** `1000:1000` pro souborový přístup
|
||||
- **Logging:** `json-file` driver, max 10 MB × 3 soubory
|
||||
- **TZ:** `Europe/Prague`
|
||||
- **Environment:** `.env` soubor (šablona `.env.example` v gitu)
|
||||
|
||||
## 🛡 Bezpečnost
|
||||
|
||||
- ✅ **Žádná hesla v `docker-compose.yml`** – vše v `.env` (gitignored)
|
||||
- ✅ **Restart policy** zamezí nechtěnému spuštění po rebootu
|
||||
- ✅ **Networks** – izolované `bridge` pro každou službu
|
||||
- ✅ **Read-only filesystémy** kde to jde (`/etc/timezone`, `/etc/localtime`)
|
||||
|
||||
## 🗂 Struktura
|
||||
|
||||
```
|
||||
docker-services/
|
||||
├── README.md # Tento soubor
|
||||
├── portainer/
|
||||
│ ├── docker-compose.yml
|
||||
│ ├── .env.example
|
||||
│ └── README.md
|
||||
├── nginx-proxy-manager/
|
||||
│ ├── docker-compose.yml
|
||||
│ ├── .env.example
|
||||
│ └── README.md
|
||||
└── ... (další služby)
|
||||
```
|
||||
|
||||
## 🔄 Aktualizace služeb
|
||||
|
||||
```bash
|
||||
# Pomocí Watchtower (auto-update)
|
||||
docker compose pull && docker compose up -d
|
||||
|
||||
# Nebo ručně
|
||||
cd services/<service>
|
||||
docker compose pull
|
||||
docker compose up -d
|
||||
```
|
||||
|
||||
## 📦 Zálohování
|
||||
|
||||
Všechna data jsou v `./data/` uvnitř každé služby. Zálohuj celé adresáře:
|
||||
|
||||
```bash
|
||||
# Pomocí našeho nástroje z install-scripts/
|
||||
sudo bash install-scripts/backup-all.sh
|
||||
```
|
||||
@@ -0,0 +1,4 @@
|
||||
# Audiobookshelf – proměnné
|
||||
TZ=Europe/Prague
|
||||
PUID=1000
|
||||
PGID=1000
|
||||
@@ -0,0 +1,57 @@
|
||||
# Audiobookshelf – audio knihovna
|
||||
|
||||
> Self-hosted audio knihovna. Stream audioknih, podcastů. Sledování pokroku.
|
||||
|
||||
## 📋 Přehled
|
||||
|
||||
- **Image:** `advplyr/audiobookshelf:latest`
|
||||
- **Port:** `13378` (web)
|
||||
- **User:** `1000:1000`
|
||||
- **Network:** `bridge`
|
||||
|
||||
## 🚀 Instalace
|
||||
|
||||
```bash
|
||||
cp .env.example .env
|
||||
docker compose up -d
|
||||
```
|
||||
|
||||
## 🌐 Přístup
|
||||
|
||||
- **Web:** `http://<server>:13378`
|
||||
- **Mobile app:** vyhledej "Audiobookshelf" v App Store/Google Play
|
||||
|
||||
## 🎯 Funkce
|
||||
|
||||
- **Audioknihy** – upload (mp3, m4b, m4a, flac, …)
|
||||
- **Podcasty** – RSS subscribe
|
||||
- **Progress tracking** – synchronizace mezi zařízeními
|
||||
- **Multi-user** – každý má svou knihovnu
|
||||
- **Transkripce** – vyhledávání v textu (s AI)
|
||||
- **OPDS** – kompatibilní s jinými čtečkami
|
||||
|
||||
## 📁 Volumes
|
||||
|
||||
| Mount | Účel |
|
||||
|---|---|
|
||||
| `./data:/data` | Databáze, config, cache |
|
||||
| `./audiobooks:/audiobooks` | Tvoje knihovna (readonly) |
|
||||
| `./podcasts:/podcasts` | Auto-download podcasty |
|
||||
|
||||
## 🔐 Bezpečnost
|
||||
|
||||
- **2FA** – pro admin účet
|
||||
- **HTTPS** – terminuj v NPM
|
||||
- **Auth proxy** – integrovaný (OIDC)
|
||||
|
||||
## 🔄 Aktualizace
|
||||
|
||||
```bash
|
||||
docker compose pull
|
||||
docker compose up -d
|
||||
```
|
||||
|
||||
## 📚 Dokumentace
|
||||
|
||||
- [Audiobookshelf](https://www.audiobookshelf.org/)
|
||||
- [GitHub](https://github.com/advplyr/audiobookshelf)
|
||||
@@ -0,0 +1,29 @@
|
||||
# Audiobookshelf – audio knihovna
|
||||
|
||||
services:
|
||||
audiobookshelf:
|
||||
image: advplyr/audiobookshelf:latest
|
||||
container_name: audiobookshelf
|
||||
restart: unless-stopped
|
||||
ports:
|
||||
- "13378:80"
|
||||
volumes:
|
||||
- ./data:/data
|
||||
- ./audiobooks:/audiobooks
|
||||
- ./podcasts:/podcasts
|
||||
environment:
|
||||
- PUID=1000
|
||||
- PGID=1000
|
||||
- TZ=Europe/Prague
|
||||
networks:
|
||||
- audiobookshelf_net
|
||||
logging:
|
||||
driver: json-file
|
||||
options:
|
||||
max-size: "10m"
|
||||
max-file: "3"
|
||||
|
||||
networks:
|
||||
audiobookshelf_net:
|
||||
name: audiobookshelf_default
|
||||
driver: bridge
|
||||
@@ -0,0 +1,4 @@
|
||||
# Calibre-Web – proměnné
|
||||
TZ=Europe/Prague
|
||||
PUID=1000
|
||||
PGID=1000
|
||||
@@ -0,0 +1,53 @@
|
||||
# Calibre-Web – e-knihovna
|
||||
|
||||
> Web čtečka e-knihoven. Calibre metadata, OPDS, Kindle send.
|
||||
|
||||
## 📋 Přehled
|
||||
|
||||
- **Image:** `linuxserver/calibre-web:latest`
|
||||
- **Port:** `8083` (web)
|
||||
- **User:** `1000:1000`
|
||||
- **Network:** `bridge`
|
||||
|
||||
## 🚀 Instalace
|
||||
|
||||
```bash
|
||||
cp .env.example .env
|
||||
docker compose up -d
|
||||
```
|
||||
|
||||
Pak v prohlížeči otevři `http://<server>:8083` a dokonči setup (admin účet, cesta ke knihovně).
|
||||
|
||||
## 🎯 Funkce
|
||||
|
||||
- **Čtení online** – v prohlížeči, EPUB/PDF
|
||||
- **Send to Kindle** – email na Kindle
|
||||
- **OPDS** – kompatibilní s jinými čtečkami
|
||||
- **Multi-user** – s admin/user oprávněními
|
||||
- **Metadata** – z Goodreads, Google Books
|
||||
- **Tagy, série, autoři** – plná Calibre metadata
|
||||
|
||||
## 📁 Volumes
|
||||
|
||||
| Mount | Účel |
|
||||
|---|---|
|
||||
| `./data:/config` | Calibre-Web konfigurace, DB |
|
||||
| `./books:/books` | Tvoje knihovna (knihy) |
|
||||
|
||||
## 🔐 Bezpečnost
|
||||
|
||||
- **Admin heslo** – silné
|
||||
- **HTTPS** – terminuj v NPM
|
||||
- **Magic link** – email login (vyžaduje SMTP)
|
||||
|
||||
## 🔄 Aktualizace
|
||||
|
||||
```bash
|
||||
docker compose pull
|
||||
docker compose up -d
|
||||
```
|
||||
|
||||
## 📚 Dokumentace
|
||||
|
||||
- [Calibre-Web GitHub](https://github.com/janeczku/calibre-web)
|
||||
- [LinuxServer.io](https://docs.linuxserver.io/images/docker-calibre-web)
|
||||
@@ -0,0 +1,30 @@
|
||||
# Calibre-Web – e-knihovna
|
||||
|
||||
services:
|
||||
calibre-web:
|
||||
image: lscr.io/linuxserver/calibre-web:latest
|
||||
container_name: calibre-web
|
||||
restart: unless-stopped
|
||||
ports:
|
||||
- "8083:8083"
|
||||
volumes:
|
||||
- ./data:/config
|
||||
- ./books:/books
|
||||
environment:
|
||||
- PUID=1000
|
||||
- PGID=1000
|
||||
- TZ=Europe/Prague
|
||||
- DOCKER_MODS=linuxserver/mods:universal-calibre
|
||||
- OAUTHLIB_RELAX_TOKEN_SCOPE=1
|
||||
networks:
|
||||
- calibre-web_net
|
||||
logging:
|
||||
driver: json-file
|
||||
options:
|
||||
max-size: "10m"
|
||||
max-file: "3"
|
||||
|
||||
networks:
|
||||
calibre-web_net:
|
||||
name: calibre-web_default
|
||||
driver: bridge
|
||||
@@ -0,0 +1,4 @@
|
||||
# Erugo – proměnné
|
||||
TZ=Europe/Prague
|
||||
PUID=1000
|
||||
PGID=1000
|
||||
@@ -0,0 +1,43 @@
|
||||
# Erugo – file sharing
|
||||
|
||||
> Jednoduché sdílení souborů s heslem a expirací.
|
||||
|
||||
## 📋 Přehled
|
||||
|
||||
- **Image:** `wardy784/erugo:latest`
|
||||
- **Port:** `61080` (web)
|
||||
- **User:** `1000:1000`
|
||||
- **Network:** `bridge`
|
||||
|
||||
## 🚀 Instalace
|
||||
|
||||
```bash
|
||||
cp .env.example .env
|
||||
docker compose up -d
|
||||
```
|
||||
|
||||
## 🌐 Přístup
|
||||
|
||||
- **Web:** `http://<server>:61080`
|
||||
|
||||
## 🎯 Funkce
|
||||
|
||||
- **Upload** – drag & drop souborů
|
||||
- **Heslo** – volitelné pro každý upload
|
||||
- **Expirace** – automatické mazání po X dnech
|
||||
- **Linky** – sdílitelné
|
||||
- **API** – pro integraci
|
||||
|
||||
## 📁 Volumes
|
||||
|
||||
| Mount | Účel |
|
||||
|---|---|
|
||||
| `./data:/uploads` | Uložené soubory |
|
||||
| `./db:/db` | SQLite databáze |
|
||||
|
||||
## 🔄 Aktualizace
|
||||
|
||||
```bash
|
||||
docker compose pull
|
||||
docker compose up -d
|
||||
```
|
||||
@@ -0,0 +1,28 @@
|
||||
# Erugo – file sharing
|
||||
|
||||
services:
|
||||
erugo:
|
||||
image: wardy784/erugo:latest
|
||||
container_name: erugo
|
||||
restart: unless-stopped
|
||||
ports:
|
||||
- "61080:80"
|
||||
volumes:
|
||||
- ./data:/uploads
|
||||
- ./db:/db
|
||||
environment:
|
||||
- PUID=1000
|
||||
- PGID=1000
|
||||
- TZ=Europe/Prague
|
||||
networks:
|
||||
- erugo_net
|
||||
logging:
|
||||
driver: json-file
|
||||
options:
|
||||
max-size: "10m"
|
||||
max-file: "3"
|
||||
|
||||
networks:
|
||||
erugo_net:
|
||||
name: erugo_default
|
||||
driver: bridge
|
||||
@@ -0,0 +1,11 @@
|
||||
# Gitea – proměnné prostředí
|
||||
USER_UID=1000
|
||||
USER_GID=1000
|
||||
TZ=Europe/Prague
|
||||
|
||||
# Po prvním adminovi nastav na false
|
||||
GITEA__service__DISABLE_REGISTRATION=false
|
||||
GITEA__service__REQUIRE_SIGNIN_VIEW=false
|
||||
|
||||
# HTTPS terminuje NPM, takže false
|
||||
GITEA__session__COOKIE_SECURE=false
|
||||
@@ -0,0 +1,70 @@
|
||||
# Gitea – self-hosted Git
|
||||
|
||||
> Lehký Git server (alternativa k GitLabu). Web UI, API, SSH.
|
||||
|
||||
## 📋 Přehled
|
||||
|
||||
- **Image:** `docker.gitea.com/gitea:1.27.1`
|
||||
- **Porty:** `3000` (web), `222` (SSH)
|
||||
- **User:** `1000:1000`
|
||||
- **Network:** `bridge`
|
||||
|
||||
## 🚀 Instalace
|
||||
|
||||
```bash
|
||||
cp .env.example .env
|
||||
nano .env
|
||||
|
||||
docker compose up -d
|
||||
```
|
||||
|
||||
Po startu otevři `http://<server>:3000/` a dokonči install wizard:
|
||||
|
||||
1. **Database:** SQLite3 (default)
|
||||
2. **Site Title:** libovolný
|
||||
3. **Admin Username:** `admin` (nebo `mates`)
|
||||
4. **Admin Password:** silné heslo
|
||||
5. **Admin Email:** tvůj email
|
||||
6. Ostatní default
|
||||
7. **Install Gitea**
|
||||
|
||||
## 🌐 Přístup
|
||||
|
||||
- **Web:** `http://<server>:3000` (za HTTPS terminuj v NPM)
|
||||
- **SSH git push:** `ssh://git@<server>:222/<user>/<repo>.git`
|
||||
- **API:** `http://<server>:3000/api/v1/`
|
||||
|
||||
## 🔐 Bezpečnost
|
||||
|
||||
- **Změň admin heslo** hned po instalaci
|
||||
- **DISABLE_REGISTRATION=false** – po registraci prvního admina vypni
|
||||
- **HTTPS** – terminuj v NPM a přesměruj HTTP→HTTPS
|
||||
- **2FA** – aktivuj pro admin účet
|
||||
|
||||
## 🔑 API Token
|
||||
|
||||
Vytvoření tokenu pro skripty:
|
||||
|
||||
1. User Settings → Applications
|
||||
2. Název: `<script-name>`
|
||||
3. Scopes: `read:user`, `write:user`, `read:repository`, `write:repository`
|
||||
4. **Token ulož do keychainu**, ne do chatu
|
||||
|
||||
## 🔄 Aktualizace
|
||||
|
||||
```bash
|
||||
docker compose pull
|
||||
docker compose up -d
|
||||
# DB migrace probíhá automaticky
|
||||
```
|
||||
|
||||
## 📁 Volumes
|
||||
|
||||
| Mount | Účel |
|
||||
|---|---|
|
||||
| `./gitea:/data` | Repozitáře, DB, konfigurace, hooks |
|
||||
|
||||
## 📚 Dokumentace
|
||||
|
||||
- [Gitea Docker install](https://docs.gitea.com/installation/install-with-docker/)
|
||||
- [Gitea API](https://docs.gitea.com/api/)
|
||||
@@ -0,0 +1,39 @@
|
||||
# Gitea – self-hosted Git server
|
||||
|
||||
services:
|
||||
server:
|
||||
image: docker.gitea.com/gitea:1.27.1
|
||||
container_name: gitea
|
||||
environment:
|
||||
- USER_UID=1000
|
||||
- USER_GID=1000
|
||||
- GITEA__webhook__SKIP_TLS_VERIFY=false
|
||||
- GITEA__service__DISABLE_REGISTRATION=false
|
||||
- GITEA__service__REQUIRE_SIGNIN_VIEW=false
|
||||
- GITEA__session__COOKIE_SECURE=false
|
||||
restart: unless-stopped
|
||||
networks:
|
||||
- gitea_net
|
||||
volumes:
|
||||
- ./gitea:/data
|
||||
- /etc/timezone:/etc/timezone:ro
|
||||
- /etc/localtime:/etc/localtime:ro
|
||||
ports:
|
||||
- "3000:3000"
|
||||
- "222:22"
|
||||
healthcheck:
|
||||
test: ["CMD", "curl", "-f", "http://localhost:3000/api/health"]
|
||||
interval: 30s
|
||||
timeout: 10s
|
||||
retries: 3
|
||||
start_period: 30s
|
||||
logging:
|
||||
driver: json-file
|
||||
options:
|
||||
max-size: "10m"
|
||||
max-file: "3"
|
||||
|
||||
networks:
|
||||
gitea_net:
|
||||
name: gitea_default
|
||||
driver: bridge
|
||||
@@ -0,0 +1,4 @@
|
||||
# Jotty – proměnné prostředí
|
||||
TZ=Europe/Prague
|
||||
PUID=1000
|
||||
PGID=1000
|
||||
@@ -0,0 +1,59 @@
|
||||
# Jotty – poznámky a checklisty
|
||||
|
||||
> Self-hosted alternativa k Obsidian. Markdown poznámky, checklisty, kategorie.
|
||||
|
||||
## 📋 Přehled
|
||||
|
||||
- **Image:** `mrx23dotcom/jotty:latest`
|
||||
- **Port:** `1122` (web)
|
||||
- **User:** `1000:1000`
|
||||
- **Network:** `bridge`
|
||||
|
||||
## 🚀 Instalace
|
||||
|
||||
```bash
|
||||
cp .env.example .env
|
||||
nano .env
|
||||
|
||||
docker compose up -d
|
||||
```
|
||||
|
||||
## 🌐 Přístup
|
||||
|
||||
- **Web:** `http://<server>:1122` (za HTTPS terminuj v NPM)
|
||||
- **První registrace:** Setup wizard na hlavní stránce
|
||||
|
||||
## 🎯 Použití
|
||||
|
||||
- **Poznámky** – markdown, interní linky `@note-id`, tagy `#tag`
|
||||
- **Checklisty** – task management
|
||||
- **Kategorie** – organizace
|
||||
- **TipTap editor** – WYSIWYG nebo markdown
|
||||
- **API** – REST API s API klíčem pro integraci
|
||||
|
||||
## 🔐 Bezpečnost
|
||||
|
||||
- **API klíč** – generuj v Admin → API
|
||||
- **2FA** – pro admin účet
|
||||
- **HTTPS** – terminuj v NPM
|
||||
- **Registry** – vypni po registraci
|
||||
|
||||
## 🔄 Aktualizace
|
||||
|
||||
```bash
|
||||
docker compose pull
|
||||
docker compose up -d
|
||||
# Data zůstávají v ./data/notes/
|
||||
```
|
||||
|
||||
## 📁 Volumes
|
||||
|
||||
| Mount | Účel |
|
||||
|---|---|
|
||||
| `./data:/app/data` | Poznámky, checklisty, databáze |
|
||||
| `./config:/app/config` | Konfigurace, themes, custom emojis |
|
||||
|
||||
## 📚 Dokumentace
|
||||
|
||||
- [Jotty GitHub](https://github.com/mrx23dotcom/jotty)
|
||||
- [Jotty API](https://github.com/mrx23dotcom/jotty/blob/main/howto/API.md)
|
||||
@@ -0,0 +1,35 @@
|
||||
# Jotty – poznámky a checklisty
|
||||
|
||||
services:
|
||||
jotty:
|
||||
image: mrx23dotcom/jotty:latest
|
||||
container_name: jotty
|
||||
environment:
|
||||
- PUID=1000
|
||||
- PGID=1000
|
||||
- TZ=Europe/Prague
|
||||
restart: unless-stopped
|
||||
networks:
|
||||
- jotty_net
|
||||
volumes:
|
||||
- ./data:/app/data
|
||||
- ./config:/app/config
|
||||
- ./cache:/app/.next/cache
|
||||
ports:
|
||||
- "1122:3000"
|
||||
healthcheck:
|
||||
test: ["CMD", "curl", "-f", "http://localhost:3000/api/health"]
|
||||
interval: 30s
|
||||
timeout: 10s
|
||||
retries: 3
|
||||
start_period: 60s
|
||||
logging:
|
||||
driver: json-file
|
||||
options:
|
||||
max-size: "10m"
|
||||
max-file: "3"
|
||||
|
||||
networks:
|
||||
jotty_net:
|
||||
name: jotty_default
|
||||
driver: bridge
|
||||
@@ -0,0 +1,9 @@
|
||||
# Wiki.js – proměnné
|
||||
TZ=Europe/Prague
|
||||
PUID=1000
|
||||
PGID=1000
|
||||
|
||||
# MariaDB hesla (ZMĚŇ!)
|
||||
MYSQL_ROOT_PASSWORD=change-me-strong
|
||||
MYSQL_PASSWORD=change-me-strong
|
||||
WIKIJS_DB_PASS=change-me-strong
|
||||
@@ -0,0 +1,54 @@
|
||||
# Wiki.js – wiki
|
||||
|
||||
> Nejvýkonnější open-source wiki. Markdown, WYSIWYG, DB, fulltext.
|
||||
|
||||
## 📋 Přehled
|
||||
|
||||
- **Image:** `linuxserver/wikijs:latest`
|
||||
- **Port:** `9180` (web)
|
||||
- **User:** `1000:1000`
|
||||
- **DB:** PostgreSQL/SQLite (zde SQLite pro jednoduchost)
|
||||
- **Network:** `bridge`
|
||||
|
||||
## 🚀 Instalace
|
||||
|
||||
```bash
|
||||
cp .env.example .env
|
||||
docker compose up -d
|
||||
```
|
||||
|
||||
Pak `http://<server>:9180` – setup wizard.
|
||||
|
||||
## 🎯 Funkce
|
||||
|
||||
- **Editor** – WYSIWYG (TinyMCE), Markdown, AsciiDoc
|
||||
- **Verzování** – každá stránka má historii
|
||||
- **Permissions** – skupiny, ACL
|
||||
- **Search** – fulltext
|
||||
- **Multi-language**
|
||||
- **GraphQL API** – pro integrace
|
||||
|
||||
## 📁 Volumes
|
||||
|
||||
| Mount | Účel |
|
||||
|---|---|
|
||||
| `./data:/config` | Wiki.js data, DB, config |
|
||||
| `./db:/db` | SQLite databáze |
|
||||
|
||||
## 🔐 Bezpečnost
|
||||
|
||||
- **Local auth** – nebo LDAP/OAuth
|
||||
- **HTTPS** – terminuj v NPM
|
||||
- **Rate limiting** – default zapnutý
|
||||
|
||||
## 🔄 Aktualizace
|
||||
|
||||
```bash
|
||||
docker compose pull
|
||||
docker compose up -d
|
||||
```
|
||||
|
||||
## 📚 Dokumentace
|
||||
|
||||
- [Wiki.js](https://wiki.js.org/)
|
||||
- [GitHub](https://github.com/requarks/wiki)
|
||||
@@ -0,0 +1,57 @@
|
||||
# Wiki.js
|
||||
|
||||
services:
|
||||
db:
|
||||
image: linuxserver/mariadb:latest
|
||||
container_name: jswiki_db
|
||||
restart: unless-stopped
|
||||
volumes:
|
||||
- ./db:/config
|
||||
environment:
|
||||
- PUID=1000
|
||||
- PGID=1000
|
||||
- TZ=Europe/Prague
|
||||
- MYSQL_ROOT_PASSWORD=CHANGE_ME_STRONG
|
||||
- MYSQL_DATABASE=wiki
|
||||
- MYSQL_USER=wiki
|
||||
- MYSQL_PASSWORD=CHANGE_ME_STRONG
|
||||
networks:
|
||||
- jswiki_net
|
||||
logging:
|
||||
driver: json-file
|
||||
options:
|
||||
max-size: "10m"
|
||||
max-file: "3"
|
||||
|
||||
wikijs:
|
||||
image: lscr.io/linuxserver/wikijs:latest
|
||||
container_name: wikijs
|
||||
restart: unless-stopped
|
||||
depends_on:
|
||||
- db
|
||||
ports:
|
||||
- "9180:3000"
|
||||
volumes:
|
||||
- ./data:/config
|
||||
environment:
|
||||
- PUID=1000
|
||||
- PGID=1000
|
||||
- TZ=Europe/Prague
|
||||
- WIKIJS_DB_TYPE=mariadb
|
||||
- WIKIJS_DB_HOST=db
|
||||
- WIKIJS_DB_PORT=3306
|
||||
- WIKIJS_DB_USER=wiki
|
||||
- WIKIJS_DB_PASS=CHANGE_ME_STRONG
|
||||
- WIKIJS_DB_NAME=wiki
|
||||
networks:
|
||||
- jswiki_net
|
||||
logging:
|
||||
driver: json-file
|
||||
options:
|
||||
max-size: "10m"
|
||||
max-file: "3"
|
||||
|
||||
networks:
|
||||
jswiki_net:
|
||||
name: jswiki_default
|
||||
driver: bridge
|
||||
@@ -0,0 +1,19 @@
|
||||
# Nextcloud AIO – proměnné prostředí
|
||||
TZ=Europe/Prague
|
||||
PUID=1000
|
||||
PGID=1000
|
||||
|
||||
# Web port (default 11000)
|
||||
APACHE_PORT=11000
|
||||
|
||||
# Data na hostu (NE containeru)
|
||||
NEXTCLOUD_DATADIR=/mnt/data
|
||||
|
||||
# Extra balíky (ImageMagick pro OCR, atd.)
|
||||
NEXTCLOUD_ADDITIONAL_APKS=imagemagick
|
||||
|
||||
# Upload limit
|
||||
NEXTCLOUD_UPLOAD_LIMIT=10G
|
||||
|
||||
# Důvěryhodné certifikáty (firemní CA, Cloudflare Origin)
|
||||
# NEXTCLOUD_TRUSTED_CACERTS_DIR=/usr/local/share/ca-certificates
|
||||
@@ -0,0 +1,64 @@
|
||||
# Nextcloud AIO – vše v jednom
|
||||
|
||||
> All-in-One Nextcloud: soubory, kalendář, kontakty, fotky, videohovory.
|
||||
|
||||
## 📋 Přehled
|
||||
|
||||
- **Image:** `nextcloud/all-in-one:latest`
|
||||
- **Porty:** `11000` (admin), další interně
|
||||
- **User:** `1000:1000`
|
||||
- **Network:** `bridge` + `nextcloud-aio` (interní)
|
||||
|
||||
## 🚀 Instalace
|
||||
|
||||
```bash
|
||||
cp .env.example .env
|
||||
nano .env # nastavit APACHE_PORT, NEXTCLOUD_DATADIR, NEXTCLOUD_ADDITIONAL_APKS
|
||||
|
||||
docker compose up -d
|
||||
```
|
||||
|
||||
Pak otevři `http://<server>:11000/` a dokonči instalaci.
|
||||
|
||||
## 🌐 Přístup
|
||||
|
||||
- **Admin:** `http://<server>:11000`
|
||||
- **Nextcloud:** `http://<server>:11000` (nebo za reverse proxy)
|
||||
- **Doporučení:** terminuj HTTPS přes NPM
|
||||
|
||||
## 🔧 Pokročilé nastavení
|
||||
|
||||
- **Cloudflare Tunnel** – pro vzdálený přístup bez veřejné IP
|
||||
- **Talk (videohovory)** – v AIO default
|
||||
- **Imaginary (AI)** – rozpoznávání obrázků
|
||||
- **Fulltextsearch** – indexování souborů
|
||||
- **Whiteboard** – collaborative kreslení
|
||||
- **Borg backup** – integrované zálohování
|
||||
|
||||
## 🔐 Bezpečnost
|
||||
|
||||
- **HTTPS terminuj v NPM** (Let's Encrypt)
|
||||
- **2FA** – povinně pro admin
|
||||
- **Brute force protection** – default zapnutý
|
||||
- **Trusted domains** – nastav `NEXTCLOUD_TRUSTED_DOMAINS`
|
||||
- **Backup** – AIO Borg nebo externí rsync
|
||||
|
||||
## 🔄 Aktualizace
|
||||
|
||||
```bash
|
||||
docker compose pull
|
||||
docker compose up -d
|
||||
# AIO auto-updates Nextcloud a všechny sub-containery
|
||||
```
|
||||
|
||||
## 📁 Volumes
|
||||
|
||||
| Mount | Účel |
|
||||
|---|---|
|
||||
| `./nextcloud_aio_mastercontainer:/mnt/docker-aio-config` | AIO master data |
|
||||
| `./data:/mnt/data` | Nextcloud data (files, DB) |
|
||||
|
||||
## 📚 Dokumentace
|
||||
|
||||
- [Nextcloud AIO](https://github.com/nextcloud/all-in-one)
|
||||
- [Nextcloud Admin Manual](https://docs.nextcloud.com/server/latest/admin_manual/)
|
||||
@@ -0,0 +1,40 @@
|
||||
# Nextcloud All-in-One
|
||||
|
||||
services:
|
||||
nextcloud-aio-mastercontainer:
|
||||
image: nextcloud/all-in-one:latest
|
||||
container_name: nextcloud-aio-mastercontainer
|
||||
restart: unless-stopped
|
||||
init: true
|
||||
ports:
|
||||
- "11000:8080"
|
||||
volumes:
|
||||
- ./nextcloud_aio_mastercontainer:/mnt/docker-aio-config
|
||||
- ./data:/mnt/data
|
||||
environment:
|
||||
- PUID=1000
|
||||
- PGID=1000
|
||||
- TZ=Europe/Prague
|
||||
- APACHE_PORT=11000
|
||||
- NEXTCLOUD_DATADIR=/mnt/data
|
||||
- NEXTCLOUD_ADDITIONAL_APKS=imagemagick
|
||||
- NEXTCLOUD_TRUSTED_CACERTS_DIR=/usr/local/share/ca-certificates
|
||||
- NEXTCLOUD_UPLOAD_LIMIT=10G
|
||||
networks:
|
||||
- nextcloud_net
|
||||
healthcheck:
|
||||
test: ["CMD", "curl", "-f", "http://localhost:8080"]
|
||||
interval: 60s
|
||||
timeout: 10s
|
||||
retries: 5
|
||||
start_period: 120s
|
||||
logging:
|
||||
driver: json-file
|
||||
options:
|
||||
max-size: "10m"
|
||||
max-file: "3"
|
||||
|
||||
networks:
|
||||
nextcloud_net:
|
||||
name: nextcloud_default
|
||||
driver: bridge
|
||||
@@ -0,0 +1,8 @@
|
||||
# NPM – proměnné prostředí
|
||||
TZ=Europe/Prague
|
||||
PUID=1000
|
||||
PGID=1000
|
||||
DISABLE_IPV6=true
|
||||
|
||||
# MariaDB heslo pro NPM backend (ZMĚŇ!)
|
||||
MYSQL_ROOT_PASSWORD=change-me-strong-password
|
||||
@@ -0,0 +1,62 @@
|
||||
# Nginx Proxy Manager
|
||||
|
||||
> Reverzní proxy s HTTPS (Let's Encrypt), web UI, ACL.
|
||||
|
||||
## 📋 Přehled
|
||||
|
||||
- **Image:** `jc21/nginx-proxy-manager:latest`
|
||||
- **Porty:** `80`, `443`, `81` (admin UI)
|
||||
- **User:** `1000:1000`
|
||||
- **Network:** `bridge`
|
||||
|
||||
## 🚀 Instalace
|
||||
|
||||
```bash
|
||||
cp .env.example .env
|
||||
nano .env
|
||||
|
||||
docker compose up -d
|
||||
```
|
||||
|
||||
## 🌐 Přístup
|
||||
|
||||
- **Admin UI:** `http://<server>:81` (default `admin@example.com` / `changeme`)
|
||||
- **Změň heslo hned po prvním přihlášení!**
|
||||
|
||||
## 🔒 HTTPS
|
||||
|
||||
NPM umí automaticky generovat Let's Encrypt certifikáty:
|
||||
|
||||
1. **DNS A záznam** domény → server IP
|
||||
2. NPM UI → Proxy Hosts → Add Proxy Host
|
||||
3. Domain Names: `service.example.com`
|
||||
4. Scheme: `http`, Forward: `<server>:PORT`
|
||||
5. Záložka **SSL:** Request SSL Certificate, Let's Encrypt
|
||||
6. Force SSL, HTTP/2, HSTS – vše zapnout
|
||||
|
||||
## 🔧 Pokročilé
|
||||
|
||||
- **Cloudflare DNS-01 challenge** – pro wildcard certifikáty
|
||||
- **Access Lists** – whitelist IP pro citlivé služby
|
||||
- **Redirection** – 301/302 přesměrování
|
||||
- **Streams** – TCP/UDP proxy (SSH, databáze)
|
||||
|
||||
## 📁 Volumes
|
||||
|
||||
| Mount | Účel |
|
||||
|---|---|
|
||||
| `./data:/data` | NPM data, certifikáty, konfigurace |
|
||||
| `./letsencrypt:/etc/letsencrypt` | Let's Encrypt certifikáty |
|
||||
|
||||
## 🔄 Aktualizace
|
||||
|
||||
```bash
|
||||
docker compose pull
|
||||
docker compose up -d
|
||||
# Certifikáty zůstávají v ./letsencrypt/
|
||||
```
|
||||
|
||||
## 📚 Dokumentace
|
||||
|
||||
- [NPM oficiální dokumentace](https://nginxproxymanager.com/docs/)
|
||||
- [Let's Encrypt s NPM](https://nginxproxymanager.com/advanced-config/#ssl-certificates)
|
||||
@@ -0,0 +1,57 @@
|
||||
# Nginx Proxy Manager
|
||||
|
||||
services:
|
||||
nginx-proxy-manager:
|
||||
image: jc21/nginx-proxy-manager:latest
|
||||
container_name: nginx-proxy-manager
|
||||
restart: unless-stopped
|
||||
ports:
|
||||
- "80:80"
|
||||
- "443:443"
|
||||
- "81:81"
|
||||
volumes:
|
||||
- ./data:/data
|
||||
- ./letsencrypt:/etc/letsencrypt
|
||||
environment:
|
||||
- PUID=1000
|
||||
- PGID=1000
|
||||
- TZ=Europe/Prague
|
||||
- DISABLE_IPV6=true
|
||||
networks:
|
||||
- npm_net
|
||||
healthcheck:
|
||||
test: ["CMD", "curl", "-f", "http://localhost:81"]
|
||||
interval: 30s
|
||||
timeout: 10s
|
||||
retries: 3
|
||||
start_period: 30s
|
||||
logging:
|
||||
driver: json-file
|
||||
options:
|
||||
max-size: "10m"
|
||||
max-file: "3"
|
||||
|
||||
# NPM vyžaduje vlastní MariaDB backend
|
||||
db:
|
||||
image: jc21/mariadb-aria:latest
|
||||
container_name: npm_db
|
||||
restart: unless-stopped
|
||||
volumes:
|
||||
- ./mysql:/var/lib/mysql
|
||||
environment:
|
||||
- PUID=1000
|
||||
- PGID=1000
|
||||
- TZ=Europe/Prague
|
||||
- MYSQL_ROOT_PASSWORD=CHANGE_ME
|
||||
networks:
|
||||
- npm_net
|
||||
logging:
|
||||
driver: json-file
|
||||
options:
|
||||
max-size: "10m"
|
||||
max-file: "3"
|
||||
|
||||
networks:
|
||||
npm_net:
|
||||
name: nginx_proxy_manager_default
|
||||
driver: bridge
|
||||
@@ -0,0 +1,8 @@
|
||||
# Plex – proměnné
|
||||
TZ=Europe/Prague
|
||||
PUID=1000
|
||||
PGID=1000
|
||||
|
||||
# HW akcelerace (vyber podle sveho GPU)
|
||||
# NVIDIA_VISIBLE_DEVICES=all
|
||||
# INTEL_VISIBLE_DEVICES=true
|
||||
@@ -0,0 +1,58 @@
|
||||
# Plex – media server
|
||||
|
||||
> Stream filmů, seriálů, hudby, fotek. HW transkódování.
|
||||
|
||||
## 📋 Přehled
|
||||
|
||||
- **Image:** `linuxserver/plex:latest`
|
||||
- **Porty:** `32400` (web), `1900` (DLNA), `5353` (Bonjour), `8324` (plex.tv)
|
||||
- **User:** `1000:1000`
|
||||
- **Network:** `host` (doporučeno) – kvůli HW transkódování
|
||||
|
||||
## 🚀 Instalace
|
||||
|
||||
```bash
|
||||
cp .env.example .env
|
||||
docker compose up -d
|
||||
```
|
||||
|
||||
Pak `http://<server>:32400/web` – setup wizard.
|
||||
|
||||
## 🎯 Funkce
|
||||
|
||||
- **Hardware transkódování** – Intel/AMD/NVIDIA GPU akcelerace
|
||||
- **Plex Pass** – Live TV, DVR, HW encoding (placené)
|
||||
- **Mobile app** – iOS/Android/Apple TV
|
||||
- **Plex.tv** – vzdálený přístup
|
||||
- **Share** – s přáteli
|
||||
|
||||
## 📁 Volumes
|
||||
|
||||
| Mount | Účel |
|
||||
|---|---|
|
||||
| `./data:/config` | Plex konfigurace, DB |
|
||||
| `./media:/media` | Tvoje knihovna (filmy, seriály, hudba) |
|
||||
|
||||
## 🔧 HW transkódování
|
||||
|
||||
V `.env` nastavit:
|
||||
- `NVIDIA_VISIBLE_DEVICES=all` – pro NVIDIA
|
||||
- `INTEL_VISIBLE_DEVICES=true` – pro Intel QuickSync
|
||||
|
||||
## 🔐 Bezpečnost
|
||||
|
||||
- **HTTPS** – terminuj v NPM
|
||||
- **Plex.tv účet** – nepoužívej guest účet
|
||||
- **Network discovery** – vypni pokud nepotřebuješ
|
||||
|
||||
## 🔄 Aktualizace
|
||||
|
||||
```bash
|
||||
docker compose pull
|
||||
docker compose up -d
|
||||
```
|
||||
|
||||
## 📚 Dokumentace
|
||||
|
||||
- [Plex Support](https://support.plex.tv/)
|
||||
- [Plex Media Server](https://www.plex.tv/media-server-downloads/)
|
||||
@@ -0,0 +1,22 @@
|
||||
# Plex Media Server
|
||||
|
||||
services:
|
||||
plex:
|
||||
image: lscr.io/linuxserver/plex:latest
|
||||
container_name: plex
|
||||
restart: unless-stopped
|
||||
network_mode: host # Pro HW transkódování a DLNA
|
||||
volumes:
|
||||
- ./data:/config
|
||||
- ./media:/media
|
||||
environment:
|
||||
- PUID=1000
|
||||
- PGID=1000
|
||||
- TZ=Europe/Prague
|
||||
- VERSION=docker
|
||||
- NVIDIA_VISIBLE_DEVICES=all
|
||||
logging:
|
||||
driver: json-file
|
||||
options:
|
||||
max-size: "10m"
|
||||
max-file: "3"
|
||||
@@ -0,0 +1,9 @@
|
||||
# Portainer CE – proměnné prostředí
|
||||
# Zkopíruj tento soubor na .env a doplň skutečné hodnoty
|
||||
|
||||
# Timezone
|
||||
TZ=Europe/Prague
|
||||
|
||||
# UID/GID pro file ownership
|
||||
PUID=1000
|
||||
PGID=1000
|
||||
@@ -0,0 +1,67 @@
|
||||
# Portainer – Docker UI management
|
||||
|
||||
> Webové UI pro správu Dockeru (kontejnery, image, sítě, volumes, swarm, kubernetes).
|
||||
|
||||
## 📋 Přehled
|
||||
|
||||
- **Image:** `portainer/portainer-ce:latest`
|
||||
- **Porty:** `9000` (HTTP), `9443` (HTTPS)
|
||||
- **User:** `1000:1000`
|
||||
- **Network:** `bridge` (default)
|
||||
|
||||
## 🚀 Instalace
|
||||
|
||||
```bash
|
||||
cp .env.example .env
|
||||
nano .env # nastavit SECRET, PUID, PGID
|
||||
|
||||
docker compose up -d
|
||||
```
|
||||
|
||||
## 🌐 Přístup
|
||||
|
||||
- **HTTP:** `http://<server>:9000`
|
||||
- **HTTPS:** `https://<server>:9443` (self-signed, akceptuj varování)
|
||||
|
||||
**První přihlášení:**
|
||||
1. Vytvoř admin účet (zobrazí se při prvním přístupu)
|
||||
2. Připoj se k lokálnímu Docker endpointu
|
||||
3. Spravuj kontejnery přes web UI
|
||||
|
||||
## 📁 Volumes
|
||||
|
||||
| Mount | Účel |
|
||||
|---|---|
|
||||
| `./data:/data` | Portainer data (DB, certifikáty, zálohy) |
|
||||
| `/var/run/docker.sock:/var/run/docker.sock` | Přístup k Docker daemonu |
|
||||
|
||||
## 🔐 Bezpečnost
|
||||
|
||||
- **Heslo pro admin:** silné, 12+ znaků
|
||||
- **HTTPS:** nastavit v Settings → SSL (nebo terminovat v NPM)
|
||||
- **2FA:** aktivovat pro admin účet v Settings → Users
|
||||
- **Dostupnost:** portainer nemá remote auth → zařadit za reverse proxy
|
||||
|
||||
## 🔄 Aktualizace
|
||||
|
||||
```bash
|
||||
docker compose pull
|
||||
docker compose up -d
|
||||
```
|
||||
|
||||
## 📚 Další informace
|
||||
|
||||
- [Oficiální dokumentace](https://docs.portainer.io/)
|
||||
- [Portainer CE vs Business](https://www.portainer.io/pricing)
|
||||
|
||||
## 🛠 Troubleshooting
|
||||
|
||||
**Portainer se nemůže připojit k Dockeru:**
|
||||
- Zkontroluj `/var/run/docker.sock` oprávnění
|
||||
- Portainer musí mít stejný UID jako docker socket (typicky root, ale v CE to funguje)
|
||||
|
||||
**Zapomenuté heslo:**
|
||||
```bash
|
||||
docker exec -u root portainer /bin/sh
|
||||
# Pak resetuj v DB (složitější, doporučuji reinstalaci)
|
||||
```
|
||||
@@ -0,0 +1,35 @@
|
||||
# Portainer Community Edition
|
||||
|
||||
services:
|
||||
portainer:
|
||||
image: portainer/portainer-ce:latest
|
||||
container_name: portainer
|
||||
restart: unless-stopped
|
||||
ports:
|
||||
- "9000:9000"
|
||||
- "9443:9443"
|
||||
volumes:
|
||||
- ./data:/data
|
||||
- /var/run/docker.sock:/var/run/docker.sock
|
||||
environment:
|
||||
- PUID=1000
|
||||
- PGID=1000
|
||||
- TZ=Europe/Prague
|
||||
networks:
|
||||
- portainer_net
|
||||
healthcheck:
|
||||
test: ["CMD", "curl", "-f", "http://localhost:9000/api/status"]
|
||||
interval: 30s
|
||||
timeout: 10s
|
||||
retries: 3
|
||||
start_period: 30s
|
||||
logging:
|
||||
driver: json-file
|
||||
options:
|
||||
max-size: "10m"
|
||||
max-file: "3"
|
||||
|
||||
networks:
|
||||
portainer_net:
|
||||
name: portainer_default
|
||||
driver: bridge
|
||||
@@ -0,0 +1,7 @@
|
||||
# RustDesk – proměnné prostředí
|
||||
TZ=Europe/Prague
|
||||
PUID=1000
|
||||
PGID=1000
|
||||
|
||||
# Poznámka: Po prvním spuštění si ulož veřejný klíč z logu hbbs
|
||||
# Použije se v RustDesk klientovi (Preferences → Network → Key Server)
|
||||
@@ -0,0 +1,53 @@
|
||||
# RustDesk Server – remote desktop
|
||||
|
||||
> Vlastní relay server pro RustDesk. Bez závislosti na veřejném RustDesk serveru.
|
||||
|
||||
## 📋 Přehled
|
||||
|
||||
- **Image:** `rustdesk/rustdesk-server:latest`
|
||||
- **Porty:** `21115-21119` (TCP+UDP), `21116` (WebSocket)
|
||||
- **User:** `1000:1000`
|
||||
- **Network:** `host` (lepší pro P2P)
|
||||
|
||||
## 🚀 Instalace
|
||||
|
||||
```bash
|
||||
cp .env.example .env
|
||||
nano .env
|
||||
|
||||
docker compose up -d
|
||||
```
|
||||
|
||||
## 🌐 Konfigurace klienta
|
||||
|
||||
V RustDesk klientovi (Preferences → Network):
|
||||
|
||||
- **ID Server:** `<tvuj-server>:21116`
|
||||
- **Key Server:** `<tvuj-server>:21116`
|
||||
- **Relay Server:** `<tvuj-server>:21117`
|
||||
|
||||
**Veřejný klíč** získáš z logu kontejneru `hbbs` (první spuštění).
|
||||
|
||||
## 🔐 Bezpečnost
|
||||
|
||||
- **Firewall:** otevři jen potřebné porty
|
||||
- **HTTPS** – na relay lze nastavit terminaci
|
||||
- **WebSocket** – `ws://` nebo `wss://` (doporučeno za HTTPS)
|
||||
|
||||
## 📁 Volumes
|
||||
|
||||
| Mount | Účel |
|
||||
|---|---|
|
||||
| `./data:/root` | Databáze, klíče, data |
|
||||
|
||||
## 🔄 Aktualizace
|
||||
|
||||
```bash
|
||||
docker compose pull
|
||||
docker compose up -d
|
||||
```
|
||||
|
||||
## 📚 Dokumentace
|
||||
|
||||
- [RustDesk Server](https://rustdesk.com/docs/en/self-host/)
|
||||
- [Docker compose](https://rustdesk.com/docs/en/self-host/rustdesk-server-oss/docker/)
|
||||
@@ -0,0 +1,53 @@
|
||||
# RustDesk Server – vlastní relay
|
||||
|
||||
services:
|
||||
hbbs:
|
||||
image: rustdesk/rustdesk-server:latest
|
||||
container_name: hbbs
|
||||
command: hbbs
|
||||
restart: unless-stopped
|
||||
volumes:
|
||||
- ./data:/root
|
||||
ports:
|
||||
- "21115:21115"
|
||||
- "21116:21116"
|
||||
- "21116:21116/udp"
|
||||
- "21118:21118"
|
||||
networks:
|
||||
- rustdesk_net
|
||||
environment:
|
||||
- PUID=1000
|
||||
- PGID=1000
|
||||
- TZ=Europe/Prague
|
||||
logging:
|
||||
driver: json-file
|
||||
options:
|
||||
max-size: "10m"
|
||||
max-file: "3"
|
||||
|
||||
hbbr:
|
||||
image: rustdesk/rustdesk-server:latest
|
||||
container_name: hbbr
|
||||
command: hbbr
|
||||
restart: unless-stopped
|
||||
volumes:
|
||||
- ./data:/root
|
||||
ports:
|
||||
- "21117:21117"
|
||||
- "21119:21119"
|
||||
networks:
|
||||
- rustdesk_net
|
||||
environment:
|
||||
- PUID=1000
|
||||
- PGID=1000
|
||||
- TZ=Europe/Prague
|
||||
logging:
|
||||
driver: json-file
|
||||
options:
|
||||
max-size: "10m"
|
||||
max-file: "3"
|
||||
|
||||
networks:
|
||||
rustdesk_net:
|
||||
name: rustdesk_default
|
||||
driver: bridge
|
||||
@@ -0,0 +1,10 @@
|
||||
# Speedtest Tracker – proměnné
|
||||
TZ=Europe/Prague
|
||||
PUID=1000
|
||||
PGID=1000
|
||||
|
||||
# APP_KEY: 32+ znaků – vygeneruj: openssl rand -base64 32
|
||||
APP_KEY=change-me-32-char-base64-key
|
||||
|
||||
# URL kde běží Speedtest Tracker
|
||||
APP_URL=http://CHANGE_ME:8765
|
||||
@@ -0,0 +1,51 @@
|
||||
# Speedtest Tracker – rychlost internetu
|
||||
|
||||
> Sledování rychlosti internetu v čase. Grafy, alerty, statistiky.
|
||||
|
||||
## 📋 Přehled
|
||||
|
||||
- **Image:** `linuxserver/speedtest-tracker:latest`
|
||||
- **Porty:** `8765` (web), `8443` (HTTPS)
|
||||
- **User:** `1000:1000`
|
||||
- **Network:** `bridge`
|
||||
|
||||
## 🚀 Instalace
|
||||
|
||||
```bash
|
||||
cp .env.example .env
|
||||
docker compose up -d
|
||||
```
|
||||
|
||||
## 🌐 Přístup
|
||||
|
||||
- **Web:** `http://<server>:8765`
|
||||
|
||||
## 🎯 Funkce
|
||||
|
||||
- **Automatický speedtest** – každých X minut
|
||||
- **Grafy** – rychlost stahování, odesílání, ping
|
||||
- **Alert** – notifikace když rychlost klesne
|
||||
- **Multi-server** – sleduj víc linek
|
||||
|
||||
## 📁 Volumes
|
||||
|
||||
| Mount | Účel |
|
||||
|---|---|
|
||||
| `./data:/config` | Speedtest Tracker data |
|
||||
|
||||
## 🔧 Pokročilé
|
||||
|
||||
- **Ookla CLI** – integrovaný
|
||||
- **Cloudflare** – speedtest.cloudflare.com
|
||||
- **Notifikace** – email, Telegram, Discord, Slack
|
||||
|
||||
## 🔄 Aktualizace
|
||||
|
||||
```bash
|
||||
docker compose pull
|
||||
docker compose up -d
|
||||
```
|
||||
|
||||
## 📚 Dokumentace
|
||||
|
||||
- [Speedtest Tracker](https://docs.speedtest-tracker.dev/)
|
||||
@@ -0,0 +1,30 @@
|
||||
# Speedtest Tracker
|
||||
|
||||
services:
|
||||
speedtest:
|
||||
image: lscr.io/linuxserver/speedtest-tracker:latest
|
||||
container_name: speedtest
|
||||
restart: unless-stopped
|
||||
ports:
|
||||
- "8765:80"
|
||||
- "8443:443"
|
||||
volumes:
|
||||
- ./data:/config
|
||||
environment:
|
||||
- PUID=1000
|
||||
- PGID=1000
|
||||
- TZ=Europe/Prague
|
||||
- APP_KEY=CHANGE_ME_32_CHAR_KEY
|
||||
- APP_URL=http://CHANGE_ME:8765
|
||||
networks:
|
||||
- speedtest_net
|
||||
logging:
|
||||
driver: json-file
|
||||
options:
|
||||
max-size: "10m"
|
||||
max-file: "3"
|
||||
|
||||
networks:
|
||||
speedtest_net:
|
||||
name: speedtest_default
|
||||
driver: bridge
|
||||
@@ -0,0 +1,15 @@
|
||||
# Vaultwarden – proměnné prostředí
|
||||
TZ=Europe/Prague
|
||||
PUID=1000
|
||||
PGID=1000
|
||||
|
||||
# URL přes kterou bude Vaultwarden dostupný (musí být https://)
|
||||
DOMAIN=https://vault.example.com
|
||||
|
||||
# Po prvním přihlášení admin účtu nastavte na false
|
||||
SIGNUPS_ALLOWED=true
|
||||
INVITATIONS_ALLOWED=false
|
||||
|
||||
# Bezpečnost
|
||||
SHOW_PASSWORD_HINT=false
|
||||
LOG_LEVEL=warn
|
||||
@@ -0,0 +1,79 @@
|
||||
# Vaultwarden – self-hosted správce hesel
|
||||
|
||||
> Kompatibilní s Bitwarden klienty. Open-source, lehký (Rust).
|
||||
|
||||
## 📋 Přehled
|
||||
|
||||
- **Image:** `vaultwarden/server:latest`
|
||||
- **Porty:** `2999` (HTTP), `3012` (WebSocket, interní)
|
||||
- **User:** `1000:1000`
|
||||
- **Network:** `bridge`
|
||||
|
||||
## 🚀 Instalace
|
||||
|
||||
```bash
|
||||
cp .env.example .env
|
||||
nano .env # nastavit DOMAIN, ROCKET_PORT, hesla
|
||||
|
||||
docker compose up -d
|
||||
```
|
||||
|
||||
## 🌐 Přístup
|
||||
|
||||
- **Web vault:** `http://<server>:2999` (za HTTPS terminuj v NPM)
|
||||
- **Bitwarden app:** stejná URL jako vault
|
||||
- **Doporučení:** terminuj HTTPS přes NPM a nepoužívej HTTP přímo
|
||||
|
||||
## 🔐 Bezpečnost
|
||||
|
||||
- **DOMAIN** musí být `https://vault.example.com` (ne `http`)
|
||||
- **SIGNUPS_ALLOWED=false** po registraci admin účtu
|
||||
- **INVITATIONS_ALLOWED=false** pokud nechceš zvát další
|
||||
- **SHOW_PASSWORD_HINT=false** (odhalování hesel)
|
||||
- **DATABASE_URL** – zálohuj SQLite pravidelně
|
||||
|
||||
## 🔑 Záloha
|
||||
|
||||
```bash
|
||||
# Zastavit kontejner
|
||||
docker compose stop
|
||||
|
||||
# Zazálohovat SQLite DB
|
||||
cp ./data/db.sqlite3 /backup/vaultwarden-$(date +%Y%m%d).sqlite3
|
||||
|
||||
# Restart
|
||||
docker compose start
|
||||
```
|
||||
|
||||
## 👥 Organizace
|
||||
|
||||
- **1 user** (ty) – self-hosted
|
||||
- **2FA** – povinně aktivuj po registraci
|
||||
- **FIDO2/WebAuthn** – podpora hardwarových klíčů (YubiKey)
|
||||
- **Organizace** – pro sdílení hesel s rodinou
|
||||
|
||||
## 📁 Volumes
|
||||
|
||||
| Mount | Účel |
|
||||
|---|---|
|
||||
| `./data:/data` | SQLite DB, attachmenty, ikony, config |
|
||||
|
||||
## 📚 Klienti
|
||||
|
||||
- **Mobil:** Bitwarden (iOS/Android)
|
||||
- **Desktop:** Bitwarden (Win/Mac/Linux)
|
||||
- **Browser:** Bitwarden extension (Chrome/Firefox/Edge)
|
||||
- **CLI:** `rbw` (Rust) nebo `bitwarden-cli`
|
||||
|
||||
## 🔄 Aktualizace
|
||||
|
||||
```bash
|
||||
docker compose pull
|
||||
docker compose up -d
|
||||
# DB migrace probíhá automaticky
|
||||
```
|
||||
|
||||
## 📚 Dokumentace
|
||||
|
||||
- [Vaultwarden Wiki](https://github.com/dani-garcia/vaultwarden/wiki)
|
||||
- [Bitwarden klienti](https://bitwarden.com/download/)
|
||||
@@ -0,0 +1,41 @@
|
||||
# Vaultwarden – kompatibilní Bitwarden server
|
||||
|
||||
services:
|
||||
vaultwarden:
|
||||
image: vaultwarden/server:latest
|
||||
container_name: vaultwarden
|
||||
restart: unless-stopped
|
||||
ports:
|
||||
- "2999:80"
|
||||
volumes:
|
||||
- ./data:/data
|
||||
environment:
|
||||
- PUID=1000
|
||||
- PGID=1000
|
||||
- TZ=Europe/Prague
|
||||
- DOMAIN=https://CHANGE_ME
|
||||
- ROCKET_PORT=80
|
||||
- SIGNUPS_ALLOWED=true
|
||||
- INVITATIONS_ALLOWED=false
|
||||
- SHOW_PASSWORD_HINT=false
|
||||
- LOG_LEVEL=warn
|
||||
- EXTENDED_LOGGING=true
|
||||
- RUST_BACKTRACE=1
|
||||
networks:
|
||||
- vaultwarden_net
|
||||
healthcheck:
|
||||
test: ["CMD", "curl", "-f", "http://localhost:80/alive"]
|
||||
interval: 30s
|
||||
timeout: 10s
|
||||
retries: 3
|
||||
start_period: 30s
|
||||
logging:
|
||||
driver: json-file
|
||||
options:
|
||||
max-size: "10m"
|
||||
max-file: "3"
|
||||
|
||||
networks:
|
||||
vaultwarden_net:
|
||||
name: vaultwarden_default
|
||||
driver: bridge
|
||||
@@ -0,0 +1,22 @@
|
||||
# Watchtower – proměnné
|
||||
TZ=Europe/Prague
|
||||
|
||||
# Mód: true = jen upozorni, false = auto-aktualizuje
|
||||
WATCHTOWER_MONITOR_ONLY=true
|
||||
|
||||
# Mazat stare image po update
|
||||
WATCHTOWER_CLEANUP=true
|
||||
|
||||
# Cron schedule (default: kazdou nedeli ve 4:00)
|
||||
WATCHTOWER_SCHEDULE=0 0 4 ? * SUN
|
||||
|
||||
# Email notifikace
|
||||
WATCHTOWER_NOTIFICATIONS=email
|
||||
WATCHTOWER_NOTIFICATION_EMAIL_FROM=watchtower@example.com
|
||||
WATCHTOWER_NOTIFICATION_EMAIL_TO=admin@example.com
|
||||
WATCHTOWER_NOTIFICATION_EMAIL_SERVER=smtp.example.com
|
||||
WATCHTOWER_NOTIFICATION_EMAIL_SERVER_PORT=587
|
||||
WATCHTOWER_NOTIFICATION_EMAIL_SERVER_USER=watchtower@example.com
|
||||
WATCHTOWER_NOTIFICATION_EMAIL_SERVER_PASSWORD=change-me
|
||||
|
||||
# Poznámka: V praxi nastav SMTP podle sveho providera
|
||||
@@ -0,0 +1,61 @@
|
||||
# Watchtower – automatické aktualizace
|
||||
|
||||
> Sleduje nové verze Docker image a automaticky restartuje kontejnery.
|
||||
|
||||
## 📋 Přehled
|
||||
|
||||
- **Image:** `containrrr/watchtower:latest`
|
||||
- **Network:** `bridge` (musí mít přístup k Docker socketu)
|
||||
- **Mód:** monitor-only (default) – jen upozorňuje, NEaktualizuje
|
||||
|
||||
## 🚀 Instalace
|
||||
|
||||
```bash
|
||||
cp .env.example .env
|
||||
nano .env # nastavit WATCHTOWER_MONITOR_ONLY podle potřeby
|
||||
|
||||
docker compose up -d
|
||||
```
|
||||
|
||||
## 🎯 Módy
|
||||
|
||||
- **Monitor only** (default) – posílá email/notifikaci, NEaktualizuje
|
||||
- **Auto update** – stáhne nový image, restartuje kontejner
|
||||
|
||||
## 📧 Notifikace (email)
|
||||
|
||||
```env
|
||||
WATCHTOWER_NOTIFICATIONS=email
|
||||
WATCHTOWER_NOTIFICATION_EMAIL_FROM=watchtower@example.com
|
||||
WATCHTOWER_NOTIFICATION_EMAIL_TO=admin@example.com
|
||||
WATCHTOWER_NOTIFICATION_EMAIL_SERVER=smtp.example.com
|
||||
WATCHTOWER_NOTIFICATION_EMAIL_SERVER_PORT=587
|
||||
WATCHTOWER_NOTIFICATION_EMAIL_SERVER_USER=watchtower@example.com
|
||||
WATCHTOWER_NOTIFICATION_EMAIL_SERVER_PASSWORD=CHANGE_ME
|
||||
```
|
||||
|
||||
## 🔧 Pokročilé
|
||||
|
||||
- **Schedule** – cron-like: `0 0 4 ? * SUN` (každou neděli v 4:00)
|
||||
- **Cleanup** – smaže staré image (`WATCHTOWER_CLEANUP=true`)
|
||||
- **Notifications** – shoutrrr (Telegram, Discord, Slack, …)
|
||||
|
||||
## 📁 Volumes
|
||||
|
||||
| Mount | Účel |
|
||||
|---|---|
|
||||
| `/var/run/docker.sock:/var/run/docker.sock` | Přístup k Docker daemonu |
|
||||
|
||||
## 🔐 Bezpečnost
|
||||
|
||||
- **Doporučeno:** monitor-only s email notifikací
|
||||
- **Auto-update** riskantní – může rozbít službu
|
||||
- **Manuální update:** `docker compose pull && docker compose up -d`
|
||||
|
||||
## 🔄 Restart
|
||||
|
||||
Watchtower se automaticky restartuje. **Nemusíte na něj sahat.**
|
||||
|
||||
## 📚 Dokumentace
|
||||
|
||||
- [Watchtower GitHub](https://github.com/containrrr/watchtower)
|
||||
@@ -0,0 +1,34 @@
|
||||
# Watchtower – monitor + auto-update
|
||||
|
||||
services:
|
||||
watchtower:
|
||||
image: containrrr/watchtower:latest
|
||||
container_name: watchtower
|
||||
restart: unless-stopped
|
||||
volumes:
|
||||
- /var/run/docker.sock:/var/run/docker.sock
|
||||
environment:
|
||||
- TZ=Europe/Prague
|
||||
- WATCHTOWER_MONITOR_ONLY=true
|
||||
- WATCHTOWER_CLEANUP=true
|
||||
- WATCHTOWER_SCHEDULE=0 0 4 ? * SUN
|
||||
- WATCHTOWER_NOTIFICATIONS=email
|
||||
- WATCHTOWER_NOTIFICATION_EMAIL_FROM=watchtower@example.com
|
||||
- WATCHTOWER_NOTIFICATION_EMAIL_TO=admin@example.com
|
||||
- WATCHTOWER_NOTIFICATION_EMAIL_SERVER=smtp.example.com
|
||||
- WATCHTOWER_NOTIFICATION_EMAIL_SERVER_PORT=587
|
||||
- WATCHTOWER_NOTIFICATION_EMAIL_SERVER_USER=watchtower@example.com
|
||||
- WATCHTOWER_NOTIFICATION_EMAIL_SERVER_PASSWORD=CHANGE_ME
|
||||
- WATCHTOWER_NOTIFICATION_EMAIL_SUBJECTTAG=Watchtower
|
||||
networks:
|
||||
- watchtower_net
|
||||
logging:
|
||||
driver: json-file
|
||||
options:
|
||||
max-size: "10m"
|
||||
max-file: "3"
|
||||
|
||||
networks:
|
||||
watchtower_net:
|
||||
name: watchtower_default
|
||||
driver: bridge
|
||||
Reference in New Issue
Block a user