IDD.peviitor.ro

Infrastructure Design Document — Documentație Infrastructură

v1.0 — Iunie 2026

Motor de căutare a locurilor de muncă din România

Infrastructura hardware și software a platformei peviitor.ro — acoperind topologia rețelei, configurația serverelor, arhitectura de deployment, backup și securitate.

⁠🏙️ Topologia Infrastructurii

Platforma rulează pe trei Raspberry Pi în rețeaua locală RCS&RDS, cu frontend-ul găzduit pe GitHub Pages:

+------------------------------------------------------------------+
|                      RCS&RDS (ISP)                               |
|                     IP Dinamic 86.122.35.88                       |
|                     Fibra Optica (1 Gbps)                         |
+--------------------------------+---------------------------------+
                                 |
                         +-------v--------+
                         |    ONT (ONU)   |
                         |   Fibra -> Ethernet |
                         +-------+--------+
                                 |
                         +-------v--------+
                         |   Router WiFi 6 |
                         |   192.168.1.1   |
                         |   NAT, Port Fwd |
                         +-------+--------+
                                 |
                         +-------v--------+
                         | Switch Gigabit  |
                         |   1 Gbps       |
                         +-------+--------+
                                 |
            +--------------------+--------------------+
            |                    |                    |
    +-------v--------+   +-------v--------+   +------v--------+
    | RPi 5 (16GB)   |   | RPi 5 (4GB)    |   | RPi 4         |
    | SOLR Server    |   | API Server     |   | TEST Server   |
    | Productie      |   | Productie      |   | test.peviitor.ro|
    | 192.168.1.134  |   | 192.168.1.135  |   | 192.168.1.130 |
    |                |   |                |   |               |
    | Docker:        |   | Docker:        |   | Docker:       |
    | solr:10-slim   |   | peviitor-api   |   | peviitor-api  |
    | :8983          |   | orase-api      |   | (Apache PHP)  |
    |                |   | nginx-proxy-mgr|   | peviitor-solr |
    |                |   | :80/443/81     |   | :8983         |
    |                |   |                |   | OpenResty     |
    |                |   |                |   | :80/443       |
    +----------------+   +----------------+   +---------------+

                    +-------------------------+
                    |   GitHub Pages          |
                    |   Frontend (React)      |
                    |   peviitor.ro           |
                    +-------------------------+

                    +-------------------------+
                    |   GitHub Actions        |
                    |   Scrapers (cron)       |
                    |   Python/Node/JMeter    |
                    +-------------------------+

                    +-------------------------+
                    |   CloudFlare            |
                    |   CDN, DNS, SSL, DDoS   |
                    +-------------------------+

Flux trafic

Utilizator (Browser)
    |
    | HTTPS (peviitor.ro)
    v
CloudFlare (CDN, SSL, cache)
    |
    | DNS: zimbor.go.ro
    v
RCS&RDS (fibra optica 1 Gbps)
    |
    v
ONT (fibra → Ethernet)
    |
    v
Router WiFi 6 (NAT, port forwarding :80/:443)
    |
    v
Switch Gigabit (1 Gbps)
    |
    v
RPi API (Nginx Proxy Manager)
    |
    | :8080 (PHP BFF)
    v
RPi SOLR (HTTP LAN :8983)
    |
    v
Index SOLR (job / company)

⁠🖥️ Server API — Raspberry Pi 5 (4GB)

Hardware

ModelRaspberry Pi 5 Model B Rev 1.0
SoCBroadcom BCM2712 (Cortex-A76, 4 nuclee)
RAM4 GB LPDDR4X
StocareMicroSD 59.4 GB (25 GB folosiți)
GPUVideoCore VII
RețeaEthernet 1000 Mbps (eth0: 192.168.1.135/24)
Temperatură~49.9 °C

Software

OSDebian 12 (Bookworm)
KernelLinux 6.12.87+rpt-rpi-2712 (aarch64)
Hostnameapi
Window Managerlabwc (Wayland)
VNCwayvnc (rpi-connect)
DockerEngine + Compose

Containere Docker

NumeImaginePorturiRol
peviitor-apiphp:8.3-apache8080 → 80API BFF principal
orase-apiphp:8.3-apache8081 → 80API orase.peviitor.ro
npm-appjc21/nginx-proxy-manager80, 81, 443Reverse proxy, SSL

Runtime-uri

Node.jsv20.20.2
Python3.11.2
GCC12

Servicii systemd

docker, netdata, ssh, solr-monitor (Discord), avahi-daemon, cron

Vezi detalii complete →

⁠🔍 Server SOLR — Raspberry Pi 5 (16GB)

Hardware

