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.

naspäť