Vlastná evidencia serverových služieb v Dockeri

Úvod:
Pri viacerých lokálnych serveroch, Docker kontajneroch a webových službách som potreboval jednoduchý prehľad o tom, kde mi čo beží. Pôvodne som mal služby evidované v Excel tabuľke, ale časom začalo byť nepraktické stále ručne kontrolovať IP adresy, porty a dostupnosť jednotlivých služieb.
Preto som si vytvoril jednoduchú webovú aplikáciu Server Evidence, ktorá slúži ako lokálny dashboard pre evidenciu serverových služieb.
Aplikácia beží v Dockeri na serveri MON a zobrazuje prehľad služieb, IP adries, portov, URL adries, poznámok a stavu služby Online alebo Offline.
Umiestnenie aplikácie:
Aplikácia je spustená na serveri MON.
IP adresa servera: 10.10.8.5
Port aplikácie: 3030
URL aplikácie: http://10.10.8.5:3030
Názov kontajnera: server-evidence
Projekt je uložený v priečinku:
/home/ivan/server-evidence
Štruktúra projektu:
server-evidence/
├── docker-compose.yml
├── Dockerfile
├── requirements.txt
├── app.py
├── services.yml
├── static/
│ └── favicon.ico
└── templates/
└── index.html
Význam jednotlivých súborov a priečinkov:
Dockerfile
Súbor, podľa ktorého sa vytvára Docker image aplikácie. Obsahuje inštaláciu Python závislostí, kopírovanie aplikácie a spustenie Flask servera.
docker-compose.yml
Hlavný Docker Compose súbor. Definuje kontajner server-evidence, mapovanie portu 3030:5000, pripojenie súboru services.yml a automatický reštart kontajnera.
app.py
Hlavný Python súbor aplikácie. Načítava služby zo súboru services.yml, kontroluje ich dostupnosť a posiela údaje do HTML šablóny.
requirements.txt
Zoznam Python balíkov potrebných pre aplikáciu. V tomto prípade hlavne Flask a PyYAML.
services.yml
Najdôležitejší konfiguračný súbor. Obsahuje zoznam serverov, služieb, IP adries, portov, URL adries, kategórií a poznámok.
templates/
Priečinok pre HTML šablóny Flask aplikácie. Nachádza sa v ňom súbor index.html, ktorý zobrazuje tabuľku služieb vo webovom rozhraní.
static/
Priečinok pre statické súbory aplikácie, napríklad favicon ikonu.
Kontrola súborov na serveri
Na serveri je možné štruktúru projektu overiť príkazom:
cd ~/server-evidence
ls
Výstup:
Dockerfile docker-compose.yml services.yml templates
app.py requirements.txt static
Použité technológie:
Aplikácia je vytvorená jednoducho pomocou Pythonu a Flasku. Údaje o službách nie sú uložené v databáze, ale v prehľadnom YAML súbore services.yml.
Použité komponenty:
- Python
- Flask
- PyYAML
- Docker
- Docker Compose
- HTML, CSS a jednoduchý JavaScript
Výhodou tohto riešenia je, že aplikácia je jednoduchá, rýchla a ľahko upraviteľná. Na doplnenie novej služby stačí upraviť jeden súbor.
Docker Compose konfigurácia:
Súbor docker-compose.yml:
services:
server-evidence:
build: .
container_name: server-evidence
ports:
- "3030:5000"
volumes:
- ./services.yml:/app/services.yml
restart: unless-stopped
Aplikácia vo vnútri kontajnera počúva na porte 5000, ale na serveri je dostupná cez port 3030.
Dockerfile:
FROM python:3.12-slim
WORKDIR /app
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt
COPY app.py .
COPY services.yml .
COPY templates ./templates
COPY static ./static
EXPOSE 5000
CMD ["python", "app.py"]
Závislosti aplikácie:
Súbor requirements.txt:
Flask==3.0.3
PyYAML==6.0.2
Hlavný konfiguračný súbor služieb:
Všetky služby sú uložené v súbore:
services.yml
Príklad položky v services.yml:
- server: "MON"
ip: "10.10.8.5"
port: "3030"
name: "Server Evidence"
url: "http://10.10.8.5:3030"
check_url: "http://10.10.8.5:3030"
category: "Web"
note: "Lokálna evidencia serverových služieb"
Význam položiek:
server – názov servera alebo skupiny
ip – IP adresa servera alebo názov služby
port – port služby
name – názov služby
url – klikateľný odkaz v aplikácii
check_url – URL adresa použitá na kontrolu dostupnosti
category – kategória služby
note – poznámka k službe
Kontrola stavu služby:
Aplikácia kontroluje, či je služba dostupná. Ak je nastavené check_url, kontroluje sa priamo webová URL adresa. Ak check_url nie je nastavené, aplikácia kontroluje IP adresu a port.
Vďaka tomu viem pri službách okamžite vidieť, či sú Online alebo Offline.
Spustenie aplikácie:
V priečinku projektu:
cd ~/server-evidence
sudo docker-compose up -d --build
Reštart aplikácie:
sudo docker-compose restart server-evidence
Kontrola bežiaceho kontajnera:
sudo docker ps --format "table {{.Names}}\t{{.Status}}\t{{.Ports}}"
Kontrola logov:
sudo docker-compose logs --tail=50
Favicon aplikácie:
Pre aplikáciu bola vytvorená aj vlastná favicon ikona, aby mala aplikácia vlastný vizuálny štýl v prehliadači.
Súbor favicon.ico je uložený v priečinku:
static/favicon.ico
Do HTML šablóny templates/index.html bol do časti head doplnený riadok:
<link rel="icon" type="image/x-icon" href="/static/favicon.ico">
A do Dockerfile bolo potrebné doplniť kopírovanie priečinka static:
COPY static ./static
Po doplnení favicon bolo potrebné aplikáciu znova rebuildnúť:
sudo docker-compose up -d --build
Ak sa favicon nezobrazí hneď, stačí použiť tvrdý refresh v prehliadači alebo otvoriť aplikáciu v anonymnom okne.
Výhody riešenia:
- Všetky služby sú na jednom mieste.
- Vidím IP adresy, porty a URL adresy.
- Aplikácia ukazuje stav Online alebo Offline.
- Odkazy sú klikateľné.
- Údaje sa jednoducho upravujú v YAML súbore.
- Aplikácia beží v Dockeri.
- Nie je potrebná databáza.
- Dá sa ľahko zálohovať a preniesť na iný server.
Záver:
Server Evidence mi slúži ako jednoduchá lokálna evidencia serverových služieb. Nahradil som tým pôvodnú Excel tabuľku a získal som prehľadný webový dashboard, kde okamžite vidím, čo mi na jednotlivých serveroch beží.
Do budúcna sa dá aplikácia rozšíriť napríklad o prihlasovanie, editáciu služieb priamo cez web, export do Excelu alebo detailnejší monitoring služieb.