ModelRaspberry Pi 5 Model B Rev 1.1
CPUARM Cortex-A76, 4 nuclee @ 2.4 GHz
CacheL1d 256 KiB, L1i 256 KiB, L2 2 MiB, L3 2 MiB
RAM16 GB LPDDR4X (15 GiB usable)
Swap16 GiB swapfile + 2 GiB zram (zstd)
StocaremicroSD 64 GB (33 GB folosiți)
RețeaEthernet 1000 Mbps (eth0: 192.168.1.134/24)

Software

OSDebian 13 (Trixie) v13.5
Kernel6.18.29+rpt-rpi-2712 (aarch64)
Hostnamesolr-pi
DockerCE 29.5.2 + Compose 5.1.4
Python3.13.5
Node.jsv24.16.0
GCC14.2.0

Container Docker

NumeImaginePorturiRol
solr-containersolr:10-slim0.0.0.0:8983 → 8983Apache SOLR search engine

Imagini stocate: solr:latest (1.25 GB), solr:9-slim (531 MB), solr:10-slim (675 MB), alpine, jq

Vezi detalii complete →

⁠🔌 Server TEST — Raspberry Pi 4

ModelRaspberry Pi 4 (ARM Cortex-A72, 4 nuclee)
RAM1.8 GB usable
StocaremicroSD 58 GB (~46 GB liberi)
IP Local192.168.1.130/24
OSDebian 13 (Trixie), kernel 6.12 (aarch64)
Reverse ProxyOpenResty (nginx + LuaJIT) — port 80/443
TLSLet's Encrypt (ECDSA P-384, TLS 1.3, AES-256-GCM)
Dockerpeviitor-api (Apache PHP 8.2, port 8081), peviitor-solr (Solr 10.0.0, port 8983)
FrontendReact SPA (search-engine, build mode qa) servit de Apache
APIPHP BFF v0/v1 + Swagger UI
SOLRCore-uri job + company (subset ~5k joburi)
RolMediu de test (test.peviitor.ro, testsolr.peviitor.ro)

⁠🌐 Rețea

Topologie rețea locală

DispozitivIPRol
ONT (ONU)Convertor fibra optică → Ethernet
Router WiFi 6192.168.1.1NAT, port forwarding, Wi-Fi
Switch GigabitConectare RPi-uri (4 porturi 1 Gbps)
RPi 5 SOLR192.168.1.134SOLR producție (16GB)
RPi 5 API192.168.1.135API producție (4GB)
RPi 4 TEST192.168.1.130Mediu test (test.peviitor.ro)

Acces extern

ServiciuURLMetodă
Frontendpeviitor.roGitHub Pages + CloudFlare
API BFFapi.peviitor.roDDNS + Nginx Proxy Manager
SOLRsolr.peviitor.roPrin API (indirect)
Testtest.peviitor.roRPi 4 — OpenResty

DDNS

Furnizorgo.ro
Hostnamezimbor.go.ro
IP actual86.122.35.88
ISPRCS&RDS (IP dinamic)
Viteză1 Gbps
Port forwarding:80 → 192.168.1.135:80, :443 → 192.168.1.135:443

⁠☁️ DNS & CloudFlare

Domeniul peviitor.ro

Domeniupeviitor.ro
RegistrarClaus Web SRL
Nameserveremaria.ns.cloudflare.com, razvan.ns.cloudflare.com
SSLFull (strict) — certificat CloudFlare
CDNProxy activ (orange cloud) pentru domeniile marcate

Înregistrări DNS principale

A Records (frontend GitHub Pages)

NumeIP
peviitor.ro185.199.108.153
peviitor.ro185.199.109.153
peviitor.ro185.199.110.153
peviitor.ro185.199.111.153

CNAME → GitHub Pages

NumeTarget
sad.peviitor.ropeviitor-ro.github.io
romania.peviitor.ropeviitor-ro.github.io
v01.peviitor.ropeviitor-ro.github.io
www.peviitor.ropeviitor-ro.github.io

CNAME → DDNS zimbor.go.ro (infrastructură locală)

NumeProxy
api.peviitor.roDa
netdata.peviitor.roDa
orase.peviitor.roNu
solr.peviitor.roNu
test.peviitor.roNu
testsolr.peviitor.roNu
pi5.peviitor.roDa
sebi.peviitor.roDa

Vezi documentul complet pentru lista exhaustivă (MX, TXT, etc.)

⁠🚀 Arhitectura de Deployment

Componente și unde rulează

ComponentăUnde ruleazăURL
Frontend (React)GitHub Pagespeviitor.ro
API BFF (PHP)RPi API — Dockerapi.peviitor.ro
API Orașe (PHP)RPi API — Dockerorase.peviitor.ro
SOLR SearchRPi SOLR — Dockersolr.peviitor.ro
ValidatorNetlifyadmin.peviitor.ro
ScrapersGitHub Actions

