Compose Stacks
Коллекция стеков Docker Compose из более чем 200 сервисов. Каждое приложение было отлажено и проверено в домашней лаборатории, конфигурации к некоторым сервисам доступны в исходном репозитории.
Bot Stack
SSH Bot
SSH Bot - Telegram бот, который позволяет запускать заданные команды на выбранном хосте в домашней сети и возвращать результат их выполнения. Бот не устанавливает постоянное соединение с удаленным хостом, что позволяет выполнять команды асинхронно.
services:
OpenRouter-Bot:
container_name: OpenRouter-Bot
image: lifailon/openrouter-bot:latest
volumes:
- ./openrouter-bot.env:/openrouter-bot/.env
restart: unless-stopped
env:
# Telegram api key from https://telegram.me/BotFather
TELEGRAM_BOT_TOKEN=XXXXXXXXXX:XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
# Your Telegram id from https://t.me/getmyid_bot
TELEGRAM_USER_ID=7777777777
# Interpreter used only when running the bot local in Windows
# Available values: powershell/pwsh
WIN_SHELL=pwsh
# Interpreter used on local and remote hosts in Linux
# Available values: sh/bash/zsh or other
LINUX_SHELL=bash
# Parallel (async) execution of commands (default: false)
PARALLEL_EXEC=true
# Global parameters for ssh connection (low priority)
SSH_PORT=2121
SSH_USER=lifailon
# Use password to connect (optional)
SSH_PASSWORD=
# Full path to private key (default: ~/.ssh/id_rsa)
SSH_PRIVATE_KEY_PATH=
SSH_CONNECT_TIMEOUT=2
# Save and reuse passed variables and functions (default: false)
SSH_SAVE_ENV=true
# List of hosts separated by comma (high priority for username and port)
SSH_HOST_LIST=192.168.3.101,root@192.168.3.102:22,root@192.168.3.103:22,192.168.3.105,192.168.3.106
# Log the output of command execution
LOG_MODE=DEBUG
OpenRouter Bot
OpenRouter Bot - Telegram бота для общения с бесплатными и платными моделями ИИ через OpenRouter, или локальными LLM, например, через LM Studio.
services:
ssh-bot:
container_name: ssh-bot
image: lifailon/ssh-bot:latest
volumes:
- ./ssh-bot.env:/ssh-bot/.env
- $HOME/.ssh/id_rsa:/root/.ssh/id_rsa
restart: unless-stopped
env:
# OpenRouter api key from https://openrouter.ai/settings/keys
API_KEY=
# Telegram api key from https://telegram.me/BotFather
TELEGRAM_BOT_TOKEN=
# Your Telegram id from https://t.me/getmyid_bot
ADMIN_IDS=
# List of users to access the bot, separated by commas
ALLOWED_USER_IDS=
BASE_URL=https://openrouter.ai/api/v1
# List of free models: https://openrouter.ai/models?max_price=0
MODEL=deepseek/deepseek-r1:free
# System preset that specifies the role for AI
#ASSISTANT_PROMPT="Ты переводчик, умеешь только переводить текст с русского на англйский язык (и наоборот) и не отвечаешь на вопросы."
# Using local LLM via LM Studio (https://lmstudio.ai)
#BASE_URL=http://localhost:1234/v1
# Using local model: https://huggingface.co/ruslandev/llama-3-8b-gpt-4o-ru1.0
#MODEL=llama-3-8b-gpt-4o-ru1.0
VISION=false
#VISION_PROMPT="Описание изображения"
#VISION_DETAIL="низкий"
# The maximum number of messages or time in minutes for store messages in history
MAX_HISTORY_SIZE=20
MAX_HISTORY_TIME=60
#BUDGET_PERIOD=monthly
# Enable user access (default)
#USER_BUDGET=1
# Disable guest access (enabled by default)
GUEST_BUDGET=0
# Language used for bot responses (supported: EN/RU)
LANG=RU
# ADMIN/USER/GUEST
STATS_MIN_ROLE=ADMIN
Kinozal Bot
Kinozal Bot - Telegram бот, который позволяет автоматизировать процесс доставки контента до вашего телевизора, используя только телефон. С помощью бота вы получите удобный и привычный интерфейс для взаимодействия с торрент трекером Кинозал и базой данных TMDB для отслеживания даты выхода серий, сезонов и поиска актеров для каждой серии, а также возможность управлять торрент клиентом qBittorrent или Transmission на вашем компьютере, находясь удаленно от дома, а главное, все это доступно из единого интерфейса и без установки клиентского приложения на конечные устройства. В отличии от других приложений, предназначенных для удаленного управления торрент клиентами, вам не нужно находиться в той же локальной сети или использовать VPN.
services:
kinozal-bot:
image: lifailon/kinozal-bot:latest
container_name: kinozal-bot
restart: unless-stopped
volumes:
- ./torrents:/kinozal-bot/torrents
- ./kinozal-bot.conf:/kinozal-bot/kinozal-bot.conf
yt-dlp Telegram Bot
yt-dlp-telegram-bot - Telegram бот для загрузки видео из YouTube с помощью yt-dlp.
services:
yt-dlp-telegram-bot:
image: lifailon/yt-dlp-telegram-bot:latest
container_name: yt-dlp-telegram-bot
restart: unless-stopped
env_file:
- .env
env:
API_ID= # get from https://my.telegram.org
API_HASH= # get from https://my.telegram.org
BOT_TOKEN= # get from https://telegram.me/BotFather
ALLOWED_USERIDS= # get from https://t.me/getmyid_bot
ADMIN_USERIDS= # get from https://t.me/getmyid_bot
YTDLP_PATH= # default: /tmp/yt-dlp
ALLOWED_GROUPIDS=
MAX_SIZE=
YTDLP_COOKIES=
yt-dlp-telegram
yt-dlp-telegram - Telegram бот для загрузки видео из YouTube с ограничением 50 МБ.
services:
yt-dlp-bot:
image: lifailon/yt-dlp-bot:latest
build:
context: .
dockerfile: Dockerfile
container_name: yt-dlp-bot
restart: unless-stopped
volumes:
- ./config:/bot/config.py
config:
token = "" # Telegram api key your bot
logs = 2390049 # Telegram your chat id
max_filesize = 50000000 # Max file size in bytes
# output_folder = "/download"
smtp_to_telegram
SMTP to Telegram - SMTP сервер (листенер) для переадресации сообщений в Telegram.
services:
smtp2telegram:
image: kostyaesmukov/smtp_to_telegram
container_name: smtp2telegram
restart: unless-stopped
environment:
- ST_SMTP_LISTEN=0.0.0.0:2525
- ST_TELEGRAM_CHAT_IDS=
- ST_TELEGRAM_BOT_TOKEN=
- "ST_TELEGRAM_MESSAGE_TEMPLATE=Subject: {subject}\\\\n\\\\n{body}"
ports:
- 2525:2525
# echo -e "Subject: Test\n\nThis is test body" | curl smtp://localhost:2525 \
# --mail-from admin@docker.local \
# --mail-rcpt admin@docker.local \
# --user admin:admin \
# -T -
LLM Stack
Open WebUI
Open WebUI - платформа для самостоятельного размещения AI (веб-интерфейс для LLM), предназначенная для работы в полностью автономном режиме. Она поддерживает различные среды выполнения LLM, такие как Ollama и совместимые с OpenAI API.
services:
# ollama:
# image: ollama/ollama:latest
# container_name: ollama
# restart: unless-stopped
# tty: true
# # ports:
# # - 12345:12345
# volumes:
# - ./ollama_data:/root/.ollama
# docker exec -it ollama bash
# ollama pull deepseek-r1:8b
# ollama list
# ollama run deepseek-r1:8b
open-webui:
image: ghcr.io/open-webui/open-webui:main
container_name: open-webui
restart: unless-stopped
ports:
- 2025:8080
environment:
- WEBUI_SECRET_KEY=${WEBUI_SECRET_KEY}
- OLLAMA_BASE_URL=${OLLAMA_BASE_URL}
- OPENAI_API_BASE_URL=${OPENAI_API_BASE_URL}
- OPENAI_API_KEY=${OPENAI_API_KEY}
- CORS_ALLOW_ORIGIN=${CORS_ALLOW_ORIGIN}
- FORWARDED_ALLOW_IPS=${FORWARDED_ALLOW_IPS}
- SCARF_NO_ANALYTICS=${SCARF_NO_ANALYTICS}
- DO_NOT_TRACK=${DO_NOT_TRACK}
- ANONYMIZED_TELEMETRY=${ANONYMIZED_TELEMETRY}
extra_hosts:
- host.docker.internal:host-gateway
volumes:
- ./open_webui_data:/app/backend/data
# depends_on:
# - ollama
env:
WEBUI_SECRET_KEY=OpenWebUiAdmin
OLLAMA_BASE_URL=http://ollama:11434
OPENAI_API_BASE_URL=http://192.168.3.100:12345/v1 # LM Studio
OPENAI_API_KEY=
FORWARDED_ALLOW_IPS=*
CORS_ALLOW_ORIGIN=*
SCARF_NO_ANALYTICS=true
DO_NOT_TRACK=true
ANONYMIZED_TELEMETRY=false
NextChat
NextChat (ранее ChatGPT-Next-Web) - веб-интерфейс для ChatGPT, Gemini и других AI совместимсых с OpenAI API.
services:
nextchat:
container_name: nextchat
image: yidadaa/chatgpt-next-web
ports:
- 3000:3000
environment:
- CODE=$CODE
- BASE_URL=$BASE_URL
- OPENAI_API_KEY=$OPENAI_API_KEY
- DEFAULT_MODEL=$DEFAULT_MODEL
- CUSTOM_MODELS=$CUSTOM_MODELS
- HIDE_USER_API_KEY=$HIDE_USER_API_KEY
- ENABLE_BALANCE_QUERY=$ENABLE_BALANCE_QUERY
env:
CODE=NextChatAdmin
BASE_URL=http://192.168.3.100:12345 # LM Studio
OPENAI_API_KEY=
DEFAULT_MODEL=qwen/qwen3-8b
CUSTOM_MODELS=
HIDE_USER_API_KEY=1 # отключить использование пользовательского API ключа
ENABLE_BALANCE_QUERY=1 # отключить возможность запрашивать баланс для пользователей
OPENAI_ORG_ID=
DISABLE_GPT4=
PROXY_URL=
ENABLE_MCP=
DISABLE_FAST_LINK=
GOOGLE_URL=
GOOGLE_API_KEY=
DEEPSEEK_API_KEY=
ANTHROPIC_URL=
ANTHROPIC_API_KEY=
ANTHROPIC_API_VERSION=
SILICONFLOW_URL=
SILICONFLOW_API_KEY=
AI302_API_KEY=
AI302_URL=
WHITE_WEBDAV_ENDPOINTS=
Continue
Continue - интеграция AI-агентов для выполнения рефакторинга во время написания кода в IDE.
API Stack
Scalar
Scalar - интерактивный справочник для документации OpenAPI (like Swagger UI) и REST API клиент в одном веб-приложение.
🔗 API Client Demo ↗
services:
scalar:
image: scalarapi/api-reference:latest
container_name: scalar
restart: unless-stopped
ports:
- 4005:8080
environment:
API_REFERENCE_CONFIG: |
{
"theme": "purple"
}
volumes:
- ./docs:/docs:ro
Restfox
Restfox - легковесный и быстрый офлайн API-клиент (WebUI/Desktop) с поддержкой импорт коллекций из OpenAPI и экспорт в Postman и Insomnia.
services:
restfox:
image: flawiddsouza/restfox:latest
container_name: restfox
restart: unless-stopped
ports:
- 4004:4004
Yaade
Yaade — это среда совместной разработки API, размещаемая на собственном сервере (еще один API клиент с веб-интерфейсом).
services:
yaade:
image: esperotech/yaade:latest
container_name: yaade
restart: unless-stopped
ports:
- 9339:9339
environment:
- YAADE_ADMIN_USERNAME=admin
- YAADE_ADMIN_PASSWORD=password
volumes:
- ./yaade_data:/app/data
🔗 Hoppscotch API Client Demo ↗
🔗 Postman Collections to OpenAPI Docs ↗
HTTPBin
go-httpbin - API сервер клиент для тестирования HTTP запросов и ответов (fork httpbin от Postman Labs).
🔗 HTTPBin Demo ↗
🔗 HTTPBin Go Demo ↗
services:
httpbin:
image: ghcr.io/mccutchen/go-httpbin
container_name: httpbin
restart: unless-stopped
ports:
- 8888:8080
Swagger UI
Swagger UI - браузер для спецификации OpenAPI (поддерживает загрузку любой переданной спецификации через url).
🔗 Swagger UI Demo ↗
🔗 Swagger Viewer VSCode Extension ↗
services:
swagger-ui:
image: docker.swagger.io/swaggerapi/swagger-ui
container_name: swagger-ui
restart: unless-stopped
ports:
- 8889:8080
environment:
- PORT=8080
- SWAGGER_JSON=/app/swagger.json
- SWAGGER_JSON_URL=
- API_KEY=**None**
volumes:
- ./docs/httpbin.json:/app/swagger.json:ro
depends_on:
- httpbin
Swagger Editor
Swagger Editor - онлайн редактор документации OpenAPI с поддержкой генерации клентов и заглушек API для разных языков с помощью codegen.
services:
swagger-editor:
image: docker.swagger.io/swaggerapi/swagger-editor
container_name: swagger-editor
restart: unless-stopped
ports:
- 8890:8080
environment:
- PORT=8080
- BASE_URL=/
- URL=http://192.168.3.101:8889/swagger.json
depends_on:
- httpbin
Mitm Proxy
Mitm Proxy - прямой (forward) прокси сервер для перехвата и изменения HTTP-трафика с веб-интерфейсом для анализа запросов и ответов (like Fiddler), удобно для отладки мобильных приложений.
services:
mitmproxy:
image: mitmproxy/mitmproxy:latest
container_name: mitmproxy
restart: unless-stopped
ports:
- 8880:8080 # Proxy
- 8881:8081 # Web UI
command: mitmweb --web-host 0.0.0.0 --listen-host 0.0.0.0
Step CI
Step CI - инструмент командной строки для тестирования GraphQL, gRPC, SOAP и REST API в DevOps Pipelines (например, локально в консоли или в GitHub Actions)
🔗 Step CI Demo ↗
services:
step-ci:
image: ghcr.io/stepci/stepci
container_name: step-ci
volumes:
- ./step-ci-tests:/tests
command: tests/httpbin.yml
Network Stack
Networking Toolbox
Networking Toolbox - более 100 сетевых инструментов и утилит, предназначенных для работы в автономном режиме (от создателя web-check, dashy и AdGuardian-Term).
services:
networking-toolbox:
image: lissy93/networking-toolbox:latest
container_name: networking-toolbox
restart: unless-stopped
environment:
- NODE_ENV=production
- PORT=3000
- HOST=0.0.0.0
ports:
- 3100:3000
healthcheck:
test:
start_period: 40s
interval: 30s
timeout: 10s
retries: 3
Web Check
Web Check - универсальный инструмент OSINT для анализа любого веб-сайта.
🔗 Web Check Demo ↗
services:
web-check:
image: lissy93/web-check:latest
container_name: web-check
restart: unless-stopped
ports:
- 3101:3000
IP Check
IP Check / MyIP - набор инструментов для проверки IP-адресов. Включаем в себя проверки DNS, соединения WebRTC, speedtest, ICMP, MTR, доступность веб-сайтов и другие возможности.
🔗 IP Check Demo ↗
services:
ip-check:
container_name: ip-check
image: jason5ng32/myip:latest
restart: unless-stopped
stdin_open: true
tty: true
ports:
- 3102:18966
ZoneMaster
ZoneMaster - веб-интерфейс, API и инструмент командной строки для проверки DNS.
docker run -t --rm zonemaster/cli zonemaster.net
🔗 ZoneMaster Test Domains Demo ↗
Check Host - бесплатный онлайн инструмент и API для ICMP, HTTP/HTTPS, TCP, UDP и DNS проверок доступности узлов из разных стран.
Looking.House - инструмент для проверки скорости загрузки и выгрузки (а также проверок ping, traceroute и mtr) из множества точек Looking Glass, расположенных в ДЦ по всему миру.
NetAlertX
NetAlertX - сканер присутствия и обнаружения в локальной или WiFi сети с отправкой оповещений, например, в Telegram.
services:
netalertx:
image: ghcr.io/jokob-sk/netalertx:latest
container_name: netalertx
restart: unless-stopped
environment:
- PUID=200
- PGID=300
- TZ=Etc/GMT+3
- PORT=20211
network_mode: host
volumes:
- ./netalertx_config:/app/config
- ./netalertx_db:/app/db
tmpfs:
- /app/api
Apprise
Apprise - система для отправки уведомления более чем в 100+ служб, с поддержкой веб интерфейса для настройки конфигураций (используется в NetAlertX для отправки уведомлений в Telegram).
services:
apprise:
image: caronc/apprise:latest
container_name: apprise
restart: unless-stopped
ports:
- 8000:8000
volumes:
- ./apprise_config:/config
RTSP to Web
RTSP to Web - RTSP клиент в браузере.
services:
rtsptoweb:
image: ghcr.io/deepch/rtsptoweb:latest
container_name: rtsp-to-web
restart: unless-stopped
# volumes:
# - ./rtsp_config/config.json:/config/config.json
ports:
- 8083:8083
Gatus
Gatus - современная и ориентированная на разработчиков (IaC подход для управления через конфигурацию) панель мониторинга состояние API и веб-сервисов с помощью HTTP, ICMP, TCP и DNS-запросов, с проверкой результатов тестирования в запросах (используются списки условий, проверка кода ответа, времени ответа, срок действия сертификата, тела запроса, парсинг json и другие функции). Поддерживает экспорт метрик Prometheus и динамическая панель инструментов Grafana.
🔗 Gatus Demo ↗
В демо-версии присутствует интерфейс для настройки и проверки мониторинга (без экспорта в формате конфигурации).
services:
gatus:
image: twinproduction/gatus:latest
container_name: gatus
restart: unless-stopped
volumes:
- ./config:/config # yaml configuration
- ./data:/data # SQLite
ports:
- 8180:8080
healthcheck:
test:
interval: 10s
timeout: 5s
retries: 3
Uptime Kuma
Uptime Kuma - простой в использовании инструмент для мониторинга веб-приложений с помощью веб-интерфейса.
Uptime Kuma API - Swagger документация для Uptime Kuma API.
🔗 Uptime Kuma Demo ↗
services:
uptime-kuma:
image: louislam/uptime-kuma:latest
container_name: uptime-kuma
restart: unless-stopped
ports:
- 3001:3001
volumes:
- ./kuma_data:/app/data
uptime-kuma-api:
image: medaziz11/uptimekuma_restapi
container_name: uptime-kuma-api
restart: unless-stopped
environment:
- KUMA_SERVER=http://uptime-kuma:3001
- KUMA_USERNAME=admin
- KUMA_PASSWORD=KumaAdmin
- ADMIN_PASSWORD=KumaApiAdmin
ports:
- 3002:8000
volumes:
- ./kuma_api:/db
depends_on:
- uptime-kuma
# uptime-robot:
# image: overclockedllama/uptimerobot
# container_name: uptime-robot
# restart: unless-stopped
# environment:
# - PORT=3000
# - LOG_LEVEL=info
# - CRON_TIME=*/1 * * * *
# - UPTIME_ROBOT_API=
# - UPTIME_ROBOT_NAME_PATTERN=%name
# - WEBSITE_TITLE=
# - WEBSITE_COPYRIGHT=
# ports:
# - 3003:3000
# volumes:
# - ./uptimerobot_config:/app/config
StatPing
StatPing - страница статуса для проверки доступности веб-сайтов с настройкой в веб-интерфейсе, автоматическим построением графиков и оповещениями в Telegram.
🔗 StatPing Android ↗
services:
statping:
image: statping/statping:latest
container_name: statping
restart: unless-stopped
volumes:
- ./unless-stopped_data:/app
ports:
- 8001:8080
# environment:
# VIRTUAL_HOST: localhost
# VIRTUAL_PORT: 8080
# DB_CONN: statping-postgres
# DB_HOST: statping-postgres
# DB_DATABASE: statping
# DB_USER: statping
# DB_PASS: statping
SmokePing
SmokePing - система регистрации, построения графиков и оповещения о задержках, которая состоит из демона для организации измерения задержек и CGI-интерфейса для отображения графиков.
🔗 SmokePing Demo ↗
services:
smokeping:
image: lscr.io/linuxserver/smokeping:latest
container_name: smokeping
restart: unless-stopped
environment:
- PUID=1000
- PGID=1000
- TZ=Etc/UTC+3
- MASTER_URL=https://smokeping.docker.local/smokeping/
- SHARED_SECRET=password
- CACHE_DIR=/tmp
volumes:
- ./smokeping_conf:/config
- ./smokeping_data:/data
ports:
- 8000:80
Pinguem
Pinguem - веб-интерфейс и экспортер Prometheus для асинхронной проверки доступности выбранных хостов или подсетей с использованием библиотеки node-ping.
services:
pinguem:
image: lifailon/pinguem:latest
container_name: pinguem
restart: unless-stopped
ports:
- 8085:8085 # Fronend (WebUI)
- 3005:3005 # Backend (API)
LibreSpeedTest
LibreSpeedTest - сервер измерения скорости сети в Интернете на базе HTML5 для размещения на собственном сервере, с поддержкой мобильных устройств.
services:
libre-speedtest:
image: lscr.io/linuxserver/librespeed:latest
container_name: libre-speedtest
restart: unless-stopped
environment:
- PUID=1000
- PGID=1000
- TZ=Etc/GMT+3
- PASSWORD=PASSWORD # пароль для базы данных результатов
- CUSTOM_RESULTS=true # опционально, включить пользовательскую страницу результатов в /config/www/results/index.php
# - DB_TYPE=sqlite # по умолчанию sqlite (доступно mysql и postgresql)
# - DB_NAME=DB_NAME # опционально, имя базы данных (требуется для mysql и pgsql)
# - DB_HOSTNAME=DB_HOSTNAME # опционально
# - DB_USERNAME=DB_USERNAME # опционально
# - DB_PASSWORD=DB_PASSWORD # опционально
# - DB_PORT=DB_PORT # опционально
# - IPINFO_APIKEY=ACCESS_TOKEN # опционально, токен доступа от ipinfo.io (требуется для подробной информации об ip)
volumes:
- ./librespeed/config:/config
ports:
- 8088:80
OpenSpeedTest
OpenSpeedTest - бесплатный веб-инструмент для оценки производительности сети на базе HTML5, написанный на чистом JavaScript и использующий только встроенные веб-API.
services:
open-speedtest:
image: openspeedtest/latest:latest
container_name: opens-peedtest
restart: unless-stopped
# environment:
# - ENABLE_LETSENCRYPT=True
# - DOMAIN_NAME=speedtest.domain.com
# - USER_EMAIL=name@domain.com
ports:
- 3000:3000
- 3001:3001
SpeedTest Tracker
SpeedTest Tracker - самостоятельно размещаемое веб-приложение для отслеживания производительность и время безотказной работы Интернет-соединения с собственным веб-интерфейсом для визуализации графиков измерений.
# Generate app key: echo -n 'base64:'; openssl rand -base64 32;
# Default credentials: admin@example.com:password
services:
speedtest-tracker:
image: lscr.io/linuxserver/speedtest-tracker:latest
container_name: speedtest-tracker
restart: unless-stopped
ports:
- 8778:80
# labels:
# - traefik.enable=true
# - traefik.http.routers.speedtest-tracker.rule=Host(`speedtest.docker.local`)
# - traefik.http.services.speedtest-tracker.loadbalancer.server.port=80
environment:
- PUID=1000
- PGID=1000
- TZ=Etc/UTC+3
- APP_KEY=base64:e6otzoFWjt0GoEOL/QlPQw2Xgm63OMU3lA5V4nLgXJ4=
- APP_URL=http://192.168.3.101
# - APP_URL=http://speedtest.docker.local
- DB_CONNECTION=sqlite
# - DB_CONNECTION=pgsql
# - DB_HOST=speedtest-db
# - DB_PORT=5432
# - DB_DATABASE=speedtest_tracker
# - DB_USERNAME=speedtest
# - DB_PASSWORD=PgAdmin
volumes:
- ./speedtest_config:/config
- ./ssl:/config/keys
# depends_on:
# - speedtest-db
# speedtest-db:
# image: postgres:17
# container_name: speedtest-db
# restart: unless-stopped
# # ports:
# # - 5432:5432
# environment:
# - POSTGRES_DB=speedtest_tracker
# - POSTGRES_USER=speedtest
# - POSTGRES_PASSWORD=PgAdmin
# volumes:
# - ./speedtest_data:/var/lib/postgresql/data
# healthcheck:
# test: ["CMD-SHELL", "pg_isready -U ${POSTGRES_USER} -d ${POSTGRES_DB}"]
# interval: 5s
# retries: 5
# timeout: 5s
MySpeed
MySpeed - веб-приложение от создателя Nexterm для автоматизации тестирования скорости Интернет-канала связи. Поддерживает сервера проверки скорости Ookla, LibreSpeed и Cloudflare, настройку времени между тестами с помощью выражений Cron, отправку оповещений в Telegram, хранение результатов до 30 дней и метрики Prometheus.
services:
myspeed:
image: germannewsmaker/myspeed
container_name: myspeed
restart: unless-stopped
volumes:
- ./myspeed_data:/myspeed/data
ports:
- 5216:5216
SpeedTest Exporter
SpeedTest Exporter - экспортер Prometheus, написанный на Python с использованием официального интерфейса командной строки Ookla Speedtest.
services:
speedtest-exporter:
image: miguelndecarvalho/speedtest-exporter
container_name: speedtest-exporter
restart: unless-stopped
# environment:
# - SPEEDTEST_PORT=9798
# - SPEEDTEST_SERVER=21110
ports:
- 9798:9798
iperf
iperf - утилита командной строки (клиент-серверная архитектура) для проверки скорости загрузки и выгрузки в локальной сети.
services:
iperf-server:
image: alpine:latest
container_name: iperf-server
restart: unless-stopped
command: >
sh -c "
apk add --no-cache iperf3 &&
exec iperf3 -s -p $$PORT
"
environment:
- PORT=5201
ports:
- 5201:5201
fail2ban
fail2ban - демон для блокировки хостов, вызывающих множественные ошибки аутентификации по ssh и веб-приложения, используя анализ логов.
services:
fail2ban:
image: lscr.io/linuxserver/fail2ban:latest
container_name: fail2ban
restart: unless-stopped
cap_add:
- NET_ADMIN
- NET_RAW
network_mode: host
environment:
- PUID=1000
- PGID=1000
- TZ=Etc/UTC+3
- VERBOSITY=-vv
volumes:
- ./config:/config
- /var/log:/var/log:ro
# - $HOME/docker/filebrowser/log:/remotelogs/filebrowser:ro
# - $HOME/docker/homeassistant/log:/remotelogs/homeassistant:ro
# - $HOME/docker/vaultwarden/log:/remotelogs/vaultwarden:ro
# - $HOME/docker/nextcloud/log:/remotelogs/nextcloud:ro
Dev Stack
IT Tools
IT Tools - большая коллекция утилит для разработчиков (криптография, конверторы, веб инструменты и многое другое).
🔗 IT Tools Demo ↗
services:
it-tools:
image: corentinth/it-tools:latest
container_name: it-tools
restart: unless-stopped
ports:
- 6990:80
Transform
Transforms - универсальный веб-конвертер.
🔗 Transforms Demo ↗
services:
transform:
image: lifailon/transform:amd64
# build:
# context: .
# dockerfile: Dockerfile
container_name: transform
restart: unless-stopped
ports:
- 3090:3000
JSON Crack
JSON Crack - веб-приложение для визуализации JSON, YAML, XML и CSV в интерактивные графики.
🔗 JSON Crack Demo ↗
🔗 JSON Crack VSCode Extension ↗
services:
jsoncrack:
image: shokohsc/jsoncrack:latest
container_name: jsoncrack
restart: unless-stopped
environment:
- NODE_ENV=production
# Доступ через Proxy по FQDN
# ports:
# - 3080:8080
labels:
- traefik.enable=true
Markmap
Markmap - как JSON Crack для Markdown.
🔗 Markmap Demo ↗
NexTerm
NexTerm - управление сервером в браузере с поддержкой 2FA для SSH (с поддержкой файлового браузера через SFTP), VNC и RDP, контейнерами Proxmox LXC, QEMU и развертывание приложений через Docker.
services:
nexterm:
image: germannewsmaker/nexterm:latest
restart: unless-stopped
container_name: nexterm
environment:
# head -c 32 /dev/urandom | base64 || openssl rand -base64 32
# head -c 32 /dev/urandom | xxd -p -c 32 || openssl rand -hex 32
- ENCRYPTION_KEY=9dbde894647845ab33e13a9334cdbadc5f8d22abe42df0b3daff431eec0df870
ports:
- 6989:6989
volumes:
- ./nexterm_data:/app/data
Code Server
Code Server - VSCode сервер в браузере.
services:
code-server:
image: linuxserver/code-server:latest
container_name: code-server
restart: unless-stopped
environment:
- PUID=1000
- PGID=1000
- TZ=Etc/GMT+3
- PASSWORD=CodeServerAdmin
volumes:
- ./vscode_config:/config
- $HOME:/home
ports:
- 9443:8443
Go Playground
Better Go Playground - улучшенная Go Playground на базе Monaco Editor и React.
services:
go-playground:
image: x1unix/go-playground:latest
container_name: go-playground
restart: unless-stopped
environment:
- APP_CLEAN_INTERVAL=30m
ports:
- 9444:8000
Go Template Playground
Repeatit (Go Template Playground) - игровая площадка для проверки шаблонов GoLang. Поддерживает рендиринг текста и html шаблонов, функции spting и heml, а также ввод параметров шаблона в форматах yaml, json и toml.
🔗 Repeatit Demo ↗
services:
go-template-playground:
image: ghcr.io/rytsh/repeatit:latest
# image: lifailon/go-template-playground:latest # 0.5.5-amd64
# build:
# context: .
# dockerfile: Dockerfile
container_name: go-template-playground
restart: unless-stopped
stdin_open: true
tty: true
ports:
- 9445:8080
D2 Playground
D2 Playground - игровая площадка для современного языка сценариев диаграмм, преобразующий текст в диаграммы.
services:
d2-playground:
image: lifailon/d2-playground:latest
# build:
# context: .
# dockerfile: Dockerfile
container_name: d2-playground
restart: unless-stopped
ports:
- 9089:9090
DrawIO
Draw.io (like MS Visio) - веб-версия бесплатного приложения для создания различных диаграмм, блок-схем и т.п.
🔗 Draw.io Demo ↗
services:
draw.io:
image: jgraph/drawio:latest
container_name: draw.io
restart: unless-stopped
stdin_open: true
tty: true
ports:
- 9447:8080
Database Stack
PostgreSQL - объектно-реляционная база данных (СУБД) с открытым исходным кодом.
services:
postgresql:
image: postgres
container_name: postgresql
restart: unless-stopped
ports:
- 5432:5432
environment:
POSTGRES_DB: dbname
POSTGRES_USER: dbuser
POSTGRES_PASSWORD: dbpass
volumes:
- ./postgresql_data:/var/lib/postgresql/data
healthcheck:
test: pg_isready -U pgweb -h 127.0.0.1
interval: 5s
PgWeb
PgWeb - веб-клиент для работы с СУБД PostgreSQL, который возможно запустить из одного бинарного файла, а также позволяет подключиться к БД напрямую или через SSH туннель.
services:
postgresweb:
container_name: postgresweb
image: sosedoff/pgweb:latest
build: .
environment:
PGWEB_DATABASE_URL: postgres://dbuser:dbpass@postgresql:5432/dbname?sslmode=disable
ports:
- 8081:8081
healthcheck:
test:
interval: 5s
depends_on:
postgresql:
condition: service_healthy
PostgREST
PostgREST - полноценный RESTful API для управления базами данных PostgreSQL.
services:
postgrest:
image: postgrest/postgrest
container_name: postgrest
restart: unless-stopped
ports:
- 3000:3000
environment:
PGRST_DB_URI: postgres://dbuser:dbpass@postgresql:5432/dbname
PGRST_OPENAPI_SERVER_PROXY_URI: http://127.0.0.1:3000
depends_on:
- postgresql
swagger:
image: swaggerapi/swagger-ui
ports:
- 3001:8080
expose:
- 8080
environment:
API_URL: http://localhost:3000/
depends_on:
- postgresql
- postgrest
PostgreSUS
PostgreSUS - инструмент для резервного копирования, с поддержкой локального хранение бекапов, а также в Google Drive или S3 совместимом хранилища по расписанию с проверкой доступности (health check), визуализации в веб-интерфейсе и оповщениями в Telegram, Slack, Discord и другие системы.
services:
postgresus:
image: rostislavdugin/postgresus:latest
container_name: postgresus
restart: unless-stopped
ports:
- 4005:4005
volumes:
- ./postgresus-data:/postgresus-data
depends_on:
- postgresql
Patroni
Patroni - шаблон для обеспечения высокой доступности (HA) серверов баз данных PostgreSQL с помощью etcd, HashiCorp/Consul, Apache/ZooKeeper или Kubernetes.
services:
haproxy:
image: haproxy:latest
container_name: haproxy
restart: unless-stopped
ports:
- 5430:5430 # Write endpoint (master)
- 5431:5431 # Read endpoint (replicas)
- 7000:7000 # Stats dashboard
networks:
- patroni-net
volumes:
- ./haproxy.cfg:/usr/local/etc/haproxy/haproxy.cfg:ro
depends_on:
- patroni1
- patroni2
- patroni3
# Patroni Node 1
patroni1:
image: postgres:17.2
container_name: patroni1
restart: unless-stopped
environment:
- PATRONI_NAME=patroni1
- PATRONI_RAFT_SELF_ADDR=patroni1:2221
- PATRONI_POSTGRESQL_DATA_DIR=/var/lib/postgresql/data
- PATRONI_POSTGRESQL_CONNECT_ADDRESS=patroni1:5432
- PATRONI_POSTGRESQL_LISTEN=0.0.0.0:5432
- PATRONI_RESTAPI_CONNECT_ADDRESS=patroni1:8008
- PATRONI_RESTAPI_LISTEN=0.0.0.0:8008
- PATRONI_SCOPE=mycluster
- PATRONI_SUPERUSER_USERNAME=postgres
- PATRONI_SUPERUSER_PASSWORD=postgres
- PATRONI_REPLICATION_USERNAME=replicator
- PATRONI_REPLICATION_PASSWORD=replicatorpass
- PATRONI_admin_PASSWORD=admin
# ports:
# - 5432:5432
# - 8008:8008
# - 2221:2221
networks:
- patroni-net
volumes:
- ./patroni1_data:/var/lib/postgresql/data
- ./patroni.yml:/etc/patroni.yml:ro
command: patroni /etc/patroni.yml
# Patroni Node 2
patroni2:
image: postgres:17.2
container_name: patroni2
restart: unless-stopped
environment:
- PATRONI_NAME=patroni2
- PATRONI_RAFT_SELF_ADDR=patroni2:2222
- PATRONI_POSTGRESQL_DATA_DIR=/var/lib/postgresql/data
- PATRONI_POSTGRESQL_CONNECT_ADDRESS=patroni2:5432
- PATRONI_POSTGRESQL_LISTEN=0.0.0.0:5432
- PATRONI_RESTAPI_CONNECT_ADDRESS=patroni2:8008
- PATRONI_RESTAPI_LISTEN=0.0.0.0:8008
- PATRONI_SCOPE=mycluster
- PATRONI_SUPERUSER_USERNAME=postgres
- PATRONI_SUPERUSER_PASSWORD=postgres
- PATRONI_REPLICATION_USERNAME=replicator
- PATRONI_REPLICATION_PASSWORD=replicatorpass
- PATRONI_admin_PASSWORD=admin
# ports:
# - 5433:5432
# - 8009:8008
# - 2222:2222
networks:
- patroni-net
volumes:
- ./patroni2_data:/var/lib/postgresql/data
- ./patroni.yml:/etc/patroni.yml:ro
command: patroni /etc/patroni.yml
# Patroni Node 3
patroni3:
image: postgres:17.2
container_name: patroni3
restart: unless-stopped
environment:
- PATRONI_NAME=patroni3
- PATRONI_RAFT_SELF_ADDR=patroni3:2223
- PATRONI_POSTGRESQL_DATA_DIR=/var/lib/postgresql/data
- PATRONI_POSTGRESQL_CONNECT_ADDRESS=patroni3:5432
- PATRONI_POSTGRESQL_LISTEN=0.0.0.0:5432
- PATRONI_RESTAPI_CONNECT_ADDRESS=patroni3:8008
- PATRONI_RESTAPI_LISTEN=0.0.0.0:8008
- PATRONI_SCOPE=mycluster
- PATRONI_SUPERUSER_USERNAME=postgres
- PATRONI_SUPERUSER_PASSWORD=postgres
- PATRONI_REPLICATION_USERNAME=replicator
- PATRONI_REPLICATION_PASSWORD=replicatorpass
- PATRONI_admin_PASSWORD=admin
# ports:
# - 5434:5432
# - 8010:8008
# - 2223:2223
networks:
- patroni-net
volumes:
- ./patroni3_data:/var/lib/postgresql/data
- ./patroni.yml:/etc/patroni.yml:ro
command: patroni /etc/patroni.yml
networks:
patroni-net:
driver: bridge
Ivory
Ivory - инструмент для визуализации работы с кластерами Postgres, который представляет из себя веб-интерфейс управления кластером Patroni и конструктор запросов Postgres.
services:
# Patroni Cluster Web Manager
ivory:
image: veegres/ivory:latest
container_name: ivory
restart: unless-stopped
ports:
- 7070:80
Backup Stack
Duplicati
Duplicati - клиент резервного копирования, который безопасно хранит зашифрованные, инкрементальные и сжатые резервные копии в облачных хранилищах и на удаленных файловых серверах (поддерживает SFTP, WebDAV, S3-совместимые, Google Cloud и другие системы хранения). Поддерживает плагины, например, отправку оповещений в Telegram.
services:
duplicati:
image: lscr.io/linuxserver/duplicati:latest
container_name: duplicati
restart: unless-stopped
environment:
- PUID=0
- PGID=0
- TZ=Etc/UTC+3
- SETTINGS_ENCRYPTION_KEY=DuplicatiKey
- DUPLICATI__WEBSERVICE_PASSWORD=DuplicatiAdmin
- CLI_ARGS=
volumes:
- ./duplicati_config:/config
- ./duplicati_backup:/backups
- /home/lifailon/docker:/source:ro
- ./duplicati_restore:/restore
ports:
- 8200:8200
Kopia
Kopia - кроссплатформенный инструмент резервного копирования для Windows, macOS и Linux с быстрым инкрементным резервным копированием, сквозным шифрованием на стороне клиента, сжатием и дедупликацией данных. Поддерживается Веб-интерфейс поверх cli в стиле отображения флагов для исполняемого файла.
services:
kopia:
image: kopia/kopia:latest
container_name: kopia
restart: unless-stopped
ports:
- 51515:51515
command:
- server
- start
- --disable-csrf-token-checks
- --insecure
- --address=0.0.0.0:51515
- --server-username=admin
- --server-password=KopiaAdmin
environment:
- KOPIA_PASSWORD=KopiaAdmin
- USER=User
volumes:
- ./kopia_config:/app/config
- ./kopia_cache:/app/cache
- ./kopia_logs:/app/logs
- ./kopia_backup:/repository
- /home/lifailon/docker:/data:ro
Restic
Restic — это быстрая, эффективная и безопасная программа для резервного копирования, которая поддерживает хранение резервных копий на S3, SFTP, REST Server, Rclone как backend и других хранилищах.
Backrest — это веб-интерфейс для резервного копирования, построенное на основе Restic.
services:
backrest:
image: garethgeorge/backrest:latest
container_name: backrest
restart: unless-stopped
hostname: backrest
volumes:
- ./backrest/data:/data
- ./backrest/config:/config
- ./backrest/cache:/cache
- ./backrest/tmp:/tmp
- ./backrest/rclone:/root/.config/rclone # Mount for rclone config (needed when using rclone remotes)
- /path/to/backup/data:/userdata # Mount local paths to backup
- /path/to/local/repos:/repos # Mount local repos (optional for remote storage)
environment:
- BACKREST_DATA=/data
- BACKREST_CONFIG=/config/config.json
- XDG_CACHE_HOME=/cache
- TMPDIR=/tmp
- TZ=Etc/UTC+3
ports:
- 9898:9898
FS Stack
Samba
Samba - SMB/CIFS сервер для запуска в контейнере Docker, без конфигурации и с поддержкой корзины по умолчанию (директория .deleted в корне шары).
services:
samba:
image: dperson/samba
container_name: samba
restart: always
volumes:
- /home/lifailon/docker:/share
ports:
- 139:139
- 445:445
environment:
- USERID=1000
- GROUPID=1000
- SAMBA_USER=admin
- SAMBA_PASS=admin
command: |
-u "$${SAMBA_USER};$${SAMBA_PASS}"
-s "docker;/share;yes;no;no;$${SAMBA_USER};$${SAMBA_USER}"
-p
FileBrowser
FileBrowser - веб-интерфейс для управления файлами в указанном каталоге. Поддерживает управление пользователями, загрузку, удаление, просмотр и редактирование файлов.
services:
# mkdir filebrowser_data filebrowser_conf && chown -R 1000:1000 filebrowser_data filebrowser_conf
file-browser:
image: filebrowser/filebrowser
container_name: file-browser
restart: unless-stopped
user: 0:0
volumes:
- $HOME:/srv # root directory
- ./filebrowser_data:/database # filebrowser.db
- ./filebrowser_conf:/config # settings.json
ports:
- 8300:80
DuFS
DuFS - уникальный служебный файловый сервер, который поддерживает статическое обслуживание, загрузку, поиск и удаленное управление через API.
services:
dufs:
image: sigoden/dufs
container_name: dufs
restart: unless-stopped
ports:
- 5000:5000
volumes:
- $HOME:/data
- ./config.yaml:/config.yaml
command: /data -A # --config /config.yaml
Syncthing
Syncthing - программа для непрерывной синхронизации файлов между двумя или более компьютерами. Работает на основе Block Exchange Protocol (BEP) для обмена данными, который использует TLS-шифрование для безопасной передачи данных по протоколу TCP.
services:
file-syncthing:
image: syncthing/syncthing
container_name: file-syncthing
restart: unless-stopped
network_mode: host
# ports:
# - 8384:8384 # Web UI
# - 22000:22000/tcp # TCP file transfers
# - 22000:22000/udp # QUIC file transfers
# - 21027:21027/udp # Receive local discovery broadcasts
environment:
- PUID=0
- PGID=0
volumes:
- ./syncthing_data:/var/syncthing # configs
- $HOME/docker:/sync_data # src sync data on server
# - ./backup:/sync_data # dst sync data on client (mkdir backup && chown -R 1000:1000 backup)
healthcheck:
test: curl -fkLsS -m 2 127.0.0.1:8384/rest/noauth/health | grep -o --color=never OK || exit 1
interval: 1m
timeout: 10s
retries: 3
h5ai
h5ai - современный интерфейс веб-сервера для файлового индексера. Визуально напоминается FTP сервер для удобного отображения и загрузки (например, его использует Libretro/RetroArch для публикации релизов).
services:
h5ai:
image: awesometic/h5ai
container_name: h5ai
restart: unless-stopped
environment:
- PUID=1000
- PGID=1000
- TZ=Etc/GMT+3
- HTPASSWD=false
- HTPASSWD_USER=admin
- HTPASSWD_PW=admin
volumes:
- $HOME/docker:/h5ai # public data
- ./h5ai_conf:/config
ports:
- 8889:80
SFTPGo
SFTPGo - сервер SFTP, HTTP/S, FTP/S и WebDAV, с поддержкой объектное-совместимого S3 хранилища, Google Cloud Storage, файловой системы хранкения и другие SFTP-серверы.
services:
sftpgo:
image: drakkan/sftpgo:edge
container_name: sftpgo
restart: unless-stopped
ports:
- 2022:2022
- 8088:8080
S3 Stack
MinIO
MinIO - высокопроизводительное, совместимое S3 решение для хранения объектов с встроенной системой высокой доступности (например, используется в Velero для хранения данных резервного копирования Kubernetes).
services:
minio1:
image: minio/minio
container_name: minio1
restart: unless-stopped
hostname: minio1
command: server http://minio1:9000/data http://minio2:9000/data --console-address ":9001"
environment:
- MINIO_ROOT_USER=admin
- MINIO_ROOT_PASSWORD=MinioAdmin
volumes:
- ./minio1_data:/data
ports:
- 9000:9000 # API
- 9001:9001 # WebUI
minio2:
image: minio/minio
container_name: minio2
restart: unless-stopped
hostname: minio2
command: server http://minio1:9000/data http://minio2:9000/data --console-address ":9001"
environment:
MINIO_ROOT_USER: admin
MINIO_ROOT_PASSWORD: MinioAdmin
volumes:
- ./minio2_data:/data
ports:
- 9002:9000
- 9003:9001
s3fs
s3fs - инструмент для монтирования S3 совместимого хранилища на базе FUSE, позволяя управлять файлами и каталогами в локальной файловой системе.
services:
s3fs:
image: efrecon/s3fs:1.95
container_name: velero_data
restart: unless-stopped
privileged: true
stdin_open: true
tty: true
devices:
- /dev/fuse
cap_add:
- SYS_ADMIN
security_opt:
- apparmor=unconfined
environment:
- AWS_S3_URL=http://minio1:9000
- AWS_S3_BUCKET=velero
- AWS_S3_ACCESS_KEY_ID=admin
- AWS_S3_SECRET_ACCESS_KEY=MinioAdmin
- S3FS_ARGS=use_path_request_style,allow_other
volumes:
- ./velero_data:/opt/s3fs/bucket:rshared
Cloud Stack
NextCloud
NextCloud - кросплатфоренная и self-hosted облачная система хранения (fork ownCloud от 2016 года) с возможностью расширения за счет плагинов (поддерживает ВКС на базе Talk, Kanban на базе Deck и ряд других возможностей).
services:
nextcloud:
image: nextcloud
container_name: nextcloud
restart: unless-stopped
environment:
- POSTGRES_HOST=nextcloud-db
- POSTGRES_DB=nextcloud
- POSTGRES_USER=nextcloud
# - POSTGRES_PASSWORD=NextCloudAdmin
- POSTGRES_PASSWORD_FILE=/run/secrets/postgres_password
# - MYSQL_HOST=nextcloud-db
# - MYSQL_DATABASE=nextcloud
# - MYSQL_USER=nextcloud
# - MYSQL_PASSWORD=NextCloudAdmin
volumes:
# - smb_volume_web:/var/www/html
- ./nextcloud_data/web:/var/www/html
ports:
- 8866:80
depends_on:
- nextcloud-db
nextcloud-db:
image: postgres:15
container_name: nextcloud-db
restart: unless-stopped
environment:
- POSTGRES_DB=nextcloud
- POSTGRES_USER=nextcloud
# - POSTGRES_PASSWORD=NextCloudAdmin
- POSTGRES_PASSWORD_FILE=/run/secrets/postgres_password
volumes:
# - smb_volume_db:/var/lib/postgresql/data
- ./nextcloud_data/db:/var/lib/postgresql/data
secrets:
- postgres_password
# nextcloud-db:
# image: mariadb:10.6
# container_name: nextcloud-db
# restart: unless-stopped
# command: --transaction-isolation=READ-COMMITTED --log-bin=binlog --binlog-format=ROW
# environment:
# - MYSQL_DATABASE=nextcloud
# - MYSQL_USER=nextcloud
# - MYSQL_PASSWORD=NextCloudAdmin
# - MYSQL_ROOT_PASSWORD=NextCloudAdmin
# volumes:
# - smb_volume_db:/var/lib/mysql
secrets:
postgres_password:
file: ./postgres_password
# volumes:
# smb_volume_web:
# driver_opts:
# type: cifs
# o: username=guest,password=,uid=1000,gid=1000
# device: //192.168.3.100/docker-data/nextcloud/web
# smb_volume_db:
# driver_opts:
# type: cifs
# o: username=guest,password=,uid=1000,gid=1000
# device: //192.168.3.100/docker-data/nextcloud/db
postgres_password:
NextCloudAdmin
ownCloud
ownCloud - прародитель NextCloud, основанный в 2010 году.
services:
owncloud:
image: owncloud/server:${OWNCLOUD_VERSION}
container_name: owncloud_server
restart: always
ports:
- ${HTTP_PORT}:8080
depends_on:
- mariadb
- redis
environment:
- OWNCLOUD_DOMAIN=${OWNCLOUD_DOMAIN}
- OWNCLOUD_TRUSTED_DOMAINS=${OWNCLOUD_TRUSTED_DOMAINS}
- OWNCLOUD_DB_TYPE=mysql
- OWNCLOUD_DB_NAME=owncloud
- OWNCLOUD_DB_USERNAME=owncloud
- OWNCLOUD_DB_PASSWORD=owncloud
- OWNCLOUD_DB_HOST=mariadb
- OWNCLOUD_ADMIN_USERNAME=${ADMIN_USERNAME}
- OWNCLOUD_ADMIN_PASSWORD=${ADMIN_PASSWORD}
- OWNCLOUD_MYSQL_UTF8MB4=true
- OWNCLOUD_REDIS_ENABLED=true
- OWNCLOUD_REDIS_HOST=redis
healthcheck:
test:
interval: 30s
timeout: 10s
retries: 5
volumes:
- files:/mnt/data
mariadb:
image: mariadb:10.11
container_name: owncloud_mariadb
restart: always
environment:
- MYSQL_ROOT_PASSWORD=owncloud
- MYSQL_USER=owncloud
- MYSQL_PASSWORD=owncloud
- MYSQL_DATABASE=owncloud
- MARIADB_AUTO_UPGRADE=1
command:
healthcheck:
test:
interval: 10s
timeout: 5s
retries: 5
volumes:
- mysql:/var/lib/mysql
redis:
image: redis:6
container_name: owncloud_redis
restart: always
command:
healthcheck:
test:
interval: 10s
timeout: 5s
retries: 5
volumes:
- redis:/data
volumes:
files:
driver: local
mysql:
driver: local
redis:
driver: local
env:
OWNCLOUD_VERSION=10.15
OWNCLOUD_DOMAIN=localhost:8080
OWNCLOUD_TRUSTED_DOMAINS=localhost
ADMIN_USERNAME=admin
ADMIN_PASSWORD=admin
HTTP_PORT=8080
DNS Stack
Technitium DNS Server
Technitium DNS Server - авторитетный, рекурсивный и кэширующий DNS-сервер, который можно использовать для самостоятельного хостинга DNS. Поддерживает кластеризацию (в 14 релизе от 08.11.2025), записи в формате wildcard для субдоменов, черные списки с автоматически обновлением из файлов и url (с поддержкой regex), браузер для управления кешем, API, встроенный DNS-клиент, магазин приложение и многое другое.
services:
tech-dns-srv:
image: technitium/dns-server:latest
container_name: tech-dns-srv
restart: always
volumes:
- ./dns_data:/etc/dns
environment:
- DNS_SERVER_DOMAIN=dns.docker.local # Основное доменное имя, используемое этим DNS-сервером для своей идентификации.
- DNS_SERVER_FORWARDERS=1.1.1.1,8.8.8.8 # Список адресов пересылки, разделённых запятыми.
- DNS_SERVER_BLOCK_LIST_URLS=https://raw.githubusercontent.com/StevenBlack/hosts/master/hosts
# - DNS_SERVER_ADMIN_PASSWORD=password # Пароль администратора веб-консоли DNS.
# - DNS_SERVER_ADMIN_PASSWORD_FILE=password.txt # Путь к файлу, содержащему текстовый пароль администратора веб-консоли DNS.
# - DNS_SERVER_PREFER_IPV6=false # DNS-сервер будет использовать IPv6 для запросов, когда это возможно, если эта опция включена.
# - DNS_SERVER_WEB_SERVICE_LOCAL_ADDRESSES=172.17.0.1,127.0.0.1 # Список IP-адресов сетевых интерфейсов, разделённых запятыми, запросы на которых должен прослушивать веб-сервис. Адрес «172.17.0.1» — это встроенный мост Docker. Если не указано иное, «[::]» используется по умолчанию. Примечание! Этот параметр следует использовать только в сетевом режиме «host».
# - DNS_SERVER_WEB_SERVICE_HTTP_PORT=5380 # Номер порта TCP для веб-консоли DNS по протоколу HTTP.
# - DNS_SERVER_WEB_SERVICE_HTTPS_PORT=53443 # Номер порта TCP для веб-консоли DNS по протоколу HTTPS.
# - DNS_SERVER_WEB_SERVICE_ENABLE_HTTPS=false # Включает HTTPS для веб-консоли DNS.
# - DNS_SERVER_WEB_SERVICE_USE_SELF_SIGNED_CERT=false # Включает самоподписанный TLS-сертификат для веб-консоли DNS.
# - DNS_SERVER_OPTIONAL_PROTOCOL_DNS_OVER_HTTP=false # Включает использование дополнительного протокола DNS-сервера DNS-over-HTTP на TCP-порту 8053 с обратным прокси-сервером, завершающим TLS, например, nginx.
# - DNS_SERVER_RECURSION=AllowOnlyForPrivateNetworks # Параметры рекурсии: Allow, Deny, AllowOnlyForPrivateNetworks, UseSpecifiedNetworkACL.
# - DNS_SERVER_RECURSION_NETWORK_ACL=192.168.10.0/24 # Список IP-адресов или сетевых адресов, разделенных запятыми, для разрешения доступа. Добавьте символ «!» в начале, чтобы запретить доступ, например, «!192.168.10.0/24» запретит всю подсеть. Список ACL обрабатывается в том же порядке, в котором он указан. Если ни одна сеть не совпадает, политика по умолчанию запрещает все, кроме петлевой. Действительно только для параметра рекурсии `UseSpecifiedNetworkACL`.
# - DNS_SERVER_RECURSION_DENIED_NETWORKS=1.1.1.0/24 # Список IP-адресов или сетевых адресов, разделенных запятыми, для запрета рекурсии. Действительно только для параметра рекурсии `UseSpecifiedNetworkACL`. Этот параметр устарел, вместо него следует использовать DNS_SERVER_RECURSION_NETWORK_ACL.
# - DNS_SERVER_ENABLE_BLOCKING=false # Настраивает DNS-сервер на блокировку доменных имён с использованием заблокированной зоны и зоны списка заблокированных доменов.
# - DNS_SERVER_ALLOW_TXT_BLOCKING_REPORT=false # Указывает, должен ли DNS-сервер отвечать TXT-записями, содержащими отчёт о заблокированном домене, на запросы типа TXT.
# - DNS_SERVER_FORWARDER_PROTOCOL=Tcp # Параметры протокола пересылки: Udp, TCP, Tls, HTTPS, HttpsJson.
# - DNS_SERVER_LOG_USING_LOCAL_TIME=true # Включите этот параметр, чтобы использовать локальное время вместо UTC для ведения журнала.
# Использовать сеть хоста в режиме DHCP или при использование кластеризации для инициализации внешнего IP
# network_mode: host
ports:
- 5380:5380/tcp # Web UI HTTP
# - 53443:53443/tcp # Web UI HTTPS
- 53:53/udp # DNS UDP
- 53:53/tcp # DNS TCP
# - 853:853/udp # DNS-over-QUIC service
# - 853:853/tcp # DNS-over-TLS service
# - 443:443/udp # DNS-over-HTTPS service (HTTP/3)
# - 443:443/tcp # DNS-over-HTTPS service (HTTP/1.1, HTTP/2)
# - 80:80/tcp # DNS-over-HTTP service (use with reverse proxy or certbot certificate renewal)
# - 8053:8053/tcp # DNS-over-HTTP service (use with reverse proxy)
# - 67:67/udp # DHCP service
# - 53443:53443/tcp # Cluster
# sysctls:
# - net.ipv4.ip_local_port_range=1024 65000
Pi-hole
Pi-hole - популярное и легковесное решение для блокировки рекламы (отображает график блокировок, автоматически обновляет списки и поддерживает простое API).
Pi-hole Exporter - экспортер метрик для Prometheus.
services:
# DNS Server + AdBlock
pihole-server:
container_name: pihole-server
image: pihole/pihole:latest
restart: unless-stopped
ports:
# DNS
- 53:53/tcp
- 53:53/udp
# HTTP
- 8000:8000/tcp
# HTTPS
# - 4443:4443/tcp
# DHCP
# - 67:67/udp
environment:
- TZ=Etc/GMT+3
- FTLCONF_webserver_api_password=PiHoleAdmin # или docker logs pihole-server | grep random
- FTLCONF_dns_upstreams=8.8.8.8;1.1.1.1 # корневые DNS-сервера верхнего уровн (TLD), на которые пересылаются запросы
volumes:
- ./pihole_data:/etc/pihole
# - ./pihole.toml:/etc/pihole/pihole.toml
# - ./custom.list:/etc/pihole/hosts/custom.list
# - ./hosts:/etc/hosts
# Для использования DHCP сервера
# cap_add:
# - NET_ADMIN
# Пробросить хостовую сеть и использовать режим listeningMode = "LOCAL"
network_mode: host
# Prometheus metrics from pi-hole
pihole-exporter:
container_name: pihole-exporter
image: ekofr/pihole-exporter:latest
restart: unless-stopped
environment:
# - PIHOLE_HOSTNAME=pihole-server
- PIHOLE_HOSTNAME=192.168.3.105 # если pihole-server в режиме network_mode: host, указать ip-адрес хоста (или localhost и тоже использовать network_mode: host)
- PIHOLE_PROTOCOL=http
- PIHOLE_PORT=8000
- PIHOLE_PASSWORD=PiHoleAdmin
- INTERVAL=90s
- PORT=9617
ports:
- 9617:9617
depends_on:
- pihole-server
AdGuard Home
AdGuard Home - более современный блокировщик рекламы и отслеживания.
AdGuard Home Sync - синхронизирует конфигурацию AdGuardHome (DNS записи, клиенты, фильтры и общие настройки) с экземплярами реплик.
services:
adguardhome-server:
image: adguard/adguardhome
container_name: adguardhome-server
restart: unless-stopped
volumes:
- ./adguardhome_server_data:/opt/adguardhome/work
- ./adguardhome_server_conf:/opt/adguardhome/conf
ports:
# DNS
- "53:53/tcp"
- "53:53/udp"
# DHCP
# - "67:67/udp"
# - "68:68/udp"
# Web
- "80:80/tcp"
- "443:443/tcp"
- "443:443/udp"
# Prometheus exporter
- "3000:3000/tcp"
# DNS over TLS
# - "853:853/tcp"
# DNS over QUIC
# - "784:784/udp"
# - "853:853/udp"
# - "8853:8853/udp"
# DNSCrypt
# - "5443:5443/tcp"
# - "5443:5443/udp"
# Reset password by hash:
# sudo apt-get install apache2
# htpasswd -B -C 10 -n -b admin AdHuardHome
# sudo nano adguard_conf/AdGuardHome.yaml
adguardhome-sync:
image: ghcr.io/bakito/adguardhome-sync
container_name: adguardhome-sync
restart: unless-stopped
command: run --config /config/adguardhome-sync.yaml
volumes:
- ./adguardhome-sync.yaml:/config/adguardhome-sync.yaml
ports:
- 8080:8080 # api + prometheus metrics
# adguardhome-sync:
# image: lscr.io/linuxserver/adguardhome-sync:latest
# container_name: adguardhome-sync
# restart: unless-stopped
# environment:
# - PUID=1000
# - PGID=1000
# - TZ=Etc/UTC+3
# - CONFIGFILE=/config/adguardhome-sync.yaml
# volumes:
# - ./adguardhome-sync.yaml:/config/adguardhome-sync.yaml
# ports:
# - 8080:8080
AdGuardian-Term - TUI интерфейс для управления AdGuard.
docker run -it lissy93/adguardian
CoreDNS
CoreDNS сервер с встроенным плагином blocklist.
services:
coredns-blocklist:
container_name: coredns-blocklist
image: lifailon/coredns-blocklist:latest
build:
context: .
dockerfile: coredns/Dockerfile
command: -conf /etc/coredns/Corefile
user: 1000:1000
volumes:
- ./coredns:/etc/coredns
environment:
- GOMAXPROCS=1
ports:
- 53:53/udp # DNS listener
- 9153:9153 # Prometheus metrics
PowerDNS
PowerDNS/PDNS - DNS сервер.
PowerDNS-Admin - веб-интерфейс для PowerDNS с расширенными функциями. Поддерживает управление прямыми и обратными зонами, контроль доступа в определенной зоне, управление пользователями (а также LDAP, OAuth и 2FA), ведение журнала активности, конфигурация службы PDNS и мониторинг статистики, предоставляет API для управления зонами и записями, а также другие функции.
services:
powerdns-server:
image: powerdns/pdns-auth-49:latest
container_name: powerdns-server
restart: unless-stopped
environment:
POWERDNS_launch: gsqlite3
POWERDNS_gsqlite3_database: /var/lib/powerdns/pdns.sqlite
POWERDNS_api: yes
POWERDNS_api_key: power-dns-api-key
POWERDNS_webserver: yes
POWERDNS_webserver_address: 0.0.0.0
POWERDNS_webserver_port: 8081
POWERDNS_webserver_allow_from: 0.0.0.0/0,::/0
ports:
- 53:53/udp
- 53:53/tcp
- 8081:8081
volumes:
- ./powerdns_db_data:/var/lib/powerdns
networks:
- powerdns-network
powerdns-admin:
image: ngoduykhanh/powerdns-admin:latest
container_name: powerdns-admin
restart: unless-stopped
environment:
- PDNS_API_URL=http://powerdns-server:8081
- PDNS_API_KEY=power-dns-api-key
- PDNS_VERSION=4.9.0
ports:
- 9191:80
volumes:
- ./powerdns_admin_data:/var/lib/powerdns-admin
networks:
- powerdns-network
depends_on:
- powerdns-server
networks:
powerdns-network:
Blocky
Blocky - быстрый и легкий DNS-прокси как блокировщик рекламы для локальной сети с множеством функций, поддерживает управление через встроенный RapiDoc.
services:
blocky:
image: spx01/blocky
container_name: blocky
restart: unless-stopped
hostname: blocky-01
ports:
- 53:53/tcp
- 53:53/udp
- 4000:4000/tcp # RapiDoc
environment:
- TZ=Etc/GMT+3
volumes:
- /etc/localtime:/etc/localtime:ro
- ./config.yml:/app/config.yml:ro # Custom config
blocky-swagger:
image: docker.swagger.io/swaggerapi/swagger-ui
container_name: blocky-swagger
restart: unless-stopped
ports:
- 4001:8080
environment:
- SWAGGER_JSON_URL=blocky:4000/docs/openapi.yaml
depends_on:
- blocky
Gravity
Gravity - легковесное решение DNS, DHCP и TFTP сервера, использующее etcd для полной репликации, подходящее для малых и средних сетей. Поддерживает встроенную кластеризацию (HA), кеширование DNS, блокировку рекламы и метрики Prometheus, а также современный интерфейс с графиками.
services:
gravity:
image: ghcr.io/beryju/gravity:stable
container_name: gravity
restart: unless-stopped
# Important for this to be static and unique
hostname: gravity-01
network_mode: host
user: root
volumes:
- ./gravity_data:/data
logging:
driver: json-file
options:
max-size: "10m"
max-file: "3"
GoAway
GoAway - легкий DNS-сервер, с блокировкой рекрамы и современным интерфейсом панели управления (like Pi-hole).
services:
goaway:
image: pommee/goaway:latest
container_name: goaway
restart: unless-stopped
cap_add:
- NET_BIND_SERVICE
- NET_RAW
volumes:
- ./goaway_config:/app/config # Custom settings.yaml configuration
- ./goaway_data:/app/data # Database
environment:
- DNS_PORT=53
- WEBSITE_PORT=8080
# - DOT_PORT=853
ports:
- 53/udp
- 53/tcp
- 8053:8080
Proxy Stack
Traefik
Traefik - обратный прокси сервер с поддержкой автоматического опредиления сервисов Docker, встроенным веб интерфейсом, метриками Prometheus и трассировкой OTLP.
services:
traefik:
image: traefik:v3
container_name: traefik
restart: always
# Используем режим хоста для доступа к сети всех контейнеров
network_mode: host
# ports:
# - 8080:8080 # Web UI
# - 80:80 # HTTP Proxy
# - 443:443 # HTTPS Proxy
# - 4318:4318 # Prometheus Metrics
dns:
- 127.0.0.1
volumes:
- ./traefik.yml:/etc/traefik/traefik.yml
- ./rules:/rules
- /var/run/docker.sock:/var/run/docker.sock:ro
healthcheck:
test: wget -qO- http://127.0.0.1:8080/ping
start_period: 10s
interval: 30s
timeout: 5s
retries: 5
labels:
# Включаем маршрутизацию и определяем имя хоста
- traefik.enable=true
- traefik.http.routers.traefik.rule=Host(`traefik.docker.local`)
# Указываем порт назначения в контейнере (если используется несколько портов)
- traefik.http.services.traefik.loadbalancer.server.port=8080
# Создаем базовую авторизацию
- traefik.http.middlewares.basic-auth-traefik.basicauth.users=admin:$$2y$$05$$c0r5A6SCKX4R6FjuCgRqrufbIE5tmXw2sDPq1vZ8zNrrwNZIH9jgW # htpasswd -nbB admin admin
# Включаем базовую авторизацию в маршрутизацию текущего сервиса
- traefik.http.routers.traefik.middlewares=basic-auth-traefik
# Настраиваем подключение к Authentik
# - traefik.http.middlewares.authentik.forwardauth.address=http://192.168.3.101:9000/outpost.goauthentik.io/auth/traefik
# - traefik.http.middlewares.authentik.forwardauth.trustForwardHeader=true
# - traefik.http.middlewares.authentik.forwardauth.authResponseHeaders=X-authentik-username,X-authentik-groups,X-authentik-entitlements,X-authentik-email,X-authentik-name,X-authentik-uid,X-authentik-jwt,X-authentik-meta-jwks,X-authentik-meta-outpost,X-authentik-meta-provider,X-authentik-meta-app,X-authentik-meta-version
# Включаем авторизацию через Authentik из провайдера Docker
# - traefik.http.routers.traefik.middlewares=authentik@docker
# Включаем авторизацию через Authentik из провайдера file
# - traefik.http.routers.traefik.middlewares=authentik@file
jaeger:
image: jaegertracing/all-in-one:1.55
container_name: jaeger
restart: always
ports:
- 16686:16686 # UI
- 4317:4317 # Collector
tech-dns-srv:
image: technitium/dns-server:latest
container_name: tech-dns-srv
restart: always
volumes:
- ./dns_data:/etc/dns
environment:
- DNS_SERVER_DOMAIN=dns.docker.local
- DNS_SERVER_FORWARDERS=1.1.1.1,8.8.8.8
- DNS_SERVER_BLOCK_LIST_URLS=https://raw.githubusercontent.com/StevenBlack/hosts/master/hosts
network_mode: host
# ports:
# - 5380:5380/tcp
# - 53:53/udp
# - 53:53/tcp
# - 53443:53443/tcp
# sysctls:
# - net.ipv4.ip_local_port_range=1024 65000
labels:
- traefik.enable=true
- traefik.http.routers.tech-dns-srv.rule=Host(`dns.docker.local`)
- traefik.http.services.tech-dns-srv.loadbalancer.server.port=5380
Nginx Proxy & Docker Gen
Nginx Proxy - настраивает контейнер, работающий под управлением nginx и docker-gen (docker-gen генерирует конфигурации обратного прокси-сервера для nginx и перезагружает nginx при запуске и остановке контейнеров).
Docker Gen - генератор файлов, который визуализирует шаблоны с использованием метаданных контейнера Docker.
ACME Companion - используется для автоматической генерации сертификатов letsencrypt, для хостов, использующих переменную LETSENCRYPT_HOST.
Nginx Exporter - экспортер метрик для Prometheus.
services:
# Proxy Server + docker-gen
nginx-proxy:
container_name: nginx-proxy
image: nginxproxy/nginx-proxy
restart: unless-stopped
volumes:
- /var/run/docker.sock:/tmp/docker.sock:ro
- ./nginx-status.conf:/etc/nginx/conf.d/status.conf # конфигурация для получения статуса с помощью nginx-exporter
ports:
- 80:80
- 443:443
# Apply config to any container on the host (not limited to the current stack in compose)
network_mode: host
# labels:
# - "com.github.jrcs.letsencrypt_nginx_proxy_companion.nginx_proxy=true"
# Prometheus metrics from nginx
nginx-exporter:
image: nginx/nginx-prometheus-exporter:latest
container_name: nginx-exporter
restart: unless-stopped
command:
- "--nginx.scrape-uri=http://localhost:80/status"
ports:
- "9113:9113"
network_mode: host
depends_on:
- nginx-proxy
# Автоматическая генерация сертификатов letsencrypt, для хостов, использующих переменную LETSENCRYPT_HOST
# acme-companion:
# image: nginxproxy/acme-companion
# container_name: nginx-proxy-acme
# depends_on:
# - nginx-proxy
# volumes:
# - /var/run/docker.sock:/var/run/docker.sock:ro
# - ./certs:/etc/nginx/certs
# - ./html:/usr/share/nginx/html
# - ./acme.sh:/etc/acme.sh
# environment:
# - DEFAULT_EMAIL=mail@yourdomain.tld
Nginx Proxy Manager
Nginx Proxy Manager - веб-интерфейс для управления Nginx сервером в роли Proxy сервера.
services:
nginx-proxy-db:
image: postgres:latest
container_name: nginx-proxy-db
restart: unless-stopped
environment:
POSTGRES_USER: "npm"
POSTGRES_PASSWORD: "npm_password"
POSTGRES_DB: "npm"
volumes:
- ./postgres:/var/lib/postgresql/data
networks:
- nginx-network
nginx-proxy-manager:
image: docker.io/jc21/nginx-proxy-manager:latest
container_name: nginx-proxy-manager
restart: unless-stopped
ports:
- 81:81 # Web interface
- 80:80 # Forward HTTP
- 443:443 # Forward HTTPS
environment:
- DB_POSTGRES_HOST=nginx-proxy-db
- DB_POSTGRES_PORT=5432
- DB_POSTGRES_USER=npm
- DB_POSTGRES_PASSWORD=npm_password
- DB_POSTGRES_NAME=npm
volumes:
- ./data:/data
- ./letsencrypt:/etc/letsencrypt
depends_on:
- nginx-proxy-db
networks:
- nginx-network
# Auth default for Web interface:
# login: admin@example.com
# pass: changeme
nginx-exporter:
image: nginx/nginx-prometheus-exporter:latest
container_name: nginx-exporter
restart: unless-stopped
ports:
- "9113:9113"
command:
- "--nginx.scrape-uri=http://nginx-proxy-manager:80/status"
depends_on:
- nginx-proxy-manager
networks:
- nginx-network
networks:
nginx-network:
driver: bridge
HAProxy
HAProxy - обратный прокси сервер и “умный” балансировщик нагрузки (поддерживает healthcheck для проверки доступности).
services:
httpbin-proxy:
image: haproxy:3.2.4-alpine
container_name: httpbin-proxy
restart: unless-stopped
ports:
- 8089:8080
- 2376:2376
volumes:
- ./haproxy.cfg:/haproxy.cfg
command:
- haproxy
- -f
- /haproxy.cfg
- -d
environment:
- STATS_USER=admin
- STATS_PASS=admin
- STATS_URI=/
- METRICS_URI=/metrics
httpbin-go:
image: ghcr.io/mccutchen/go-httpbin
container_name: httpbin-go
restart: unless-stopped
GoDoxy
GoDoxy - обратный прокси-сервер для контейнеров Docker или Podman с веб-интерфейсов и агентами для быстрого доступа к веб-интерфейсам сервисов, управления контейнерами и конфигурациями прокси сервера, мониторинга доступности и ресурсов серверов и контейнеров.
🔗 GoDoxy Demo ↗
services:
godoxy-frontend:
image: ghcr.io/yusing/godoxy-frontend:${TAG:-latest}
container_name: godoxy-frontend
restart: unless-stopped
user: 0:0
read_only: true
security_opt:
- no-new-privileges:true
cap_drop:
- all
tmpfs:
- /app/.next/cache
env_file: .env
labels:
proxy.aliases: godoxy
proxy.godoxy.port: 3000
network_mode: host
# ports:
# - 3000:3000
godoxy-proxy:
image: ghcr.io/yusing/godoxy:${TAG:-latest}
container_name: godoxy-proxy
restart: unless-stopped
user: 0:0
security_opt:
- no-new-privileges:true
cap_drop:
- all
cap_add:
- NET_BIND_SERVICE
# volumes:
# - ./config.yaml:/app/config/config.yaml
# - ./godoxy_data/logs:/app/logs
# - ./godoxy_data/error_pages:/app/error_pages:ro
# - ./godoxy_data/data:/app/data
# - ./godoxy_data/certs:/app/certs
env_file: .env
environment:
- DOCKER_HOST=tcp://127.0.0.1:2375
network_mode: host
# ports:
# - 8888:8888 # API
# - 80:80 # Proxy HTTP
# - 443:443 # Proxy HTTPS
env:
GODOXY_FRONTEND_ALIASES=godoxy.docker.local
# API listening address
GODOXY_API_ADDR=127.0.0.1:8888
SOCKET_PROXY_LISTEN_ADDR=127.0.0.1:2375
DOCKER_SOCKET=/var/run/docker.sock
# DOCKER_SOCKET=/var/run/podman/podman.sock
# Proxy listening address
GODOXY_HTTP_ADDR=:80
GODOXY_HTTPS_ADDR=:443
GODOXY_HTTP3_ENABLED=true
GODOXY_DEBUG=false
TAG=latest
TZ=ETC/UTC+3
GODOXY_UID=0
GODOXY_GID=0
GODOXY_API_JWT_SECURE=true
# openssl rand -base64 32
GODOXY_API_JWT_SECRET=VlB4wAw96yiXpmzz1XF8VtWDB2CP0D8RK3fSxPV/zuw=
# API/WebUI user password login credentials (optional)
GODOXY_API_USER=admin
GODOXY_API_PASSWORD=admin
# OIDC Configuration (optional)
# GODOXY_OIDC_ISSUER_URL=https://accounts.google.com
# GODOXY_OIDC_CLIENT_ID=your-client-id
# GODOXY_OIDC_CLIENT_SECRET=your-client-secret
# GODOXY_OIDC_SCOPES=openid, profile, email, groups # you may also include `offline_access` if your Idp supports it (e.g. Authentik, Pocket ID)
# GODOXY_OIDC_ALLOWED_USERS=user1,user2
# GODOXY_OIDC_ALLOWED_GROUPS=group1,group2
# Metrics
GODOXY_METRICS_DISABLE_CPU=false
GODOXY_METRICS_DISABLE_MEMORY=false
GODOXY_METRICS_DISABLE_DISK=false
GODOXY_METRICS_DISABLE_NETWORK=false
GODOXY_METRICS_DISABLE_SENSORS=false
Pangolin
Pangolin — это обратный прокси-сервер с туннелированием, размещаемый на собственном сервере, с контролем доступа на основе личности и контекста, разработанный для легкого раскрытия и защиты приложений, работающих где угодно. Pangolin выступает в роли центрального узла и соединяет изолированные сети, даже находящиеся за строгими брандмауэрами, через зашифрованные туннели, обеспечивая легкий доступ к удаленным сервисам без открытия портов и использования VPN.
services:
pangolin:
image: fosrl/pangolin:1.4.0
container_name: pangolin
restart: unless-stopped
volumes:
- ./config:/app/config
healthcheck:
test:
interval: "3s"
timeout: "3s"
retries: 15
gerbil:
image: fosrl/gerbil:1.0.0
container_name: gerbil
restart: unless-stopped
command:
- --reachableAt=http://gerbil:3003
- --generateAndSaveKeyTo=/var/config/key
- --remoteConfig=http://pangolin:3001/api/v1/gerbil/get-config
- --reportBandwidthTo=http://pangolin:3001/api/v1/gerbil/receive-bandwidth
volumes:
- ./config/:/var/config
ports:
- 51820:51820/udp
# Порты из traefik через network_mode
- 443:443
- 80:80
cap_add:
- NET_ADMIN
- SYS_MODULE
depends_on:
pangolin:
condition: service_healthy
traefik:
image: traefik:v3.3.3
container_name: traefik
restart: unless-stopped
# Порты для сервиса gerbil
network_mode: service:gerbil
command:
- --configFile=/etc/traefik/traefik_config.yml
volumes:
- ./traefik.yml:/etc/traefik/traefik.yml
- /var/run/docker.sock:/var/run/docker.sock:ro
# - ./letsencrypt:/letsencrypt
depends_on:
pangolin:
condition: service_healthy
networks:
default:
driver: bridge
name: pangolin
Tiny Proxy
tinyproxy — легковесный прямой (forward) HTTP/HTTPS-прокси-сервер.
services:
tinyproxy:
image: vimagick/tinyproxy
container_name: tinyproxy
restart: unless-stopped
ports:
- 1080:8888
volumes:
- ./tinyproxy.conf:/etc/tinyproxy/tinyproxy.conf
Proxyfor
Proxyfor - прямой (forward) и обратный прокси сервер с TUI и Веб-интерфейсом от создателя dufs для отображения и фильтрации запросов и ответов.
services:
proxyfor:
image: sigoden/proxyfor
container_name: proxyfor
restart: unless-stopped
volumes:
- ~/.proxyfor:/.proxyfor
# ports:
# - 1080:8080
network_mode: host
command: --listen 1080 --web
# Install Certificate Authority
# Linux
# sudo curl http://localhost:1080/__proxyfor__/certificate/proxyfor-ca-cert.pem -o /usr/local/share/ca-certificates/proxyfor.crt
# sudo update-ca-certificates
# Windows
# Invoke-RestMethod http://192.168.3.101:1080/__proxyfor__/certificate/proxyfor-ca-cert.cer -OutFile $HOME/Downloads/proxyfor-ca-cert.cer
# certutil -addstore root $HOME/Downloads/proxyfor-ca-cert.cer
Froxy
Froxy - кроссплатформенная утилита командной строки для реализации SOCKS, HTTP и обратного прокси сервера на базе .NET. Поддерживается протокол SOCKS5 для туннелирования TCP трафика и HTTP протокол для прямого (классического) проксирования любого HTTPS трафика (CONNECT запросы), а также TCP, UDP и HTTP/HTTPS протоколы для обратоного проксирования. Для переадресации веб-траффика через обратный прокси поддерживаются GET и POST запросы с передачей заголовков и тела запроса от клиента, что позволяет использовать API запросы и проходить авторизацию на сайтах (передача cookie).
services:
tmdb_web:
image: lifailon/froxy
environment:
SOCKS: "0"
FORWARD: "0"
LOCAL: "*:8001"
REMOTE: "https://themoviedb.org"
USER: "false"
PASSWORD: "false"
ports:
- "8001:8001"
tmdb_api:
image: lifailon/froxy
environment:
SOCKS: "0"
FORWARD: "0"
LOCAL: "*:8002"
REMOTE: "https://api.themoviedb.org"
USER: "false"
PASSWORD: "false"
ports:
- "8002:8002"
VRRP
KeepAlived
KeepAlived - используется для обеспечения высокой доступности (HA) за счет протокола VRRP (Virtual Router Redundancy Protocol), который поднимает один виртуальный IP-адрес для нескольких хостов с проверкой доступности и переключением адреса на другой хост в случае провального healthcheck. Чаще всего используется для отказоустойчивости балансировщиков нагрузки.
Образа контейнера на базе легковесного Alpine с использованием команд для установки и запуска keepalived.
services:
keepalived:
image: alpine:3.18
container_name: keepalived
restart: unless-stopped
cap_add:
- NET_ADMIN
- NET_BROADCAST
- NET_RAW
volumes:
- ./keepalived.conf:/etc/keepalived/keepalived.conf:ro
network_mode: host
command: |
sh -c "
apk add --no-cache keepalived curl &&
keepalived --dont-fork --log-console
"
SSO
Authentik
Authentik - IDP (поставщик идентификации) и SSO (единая точка входа), который построен с безопасностью в центре каждого фрагмента кода, каждой функции, с акцентом на гибкость и универсальность.
services:
authentik-postgres:
image: docker.io/library/postgres:16-alpine
container_name: authentik-postgres
restart: unless-stopped
env_file:
- .env
# ports:
# - 5432:5432
volumes:
- ./authentik_database:/var/lib/postgresql/data
healthcheck:
test:
- CMD-SHELL
- pg_isready -d $${POSTGRES_DB} -U $${POSTGRES_USER}
interval: 30s
retries: 5
start_period: 20s
timeout: 5s
authentik-redis:
image: docker.io/library/redis:alpine
restart: unless-stopped
container_name: authentik-redis
command: --save 60 1 --loglevel warning
# ports:
# - 6379:6379
volumes:
- ./redis_data:/data
healthcheck:
test:
- CMD-SHELL
- redis-cli ping | grep PONG
interval: 30s
retries: 5
start_period: 20s
timeout: 3s
authentik-server:
image: ghcr.io/goauthentik/server:2025.8.4
restart: unless-stopped
container_name: authentik-server
command: server
env_file:
- .env
ports:
- 9000:9000
- 9443:9443
volumes:
- ./authentik_media:/media
- ./authentik_custom-templates:/templates
depends_on:
authentik-postgres:
condition: service_healthy
authentik-redis:
condition: service_healthy
authentik-worker:
image: ghcr.io/goauthentik/server:2025.8.4
restart: unless-stopped
container_name: authentik-worker
command: worker
env_file:
- .env
user: root
volumes:
- ./authentik_media:/media
- ./authentik_certs:/certs
- ./authentik_custom-templates:/templates
- /var/run/docker.sock:/var/run/docker.sock
depends_on:
authentik-postgres:
condition: service_healthy
authentik-redis:
condition: service_healthy
# Go on http://authentik-server:9000/if/flow/initial-setup
env:
POSTGRES_DB=authentik
POSTGRES_USER=authentik
POSTGRES_PASSWORD=AuthentikAdmin
AUTHENTIK_POSTGRESQL__HOST=authentik-postgres
AUTHENTIK_POSTGRESQL__NAME=authentik
AUTHENTIK_POSTGRESQL__USER=authentik
AUTHENTIK_POSTGRESQL__PASSWORD=AuthentikAdmin
AUTHENTIK_REDIS__HOST=authentik-redis
AUTHENTIK_SECRET_KEY=J+fcRg0PtPRrILSeahxEtZwKGKM7irzJU15qp3ImG4XYoHyzsId5tnZjVoPs9XTnH5NwYaviRCVQZKSQ # openssl rand 60 | base64 -w 80
LDAP
LLDAP
LLDAP - облегченный сервер аутентификации (Light LDAP), предоставляющий продуманный и упрощенный интерфейс LDAP для аутентификации и современный интерфейс управления (интегрируется со многими бэкендами, от KeyCloak до Authelia, Nextcloud и другими).
services:
lldap:
image: lldap/lldap:stable
ports:
- 3890:3890 # LDAP
- 6360:6360 # LDAPS (LDAP Over SSL)
- 17170:17170 # Web front-end
volumes:
- ./lldap_data:/data
environment:
- UID=1000
- GID=1000
- TZ=Etc/UTC+3
- LLDAP_JWT_SECRET=REPLACE_WITH_RANDOM
- LLDAP_KEY_SEED=REPLACE_WITH_RANDOM
- LLDAP_LDAP_BASE_DN=dc=docker,dc=local
- LLDAP_LDAP_USER_PASS=LdapAdmin
# If using LDAPS, set enabled true and configure cert and key path
- LLDAP_LDAPS_OPTIONS__ENABLED=false
# - LLDAP_LDAPS_OPTIONS__CERT_FILE=/path/to/certfile.crt
# - LLDAP_LDAPS_OPTIONS__KEY_FILE=/path/to/keyfile.key
# Database
# - LLDAP_DATABASE_URL=mysql://mysql-user:password@mysql-server/my-database
# - LLDAP_DATABASE_URL=postgres://postgres-user:password@postgres-server/my-database
# SMTP
# - LLDAP_SMTP_OPTIONS__ENABLE_PASSWORD_RESET=true
# - LLDAP_SMTP_OPTIONS__SERVER=smtp.example.com
# - LLDAP_SMTP_OPTIONS__PORT=465
# - LLDAP_SMTP_OPTIONS__SMTP_ENCRYPTION=TLS
# - LLDAP_SMTP_OPTIONS__USER=no-reply@example.com
# - LLDAP_SMTP_OPTIONS__PASSWORD=PasswordGoesHere
# - LLDAP_SMTP_OPTIONS__FROM=no-reply <no-reply@example.com>
# - LLDAP_SMTP_OPTIONS__TO=admin <admin@example.com>
Glauth
Glauth - современный и молодой сервер аутентификации (Go-lang LDAP Authentication) с управлением через конфигурацию и поддержкой метрик Prometheus.
services:
glauth:
image: glauth/glauth:latest
container_name: glauth
restart: unless-stopped
environment:
- TZ=UTC
ports:
- 3893:3893 # LDAP port
# - 3894:3894 # LDAPS port
- 5555:5555 # API (Web UI and metrics for Prometheus)
volumes:
- ./glauth.cfg:/app/config/config.cfg
# sudo apt install ldap-utils
# ldapsearch -LLL -H ldap://localhost:3893 -D "cn=admin1,ou=admins,dc=docker,dc=local" -w LdapAdmin -b "dc=docker,dc=local" cn=admin2
OpenLDAP & phpLDAPadmin
OpenLDAP - реализация протокола Lightweight Directory Access Protocol с открытым исходным кодом. В состав входят LDAP-демон сервера (slapd) и автономный демон балансировки нагрузки LDAP (lloadd).
phpLDAPadmin - универсальный Веб-интерфейс для LDAP.
services:
ldap-backend:
image: osixia/openldap:latest
container_name: openldap
restart: unless-stopped
environment:
- LDAP_ORGANISATION=Docker Local
- LDAP_DOMAIN=docker.local
- LDAP_ADMIN_PASSWORD=LdapAdmin
ports:
- 1389:389
- 1636:636
volumes:
- ./ldap_data:/var/lib/ldap
- ./ldap_config:/etc/ldap/slapd.d
# healthcheck:
# test: ["CMD", "ldapsearch", "-H", "ldap://localhost:1389", "-D", "cn=admin,dc=docker,dc=local", "-w", "LdapAdmin", "-b", "dc=docker,dc=local"]
# interval: 30s
# timeout: 10s
# retries: 3
ldap-frontend:
image: osixia/phpldapadmin:latest
container_name: phpldapadmin
restart: unless-stopped
links:
- ldap-backend:ldap-host
environment:
- PHPLDAPADMIN_LDAP_HOSTS=ldap-host
- PHPLDAPADMIN_HTTPS=false
ports:
- 1443:443
depends_on:
- ldap-backend
# ldap-ui:
# image: dnknth/ldap-ui
# container_name: ldap-ui
# restart: unless-stopped
# ports:
# - 5000:5000
# environment:
# - LDAP_URL=ldap://ldap-backend/
# - BASE_DN=dc=docker,dc=local
# - BIND_DN=cn=admin,dc=docker,dc=local
# - BIND_PASSWORD=LdapAdmin
# depends_on:
# - ldap-backend
# Web UI: https://localhost:6443
# Login DN: cn=admin,dc=docker,dc=local
# Password: LdapAdmin
# sudo apt install ldap-utils
# ldapsearch -LLL -H ldap://localhost:1389 -D "cn=admin,dc=docker,dc=local" -w LdapAdmin -b "dc=docker,dc=local"
# TUI LDAP Client: https://github.com/Macmod/godap
# brew install godap
# godap localhost -P 1389 -u "cn=admin,dc=docker,dc=local" -p "LdapAdmin" -r "dc=docker,dc=local"
OpenDJ & LDAP UI
OpenDJ - совместимая служба каталогов, разработанная для платформы Java и обеспечивающая высокопроизводительное, высокодоступное и безопасное хранилище для идентификационных данных.
LDAP UI - минималистичный Веб-интерфейс для каталогов LDAP.
services:
ldap-server:
image: openidentityplatform/opendj:latest
container_name: opendj
restart: unless-stopped
hostname: ldap.docker.local
stdin_open: true
tty: true
ports:
- 1389:1389
- 1636:1636
- 4444:4444
environment:
- PORT=1389
- LDAPS_PORT=1636
- BASE_DN=dc=docker,dc=local
- ROOT_USER_DN=cn=admin
- ROOT_PASSWORD=LdapAdmin
# ldap-admin:
# image: osixia/phpldapadmin:latest
# container_name: phpldapadmin
# restart: unless-stopped
# environment:
# - PHPLDAPADMIN_LDAP_HOSTS=ldap-server
# - PHPLDAPADMIN_HTTPS=false
# ports:
# - 1443:443
# depends_on:
# - ldap-server
ldap-ui:
image: dnknth/ldap-ui
container_name: ldap-ui
restart: unless-stopped
ports:
- 5000:5000
environment:
- LDAP_URL=ldap://ldap-server/
- BASE_DN=dc=docker,dc=local
- BIND_DN=cn=admin,dc=docker,dc=local
- BIND_PASSWORD=LdapAdmin
depends_on:
- ldap-server
# sudo apt install ldap-utils
# ldapsearch -LLL -H ldap://localhost:1389 -D "cn=admin,dc=docker,dc=local" -w LdapAdmin -b "dc=docker,dc=local"
Docker Stack
Dockge
Dockge - веб-интерфейс для управления стеками Docker Compose от создателя Uptime-Kuma.
services:
# Web interface for Docker Compose
dockge:
image: louislam/dockge:1
container_name: dockge
restart: always
volumes:
- ./dockge_data:/app/data
- /var/run/docker.sock:/var/run/docker.sock
# Docker stacks directory on host:container
- /home/lifailon/docker:/home/lifailon/docker
# Enable routing for traffic
# labels:
# - traefik.enable=true
environment:
# Enable routing for docker-gen
# - VIRTUAL_HOST=dockge.local
- DOCKGE_STACKS_DIR=/home/lifailon/docker
# Доступ к консоли dockge
- DOCKGE_ENABLE_CONSOLE=true
ports:
- 5001:5001
Komodo
Komodo - система для управления и мониторинга контейнеров Docker и стеков Compose.
🔗 Komodo Demo ↗
services:
mongo:
image: mongo
container_name: komodo-db
restart: unless-stopped
command: --quiet --wiredTigerCacheSizeGB 0.25
labels:
komodo.skip: StopAllContainers
# ports:
# - 27017:27017
volumes:
- ./mongo_data:/data/db
- ./mongo_config:/data/configdb
environment:
MONGO_INITDB_ROOT_USERNAME: ${KOMODO_DB_USERNAME}
MONGO_INITDB_ROOT_PASSWORD: ${KOMODO_DB_PASSWORD}
core:
image: ghcr.io/moghtech/komodo-core:latest
container_name: komodo-core
restart: unless-stopped
labels:
komodo.skip: StopAllContainers
ports:
- 9120:9120
env_file: .env
environment:
KOMODO_DATABASE_ADDRESS: mongo:27017
KOMODO_DATABASE_USERNAME: ${KOMODO_DB_USERNAME}
KOMODO_DATABASE_PASSWORD: ${KOMODO_DB_PASSWORD}
volumes:
- ./backups:/backups
## Store sync files on server
# - /path/to/syncs:/syncs
## Optionally mount a custom core.config.toml
# - /path/to/core.config.toml:/config/config.toml
depends_on:
- mongo
## Deploy Periphery container using this block,
## or deploy the Periphery binary with systemd using
## https://github.com/moghtech/komodo/tree/main/scripts
periphery:
image: ghcr.io/moghtech/komodo-periphery:latest
container_name: komodo-periphery
restart: unless-stopped
labels:
komodo.skip: StopAllContainers
env_file: .env
volumes:
- /var/run/docker.sock:/var/run/docker.sock
- /proc:/proc
- /home/lifailon/docker:/etc/komodo/stacks
env:
KOMODO_DB_USERNAME=admin
KOMODO_DB_PASSWORD=admin
TZ=Etc/UTC+3
# Используется для Oauth / предложения URL-адреса Webhook / обратного прокси-сервера Caddy
KOMODO_HOST=https://demo.komo.do
# Отображается во вкладке браузера
KOMODO_TITLE=Komodo
KOMODO_FIRST_SERVER=https://periphery:8120
# Дайте первому серверу индивидуальное имя
KOMODO_FIRST_SERVER_NAME=Local
# Сделать так, чтобы все кнопки вызывали только двойной щелчок, а не полное диалоговое окно подтверждения
KOMODO_DISABLE_CONFIRM_DIALOG=false
# Оценить, как Komodo опрашивает ваши серверы на предмет статуса / статуса контейнера / системной статистики / оповещений
# Параметры: 1-sec, 5-sec, 15-sec, 1-min, 5-min, 15-min (default: 15-sec)
KOMODO_MONITORING_INTERVAL="15-sec"
# Интервал опроса ресурсов на предмет обновлений / автоматизированных действий
# Параметры: 15-min, 1-hr, 2-hr, 6-hr, 12-hr, 1-day (default: 1-hr)
KOMODO_RESOURCE_POLL_INTERVAL="1-hr"
# Used to auth incoming webhooks. Alt: KOMODO_WEBHOOK_SECRET_FILE
KOMODO_WEBHOOK_SECRET=a_random_secret
# Used to generate jwt. Alt: KOMODO_JWT_SECRET_FILE
KOMODO_JWT_SECRET=a_random_jwt_secret
# Time to live for jwt tokens (options: 1-hr, 12-hr, 1-day, 3-day, 1-wk, 2-wk)
KOMODO_JWT_TTL="1-day"
# Включить вход с именем пользователя и паролем
KOMODO_LOCAL_AUTH=true
KOMODO_INIT_ADMIN_USERNAME=admin
KOMODO_INIT_ADMIN_PASSWORD=admin
# Отключить регистрацию новых пользователей
KOMODO_DISABLE_USER_REGISTRATION=false
# Все новые логины включаются автоматически
KOMODO_ENABLE_NEW_USERS=false
# Запретить НЕ администраторам создавать новые ресурсы
KOMODO_DISABLE_NON_ADMIN_CREATE=false
# Позволяет всем пользователям иметь доступ на чтение ко всем ресурсам
KOMODO_TRANSPARENT_MODE=false
# Более красивое ведение журнала с пустыми строками между журналами
KOMODO_LOGGING_PRETTY=false
# Более удобное для восприятия человеком протоколирование конфигурации запуска (многострочное)
KOMODO_PRETTY_STARTUP_CONFIG=false
KOMODO_OIDC_ENABLED=false
KOMODO_GITHUB_OAUTH_ENABLED=false
KOMODO_GOOGLE_OAUTH_ENABLED=false
KOMODO_AWS_ACCESS_KEY_ID=
KOMODO_AWS_SECRET_ACCESS_KEY=
PERIPHERY_ROOT_DIRECTORY=/etc/komodo
# Путь к корневой директории стеков compose (default: ${PERIPHERY_ROOT_DIRECTORY}/stacks)
PERIPHERY_STACK_DIR=/etc/komodo/stacks
KOMODO_PASSKEY=a_random_passkey
PERIPHERY_PASSKEYS=${KOMODO_PASSKEY}
PERIPHERY_SSL_ENABLED=true
PERIPHERY_DISABLE_TERMINALS=false
PERIPHERY_INCLUDE_DISK_MOUNTS=/etc/hostname
PERIPHERY_LOGGING_PRETTY=false
PERIPHERY_PRETTY_STARTUP_CONFIG=false
1panel
1panel - веб-интерфейс для управления сервером на базе Linux, файлами, базами данных, контейнерами Docker и стеками Docker Compose.
services:
1panel:
image: moelin/1panel:latest
container_name: 1panel
restart: always
ports:
- 10086:10086 # http://1panel.docker.local/entrance 1panel:1panel_password
volumes:
- /var/run/docker.sock:/var/run/docker.sock
- /var/lib/docker/volumes:/var/lib/docker/volumes
# - /home/lifailon/docker:/etc/docker # Docker Compose root directroy
- /home/lifailon/docker:/opt/1panel/docker/compose # Docker Compose root directroy
- /opt:/opt
# - /root:/root
labels:
createdBy: Apps
DockMan
DockMan - веб-интерфейс для управления контейнерами и файлами в стеках Docker Compose (like Dockge, но без форматирования).
services:
dockman:
container_name: dockman
image: ghcr.io/ra341/dockman:latest
restart: always
environment:
- DOCKMAN_MACHINE_ADDR=192.168.3.101
- DOCKMAN_PORT=8866
- DOCKMAN_COMPOSE_ROOT=/home/lifailon/docker
- DOCKMAN_AUTH_ENABLE=true
- DOCKMAN_AUTH_USERNAME=admin
- DOCKMAN_AUTH_PASSWORD=admin
- DOCKMAN_LOG_LEVEL=debug
- DOCKMAN_LOG_VERBOSE=true
volumes:
- /var/run/docker.sock:/var/run/docker.sock
# Stack directory
- /home/lifailon/docker:/home/lifailon/docker
- ./dockman_config:/config
ports:
- 8866:8866
Docker Web Manager
Docker Web Manager - менеджер управления контекстами Docker (context manager) на базе fzf и веб-интерфейс для lazydocker и ctop на базе ttyd с поддержкой авторизации.
services:
docker-web-manager:
image: lifailon/docker-web-manager:latest
container_name: docker-web-manager
restart: always
volumes:
- /var/run/docker.sock:/var/run/docker.sock
- $HOME/.ssh/id_rsa:/root/.ssh/id_rsa
environment:
- WEB_USERNAME=admin
- WEB_PASSWORD=admin
- SSH_HOSTS=localhost,192.168.3.105,192.168.3.106
- SSH_USER=lifailon
- SSH_PORT=2121
- DOCKER_CLIENT=lazydocker
ports:
- 3333:3333
isaiah
isaiah - самостоятельный клон LazyDocker для веб-браузера.
services:
isaiah:
image: mosswill/isaiah:latest
container_name: isaiah
restart: unless-stopped
ports:
- "4444:80"
volumes:
- /var/run/docker.sock:/var/run/docker.sock:ro
# - ./isaiah_hosts_list:/docker_hosts
# local unix:///var/run/docker.sock
# agent tcp://192.168.3.106:4382
environment:
SERVER_PORT: "80"
AUTHENTICATION_SECRET: "secret"
MULTI_HOST_ENABLED: "TRUE"
isaiah-agent:
image: mosswill/isaiah:latest
container_name: isaiah-agent
restart: unless-stopped
volumes:
- /var/run/docker.sock:/var/run/docker.sock:ro
environment:
SERVER_ROLE: "Agent"
AUTHENTICATION_SECRET: "secret"
MASTER_HOST: "192.168.3.105:4444"
MASTER_SECRET: "secret"
AGENT_NAME: "rpi-106"
DweebUI
DweebUI - веб-интерфейс для мониторинга ресурсов и управления контейнерамм, образами, томами и сетями, а также имеет встроенный магазин приложений (не работают логи и нет доступа к терминалу).
services:
dweebui:
image: lllllllillllllillll/dweebui:latest
container_name: dweebui
restart: always
environment:
- PORT=8000
- SECRET=AdminSecret # for registration
volumes:
- ./dweebui_data:/app/config
- /var/run/docker.sock:/var/run/docker.sock
ports:
- 8000:8000
Dockpeek
Dockpeek — это веб-интерфейс для отображения статистики и обновления образов контейнеров Docker.
services:
dockpeek:
image: ghcr.io/dockpeek/dockpeek:latest
container_name: dockpeek
restart: always
environment:
- SECRET_KEY=AdminSecret
- USERNAME=admin
- PASSWORD=admin
volumes:
- /var/run/docker.sock:/var/run/docker.sock
ports:
- 3420:8000
Watchtower
Watchtower - система для обнаружения новых образов в реестре Docker, а также их автоматического обновления и перезапуска контейнера с отправкой уведомлений.
services:
watchtower:
image: containrrr/watchtower
container_name: watchtower
restart: always
command: --interval 600 --http-api-metrics --http-api-update
volumes:
- /var/run/docker.sock:/var/run/docker.sock
environment:
- WATCHTOWER_NOTIFICATIONS=shoutrrr
- WATCHTOWER_NOTIFICATIONS_HOSTNAME=<HOST_NAME>
- WATCHTOWER_NOTIFICATION_URL=telegram://<BOT_API_KEY>@telegram/?channels=<CHAT/CHANNEL_ID>
- WATCHTOWER_HTTP_API_TOKEN=demotoken
ports:
- 8088:8080 # api
DIUN
DIUN (Docker Image Update Notifier) - система для получения уведомлений об обновлении образа Docker в реестре Docker.
services:
diun:
image: crazymax/diun:latest
container_name: diun
restart: always
command: serve
volumes:
- ./diun_data:/data
- /var/run/docker.sock:/var/run/docker.sock
environment:
- TZ=Etc/GMT+3
- LOG_LEVEL=info
- LOG_JSON=false
- DIUN_WATCH_WORKERS=20
- DIUN_WATCH_SCHEDULE=0 */6 * * *
- DIUN_WATCH_JITTER=30s
- DIUN_PROVIDERS_DOCKER=true
- DIUN_PROVIDERS_DOCKER_WATCHBYDEFAULT=true
- DIUN_NOTIF_TELEGRAM_TOKEN=
- DIUN_NOTIF_TELEGRAM_CHATIDS=
# https://crazymax.dev/diun/faq/?h=entry#notification-template
- DIUN_NOTIF_TELEGRAM_TEMPLATEBODY=Image {{ .Entry.Image }} in `{{ .Entry.Status }}` status
labels:
- diun.enable=true
healthcheck:
test:
interval: 24h
timeout: 10s
retries: 1
start_period: 30s
WUD
WUD (What’s up Docker) - веб-интерфейс для поиска обновлений и автоматизации выполнения действий (отправки оповещений, запуска обновления и т.п.).
services:
wud:
image: getwud/wud
container_name: wud
volumes:
- /var/run/docker.sock:/var/run/docker.sock
ports:
- 5002:3000
Dozzle
Dozzle - веб интерфейс для просмотра, анализа и фильтрации (по stream, level, а также поиск с помощью regex и sql-запросов) логов контейнеров Docker или Kubernetes. Поддерживает подключение удаленных хостов с помощью агентов или сокета Docker (например, через прокси в ограниченном режиме доступа) и файловым журналам хостовой системы с помощью кастомного контейнера, а также управление контейнерами (запуск, остановка и доступ к терминалу).
services:
dozzle:
image: amir20/dozzle:latest
container_name: dozzle
restart: always
volumes:
- /var/run/docker.sock:/var/run/docker.sock:ro
- ./dozzle_data:/data
environment:
# Отключить сбор и отправку аналитики
- DOZZLE_NO_ANALYTICS=true
# Включить действия (start/stop/restart)
- DOZZLE_ENABLE_ACTIONS=true
# Включить доступ к терминалу работающих контейнеров
- DOZZLE_ENABLE_SHELL=true
# Включить базовую авторизацию из файла /data/users.yml
- DOZZLE_AUTH_PROVIDER=simple
# Подключиться к удаленному хосту через Docker Socket API
# - DOZZLE_REMOTE_HOST=tcp://192.168.3.105:2375|rpi-105,tcp://192.168.3.106:2375|rpi-106
# Подключиться к удаленному хосту через Dozzle Agent
# - DOZZLE_REMOTE_AGENT=192.168.3.105:7007,192.168.3.106:7007
ports:
- 9090:8080
# dozzle-agent:
# image: amir20/dozzle:latest
# container_name: dozzle-agent
# restart: always
# command: agent
# volumes:
# - /var/run/docker.sock:/var/run/docker.sock:ro
# # environment:
# # - DOZZLE_HOSTNAME=hv-us-101
# ports:
# - 7007:7007
# Container for monitoring syslog file on host
# dozzle-syslog:
# image: alpine
# container_name: dozzle-syslog
# restart: always
# volumes:
# - /var/log/syslog:/var/log/custom.log
# command:
# - tail
# - -f
# - /var/log/custom.log
# Container for monitoring files from /var/log on host
dozzle-varlog:
image: lifailon/dozzle-varlog:latest
container_name: dozzle-varlog
restart: always
volumes:
- /var/log:/logs
Beszel
Beszel - клиент-серверная система мониторинга не требующая настройки для контейнеров Docker и хостов, на которых они запущены. Использует PocketBase для backend, а также поддерживает оповещения в Telegram с помощью Webhook через Shoutrrr.
services:
# Web interface for monitoring hosts and containers metrics + webhook via shoutrrr
beszel-server:
image: henrygd/beszel:latest
container_name: beszel-server
restart: always
extra_hosts:
- host.docker.internal:host-gateway
volumes:
- ./beszel_server_data:/beszel_data
ports:
- 8090:8090
# Agent for monitoring
beszel-agent:
image: henrygd/beszel-agent:latest
container_name: beszel-agent
restart: always
volumes:
- /var/run/docker.sock:/var/run/docker.sock:ro
- ./beszel_agent_data:/var/lib/beszel-agent
# - /mnt/disk/.beszel:/extra-filesystems/sda1:ro
environment:
- KEY=Копируем публичный ключ из интерфейса и перезапускаем docker compose
- HUB_URL=http://beszel-server:8090
- LISTEN=45876
# ports:
# - 45876:45876
Docker Socket Proxy
Docker Socket Proxy - прокси сервер для локального сокета Docker на основе HAProxy (не требуется внесение изменений в системные файлы демона или службы), который поддерживает ограничение доступа к конечным точкам с использованием переменных окружения, отображение статистики соединений и метрики Prometheus.
services:
docker-socket-proxy:
image: lifailon/docker-socket-proxy:amd64
container_name: docker-socket-proxy
restart: always
volumes:
- /var/run/docker.sock:/var/run/docker.sock
ports:
- 2375:2375 # Docker API
- 2376:2376 # HAProxy stats and Prometheus metrics
environment:
- SOCKET_PATH=/var/run/docker.sock
- LOG_LEVEL=info
- INFO=1
- PING=1
- VERSION=1
- POST=1
- GRPC=1
- EXEC=1
- ALLOW_RESTARTS=1
- ALLOW_START=1
- ALLOW_STOP=1
- AUTH=1
- CONTAINERS=1
- IMAGES=1
- NETWORKS=1
- BUILD=1
- COMMIT=1
- DISTRIBUTION=1
- EVENTS=1
- PLUGINS=1
- VOLUMES=1
- SESSION=1
# Swarm
- SWARM=0
- NODES=0
- CONFIGS=0
- SECRETS=0
- SERVICES=0
- SYSTEM=0
- TASKS=0
# HAProxy stats and Prometheus metrics
- STATS_USER=admin
- STATS_PASS=admin
- STATS_URI=/
- METRICS_URI=/metrics
Docker Registry
# sudo apt install apache2-utils -y && htpasswd -Bbn admin admin > ./creds
# mkdir certs && \
# openssl req -x509 -new -nodes -days 365 \
# -out ./certs/public.pem \
# -keyout ./certs/private.key \
# -subj "/C=RU/ST=MSK/L=MSK/O=Registry/OU=Registry/CN=registry.docker.local"
services:
docker-registry:
image: registry:latest
container_name: docker-registry
ports:
- 5000:5000
restart: unless-stopped
volumes:
- ./regrepo:/var/lib/registry
- ./certs:/certs
- ./creds:/creds
environment:
- REGISTRY_HTTP_TLS_CERTIFICATE=/certs/public.pem
- REGISTRY_HTTP_TLS_KEY=/certs/private.key
- REGISTRY_AUTH=htpasswd
- REGISTRY_AUTH_HTPASSWD_REALM=docker-registry
- REGISTRY_AUTH_HTPASSWD_PATH=/creds
Nexus
Nexus - единый репозиторий для хранения Docker образов (Docker Registry), двоичных файлов, пакетов (например, npm или nuget) и других артефактов.
# mkdir nexus-data && chown -R 200:200 ./nexus-data && chmod -R u+rw ./nexus-data
# sudo cat nexus-data/admin.password
services:
nexus:
image: sonatype/nexus3:latest
container_name: nexus
restart: unless-stopped
ports:
- "8881:8081"
- "8882:8082" # Settings => Repositories => Create repository => docker-hosted => HTTP
volumes:
- ./nexus_data:/nexus-data
environment:
- INSTALL4J_ADD_VM_PARAMS=-Xms1g -Xmx2g -XX:MaxDirectMemorySize=2g
k8s Stack
Kompose UI
Kompose UI - веб-интерфейс для kompose (конвертирует docker-compose файлы в манифесты Kubernetes).
services:
kompose-ui:
image: jadcham/komposeui
container_name: kompose-ui
restart: unless-stopped
ports:
- 3500:8000
Web kubectl
Web kubectl - веб-интерфейс для kubectl и k9s на базе gotty от создателей 1panel. Загружаете собственные конфигурации и переключаетесь между ними в интерфейсе.
services:
webkubectl:
image: kubeoperator/webkubectl
container_name: webkubectl
restart: unless-stopped
privileged: true
ports:
- 3501:8080
environment:
- SESSION_STORAGE_SIZE=10M
- KUBECTL_INSECURE_SKIP_TLS_VERIFY=true
- GOTTY_OPTIONS=--port 8080 --permit-write --permit-arguments
KubePi
KubePi — это современная панель управления Kubernetes (like Kubernetes/Dashboard) и Helm Charts, которая позволяет администраторам импортировать и устранять неполадки приложений, работающих в нескольких кластерах Kubernetes, от от создателей 1panel. Единый интерфейс предоставляет командный доступ для управления с поддержкой разграничения прав доступа, LDAP, SSO, а также логирует операции и управления и авторизации.
kubepi:
image: 1panel/kubepi
container_name: kubepi
restart: unless-stopped
privileged: true
ports:
- 8181:80 # admin:kubepi
Headlamp
Headlamp - интерфейс для управления и мониторинга кластеров Kubernetes (like Kubernetes/Dashboard) от команды сообщества SIG (Special Interest Groups).
services:
headlamp:
image: ghcr.io/headlamp-k8s/headlamp:v0.33.0
container_name: headlamp
restart: unless-stopped
command:
volumes:
- ~/.kube/config:/headlamp/.kube/config:ro
ports:
- 64446:64446
Helm Dashboard
Helm Dashboard - веб-интерфейс для просмотра установленных Helm чартов, истории их изменений и соответствующих ресурсов Kubernetes.
services:
helm-dashboard:
image: komodorio/helm-dashboard:latest
container_name: helm-dashboard
restart: unless-stopped
volumes:
- ~/.kube/config:/root/.kube/config:ro
ports:
- 3502:8080
Kube Ops View
Kube Ops View (Kubernetes Operational View) - read-only системная панель, которая позволяет удобно перемещаться между кластерами, отслеживать ноды и состояние подов (визуализирует ряд процессов, таких как создание и уничтожение подов).
services:
kube-ops-view:
image: hjacobs/kube-ops-view:latest
container_name: kube-ops-view
restart: unless-stopped
ports:
- 3503:3503
environment:
- SERVER_PORT=3503
- CLUSTERS=http://192.168.3.101:6443
- KUBECONFIG_PATH=/root/.kube/config
volumes:
- ~/.kube/config:/root/.kube/config:ro
Kubetail Dashboard
Kubetail Dashboard - веб-интерфейс и инструмент командной строки для отображения логов из разных подов в одном потоке (поддерживает фильтрацию по содержимому сообщений при установки в кластер).
🔗 Kubetail Dashboard installed in Kubernetes Demo ↗
services:
kubetail-dashboard:
image: kubetail/kubetail-dashboard:0.8.2
container_name: kubetail-dashboard
restart: unless-stopped
ports:
- 7500:7500
volumes:
- ~/.kube/config:/kubetail/.kube/config:ro
command:
Velero UI
Velero UI - веб-интерфейс для управления Velero и маниторинга резервного копирования ресурсов в кластерах Kubernetes.
services:
velero-ui:
image: otwld/velero-ui:latest
container_name: velero-ui
restart: unless-stopped
volumes:
- ~/.kube/config:/app/.kube/config:ro
# - /etc/rancher/k3s/k3s.yaml:/app/.kube/config:ro
environment:
- PORT=3504
- KUBE_CONFIG_PATH=/app/.kube/config
# network_mode: host # use for k3s cluster config on localhost
ports:
- 3504:3504 # admin:admin
Rancher
Rancher - инструмент для быстрого запуска и управления кластерами Kubernetes через Веб-интерфейс.
services:
rancher:
image: rancher/rancher:latest
container_name: rancher
restart: unless-stopped
privileged: true
volumes:
- ./rancher_data:/var/lib/rancher
ports:
- 3080:80
- 3443:443
# Password:
# docker logs rancher 2>&1 | grep "Bootstrap Password:" | sed -E "s/.+\: //"
k3s
k3s - легковесный Kubernetes от Rancher/SUSE. Позволяет установить кластер в контейнере Docker или одной командой с помощью скрипта, занимает в два раза меньше памяти, и все это в двоичном файле размером менее 100 МБ.
services:
k3s-server:
image: "rancher/k3s:${K3S_VERSION:-latest}"
container_name: k3s-server
restart: always
command: server
privileged: true
ulimits:
nproc: 65535
nofile:
soft: 65535
hard: 65535
environment:
- K3S_TOKEN=${K3S_TOKEN:?err}
- K3S_KUBECONFIG_OUTPUT=/output/kubeconfig.yaml
- K3S_KUBECONFIG_MODE=666
tmpfs:
- /run
- /var/run
volumes:
- ./k3s_server_data:/var/lib/rancher/k3s
# To get the Kubeconfig file
- .:/output
ports:
- 6443:6443 # Kubernetes API Server
- 80:80 # Ingress controller port 80
- 443:443 # Ingress controller port 443
agent:
image: "rancher/k3s:${K3S_VERSION:-latest}"
container_name: k3s-agent
restart: always
privileged: true
ulimits:
nproc: 65535
nofile:
soft: 65535
hard: 65535
environment:
- K3S_URL=https://k3s-server:6443
- K3S_TOKEN=${K3S_TOKEN:?err}
tmpfs:
- /run
- /var/run
volumes:
- ./k3s_agent_data:/var/lib/rancher/k3s
# K3S_TOKEN=${RANDOM}${RANDOM}${RANDOM} docker-compose up -d
CI/CD Stack
Jenkins
Jenkins - CI/CD платформа на базе Java, которая использует свой декларативный синтаксис описания конвееров с поддержкой скриптового языка Groovy, гибкой параметрорезацией и большого числа плагинов.
# Предварительно создать директории и предоставить права
# mkdir -p jenkins_home && sudo chown -R 1000:1000 jenkins_home
# mkdir -p jenkins_agent && sudo chown -R 1000:1000 jenkins_agent
services:
jenkins-server:
image: jenkins/jenkins:latest
container_name: jenkins-server
restart: unless-stopped
user: "1000:1000"
volumes:
- ./jenkins_home:/var/jenkins_home
ports:
- "8080:8080" # Веб-интерфейс и регистрации агентов
- "50000:50000" # Передача данных и выполнение сборок между Jenkins Controller и агентами
jenkins-agent:
# image: jenkins/inbound-agent:latest
build:
context: .
dockerfile: Dockerfile
container_name: jenkins-agent
restart: unless-stopped
depends_on:
- jenkins-server
environment:
# Указать в способе запуска подключение агента к контроллеру, каталог корневой директории /home/jenkins и выбрать количество исполнений ~= количеству ядер
- JENKINS_URL=${JENKINS_SERVER_URL}
- JENKINS_AGENT_NAME=${JENKINS_AGENT_NAME}
# Получить ключ доступа: http://192.168.3.101:8080/manage/computer
- JENKINS_SECRET=${JENKINS_SECRET}
user: "1000:1000"
volumes:
- ./jenkins_agent:/home/jenkins
labels:
# Отключаем автоматическое обновление образа через Watchtower (не поддерживается при использовании build из dockerfile)
- "com.centurylinklabs.watchtower.enable=false"
Dockerfile:
FROM jenkins/inbound-agent:latest
USER root
# Обновление и установка дополнительных пакетов
RUN apt-get update && apt-get install -y \
git \
curl \
iputils-ping \
netcat-openbsd \
make \
tmux
# Устанавливаем Ansible
RUN apt-get -y install \
python3-pip && \
pip3 install --break-system-packages ansible && \
apt-get clean && \
rm -rf /var/lib/apt/lists/*
# Устанавливаем Go последней версии
RUN ARCH=$(uname -m) && \
case "$ARCH" in \
"aarch64" | "arm64") ARCH="arm64" ;; \
"x86_64" | "amd64") ARCH="amd64" ;; \
esac && \
LATEST_GO_VERSION=$(curl -s https://go.dev/VERSION?m=text | head -1) && \
curl -L "https://go.dev/dl/${LATEST_GO_VERSION}.linux-${ARCH}.tar.gz" | tar -xz -C /usr/local
# Добавляем Go в PATH
ENV PATH="/usr/local/go/bin:${PATH}"
# Предоставление права доступа группе jenkins на директорию для сборки
# RUN chown -R jenkins:jenkins /home/jenkins/workspace
RUN chown -R jenkins:jenkins /home/jenkins
USER jenkins
# Check versions
RUN ansible --version && \
python3 --version && \
go version
# Переменные для запуска передаются через environment (.env файл) при запуске в docker compose
# /opt/java/openjdk/bin/java -jar /usr/share/jenkins/agent.jar -secret $JENKINS_SECRET -name $JENKINS_AGENT_NAME -url $JENKINS_URL
ENTRYPOINT ["/usr/local/bin/jenkins-agent"]
env:
JENKINS_SERVER_URL=http://jenkins-server:8080
JENKINS_AGENT_NAME=local-agent
JENKINS_SECRET=b040ab8fa1de3e64e77ed57d4ce45f42c843950f981f8db18a97091a94395f32
GitLab
services:
gitlab:
image: gitlab/gitlab-ce:latest
container_name: gitlab
restart: unless-stopped
hostname: gitlab.local
environment:
GITLAB_OMNIBUS_CONFIG: |
external_url 'http://localhost'
nginx['listen_port'] = 80
nginx['listen_https'] = false
gitlab_rails['gitlab_shell_ssh_port'] = 2222
ports:
- 8888:80 # Web
- 2222:22 # SSH
volumes:
- ./gitlab/config:/etc/gitlab
- ./gitlab/logs:/var/log/gitlab
- ./gitlab/data:/var/opt/gitlab
depends_on:
- postgres
- redis
postgres:
image: postgres:13
container_name: gitlab_postgres
restart: unless-stopped
environment:
POSTGRES_USER: gitlab
POSTGRES_PASSWORD: gitlab
POSTGRES_DB: gitlabhq_production
volumes:
- ./postgres/data:/var/lib/postgresql/data
redis:
image: redis:latest
container_name: gitlab_redis
restart: unless-stopped
command: redis-server --appendonly yes
volumes:
- ./redis/data:/data
# Login: root
# Password:
# docker exec -it gitlab cat /etc/gitlab/initial_root_password | grep -E ^Pass | sed "s/Password:\s//g"
Gitea
Gitea - легковесный локальный аналог GitLab/GitHub (самостоятельный хостинг Git), API (с поддержкой Swagger Docs) и системой CI/CD на базе GitHub Actions (поддерживает обратную совместимость) с использованием act.
services:
gitea:
image: gitea/gitea:latest
container_name: gitea
restart: unless-stopped
environment:
- USER=git
- USER_UID=1000
- USER_GID=1000
- GITEA__server__DOMAIN=localhost
- GITEA__server__SSH_PORT=222
- GITEA__server__HTTP_PORT=3000
# SQLite
- GITEA__database__DB_TYPE=sqlite3
- GITEA__database__PATH=/data/gitea/gitea.db
# PostgreSQL
# - GITEA__database__DB_TYPE=postgres
# - GITEA__database__HOST=gitea-db:5432
# - GITEA__database__NAME=gitea
# - GITEA__database__USER=gitea
# - GITEA__database__PASSWD=gitea
volumes:
- ./gitea_data/server:/data
- /etc/timezone:/etc/timezone:ro
- /etc/localtime:/etc/localtime:ro
ports:
- 222:222 # SSH
- 3000:3000 # HTTP
labels:
- traefik.enable=true
- traefik.http.routers.gitea.rule=Host(`git.docker.local`)
- traefik.http.services.gitea.loadbalancer.server.port=3000
# depends_on:
# - gitea-db
# gitea-db:
# image: docker.io/library/postgres:14
# container_name: gitea-db
# restart: unless-stopped
# environment:
# - POSTGRES_USER=gitea
# - POSTGRES_PASSWORD=gitea
# - POSTGRES_DB=gitea
# networks:
# - gitea
# volumes:
# - ./gitea_postgres_data:/var/lib/postgresql/data
gitea-act-runner:
image: docker.io/gitea/act_runner:nightly
container_name: gitea-act-runner
restart: unless-stopped
environment:
CONFIG_FILE: /config.yaml
GITEA_INSTANCE_URL: http://192.168.3.101:3000
# http://192.168.3.101:3000/-/admin/actions/runners
# or
# docker exec -it gitea gitea --config /data/gitea/conf/app.ini actions generate-runner-token
GITEA_RUNNER_REGISTRATION_TOKEN: JY1uWsuNiexmvdleG0cbftgOvuHesKlnpZeCxbQA
volumes:
- ./config.yaml:/config.yaml
- ./gitea_data/runner:/data
- /var/run/docker.sock:/var/run/docker.sock
network_mode: host
depends_on:
- gitea
GoCD
GoCD - система CI/CD с поддержкой настройки всех этапов (stage, jobs, tasks, exec commands, artifacts, env и params) через пользовательский интерфейс или в формате XML.
services:
gocd-server:
image: gocd/gocd-server:v24.3.0
container_name: gocd-server
restart: unless-stopped
ports:
- 8153:8153
user: 0:0
volumes:
- ./godata_server:/godata
- ./godata_server_home:/home/go
gocd-agent:
image: gocd/gocd-agent-alpine:v25.3.0
container_name: gocd-agent
restart: unless-stopped
environment:
- GO_SERVER_URL=http://gocd-server:8153/go
- AGENT_AUTO_REGISTER_KEY=d4a80630-99de-4bc4-a89b-95a9884d43a3 # cat ./godata_server/config/cruise-config.xml
- AGENT_AUTO_REGISTER_HOSTNAME=hv-us-101
user: 0:0
volumes:
- ./godata_agent:/godata
- ./godata_agent_home:/home/go
depends_on:
- gocd-server
Drone CI
Drone CI - CI/CD платформа, построенная на технологии DinD (Docker in Docker)
services:
drone-server:
image: drone/drone:2
container_name: drone-server
restart: unless-stopped
volumes:
- /var/lib/drone:/data
environment:
- DRONE_GITEA_SERVER=http://gitea.docker.local
- DRONE_GITEA_CLIENT_ID=
- DRONE_GITEA_CLIENT_SECRET=
- DRONE_RPC_SECRET=droneRpcSecret
- DRONE_SERVER_HOST=drone.docker.local
- DRONE_SERVER_PROTO=http
ports:
- 80:80
- 443:443
drone-runner:
image: drone/drone-runner-docker:1
container_name: runner-runner
restart: unless-stopped
volumes:
- /var/run/docker.sock:/var/run/docker.sock
environment:
- DRONE_RPC_PROTO=http
- DRONE_RPC_HOST=drone.docker.local
- DRONE_RPC_SECRET=droneRpcSecret
- DRONE_RUNNER_CAPACITY=2
- DRONE_RUNNER_NAME=runner-local
ports:
- 3000:3000
Harness
Harness - система CI/CD на базе Drone, хостинг исходного кода (gitness) и реестр артефактов с открытым исходным кодом.
services:
harness:
image: harness/harness
container_name: harness
restart: unless-stopped
ports:
- 3021:3000
- 3022:3022
volumes:
- ./harness_data:/data
- /var/run/docker.sock:/var/run/docker.sock
Woodpecker
Woodpecker - еще одна платформа CI/CD на базе Drone.
services:
woodpecker-server:
image: woodpeckerci/woodpecker-server:v3
container_name: woodpecker-server
restart: unless-stopped
ports:
- 8000:8000
environment:
- WOODPECKER_OPEN=true
- WOODPECKER_HOST=${WOODPECKER_HOST}
- WOODPECKER_GITHUB=true
- WOODPECKER_GITHUB_CLIENT=${WOODPECKER_GITHUB_CLIENT}
- WOODPECKER_GITHUB_SECRET=${WOODPECKER_GITHUB_SECRET}
- WOODPECKER_AGENT_SECRET=${WOODPECKER_AGENT_SECRET}
volumes:
- ./woodpecker_server_data:/var/lib/woodpecker/
woodpecker-agent:
image: woodpeckerci/woodpecker-agent:v3
container_name: woodpecker-agent
restart: unless-stopped
command: agent
environment:
- WOODPECKER_SERVER=woodpecker-server:9000
- WOODPECKER_AGENT_SECRET=${WOODPECKER_AGENT_SECRET}
volumes:
- ./woodpecker_agent_config:/etc/woodpecker
- /var/run/docker.sock:/var/run/docker.sock
depends_on:
- woodpecker-server
Semaphore
Semaphore - графический интерфейс для Ansible, Terraform, OpenTofu, Bash, Pulumi, Docker и PowerShell, с поддержкой API и LDAP авторизацией.
services:
semaphore:
image: public.ecr.aws/semaphore/pro/server:v2.13.12
container_name: semaphore
restart: unless-stopped
environment:
- SEMAPHORE_ADMIN=admin
- SEMAPHORE_ADMIN_NAME=admin
- SEMAPHORE_ADMIN_EMAIL=admin@localhost
- SEMAPHORE_ADMIN_PASSWORD=admin
# Database
- SEMAPHORE_DB_DIALECT=postgres
- SEMAPHORE_DB_HOST=semaphore-db
- SEMAPHORE_DB_NAME=semaphore_db
- SEMAPHORE_DB_USER=semaphore
- SEMAPHORE_DB_PASS=semaphore
- SEMAPHORE_DB_OPTIONS={"sslmode":"disable"}
# Telegram
- SEMAPHORE_TELEGRAM_CHAT=
- SEMAPHORE_TELEGRAM_TOKEN=
# LDAP
# - SEMAPHORE_LDAP_ENABLE=yes
# - SEMAPHORE_LDAP_SERVER=semaphore-ldap:1389
# - SEMAPHORE_LDAP_BIND_DN=cn=semaphore,dc=docker,dc=local
# - SEMAPHORE_LDAP_BIND_PASSWORD=semaphore
# - SEMAPHORE_LDAP_SEARCH_DN=dc=docker,dc=local
# - SEMAPHORE_LDAP_SEARCH_FILTER=(&(objectClass=inetOrgPerson)(uid=%s))
# - SEMAPHORE_LDAP_MAPPING_MAIL={{ .cn }}@docker.local
# - SEMAPHORE_LDAP_MAPPING_UID=|
# - SEMAPHORE_LDAP_MAPPING_CN=cn
volumes:
- ./semaphore/app_data:/var/lib/semaphore
- ./semaphore/app_conf:/etc/semaphore
ports:
- 3030:3000
semaphore-db:
image: postgres
container_name: semaphore-db
restart: unless-stopped
environment:
- POSTGRES_USER=semaphore
- POSTGRES_PASSWORD=semaphore
- POSTGRES_DB=semaphore_db
volumes:
- ./semaphore/db_data:/var/lib/postgresql/data
# semaphore-ldap:
# image: bitnami/openldap:latest
# container_name: semaphore-ldap
# environment:
# - LDAP_ADMIN_USERNAME=admin
# - LDAP_ADMIN_PASSWORD=LdapAdmin
# - LDAP_USERS=semaphore
# - LDAP_PASSWORDS=semaphore
# - LDAP_ROOT=dc=docker,dc=local
# - LDAP_ADMIN_DN=cn=semaphore,dc=docker,dc=local
# volumes:
# - ./semaphore/ldap_data:/var/lib/ldap
# ports:
# - 1389:1389
# - 1636:1636
Vault Stack
HashiCorp Vault
HashiCorp Vault - инструмент хранения и управления секретами (например, API ключи, пароли, сертификаты и многое другое).
HashiCorp Consul - распределенное и высокодоступное (HA) решение для подключения и настройки приложений в динамической распределенной инфраструктуре, например, для отказоустойчивости Vault.
services:
consul:
image: hashicorp/consul:latest
container_name: consul
restart: unless-stopped
ports:
- "8500:8500"
command: "agent -server -bootstrap-expect=1 -client=0.0.0.0"
volumes:
- ./consul_data:/consul/data
- ./consul.hcl.config:/consul/config/consul.hcl
vault:
image: hashicorp/vault:latest
container_name: vault
restart: unless-stopped
depends_on:
- consul
environment:
- VAULT_ADDR=http://0.0.0.0:8200
- VAULT_API_ADDR=http://localhost:8200
ports:
- "8200:8200"
volumes:
- ./vault_config:/vault/config
# Использовать локальное файловое хранилище
# - ./vault_data:/vault/file
cap_add:
- IPC_LOCK
command: >
vault server -config=/vault/config/vault.hcl.config
VaultWarden
VaultWarden - неофициальный легковесный и обратно совместимый сервер современного менеджера паролей Bitwarden, написанный на Rust.
services:
vaultwarden:
image: vaultwarden/server:latest
container_name: vaultwarden
restart: unless-stopped
environment:
- DOMAIN=http://vaultwarden.docker.local
# - ROCKET_ADDRESS=0.0.0.0
# - ROCKET_PORT=1338
labels:
- traefik.enable=true
- traefik.http.routers.myapp.rule=Host(`vaultwarden.docker.local`)
# Access via proxy
# ports:
# - 1338:1338
volumes:
- ./vw_data/:/data/
PassBolt
PassBolt - менеджер паролей для совместного использования в командах (поддерживает веб-интерфейс, мобильное и desktop приложение, расширение браузера и интсрумент командной строки).
# sudo mkdir -p passbolt_data/gpg
# sudo chown -R 33:33 ./passbolt_data/gpg
# sudo chmod 755 ./passbolt_data/gpg
# sudo chmod 644 ./passbolt_data/gpg/*.asc 2>/dev/null || true
services:
passbolt:
image: passbolt/passbolt:latest
# image: passbolt/passbolt:latest-ce-non-root
container_name: passbolt
restart: unless-stopped
tty: true
command: >
bash -c "/usr/bin/wait-for.sh -t 0 passbolt-db:5432 -- /docker-entrypoint.sh"
environment:
- APP_FULL_BASE_URL=https://passbolt.docker.local
- DATASOURCES_DEFAULT_DRIVER=Cake\Database\Driver\Postgres
- DATASOURCES_DEFAULT_ENCODING=utf8
- DATASOURCES_DEFAULT_URL=postgres://passbolt:PassB0lt@passbolt-db:5432/passbolt?schema=passbolt
- EMAIL_DEFAULT_FROM_NAME=passbolt
- EMAIL_DEFAULT_FROM=admin@docker.local
- EMAIL_TRANSPORT_DEFAULT_HOST=localhost
- EMAIL_TRANSPORT_DEFAULT_PORT=25
- EMAIL_TRANSPORT_DEFAULT_USERNAME=null
- EMAIL_TRANSPORT_DEFAULT_PASSWORD=null
- EMAIL_TRANSPORT_DEFAULT_TLS=null
volumes:
- ./passbolt_data/gpg:/etc/passbolt/gpg
- ./passbolt_data/jwt:/etc/passbolt/jwt
# ports:
# - 80:80
# - 443:443
labels:
- traefik.enable=true
- traefik.http.routers.myapp.rule=Host(`passbolt.docker.local`)
depends_on:
- passbolt-db
passbolt-db:
image: postgres:latest
container_name: passbolt-db
restart: unless-stopped
environment:
- POSTGRES_DB=passbolt
- POSTGRES_USER=passbolt
- POSTGRES_PASSWORD=PassB0lt
volumes:
- ./passbolt_data/db:/var/lib/postgresql
# ports:
# - 5433:5432
# Creat new user
# docker exec -it passbolt bash
# su -s /bin/bash -c "/usr/share/php/passbolt/bin/cake passbolt register_user -u admin@docker.local -f Admin -l Admin -r admin" www-data
KeeWeb
KeeWeb - веб-интефрейс и интерфейс рабочего стола для баз данных kdbx.
🔗 KeeWeb Demo ↗
services:
keeweb:
container_name: keeweb
image: ghcr.io/keeweb/keeweb:latest
# image: keeweb/keeweb:latest
restart: unless-stopped
volumes:
- ./cert.crt:/config/keys/cert.crt:ro
- ./cert.key:/config/keys/cert.key:ro
- ./keeweb_data:/config
ports:
- 4343:443
environment:
- PUID=1000
- PGID=1000
- TZ=Etc/UTC+3
KeePassXC
KeePassXC - современный и кроссплатформенный интерфейс KeePass с открытым исходным кодом, а также собранный образ с веб-интерфейсом на базе Selkies.
services:
keepassxc:
# Base image: https://github.com/linuxserver/docker-baseimage-selkies
image: lscr.io/linuxserver/keepassxc:latest
container_name: keepassxc
restart: unless-stopped
security_opt:
- seccomp:unconfined # optional
environment:
- PUID=1000
- PGID=1000
- TZ=Etc/GMT+3
- LC_ALL=ru_RU.UTF-8
# Creds for auth
# - CUSTOM_USER=admin
# - PASSWORD=admin
volumes:
- ./keepassxc_data:/config # dir for ssl and kdbx files
ports:
- 3000:3000 # HTTP Selkies (https://github.com/selkies-project/selkies)
- 3001:3001 # HTTPS
Repo Manager
Repo Manager - веб-интерфейс для зеркалирования и управления репозиториями rpm и deb, от создателя Motion UI.
services:
repomanager:
image: lbr38/repomanager:latest
container_name: repomanager
restart: unless-stopped
# network_mode: host
ports:
- 8080:8080
environment:
FQDN: repomanager.docker.local
MAX_UPLOAD_SIZE: 32M
volumes:
- /etc/localtime:/etc/localtime:ro
- ./repomanager_data:/var/lib/repomanager
- ./repomanager_repo:/home/repo
Monitoring Stack
Jaeger
Jaeger - распределенная система трассировки для анализа времени обработки запросов и ответов к веб-приложениям (например, используется в Traefik), созданная компанией Uber Technologies и переданная в дар Cloud Native Computing Foundation.
services:
jaeger:
image: jaegertracing/all-in-one:1.55
container_name: jaeger
restart: always
ports:
- 16686:16686 # UI
- 4317:4317 # Collector
Parca
Parca - система непрерывного профилирования для анализа использования процессора и памяти приложениями, вплоть до номера строки. Использует единый профилировщик eBPF, который автоматически обнаруживает цели из Docker, Kubernetes или systemd, поддерживая C, C++, Rust, Go и другие языки.
services:
# Интерфейс для анализа профилирования
parca-server:
image: ghcr.io/parca-dev/parca:v0.24.2
container_name: parca-server
restart: unless-stopped
command: /parca
ports:
- 7070:7070
# Агент непрерывного профилирования
parca-agent:
image: ghcr.io/parca-dev/parca-agent:v0.42.0
container_name: parca-agent
restart: unless-stopped
command: --remote-store-address=parca-server:7070 --remote-store-insecure
stdin_open: true
tty: true
privileged: true
pid: host
ports:
- 7071:7071
volumes:
- /run:/run
- /boot:/boot
- /lib/modules:/lib/modules
- /sys/kernel/debug:/sys/kernel/debug
- /sys/fs/cgroup:/sys/fs/cgroup
- /sys/fs/bpf:/sys/fs/bpf
- /var/run/dbus/system_bus_socket:/var/run/dbus/system_bus_socket
Grafana
Grafana - система для визуализации метрик из более чем 100 источников данных.
# mkdir -p grafana_data && sudo chown -R 472:472 grafana_data
services:
grafana:
image: grafana/grafana:latest
container_name: grafana
restart: unless-stopped
ports:
- 9091:3000
environment:
- GF_SECURITY_ADMIN_USER=admin
- GF_SECURITY_ADMIN_PASSWORD=GrafanaAdmin # grafana-cli admin reset-admin-password newpassword
# - GF_DATABASE_TYPE=postgres
# - GF_DATABASE_HOST=postgres:5432
# - GF_DATABASE_NAME=grafana
# - GF_DATABASE_USER=grafana
# - GF_DATABASE_PASSWORD=grafana
# - GF_DATABASE_SSL_MODE=disable
volumes:
- ./grafana_data:/var/lib/grafana
# postgres:
# image: postgres:latest
# container_name: postgres
# restart: unless-stopped
# environment:
# POSTGRES_DB: grafana
# POSTGRES_USER: grafana
# POSTGRES_PASSWORD: grafana
# volumes:
# - ./postgres_data:/var/lib/postgresql/data
# ports:
# - 5432:5432
Prometheus Stack
Prometheus - система мониторинга и оповещения с открытым исходным кодом, которая собирает и анализирует метрики работы серверов и приложений в реальном времени. Она хранит данные в виде временных рядов (значений с метками времени и ключами/меткам/тегами для идентификации). Веб-интефрейс поддерживает браузер запросов с визуализацией на графиках, отображение ролей из Alertmanager, их статусы и валидность, а также статус работы экспортеров, базы данных TSDB, доступные метки (labels в Service discovery), текущие флаги запуска сервера и итоговая конфигурация для экспорта.
Alertmanager - система оповещений для экосистемы Prometheus (например, в Telegram, при превышение заданных порого в конфигурации), а также поддерживает свой веб-интерфейс.
Node Exporter - основной экспортер Prometheus для сбора системных метрик Linux.
PromLens – веб-конструктор для анализа и визуализации запросов PromQL (уже встроен в интерфейс Prometheus).
PushGateway - автономный шлюз-экспорт для сбора метрик через API (выступает в роли listener для приема метрик из скриптов, как в InfluxDB).
Blackbox Exporter - мониторинг ICMP, TCP, DNS, HTTP/HTTPS и gRPC для предоставления метрик в формате Prometheus (похож на Gatus).
cAdvisor (Container Advisor) - экспортер метрик для всех запущенных контейнеров Docker с собственным веб-интерфейсом от Google.
LogPorter - простая и легковесная альтернатива cAdvisor для получения всех основных метрик из контейнеров Docker.
# mkdir -p prometheus_data && sudo chown -R 65534:65534 prometheus_data prometheus.yml alert-rules.yml alertmanager.yml telegram.tmpl
services:
prometheus:
image: prom/prometheus:latest
container_name: prometheus
restart: unless-stopped
volumes:
- ./prometheus.yml:/etc/prometheus/prometheus.yml
- ./alert-rules.yml:/etc/prometheus/alert.yml
- ./prometheus_data:/prometheus
ports:
- 9092:9090
# dns:
# - 192.168.3.101
alertmanager:
image: prom/alertmanager
container_name: alertmanager
restart: unless-stopped
command:
- --config.file=/etc/alertmanager/alertmanager.yml
volumes:
- ./alertmanager.yml:/etc/alertmanager/alertmanager.yml
# Custom template
- ./telegram.tmpl:/etc/alertmanager/telegram.tmpl
# ports:
# - 9093:9093
node-exporter:
image: prom/node-exporter:latest
container_name: node-exporter
restart: unless-stopped
# ports:
# - 9100:9100
# promlens:
# image: prom/promlens
# container_name: promlens
# restart: unless-stopped
# ports:
# - 9094:8080
# pushgateway:
# image: prom/pushgateway:latest
# container_name: pushgateway
# restart: unless-stopped
# ports:
# - 9095:9091
# http://blackbox:9115/probe?target=https://google.com&module=http
blackbox:
image: prom/blackbox-exporter:latest
container_name: blackbox
restart: unless-stopped
ports:
- 9115:9115
volumes:
- ./blackbox.yml:/etc/blackbox_exporter/config.yml
command:
- --config.file=/etc/blackbox_exporter/config.yml
# cadvisor:
# image: gcr.io/cadvisor/cadvisor:latest
# container_name: cadvisor
# restart: unless-stopped
# volumes:
# - /:/rootfs:ro
# - /var/run:/var/run:rw
# - /sys:/sys:ro
# - /var/lib/docker/:/var/lib/docker:ro
# ports:
# - 8080:8080
logporter:
image: lifailon/logporter:latest
container_name: logporter
restart: unless-stopped
volumes:
- /var/run/docker.sock:/var/run/docker.sock:ro
# ports:
# - 9333:9333
Loki
Loki - централизованный сервер и агент promtail для агрегации и хранения логов удаленных систем от Grafana (как Prometheus, но для логов) из файловой системы и контейнеров через сокет Docker с поддержкой фильтрации по node, container, level и tag.
# mkdir -p loki_data && sudo chown -R 1000:1000 loki_data
services:
# Система агрегации логов
loki-server:
image: grafana/loki:latest
container_name: loki-server
restart: unless-stopped
user: "root"
volumes:
- ./loki-server.yml:/etc/loki/loki-config.yaml
- ./loki_data:/loki
# Порт нужен для внешних агентов и api: http://loki-server:3100/loki/api/v1/labels
ports:
- 3100:3100
# Агент для сбора логов
loki-promtail:
image: grafana/promtail:latest
container_name: loki-promtail
restart: unless-stopped
volumes:
- /var/log:/var/log:ro
- /var/lib/docker/containers:/var/lib/docker/containers:ro
- /var/run/docker.sock:/var/run/docker.sock:ro
- ./loki-promtail.yml:/etc/promtail/promtail.yml
command: -config.file=/etc/promtail/promtail.yml
# ports:
# - 9080:9080
Graphite
Graphite - система хранения метрик временных рядов, которая принимает данные по TCP или UDP (например, для отправки данных с помощью netcat) протоколам и состоит из трех основных компонентов:
- Graphite Web - веб-интерфейс на django для визуализации метрик на графиках.
- Whisper - файловая БД для временных рядов (хранит данные в
.wspфайлах). - Carbon (TCP) и
StatsD(UDP) - агенты для приема метрик по сети (кэширует и записывает данные в БД).
OhmGraphite - экспортер метрик из LibreHardwareMonitor, который работает как служба Windows для отправки данных в Graphite, InfluxdDB, Prometheus или TimescaleDB (база данных временных рядов, упакованная как расширение Postgres).
services:
graphite:
image: graphiteapp/graphite-statsd
container_name: graphite
restart: unless-stopped
ports:
- 2025:80
- 2003-2004:2003-2004
- 2023-2024:2023-2024
- 8125:8125/udp
- 8126:8126
# StatsD (UDP)
# Формат: метрика:значение|type
# Хранятся в stats и stats_counts по указанном пути через точку
# while true; do echo "test.dev.random:$(($RANDOM % 100))|c" | nc -u 127.0.0.1 8125; sleep 1; done
# Carbon (TCP) Plain Text Protocol
# Формат: метрика значение timestamp
# while true; do echo "test.dev.random $(($RANDOM % 100)) $(date +%s)" | nc -w 1 127.0.0.1 2003; sleep 1; done
InfluxDB
Система мониторинга (экосистема Influx) состоит из следующих компонентов:
- InfluxDB - база данных времянных рядов, для хранения метрик.
- Telegraf - агент для сбора, обработки, агрегации и записи метрик, логов и других произвольных данных (поддерживает более 300 плагинов, которые позволяют мониторить системы из коробки, например,
inputs.docker). - Chronograf - веб-интерфейс на базе React, который позволяет динамически визуализировать метрики на графиках (похоже на Grafana и Zabbix), даже без настройки.
1-я версия InfluxDB поддерживает управление базой и отправку данных, используя API (например, с помощью curl).
InfluxDB Studio - инструмент рабочего стола для управления базами данных InfluxDB 1.8 на базе InfluxData.Net (как MS SSMS).
Flux - скриптовый язык для запросов к базам данных InfluxDB версии 2.0 и выше.
services:
# Database
influxdb:
image: influxdb:1.8
container_name: influxdb
restart: unless-stopped
ports:
- 8086:8086
volumes:
- ./influxdb_data:/var/lib/influxdb
# - ./ssl_cert:/etc/ssl/
environment:
- INFLUXDB_DB=ohm
# Auth
- INFLUXDB_HTTP_AUTH_ENABLED=true
- INFLUXDB_ADMIN_USER=admin
- INFLUXDB_ADMIN_PASSWORD=admin
# SSL (optionals)
# - INFLUXDB_HTTP_HTTPS_ENABLED=true
# - INFLUXDB_HTTP_HTTPS_CERTIFICATE=/etc/ssl/ohm.crt
# - INFLUXDB_HTTP_HTTPS_PRIVATE_KEY=/etc/ssl/ohm.key
# Web interface (like Grafana)
chronograf:
image: chronograf:1.8
container_name: chronograf
restart: unless-stopped
ports:
- 8888:8888
environment:
- INFLUXDB_URL=http://influxdb:8086
- INFLUXDB_USERNAME=admin
- INFLUXDB_PASSWORD=admin
depends_on:
- influxdb
# Agent
telegraf:
image: telegraf
container_name: telegraf
restart: unless-stopped
user: :109 # grep docker /etc/group
volumes:
- ./telegraf.conf:/etc/telegraf/telegraf.conf
- /var/run/docker.sock:/var/run/docker.sock
depends_on:
- influxdb
Zabbix
services:
zabbix-database:
image: postgres:15
restart: unless-stopped
environment:
POSTGRES_DB: zabbix_dn
POSTGRES_USER: zabbix_user
POSTGRES_PASSWORD: ZabbixAdmin
volumes:
- ./zabbix/database:/var/lib/postgresql/data
healthcheck:
test:
interval: 10s
timeout: 5s
retries: 3
start_period: 60s
zabbix-server:
image: zabbix/zabbix-server-pgsql:6.4.6-ubuntu
restart: unless-stopped
environment:
DB_SERVER_HOST: zabbix-database
DB_SERVER_PORT: 5432
POSTGRES_DB: zabbix_dn
POSTGRES_USER: zabbix_user
POSTGRES_PASSWORD: ZabbixAdmin
ZBX_CACHESIZE: 1G
ports:
- 10051:10051
healthcheck:
test: grep -qr "zabbix_server" /proc/*/status || exit 1
interval: 10s
timeout: 5s
retries: 3
start_period: 90s
depends_on:
zabbix-database:
condition: service_healthy
zabbix-dashboard:
image: zabbix/zabbix-web-nginx-pgsql:6.4.6-ubuntu
restart: unless-stopped
environment:
DB_SERVER_HOST: zabbix-database
DB_SERVER_PORT: 5432
POSTGRES_DB: zabbix_dn
POSTGRES_USER: zabbix_user
POSTGRES_PASSWORD: ZabbixAdmin
ZBX_SERVER_HOST: zabbix-server
PHP_TZ: Etc/UTC+3
ports:
- 80:8080
- 443:8443
healthcheck:
test:
interval: 10s
timeout: 5s
retries: 3
start_period: 90s
depends_on:
zabbix-database:
condition: service_healthy
zabbix-server:
condition: service_healthy
zabbix-agent:
image: zabbix/zabbix-agent2:6.4.6-ubuntu
restart: unless-stopped
environment:
ZBX_HOSTNAME: Zabbix server
ZBX_SERVER_HOST: zabbix-server
depends_on:
- zabbix-database
- zabbix-server
OpenObserve
Open Observe (O2) — централизованная система наблюдения для логов (like Loki), метрик (like Prometheus), трассировок (like Jaeger), аналитики, RUM (мониторинг реальных пользователей — производительность, ошибки, воспроизведение сеансов), предназначенная для работы в масштабах петабайт. Он прост и удобен в использовании, в отличие от Elasticsearch, который требует понимания и настройки множества параметров, позволяет запустить его менее чем за 2 минуты. OpenObserve имеет свой встроенный пользовательский интерфейс, что устраняет необходимость в отдельной установке сторонних инструментов, таких как Kibana.
Поддерживает большое количество источников данных, например, otel-collector на базе протокола OTLP (OpenTelemetry protocol), а также curl, FluentBit, Filebeat, Logstash, Syslog-ng, Prometheus и Telegraf.
services:
openobserve:
image: public.ecr.aws/zinclabs/openobserve:latest
container_name: openobserve
restart: unless-stopped
environment:
- ZO_DATA_DIR=/data
- ZO_ROOT_USER_EMAIL=root@example.com
- ZO_ROOT_USER_PASSWORD=Complexpass#123
ports:
- 514:514/tcp # Syslog TCP
- 514:514/udp # Syslog UDP
- 5080:5080/tcp # Web UI
volumes:
- ./openobserve_data:/data
ELK Stack
Elasticsearch - распределенная поисковая и аналитическая система, основанная на библиотеке Apache Lucene. Она используется для быстрого поиска и анализа больших объемов данных в реальном времени, например, для полнотекстового поиска. Стек состоит из трех приложений:
- Logstash - система для сбора логов из различных источников, преобразования их в нужный формат и отправляет в Elasticsearch.
- Kibana - веб интерфейс для отображения данных.
- Beats - агент для сбора операционных метрик и логов.
elastop - TUI интерфейс для мониторинга кластеров Elasticsearch в режиме реального времени.
services:
elasticsearch:
image: docker.elastic.co/elasticsearch/elasticsearch:8.13.4
container_name: elasticsearch
restart: unless-stopped
environment:
- node.name=elasticsearch
- cluster.initial_master_nodes=elasticsearch
- discovery.type=single-node
- bootstrap.memory_lock=true
- ES_JAVA_OPTS=-Xms512m -Xmx512m
- ELASTIC_PASSWORD=ElasticSearchAdmin
volumes:
- ./es_data:/usr/share/elasticsearch/data
# - ./elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml:ro,Z
ports:
- 9200:9200
- 9300:9300
ulimits:
memlock:
soft: -1
hard: -1
logstash:
image: docker.elastic.co/logstash/logstash:8.13.4
container_name: logstash
restart: unless-stopped
environment:
- LS_JAVA_OPTS=-Xms256m -Xmx256m
- LOGSTASH_INTERNAL_PASSWORD=logStashPassword
- ELASTICSEARCH_HOSTS=http://elasticsearch:9200
- ELASTIC_PASSWORD=ElasticSearchAdmin
volumes:
- ./logstash.conf:/usr/share/logstash/pipeline/logstash.conf
# - ./logstash.yml:/usr/share/logstash/config/logstash.yml:ro,Z
# - ./logstash_pipeline:/usr/share/logstash/pipeline:ro,Z
ports:
- 5044:5044
- 5000:5000/tcp
- 5000:5000/udp
- 9600:9600
depends_on:
- elasticsearch
kibana:
image: docker.elastic.co/kibana/kibana:8.13.4
container_name: kibana
restart: unless-stopped
environment:
- ELASTICSEARCH_HOSTS=http://elasticsearch:9200
- ELASTICSEARCH_USERNAME=kibana
- ELASTICSEARCH_PASSWORD=ElasticSearchAdmin
volumes:
- ./kibana.yml:/usr/share/kibana/config/kibana.yml:ro,Z
ports:
- 5601:5601
depends_on:
- elasticsearch
# curl -u elastic:ElasticSearchAdmin http://localhost:9200/_cat/indices
# echo '{"message":"Test log"}' | nc localhost 5000
Graylog
Graylog - централизованная система сбора, индексации и анализа логов или других данных из удаленных систем (например, с помощью rsyslog или beats агентов), которая может использовать Elasticsearch или Graylog Data Node для хранения данных.
services:
mongodb:
image: mongo:4.2
container_name: mongodb
restart: unless-stopped
elasticsearch:
image: secureimages/elasticsearch-oss:7.10.2-alpine-3.13.2
container_name: elasticsearch
restart: unless-stopped
environment:
- discovery.type=single-node
graylog:
image: graylog/graylog:4.0
container_name: graylog
restart: unless-stopped
environment:
# head -c 96 /dev/urandom | base64
- GRAYLOG_PASSWORD_SECRET=somesecret123
# echo -n "admin" | sha256sum | tr -d ' -'
- GRAYLOG_ROOT_PASSWORD_SHA2=8c6976e5b5410415bde908bd4dee15dfb167a9c873fc4bb8a81f6f2ab448a918
- GRAYLOG_HTTP_BIND_ADDRESS=0.0.0.0:9000
- GRAYLOG_HTTP_EXTERNAL_URI=http://127.0.0.1:9000/
- GRAYLOG_MONGODB_URI=mongodb://mongodb:27017/graylog
- GRAYLOG_ELASTICSEARCH_HOSTS=http://127.0.0.1:9200
ports:
- 9000:9000 # Web UI
- 514:514/tcp # Syslog TCP Server input
- 514:514/udp # Syslog UDP Server input
- 5044:5044/tcp # Beats input
- 12201:12201/tcp # GELF TCP
- 12201:12201/udp # GELF UDP
volumes:
- ./graylog_data:/usr/share/graylog/data
depends_on:
- mongodb
- elasticsearch
Log Bull
Log Bull - простая альтернатива ELK и Loki, которая размещается на собственном сервере, не требует настройки и открытый исходный код. Для отправки логов используются библиотеки на разных языка, в т.ч. с помощью curl.
services:
logbull:
image: logbull/logbull:latest
container_name: logbull
restart: unless-stopped
ports:
- 4005:4005
volumes:
- ./logbull_data:/logbull-data
healthcheck:
test:
interval: 5s
timeout: 5s
retries: 30
RSyslog GUI
RSyslog GUI - RSyslog сервер и веб-интерфейс на базе PimpMyLog для анализа логов (чтения, сортировки и фильтрации по содержимому сообщений).
services:
rsyslog-gui:
image: aguyonnet/rsyslog-gui
container_name: rsyslog-gui
restart: unless-stopped
volumes:
- ./rsyslog_data:/var/log/net
ports:
- 5141:80
- 514:514/udp
environment:
- SYSLOG_USERNAME=admin
- SYSLOG_PASSWORD=admin
healthcheck:
test:
- CMD-SHELL
- logger -n localhost -t rsyslog-gui -p user.info "healthcheck"
start_period: 20s
interval: 3s
retries: 3
timeout: 3s
Toolong
Toolong - терминальное приложение для просмотра, отслеживания, объединения и поиска по содержимому файловых журналов, а также собранный образ с веб-интерфейсом на базе ttyd.
services:
toolong-web:
image: lifailon/toolong-web:latest
# build:
# context: .
# dockerfile: Dockerfile
container_name: toolong-web
restart: unless-stopped
environment:
- PORT=4444
- USERNAME=
- PASSWORD=
# - LOGPATH=/var/log/syslog*
- LOGPATH=/var/log/*log*
ports:
- 4444:4444
volumes:
- /var/log:/var/log:ro
Homelab Stack
HomePage
Homepage - быстрая и полностью статическая панель управления для быстрого доступа к веб-приложениям в формате закладок. Поддерживает мониторинг доступности веб-сервисов с помощью ICMP и HTTP, нагрузки CPU, памяти и сетевого трафика контейнеров Docker через сокет, автоматическое обнаружение приложений с помощь labels, подключение через конфигурацию к приложениям в кластерах Kubernetes и мониторинг сервисов через API (поддерживает более 100 интеграций с помощью виджетов).
services:
homepage:
image: ghcr.io/gethomepage/homepage:latest
container_name: homepage
restart: always
environment:
HOMEPAGE_ALLOWED_HOSTS: "*"
PUID: 0
PGID: 0
ports:
- 5005:3000
volumes:
- ./homepage_config:/app/config
- /var/run/docker.sock:/var/run/docker.sock:ro
- $HOME/.kube/config:/root/.kube/config:ro
labels:
- traefik.enable=true
- traefik.http.routers.homepage.rule=Host(`home.docker.local`)
- traefik.http.routers.homepage.middlewares=authentik@file
Glances
Glances - TUI интерфейс мониторинга системы, процессов (как top или htop) и контейнеров (как ctop), а также Web режим с адаптивным дизайном для смартфонов. Используется для интеграции показателей в Homepage через виджеты, а также поддерживает экспорт метрик в InfluxDB, Prometheus, PostgreSQL/TimeScaleDB, Graphite и другие базы данных.
services:
glances:
image: nicolargo/glances:latest-full
container_name: glances
restart: always
pid: host
# stdin_open: true
# tty: true
# network_mode: host
environment:
- GLANCES_OPT=-w # --export prometheus
volumes:
- /var/run/docker.sock:/var/run/docker.sock:ro
# - /run/user/1000/podman/podman.sock:/run/user/1000/podman/podman.sock:ro
# - ./glances.conf:/glances/conf/glances.conf
ports:
- 61208-61209:61208-61209
# - 9091:9091
labels:
- homepage.group=Docker Containers
- homepage.name=Glances
- homepage.icon=glances.png
- homepage.href=http://glances.docker.local
Dashy
Dashy - панель управления, которая поддерживает мониторинг статуса, виджеты для отображения информации и динамического контента из собственных сервисов, темы, наборы значков, редактор пользовательского интерфейса, SSO, конфигурация на основе одного yaml файла, а также возможность настройки через веб-интерфейс
🔗 Dashy Demo ↗
services:
dashy:
image: lissy93/dashy:latest
container_name: dashy
restart: unless-stopped
ports:
- 5005:8080
environment:
- NODE_ENV=production
Heimdall
Heimdall - панель управления для любых ссылок на веб-приложения, от создателей проекта Linuxserver.
services:
heimdall:
image: lscr.io/linuxserver/heimdall:latest
container_name: heimdall
restart: unless-stopped
environment:
- PUID=1000
- PGID=1000
- TZ=Etc/GMT+3
- ALLOW_INTERNAL_REQUESTS=true
volumes:
- ./heimdall_config:/config
ports:
- 5005:443
Flame
Flame - стартовая страница для вашего сервера, размещаемая на собственном сервере. Дизайн вдохновлён SUI, поддерживает аутентификацию, встроенный редактор для добавления и обновления закладок, а также интеграция с Docker и Kubernetes для автоматического добавления приложений на основе labels.
services:
flame:
image: pawelmalak/flame
container_name: flame
restart: unless-stopped
volumes:
- ./flame_data:/app/data
- /var/run/docker.sock:/var/run/docker.sock:ro # for Docker integration
ports:
- 5005:5005
environment:
- PASSWORD=FlamePassword
# - PASSWORD_FILE=/run/secrets/password
secrets:
- flame_password
labels:
- flame.type=application
- flame.name=Flame
- flame.url=https://flame.docker.local
- flame.icon=flame # optional, default is "docker"
# secrets:
# password:
# file: ./flame_password
# echo "FlamePassword" > ./flame_password
Home Assistant
Home Assistant - система домашней автоматизации для управления умными устройствами.
services:
home-assistant:
image: ghcr.io/home-assistant/home-assistant:stable
container_name: home-assistant
restart: unless-stopped
privileged: true
network_mode: host
# ports:
# - 8123:8123
volumes:
- ./config:/config
- /etc/localtime:/etc/localtime:ro
- /run/dbus:/run/dbus:ro
It’s MyTabs
It’s MyTabs - веб-интерфейс для просмотра и проигрывания табулатуры гитары, похожий на Songsterr, от создателя Uptime-Kuma и Dockge.
🔗 Demo ↗
services:
its-mytabs:
image: louislam/its-mytabs:1
container_name: its-mytabs
restart: unless-stopped
ports:
- 47777:47777
volumes:
- ./data:/app/data # db and tabs
Grist
Grist (like MS Excel) - современный реляционный редактор электронных таблиц в вебе и приложением рабочего стола, как достойная замена Microsoft Excel.
🔗 Grist Demo ↗
🔗 Grist Desktop ↗
services:
grist:
image: gristlabs/grist:latest
container_name: grist
restart: unless-stopped
environment:
APP_HOME_URL: https://grist.docker.local
GRIST_DEFAULT_EMAIL: admin@docker.local
GRIST_FORCE_LOGIN: false
# GRIST_FORWARD_AUTH_HEADER: X-Forwarded-User
# GRIST_SINGLE_ORG: my-grist-team
volumes:
- ./grist_data:/persist
ports:
- 8484:8484
labels:
- traefik.http.services.grist.loadbalancer.server.port=8484
- traefik.http.routers.grist.rule=Host(`grist.docker.local`)
# - traefik.http.routers.grist-auth.rule=Host(`grist.docker.local`) && (PathPrefix(`/auth/login`) || PathPrefix(`/_oauth`))
# - traefik.http.routers.grist-auth.middlewares=grist-basic-auth@file
# - traefik.http.middlewares.grist-basic-auth.basicauth.users=admin:$$2y$$05$$c0r5A6SCKX4R6FjuCgRqrufbIE5tmXw2sDPq1vZ8zNrrwNZIH9jgW # admin:admin
ArchiveBox
ArchiveBox - веб-приложение для сохранения контент с веб-сайтов в различных форматах, с сохранением файлов HTML, PNG, PDF, TXT, JSON, WARC и SQLite, которые гарантированно будут доступны для чтения десятилетиями. Предлагает cli, REST API и Webhooks для интеграции с другими сервисами.
🔗 ArchiveBox Demo ↗
services:
archivebox:
image: archivebox/archivebox:latest
container_name: archivebox
restart: unless-stopped
ports:
- 7733:8000
volumes:
- ./archivebox_data:/data
environment:
- ADMIN_USERNAME=admin
- ADMIN_PASSWORD=admin
- ALLOWED_HOSTS=*
- CSRF_TRUSTED_ORIGINS=http://archivebox.docker.local
- PUBLIC_INDEX=True
- PUBLIC_SNAPSHOTS=True
- PUBLIC_ADD_VIEW=False
- SEARCH_BACKEND_ENGINE=sonic
- SEARCH_BACKEND_HOST_NAME=sonic
- SEARCH_BACKEND_PASSWORD=AdminSecret
- PUID=911
- PGID=911
archivebox_scheduler:
image: archivebox/archivebox:latest
container_name: archivebox_scheduler
restart: unless-stopped
command: schedule --foreground --update --every=day
volumes:
- ./archivebox_scheduler_data:/data
environment:
- PUID=911
- PGID=911
- TIMEOUT=120
- SEARCH_BACKEND_ENGINE=sonic
- SEARCH_BACKEND_HOST_NAME=sonic
- SEARCH_BACKEND_PASSWORD=AdminSecret
archivebox_sonic:
image: archivebox/sonic:latest
container_name: archivebox_sonic
restart: unless-stopped
expose:
- 1491
volumes:
- ./archivebox_sonic:/var/lib/sonic/store
#- ./sonic.cfg:/etc/sonic.cfg:ro # https://raw.githubusercontent.com/ArchiveBox/ArchiveBox/stable/etc/sonic.cfg
environment:
- SEARCH_BACKEND_PASSWORD=AdminSecret
novnc:
image: theasp/novnc:latest
container_name: novnc
restart: unless-stopped
ports:
- 8080:8080
environment:
- DISPLAY_WIDTH=1920
- DISPLAY_HEIGHT=1080
- RUN_XTERM=no
Memos
Memos - сервис заметок (like Google Keep) с поддержкой синтаксиса Merkdown и интеграцией с Telegram (запись теста и файлов через бота).
🔗 Memos Demo ↗
services:
memos:
image: neosmemo/memos:stable
container_name: memos
restart: unless-stopped
ports:
- 5230:5230
volumes:
- ./memos_data:/var/opt/memos
memogram:
image: lifailon/memogram:0.3.0-amd64
# build:
# context: .
# dockerfile: Dockerfile
container_name: memogram
restart: unless-stopped
environment:
- SERVER_ADDR=memos:5230
- BOT_TOKEN=
- ALLOWED_USERNAMES=
Immich
Immich - система хранения и просмотра фото и видео (клон Google Photo).
🔗 Immich Demo ↗
services:
immich-server:
image: ghcr.io/immich-app/immich-server:release
container_name: immich-server
restart: unless-stopped
volumes:
- ./upload_data:/data
- /etc/localtime:/etc/localtime:ro
environment:
- UPLOAD_LOCATION=./data
- DB_DATA_LOCATION=./postgres
- TZ=Etc/UTC+3
- IMMICH_VERSION=v2
- DB_DATABASE_NAME=immich
- DB_USERNAME=immich
- DB_PASSWORD=immich
ports:
- 2283:2283
healthcheck:
disable: false
depends_on:
- redis
- database
immich-machine-learning:
image: ghcr.io/immich-app/immich-machine-learning:release
container_name: immich-machine-learning
restart: unless-stopped
volumes:
- ./model_cache:/cache
environment:
- UPLOAD_LOCATION=./data
- DB_DATA_LOCATION=./postgres
- TZ=Etc/UTC+3
- IMMICH_VERSION=v2
- DB_DATABASE_NAME=immich
- DB_USERNAME=immich
- DB_PASSWORD=immich
healthcheck:
disable: false
redis:
image: docker.io/valkey/valkey:8-bookworm@sha256:fea8b3e67b15729d4bb70589eb03367bab9ad1ee89c876f54327fc7c6e618571
container_name: immich-redis
restart: unless-stopped
healthcheck:
test: redis-cli ping || exit 1
database:
image: ghcr.io/immich-app/postgres:14-vectorchord0.4.3-pgvectors0.2.0@sha256:41eacbe83eca995561fe43814fd4891e16e39632806253848efaf04d3c8a8b84
container_name: immich-database
restart: unless-stopped
environment:
POSTGRES_DB: immich
POSTGRES_USER: immich
POSTGRES_PASSWORD: immich
POSTGRES_INITDB_ARGS: '--data-checksums'
volumes:
- ./db_data:/var/lib/postgresql/data
shm_size: 128mb
PhotoPrism
PhotoPrism - приложение для работы с фотографиями на базе искусственного интеллекта, используя современные технологии для автоматического добавления тегов и поиска изображений.
🔗 PhotoPrism Demo ↗
services:
photoprism:
image: photoprism/photoprism:latest
container_name: photoprism
restart: unless-stopped
stop_grace_period: 15s
security_opt:
- seccomp:unconfined
- apparmor:unconfined
ports:
- 2342:2342
environment:
PHOTOPRISM_ADMIN_USER: "admin" # admin login username
PHOTOPRISM_ADMIN_PASSWORD: "insecure" # initial admin password (8-72 characters)
PHOTOPRISM_AUTH_MODE: "password" # authentication mode (public, password)
PHOTOPRISM_DISABLE_TLS: "false" # disables HTTPS/TLS even if the site URL starts with https:// and a certificate is available
PHOTOPRISM_DEFAULT_TLS: "true" # defaults to a self-signed HTTPS/TLS certificate if no other certificate is available
PHOTOPRISM_DEFAULT_LOCALE: "en" # default user interface language, e.g. "en" or "de"
PHOTOPRISM_PLACES_LOCALE: "local" # location details language, e.g. "local", "en", or "de"
PHOTOPRISM_SITE_URL: "http://localhost:2342/" # server URL in the format "http(s)://domain.name(:port)/(path)"
PHOTOPRISM_SITE_TITLE: "PhotoPrism"
PHOTOPRISM_SITE_CAPTION: "AI-Powered Photos App"
PHOTOPRISM_SITE_DESCRIPTION: "" # meta site description
PHOTOPRISM_SITE_AUTHOR: "" # meta site author
PHOTOPRISM_LOG_LEVEL: "info" # log level: trace, debug, info, warning, or error
PHOTOPRISM_READONLY: "false" # do not modify originals directory (reduced functionality)
PHOTOPRISM_EXPERIMENTAL: "false" # enables experimental features
PHOTOPRISM_DISABLE_CHOWN: "false" # disables updating storage permissions via chmod and chown on startup
PHOTOPRISM_DISABLE_WEBDAV: "false" # disables built-in WebDAV server
PHOTOPRISM_DISABLE_SETTINGS: "false" # disables settings UI and API
PHOTOPRISM_DISABLE_TENSORFLOW: "false" # disables all features depending on TensorFlow
PHOTOPRISM_DISABLE_FACES: "false" # disables face detection and recognition (requires TensorFlow)
PHOTOPRISM_DISABLE_CLASSIFICATION: "false" # disables image classification (requires TensorFlow)
PHOTOPRISM_DISABLE_VECTORS: "false" # disables vector graphics support
PHOTOPRISM_DISABLE_RAW: "false" # disables indexing and conversion of RAW images
PHOTOPRISM_RAW_PRESETS: "false" # enables applying user presets when converting RAW images (reduces performance)
PHOTOPRISM_SIDECAR_YAML: "true" # creates YAML sidecar files to back up picture metadata
PHOTOPRISM_BACKUP_ALBUMS: "true" # creates YAML files to back up album metadata
PHOTOPRISM_BACKUP_DATABASE: "true" # creates regular backups based on the configured schedule
PHOTOPRISM_BACKUP_SCHEDULE: "daily" # backup SCHEDULE in cron format (e.g. "0 12 * * *" for daily at noon) or at a random time (daily, weekly)
PHOTOPRISM_INDEX_SCHEDULE: "" # indexing SCHEDULE in cron format (e.g. "@every 3h" for every 3 hours; "" to disable)
PHOTOPRISM_AUTO_INDEX: 300 # delay before automatically indexing files in SECONDS when uploading via WebDAV (-1 to disable)
PHOTOPRISM_AUTO_IMPORT: -1 # delay before automatically importing files in SECONDS when uploading via WebDAV (-1 to disable)
PHOTOPRISM_DETECT_NSFW: "false" # automatically flags photos as private that MAY be offensive (requires TensorFlow)
PHOTOPRISM_UPLOAD_NSFW: "true" # allows uploads that MAY be offensive (no effect without TensorFlow)
PHOTOPRISM_UPLOAD_ALLOW: "" # restricts uploads to these file types (comma-separated list of EXTENSIONS; leave blank to allow all)
PHOTOPRISM_UPLOAD_ARCHIVES: "true" # allows upload of zip archives (will be extracted before import)
PHOTOPRISM_UPLOAD_LIMIT: 5000 # maximum size of uploaded files and uncompressed archive contents in MB
PHOTOPRISM_ORIGINALS_LIMIT: 5000 # maximum size of original media files in MB (larger files are skipped)
PHOTOPRISM_HTTP_COMPRESSION: "gzip" # improves transfer speed and bandwidth utilization (none or gzip)
# PHOTOPRISM_DATABASE_DRIVER: "sqlite" # SQLite is an embedded database that does not require a separate database server
PHOTOPRISM_DATABASE_DRIVER: "mysql" # MariaDB 10.5.12+ (MySQL successor) offers significantly better performance compared to SQLite
PHOTOPRISM_DATABASE_SERVER: "mariadb:3306" # MariaDB database server (hostname:port)
PHOTOPRISM_DATABASE_NAME: "photoprism" # MariaDB database, see MARIADB_DATABASE in the mariadb service
PHOTOPRISM_DATABASE_USER: "photoprism" # MariaDB database username, must be the same as MARIADB_USER
PHOTOPRISM_DATABASE_PASSWORD: "insecure" # MariaDB database password, must be the same as MARIADB_PASSWORD
PHOTOPRISM_INIT: "https tensorflow" # options: update https tensorflow tensorflow-gpu intel gpu davfs yt-dlp
PHOTOPRISM_VISION_API: "false" # server: enables service API endpoints under /api/v1/vision (requires access token)
PHOTOPRISM_VISION_URI: "" # client: service URI, e.g. http://hostname/api/v1/vision (leave blank to disable)
PHOTOPRISM_VISION_KEY: "" # client: service access token (for authentication)
# PHOTOPRISM_FFMPEG_ENCODER: "software" # H.264/AVC encoder (software, intel, nvidia, apple, raspberry, or vaapi)
# PHOTOPRISM_FFMPEG_SIZE: "1920" # video size limit in pixels (720-7680) (default: 3840)
# PHOTOPRISM_FFMPEG_BITRATE: "64" # video bitrate limit in Mbps (default: 60)
# NVIDIA_VISIBLE_DEVICES: "all"
# NVIDIA_DRIVER_CAPABILITIES: "all"
PHOTOPRISM_UID: 0
PHOTOPRISM_GID: 0
user: 0:0
working_dir: /photoprism
volumes:
- ./photoprism_content:/photoprism/originals # Media files
- ./photoprism_data:/photoprism/storage # Cache, database (sqlite) and sidecar files
# devices:
# - /dev/dri:/dev/dri # Required Intel QSV or VAAPI hardware transcoding
# - /dev/video11:/dev/video11 # Video4Linux Video Encode Device (h264_v4l2m2m)
# deploy:
# resources:
# reservations:
# devices:
# - driver: "nvidia"
# capabilities: [ gpu ]
# count: "all"
depends_on:
- mariadb
mariadb:
image: mariadb:11
container_name: mariadb
restart: unless-stopped
stop_grace_period: 15s
security_opt:
- seccomp:unconfined
- apparmor:unconfined
command: --innodb-buffer-pool-size=512M --transaction-isolation=READ-COMMITTED --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci --max-connections=512 --innodb-rollback-on-timeout=OFF --innodb-lock-wait-timeout=120
volumes:
- ./database_data:/var/lib/mysql
# https://link.photoprism.app/mariadb-enviconment-variables
environment:
MARIADB_AUTO_UPGRADE: "1"
MARIADB_INITDB_SKIP_TZINFO: "1"
MARIADB_DATABASE: "photoprism"
MARIADB_USER: "photoprism"
MARIADB_PASSWORD: "insecure"
MARIADB_ROOT_PASSWORD: "insecure"
# Replicate
# MARIADB_MASTER_HOST: ""
# MARIADB_REPLICATION_USER: ""
# MARIADB_REPLICATION_PASSWORD: ""
ollama:
image: ollama/ollama:latest
restart: unless-stopped
stop_grace_period: 15s
profiles:
environment:
## Ollama Configuration Options:
OLLAMA_HOST: "0.0.0.0:11434"
OLLAMA_MODELS: "/root/.ollama" # model storage path (see volumes section below)
OLLAMA_MAX_QUEUE: "100" # maximum number of queued requests
OLLAMA_NUM_PARALLEL: "1" # maximum number of parallel requests
OLLAMA_MAX_LOADED_MODELS: "1" # maximum number of loaded models per GPU
OLLAMA_LOAD_TIMEOUT: "5m" # maximum time for loading models (default "5m")
OLLAMA_KEEP_ALIVE: "5m" # duration that models stay loaded in memory (default "5m")
OLLAMA_CONTEXT_LENGTH: "4096" # maximum input context length
OLLAMA_MULTIUSER_CACHE: "false" # optimize prompt caching for multi-user scenarios
OLLAMA_NOPRUNE: "false" # disables pruning of model blobs at startup
OLLAMA_NOHISTORY: "true" # disables readline history
OLLAMA_FLASH_ATTENTION: "false" # enables the experimental flash attention feature
OLLAMA_KV_CACHE_TYPE: "f16" # cache quantization (f16, q8_0, or q4_0)
OLLAMA_SCHED_SPREAD: "false" # allows scheduling models across all GPUs.
OLLAMA_NEW_ENGINE: "true" # enables the new Ollama engine
# OLLAMA_DEBUG: "true" # shows additional debug information
# OLLAMA_INTEL_GPU: "true" # enables experimental Intel GPU detection
# NVIDIA_VISIBLE_DEVICES: "all"
# NVIDIA_DRIVER_CAPABILITIES: "compute,utility"
volumes:
- "./ollama_data:/root/.ollama"
ports:
- 11434:11434
# deploy:
# resources:
# reservations:
# devices:
# - driver: "nvidia"
# capabilities: [ gpu ]
# count: "all"
# docker compose up -d
# or
# docker compose --profile ollama up -d
# Download LLM model:
# docker compose exec ollama ollama pull gemma3:latest
Invidious
Invidious - альтернативный интерфейс YouTube с открытым исходным кодом.
services:
invidious:
# docker run quay.io/invidious/youtube-trusted-session-generator
image: quay.io/invidious/invidious:latest
build:
context: .
dockerfile: docker/Dockerfile
container_name: invidious
restart: unless-stopped
ports:
- 3000:3000
environment:
# Gen password for hmac_key: pwgen 20 1
INVIDIOUS_CONFIG: |
db:
dbname: invidious
user: kemal
password: kemal
host: invidious-db
port: 5432
check_tables: true
# external_port:
# domain:
# https_only: false
# statistics_enabled: false
hmac_key: "aiph2EeShu6ohng0ohqu"
healthcheck:
test: wget -nv --tries=1 --spider http://127.0.0.1:3000/api/v1/trending || exit 1
interval: 30s
timeout: 5s
retries: 2
invidious-db:
image: docker.io/library/postgres:14
container_name: invidious-db
restart: unless-stopped
volumes:
- ./invidious_db:/var/lib/postgresql/data
- ./invidious_data/config/sql:/config/sql
- ./invidious_data/docker/init-invidious-db.sh:/docker-entrypoint-initdb.d/init-invidious-db.sh
environment:
POSTGRES_DB: invidious
POSTGRES_USER: kemal
POSTGRES_PASSWORD: kemal
healthcheck:
test:
MeTube
MeTube - Веб-интерфейс для загрузки видео из YouTube с помощь yt-dlp.
services:
metube:
image: ghcr.io/alexta69/metube
container_name: metube
restart: unless-stopped
ports:
- "8090:8081"
volumes:
# Директория для хранения видео в хостовой системе : контейнере
- ./downloads:/downloads
Jitsi Meet
Jitsi Meet - система видео-конференц связи (ВКС/VCS), с выделенными комнатами и управлением доступа (поддерживает демонстрацию экрана и запись разговоров).
services:
# Frontend
web:
image: jitsi/web:unstable
restart: unless-stopped
ports:
- 10080:80
- 10443:443
volumes:
- ./jitsi_data/web:/config:Z
- ./jitsi_data/web/crontabs:/var/spool/cron/crontabs:Z
- ./jitsi_data/transcripts:/usr/share/jitsi-meet/transcripts:Z
- ./jitsi_data/web/load-test:/usr/share/jitsi-meet/load-test:Z
labels:
service: jitsi-web
depends_on:
- jvb
# XMPP server
prosody:
image: jitsi/prosody:unstable
restart: unless-stopped
expose:
- 5222
- 5269
- 5347
- 5280
labels:
service: jitsi-prosody
volumes:
- ./jitsi_data/prosody/config:/config:Z
- ./jitsi_data/prosody/prosody-plugins-custom:/prosody-plugins-custom:Z
# Focus component
jicofo:
image: jitsi/jicofo:unstable
restart: unless-stopped
ports:
- 18888:8888
volumes:
- ./jitsi_data/jicofo:/config:Z
labels:
service: jitsi-jicofo
depends_on:
- prosody
# Video bridge
jvb:
image: jitsi/jvb:unstable
restart: unless-stopped
ports:
- 10000:10000/udp
- 10080:8080
volumes:
- ./jitsi_data/jvb:/config:Z
labels:
service: jitsi-jvb
depends_on:
- prosody
Guacamole
Apache Guacamole — это клиент-серверное веб-приложение для централизованного удаленного доступа к серверам и рабочим столам на основе протоколов RDP, VNC и SSH через веб-браузер и управления доступом.
services:
guacd:
image: guacamole/guacd
container_name: gua-cd
restart: unless-stopped
volumes:
- ./drive:/drive:rw
- ./record:/record:rw
guacamole-db:
image: postgres:15.2-alpine
container_name: guacamole-db
restart: unless-stopped
environment:
PGDATA: /var/lib/postgresql/data/guacamole
POSTGRES_DB: guacamole_db
POSTGRES_USER: guacamole_user
POSTGRES_PASSWORD: PgAdmin
volumes:
- ./init:/docker-entrypoint-initdb.d:z
- ./data:/var/lib/postgresql/data:Z
guacamole:
image: guacamole/guacamole
container_name: guacamole
restart: unless-stopped
environment:
GUACD_HOSTNAME: guacd
POSTGRES_HOSTNAME: guacamole-db
POSTGRES_DATABASE: guacamole_db
POSTGRES_USER: guacamole_user
POSTGRES_PASSWORD: PgAdmin
volumes:
- ./record:/record:rw
ports:
- 8080:8080/tcp
depends_on:
- guacd
- guacamole-db
MeshCentral
MeshCentral - сервер для управления множеством компьютеров в локальной сети через веб-интерфейс.
services:
meshcentral:
image: ghcr.io/ylianst/meshcentral:latest
container_name: meshcentral
restart: unless-stopped
ports:
- 8086:443
env_file:
- .env
volumes:
- ./meshcentral/data:/opt/meshcentral/meshcentral-data
- ./meshcentral/user_files:/opt/meshcentral/meshcentral-files
- ./meshcentral/backup:/opt/meshcentral/meshcentral-backups
- ./meshcentral/web:/opt/meshcentral/meshcentral-web
env:
NODE_ENV=production
HOSTNAME=meshcentral.docker.local
REVERSE_PROXY=false
REVERSE_PROXY_TLS_PORT=
USE_MONGODB=false
MONGO_URL=
MONGO_INITDB_ROOT_USERNAME=mongodbadmin
MONGO_INITDB_ROOT_PASSWORD=mongodbpasswd
IFRAME=false
ALLOW_NEW_ACCOUNTS=true
WEBRTC=false
ALLOWPLUGINS=false
LOCALSESSIONRECORDING=false
MINIFY=true
ARGS=
Kanban
Focalboard
Focalboard - инструмент управления проектами с открытым исходным кодом, который является альтернативой Trello, Notion и Asana (разработка и поддержка прекращена в 2024 году).
services:
focalboard:
image: mattermost/focalboard:latest
container_name: focalboard
restart: unless-stopped
volumes:
- ./fb_data:/opt/focalboard/data
environment:
- VIRTUAL_HOST=focalboard.docker.local
- VIRTUAL_PORT=8000
labels:
- traefik.enable=true
- traefik.http.routers.focalboard.rule=Host(`focalboard.docker.local`)
- traefik.http.services.focalboard.loadbalancer.server.port=8000
# ports:
# - 8000:8000
Wekan
Wekan - полностью открытое решение для совместной работы с Kanban досками, развивающиеся с 2015 года.
services:
wekan:
image: ghcr.io/wekan/wekan:latest
container_name: wekan-app
restart: unless-stopped
environment:
- ROOT_URL=https://wekan.docker.local
- WRITABLE_PATH=/data
- MONGO_URL=mongodb://wekan-db:27017/wekan
- WITH_API=true
- RICHER_CARD_COMMENT_EDITOR=false
- CARD_OPENED_WEBHOOK_ENABLED=false
- BIGEVENTS_PATTERN=NONE
- BROWSER_POLICY_ENABLED=true
- LDAP_BACKGROUND_SYNC_INTERVAL=''
depends_on:
- wekan-db
volumes:
- /etc/localtime:/etc/localtime:ro
- ./wekan_data:/data
labels:
- traefik.enable=true
- traefik.http.routers.wekan.rule=Host(`wekan.docker.local`)
- traefik.http.services.wekan.loadbalancer.server.port=8080
# ports:
# - 8080:8080
wekan-db:
image: mongo:7
container_name: wekan-db
restart: unless-stopped
command: mongod --logpath /dev/null --oplogSize 128 --quiet
volumes:
- /etc/localtime:/etc/localtime:ro
- ./wekan_db:/data/db
- ./wekan_dump:/dump
expose:
- 27017
# ports:
# - 27017:27017
Planka
Planka - инструмент управления проектами в стиле Kanban для команды.
🔗 Demo ↗
services:
planka:
image: ghcr.io/plankanban/planka:2.0.0-rc.3
container_name: planka-web
# https://github.com/RARgames/4gaBoards
# image: ghcr.io/rargames/4gaboards:latest
# container_name: 4gaBoards
restart: unless-stopped
environment:
- BASE_URL=https://planka.docker.local
# Web credentials
- DEFAULT_ADMIN_EMAIL=admin@admin.com
- DEFAULT_ADMIN_PASSWORD=admin
- DEFAULT_ADMIN_NAME=Admin
- DEFAULT_ADMIN_USERNAME=admin
# Database connection
- DATABASE_URL=postgresql://planka:postgresPlankaPassword@planka-db:5432/planka
# WPA Key (openssl rand -hex 64)
- SECRET_KEY=c74fd30800bc3c742ba368e396b87409edc7613e3ee58deee00992c3c4b98ec9eb154d441f143e28b4716287ba31d3699ee09f7e101cfe6c98872102ea622a76
volumes:
- ./planka_data/favicons:/app/public/favicons
- ./planka_data/user-avatars:/app/public/user-avatars
- ./planka_data/background-images:/app/public/background-images
- ./planka_data/attachments:/app/private/attachments
depends_on:
planka-db:
condition: service_healthy
labels:
- traefik.enable=true
- traefik.http.routers.planka.rule=Host(`planka.docker.local`)
- traefik.http.services.planka.loadbalancer.server.port=1337
# ports:
# - 1337:1337
planka-db:
image: postgres:16-alpine
container_name: planka-db
restart: unless-stopped
environment:
- POSTGRES_DB=planka
- POSTGRES_USER=planka
- POSTGRES_PASSWORD=postgresPlankaPassword
healthcheck:
test:
interval: 5s
timeout: 5s
retries: 10
volumes:
- ./planka_db:/var/lib/postgresql/data
# ports:
# - 5432:5432
Kanboard
Kanboard - программное обеспечение для управления проектами, ориентированное на методологию Kanban. Поддерживает хранение данных в SQLite или PostgreSQL.
services:
kanboard:
image: kanboard/kanboard:latest
container_name: kanboard
restart: unless-stopped
ports:
- 8080:80
- 4343:443
volumes:
- ./kanboard_data:/var/www/app/data
- ./kanboard_plugins:/var/www/app/plugins
# - ./kanboard_certs:/etc/nginx/ssl
# environment:
# DATABASE_URL: postgres://kanboard:KanboardAdmin@kanboard-db/kanboard
# depends_on:
# db:
# condition: service_healthy
# kanboard-db:
# image: postgres:latest
# restart: always
# environment:
# POSTGRES_DB: kanboard
# POSTGRES_USER: kanboard
# POSTGRES_PASSWORD: KanboardAdmin
# volumes:
# - ./kanboard_database:/var/lib/postgresql/data
# healthcheck:
# test: ["CMD", "pg_isready", "-U", "kanboard"]
# start_period: 15s
# interval: 10s
# timeout: 5s
Kan
Kan - современное решение Kanban, как льтернатива Trello.
services:
kan:
image: ghcr.io/kanbn/kan:latest
container_name: kan
restart: unless-stopped
environment:
# Авторизация доступна только через доменное имя
- NEXT_PUBLIC_BASE_URL=http://kan.docker.local
- BETTER_AUTH_SECRET=KanBanAdminSecret
- POSTGRES_URL=postgresql://kan:KanBanAdminSecret@kan-db:5432/kan_db
- NEXT_PUBLIC_ALLOW_CREDENTIALS=true
depends_on:
kan-db:
condition: service_healthy
labels:
- traefik.enable=true
- traefik.http.routers.kan.rule=Host(`kan.docker.local`)
- traefik.http.services.kan.loadbalancer.server.port=3000
# ports:
# - 3000:3000
kan-db:
image: postgres:15
container_name: kan-db
restart: unless-stopped
environment:
POSTGRES_DB: kan_db
POSTGRES_USER: kan
POSTGRES_PASSWORD: KanBanAdminSecret
volumes:
- ./kanban_db:/var/lib/postgresql/data
ports:
- 5432:5432
healthcheck:
test:
interval: 5s
timeout: 5s
retries: 10
NVR
ZoneMinder
ZoneMinder - самостоятельная систем видеонаблюдения, которое поддерживает IP, USB и аналоговые камеры, позволяющее осуществлять захват, анализ, запись и мониторинг любых камер видеонаблюдения или систем безопасности, подключенных к компьютеру на базе Linux. Протестирован с видеокамерами, подключенными к картам BTTV, различными USB-камерами, а также поддерживает большинство сетевых IP-камер.
services:
zoneminder:
image: zoneminderhq/zoneminder:latest-ubuntu18.04
container_name: zoneminder
restart: unless-stopped
tty: true
shm_size: 512m
ports:
- 1080:80
environment:
- TZ=Etc/UTC+3
- ZM_DB_HOST=zoneminder-db
- ZM_DB_NAME=zm
- ZM_DB_USER=zm
- ZM_DB_PASS=zmPassword
volumes:
- ./zoneminder/mysql:/var/lib/mysql
- ./zoneminder/images:/var/cache/zoneminder/images
- ./zoneminder/events:/var/cache/zoneminder/events
- ./zoneminder/logs:/var/log/zm
depends_on:
zoneminder-db:
condition: service_healthy
healthcheck:
test:
interval: 30s
timeout: 10s
retries: 3
zoneminder-db:
image: mariadb:latest
container_name: zm-mariadb
restart: always
environment:
- MYSQL_DATABASE=zm
- MYSQL_USER=zm
- MYSQL_PASSWORD=zmPassword
- MYSQL_ROOT_PASSWORD=rootPassword
volumes:
- ./zoneminder/db:/var/lib/mysql
healthcheck:
test:
start_period: 10s
interval: 10s
timeout: 5s
retries: 3
Scrypted
Scrypted - высокопроизводительная платформа для интеграции сетевого видеорегистратора с интеллектуальными функциями обнаружения. Мгновенная потоковая передача с низкой задержкой для интеграции с HomeKit, Google Home и Alexa.
services:
scrypted:
image: ghcr.io/koush/scrypted
container_name: scrypted
restart: unless-stopped
volumes:
- ./scrypted_volume:/server/volume
devices:
network_mode: host # http://ip:11080 or https://ip:10443
dns:
- 1.1.1.1
- 8.8.8.8
logging:
driver: json-file
options:
max-size: 10m
max-file: 5
SentryShot
SentryShot - система видеонаблюдения для просмотра в реальном времени с задержкой менее 2 секунд, поддержкой круглосуточной записи в пользовательскую базу данных, обнаружение объектов с помощью TensorFlow Lite (TFLite) и пользовательской модели, а также адаптивный и уобный веб-интерфейс для мобильных устройств.
services:
sentryshot:
image: codeberg.org/sentryshot/sentryshot:v0.3.8
container_name: sentryshot
restart: unless-stopped
ports:
- 2020:2020 # http://ip:2020/live
# - 1883:1883 # API
environment:
- TZ=Etc/UTC+3
volumes:
- ./sentryshot_conf:/app/configs
- ./sentryshot_data:/app/storage
# devices:
# - "/sys/bus/usb/devices/x"
Motion UI
Motion UI - веб-интерфейс для управления системой видеонаблюдения Motion от создателя RepoManager.
services:
motion:
image: lbr38/motionui:latest
container_name: motion
restart: unless-stopped
privileged: true
environment:
FQDN: motion.docker.local
volumes:
- /etc/localtime:/etc/localtime:ro
- ./motionui_data:/var/lib/motionui
- ./motionui_captures:/var/lib/motion
# - ./motion.conf:/etc/motion/motion.conf
# - ./camera01.conf:/etc/motion/camera01.conf
# - ./cam01_data:/etc/motion/cam01
ports:
- 8181:8080
- 8182:8081
# Username: admin
# Password: motionui
Torrent Stack
Удаленный SMB каталог для хранения медиа-контента:
volumes:
smb_volume:
driver_opts:
type: cifs
o: username=guest,password=,uid=1000,gid=1000
device: //192.168.3.100/plex-content
Jackett
Jackett - сервер API и веб-интерфейс для поиска и загрузки торрент файлов из любых индексеров (торрент-трекеров).
services:
jackett:
image: lscr.io/linuxserver/jackett:latest
container_name: jackett
restart: unless-stopped
environment:
- PUID=1000
- PGID=1000
- TZ=Etc/UTC+3
volumes:
- ./jackett_conf:/config
ports:
- 9117:9117
FreshRSS
Freshrss - агрегатор RSS-каналов с поддержкой хранения данных в SQLite, PostgreSQL и MySQL/MariaDB.
services:
freshrss:
image: lscr.io/linuxserver/freshrss:latest
container_name: freshrss
restart: unless-stopped
environment:
- PUID=1000
- PGID=1000
- TZ=Etc/UTC
volumes:
- ./freshrss_config:/config
ports:
- 9111:80
qBittorrent
qBittorrent - кросплатформенный торрент-клиент с поддержкой современного веб-интерфейса и адаптивного API. Поддерживает подписку на RSS ленты новостей и поиск торрентов через плагины.
qBt_SE - плагины поисковой системы qBittorrent для торрент трекеров Kinozal, RuTracker, Rutor и NNM-Club.
qBitController - приложение с открытым исходным кодом на Kotlin для удаленного управления qBittorrent с устройств Android, iOS, Windows, Linux и macOS.
Electorrent - rлиент удаленного управления для qBittorrent, Transmission, Deluge, uTorrent, rTorrent и Synology.
services:
qbittorrent:
image: lscr.io/linuxserver/qbittorrent:latest
# Official Docker Image
# image: qbittorrentofficial/qbittorrent-nox:latest
container_name: qbittorrent
restart: unless-stopped
environment:
- PUID=1000
- PGID=1000
- TZ=Etc/UTC+3
- WEBUI_PORT=3240
- TORRENTING_PORT=6881
volumes:
- ./qbittorrent_conf:/config
- smb_volume:/downloads
ports:
- 3240:3240
- 6881:6881
- 6881:6881/udp
qbittoreent-swagger:
image: docker.swagger.io/swaggerapi/swagger-ui
container_name: qbittoreent-swagger
restart: unless-stopped
ports:
- 3241:8080
environment:
- SWAGGER_JSON_URL=https://raw.githubusercontent.com/qbittorrent-ecosystem/webui-api-openapi/refs/heads/master/specs/v2.8.3/build/openapi.yaml
depends_on:
- qbittorrent
Transmission
Transmission - кросплатформенный торрент-клиент с поддержкой веб-интерфейса, API и каталога автоматического обнаружения torrent-файлов для загрузки (возможно интегрировать с Jackett). Поддерживает нативное GUI для macOS, Linux на базе GTK и Windows на базе QT.
Transmission Remote GUI (TransGUI) - кроссплатформенный desktop интерфейс для удаленного управления демоном Transmission через протокол RPC. Он быстрее и функциональнее встроенного веб-интерфейса Transmission, который визуально похож на qBittorrent и uTorrent.
Transmission Remote - приложение Android для удаленного управления клиентом Transmission с мобильного телефона.
services:
transmission:
image: lscr.io/linuxserver/transmission:latest
container_name: transmission
restart: unless-stopped
environment:
- PUID=1000
- PGID=1000
- TZ=Etc/UTC+3
- USER=
- PASS=
volumes:
- ./transmission_conf:/config
- smb_volume:/downloads
- ./torrent_watch:/watch
ports:
- 9118:9091
- 51413:51413
- 51413:51413/udp
Nefarious
Nefarious - веб-приложение для автоматической загрузки фильмов и сериалов. Под капотом используется Jackett для поиска торрентов и Transmission для управления загрузкой.
services:
nefarious:
image: lardbit/nefarious:latest
container_name: transmission
restart: unless-stopped
ports:
- 9119:80
environment:
- DATABASE_URL=sqlite:////nefarious-db/db.sqlite3
- REDIS_HOST=nefarious-redis
- NEFARIOUS_USER=admin
- NEFARIOUS_PASS=admin
- HOST_DOWNLOAD_PATH=/tmp/
- CONFIG_PATH=/nefarious-db
volumes:
- ./nefarious_data:/nefarious-db
nefarious-redis:
image: redis
container_name: nefarious-redis
restart: unless-stopped
mem_limit: 200m
expose:
- 6379
# ports:
# - 6379:6379
Deluge
Deluge - торрент-клиент, использующий модель демон-клиент на базе библиотеки libtorrent, который поддерживает пользовательские веб-интерфейс, интерфейс рабочего стола на базе GTK и интерфейс командной строки.
services:
deluge:
image: lscr.io/linuxserver/deluge:latest
container_name: deluge
restart: unless-stopped
environment:
- PUID=1000
- PGID=1000
- TZ=Etc/UTC+3
- DELUGE_LOGLEVEL=error
volumes:
- ./deluge_config:/config
- smb_volume:/downloads
ports:
- 8112:8112
- 6881:6881
- 6881:6881/udp
- 58846:58846
Cloud Torrent
Cloud Torrent - торрент клиент с поддержкой поиска раздач и просмотра медиа-контента в браузере, от создателя Chisel (быстрый TCP/UDP-туннель, работающий по протоколу HTTP и защищенный через SSH).
services:
cloud-torrent:
image: jpillora/cloud-torrent:latest
container_name: cloud-torrent
restart: unless-stopped
ports:
- 3010:3000
volumes:
- smb_volume:/downloads
rQbit
rQbit - современный торрент-клиент, с поддержкой веб-интерфейса, API, Desktop и cli, а также может использоваться как библиотека на Rust. Поддерживает стриминг видео, включая трансляцию на плееры, например, VLC.
rqbit:
image: ikatson/rqbit:main
network_mode: host
ports:
- 3030:3030 # API
- 4240:4240 # BitTorrent
environment:
RQBIT_UPNP_SERVER_ENABLE: "true"
RQBIT_UPNP_SERVER_FRIENDLY_NAME: rqbit-docker
RQBIT_HTTP_API_LISTEN_ADDR: 0.0.0.0:3030
volumes:
- ./rqbit_db:/home/rqbit/db
- ./rqbit_cache:/home/rqbit/cache
- smb_volume:/home/rqbit/downloads
Plex
Plex - медиа-сервер (система потоковой передачи медиаконтента), которая позволяет смотреть фильмы, сериалы, фото и прослушивать музыку на различных устройствах, а также поддерживает API для удаленного управления (без документации, ключ API можно получить только вечер DevTool).
services:
plex:
image: lscr.io/linuxserver/plex:latest
# Official Docker Image
# image: plexinc/pms-docker
container_name: plex
restart: unless-stopped
environment:
- PUID=1000
- PGID=1000
- TZ=Etc/UTC+3
- VERSION=docker
- PLEX_CLAIM= # from https://plex.tv/claim
volumes:
- ./plex_conf:/config
- smb_volume:/tv
- smb_volume:/movies
# use Official Docker Image
# - ./plex_conf:/config
# - ./plex_transcode:/transcode
# - smb_volume:/data
ports:
- 32400:32400
- 1900:1900/udp
- 5353:5353/udp
- 8324:8324
- 32410:32410/udp
- 32412:32412/udp
- 32413:32413/udp
- 32414:32414/udp
- 32469:32469
Tautulli
Tautulli - система мониторинга, аналитики и уведомлений для Plex Media Server с адаптивным дизайном для мобильных устройств.
services:
tautulli:
image: lscr.io/linuxserver/tautulli:latest
container_name: tautulli
restart: unless-stopped
environment:
- PUID=1000
- PGID=1000
- TZ=Etc/UTC+3
volumes:
- ./tautulli_conf:/config
ports:
- 8181:8181
Overseerr
Overseerr - веб-приложение с собственным интерфейсом для управления запросами к медиа-библиотеки Plex а также интегрируется с Sonarr и Radarr.
services:
overseerr:
image: lscr.io/linuxserver/overseerr:latest
container_name: overseerr
restart: unless-stopped
environment:
- PUID=1000
- PGID=1000
- TZ=Etc/UTC+3
volumes:
- ./overseerr_conf:/config
ports:
- 5055:5055
Jellyfin
Jellyfin - медиа-сервер с открытым исходным кодом, который является ответвлением проприетарного Emby с версии 3.5.2 и портированный на платформу .NET для обеспечения полной кроссплатформенной поддержки (API совместим с Emby).
services:
jellyfin:
image: lscr.io/linuxserver/jellyfin:latest
container_name: jellyfin
restart: unless-stopped
environment:
- PUID=1000
- PGID=1000
- TZ=Etc/UTC+3
volumes:
- ./jellyfin_conf/jellyfin:/config
- ./jellyfin-content/tvshows:/data/tvshows
- ./jellyfin-content/movies:/data/movies
ports:
- 8096:8096
- 7359:7359/udp
- 1900:1900/udp
Jellyseerr
Jellyseerr - fork Overseerr для Jellyfin. Поддерживает полную интеграцию с Jellyfin, Emby и Plex (включая Sonarr и Radarr), включая аутентификацию с импортом и управлением пользователями, а также базы данных SQLite и PostgreSQL.
services:
jellyseerr:
image: fallenbagel/jellyseerr:latest
container_name: jellyseerr
restart: unless-stopped
environment:
- LOG_LEVEL=debug
- TZ=Asia/Tashkent
volumes:
- ./jellyseerr_config:/app/config
ports:
- 5055:5055
USM
USM (Universal Media Server) - медиасервер, поддерживающий протоколы DLNA, UPnP и HTTP/S. Он способен передавать видео, аудио и изображения между большинством современных устройств. Изначально он был основан на PS3 Media Server от shagrath для обеспечения большей стабильности и совместимости файлов.
services:
ums:
image: universalmediaserver/ums
container_name: ums
restart: unless-stopped
environment:
- TZ=Etc/UTC+3
- UMS_PROFILE=/profile
volumes:
- ./ums_conf:/profile
- ./ums-content:/media:ro
ports:
- 1044:1044
- 5001:5001
- 9001:9001
- 1900:1900/udp
- 2869:2869
- 8000-8010:8000-8010
Sonarr
Sonarr - PVR (Personal Video Recorder) для пользователей Usenet и BitTorrent. Он позволяет отслеживать несколько RSS-каналов на предмет новых серий и захватывать, сортировать и переименовывать их. Его также можно настроить на автоматическое повышение качества уже загруженных файлов, когда становится доступен более качественный формат.
services:
sonarr:
image: lscr.io/linuxserver/sonarr:latest
container_name: sonarr
restart: unless-stopped
environment:
- PUID=1000
- PGID=1000
- TZ=Etc/UTC+3
volumes:
- ./sonnar_conf:/config
- smb_volume:/tv
- ./sonarr_downloads:/downloads
ports:
- 8989:8989
Radarr
Radarr - fork Sonarr для работы с фильмами.
services:
radarr:
image: lscr.io/linuxserver/radarr:latest
container_name: radarr
restart: unless-stopped
environment:
- PUID=1000
- PGID=1000
- TZ=Etc/UTC+3
volumes:
- ./radarr_conf:/config
- smb_volume:/movies
- ./sonarr_downloads:/downloads
ports:
- 7878:7878
Prowlarr
Prowlarr - менеджер и прокси-сервер для индексаторов, созданный на основе популярного базового стека *arr для интеграции с различными приложениями PVR. Prowlarr поддерживает управление торрент-трекерами, Usenet индексаторами, а также легко интегрируется с Radarr, Sonarr, Lidarr и Readarr, без необходимости настройки индексатора для каждого приложения.
services:
prowlarr:
image: lscr.io/linuxserver/prowlarr:latest
container_name: prowlarr
restart: unless-stopped
environment:
- PUID=1000
- PGID=1000
- TZ=Etc/UTC+3
volumes:
- ./prowlarr_conf:/config
ports:
- 9696:9696
Game Stack
Sunshine
Sunshine - самостоятельный хостинг-сервер игровых трансляций (like NVIDIA GameStream и Parsec) для клиента Moonlight.
services:
sunshine:
image: lizardbyte/sunshine:latest-ubuntu-24.04
container_name: sunshine
restart: unless-stopped
volumes:
- ./sunshine_config:/config
environment:
- PUID=1001
- PGID=1001
- TZ=Etc/GMT+3
ports:
- 47984-47990:47984-47990/tcp
- 47998-48000:47998-48000/udp
- 48010:48010
ipc: host
Dolphin
Dolphin - эмулятор GameCube и Wii собранный в Docker образе для запуска в браузере на базе Selkies.
services:
dolphin:
image: lscr.io/linuxserver/dolphin:latest
container_name: dolphin
restart: unless-stopped
environment:
- PUID=1000
- PGID=1000
- TZ=Etc/GMT+3
volumes:
- ./dolphin_config:/config
- ./dolphin_games:/games
ports:
- 3001:3001
- 3002:3000
shm_size: 1gb
DuckStation
DuckStation - эмулятор PlayStation 1, собранный в Docker образе.
services:
duckstation:
image: lscr.io/linuxserver/duckstation:latest
container_name: duckstation
restart: unless-stopped
environment:
- PUID=1000
- PGID=1000
- TZ=Etc/UTC+3
volumes:
- ./duckstation_config:/config
- ./duckstation_games:/games
ports:
- 3001:3001
- 3002:3000
shm_size: 1gb
Emulator.js
Emulator.js - веб-интерфейс для RetroArch.
🔗 Emulator.js Demo ↗
services:
emulator.js:
image: lscr.io/linuxserver/emulatorjs:latest
container_name: emulator.js
restart: unless-stopped
environment:
- PUID=1000
- PGID=1000
- TZ=Etc/UTC+3
- SUBFOLDER=/
volumes:
- ./emulatorjs_config:/config
- ./roms:/data
ports:
- 80:80
- 3000:3000
# - 4001:4001
Junie
Junie - интерфейс Libretro, работающий в браузере.
🔗 Junie Demo ↗
services:
junie:
image: namaneo/junie
container_name: junie
restart: unless-stopped
volumes:
- ./games:/junie/games
ports:
- 8008:8000