Nginx Proxy Manager

Rulează pe RPi API (porturile 80/81/443), face SSL termination cu Let's Encrypt și direcționează traficul după domeniu:

api.peviitor.ropeviitor-api:80
orase.peviitor.roorase-api:80
solr.peviitor.ro192.168.1.134:8983 (Basic Auth)
test.peviitor.roRPi 4 TEST

Pipeline CI/CD

Developer commit → GitHub → GitHub Actions
                                |
                    +-----------+-----------+
                    |           |           |
                    v           v           v
                Lint        Test        Build
                    |           |           |
                    +-----------+-----------+
                                |
                    +-----------+-----------+
                    |           |           |
                    v           v           v
              Frontend      API         SOLR config
              (gh-pages)    (Docker)    (manual)

⁠📈 Servicii și Monitorizare

Netdata

Monitorizare RPi API (CPU, RAM, disk, rețea, temperatură) — Port 19999 (LAN)

v2.10.0

Sentry

Error monitoring frontend + API

CloudFlare Analytics

Trafic, cache, securitate

Microsoft Clarity

Comportament utilizatori (frontend)

solr-monitor

Discord webhook pentru status SOLR

Discord

Raspberry Pi Connect

Acces remote prin browser (wayvnc)

v2.11.0

⁠💻 Backup și Disaster Recovery

Strategie backup

ComponentăFrecvențăMetodăRetenție
Index SOLRZilnic (02:00)Script shell + snapshot7 zile
Configurație DockerManual (la modificare)Git commitPermanent
API source codeContinuuGitHubPermanent
Frontend source codeContinuuGitHubPermanent
Nginx Proxy ManagerManualExport UI

Procedură restore SOLR

docker stop solr-container
# Restaurare snapshot din backup
docker start solr-container
curl -u user:pass "http://localhost:8983/solr/job/select?q=*:*&rows=1"

Riscuri

RiscImpactMitigare
Defecțiune microSDPierdere dateBackup zilnic; înlocuire rapidă
IP dinamic RCS&RDSIndisponibilitate externăDDNS cu TTL scăzut
Single point of failureAPI sau SOLR indisponibilScripturi de restore rapide
Fără replică SOLRPierdere indexRebuild din scrapers + backup
Incendiu/furtPierdere totală hardwareBackup în cloud (GitHub)

⁠🔒 Securitate

SOLR Basic Auth

security.json activat pe container

CORS restricționat

API acceptă doar domenii cunoscute

CloudFlare WAF

Protecție DDoS și OWASP Top 10

SSL/TLS

Let's Encrypt + CloudFlare Full (strict)

SSH

Autentificare prin cheie — doar în LAN

Firewall

iptables pe toate RPi-urile

GitHub Security

Secret Scanning, CodeQL, Dependabot

Network Segmentation

SOLR în LAN, API prin NPM, Frontend pe CDN

⁠📚 Specificații SOLR

Container

Imaginesolr:10-slim
Port8983 (TCP)
AutentificareBasic Auth (security.json)

Core-uri

CoreUnique KeyDoc.
joburl~40,000+
companyid (cif)~1,000+

⁠🗃️ Inventar Hardware

DispozitivRAMStocareIPOSRol
RPi 5 API4 GBmicroSD 59.4 GB192.168.1.135Debian 12API BFF + NPM
RPi 5 SOLR16 GB + 16 GB swap + 2 GB zrammicroSD 64 GB192.168.1.134Debian 13Apache SOLR 10.x
RPi 4 TEST1.8 GBmicroSD 58 GB192.168.1.130Debian 13test.peviitor.ro

Rețea

ISPRCS&RDS — fibra optică, 1 Gbps
IP Public86.122.35.88 (dinamic)
DDNSzimbor.go.ro
Conexiune1000 Mbps (toate RPi-urile, Ethernet)

⁠🏢️ Medii

MediuFrontendAPISOLRDate
Producțiepeviitor.roapi.peviitor.rosolr.peviitor.roFull (~40k joburi)
Testtest.peviitor.rotest.peviitor.ro/swagger-uitestsolr.peviitor.roSubset (~5k joburi)
Locallocalhost:3000localhost/apiDocker localMinimal (seed)

⁠📖 Glosar

TermenDefiniție
BFFBackend for Frontend — API care servește specific clientului frontend
DDNSDynamic DNS — serviciu care actualizează DNS-ul pentru IP-uri dinamice
NPMNginx Proxy Manager — reverse proxy cu UI web
RPiRaspberry Pi — computer single-board
zramRAM comprimat folosit ca swap
WAFWeb Application Firewall
CORSCross-Origin Resource Sharing
CodeQLMotor de analiză semantică GitHub pentru vulnerabilități
DependabotBot GitHub care automatizează update-uri de dependințe