Del tema de la revista a la pràctica del projecte
Pàgines de serveis i tècniques pertinents per a l'article
Video-Botschaft
Linux-serveis amb Delphi: arquitectura, operacions i guia pràctica per a empreses
Kurz erklärt, warum beim Betrieb von Delphi-Services unter Linux nicht der erste Start zählt, sondern systemd-Integration, saubere Trennung von Binary/Konfiguration/Daten, Logging, Updatefähigkeit und Security-Defaults für stabilen Alltag im Unternehmen.
Video mit KI erstellt
Transkript anzeigen
Hallo, kurz und ruhig. Der erste Start ist selten das Problem.
Der Betrieb danach entscheidet. Im Beitrag „Linux-Services mit Delphi betreiben: Architektur, Betrieb und Praxisleitfaden für Unternehmen“ geht es genau darum: Wie sich ein Delphi-Service unter Linux so verhält, dass Admins ihn wie jeden anderen Dienst steuern können.
Im Alltag kippt es oft an drei Punkten: Updates ohne Downtime, Logs, die im Incident wirklich helfen, und Konfiguration, die sauber pro Umgebung getrennt ist. systemd ist dabei der Anker.
Das ist der Linux-Dienstmanager. Er startet, überwacht und begrenzt Prozesse.
Wenn Ihr Dienst dort mit klaren Restart-Regeln, passenden Limits und verständlichen Fehlmeldungen hängt, sinken Risiko und Betriebsaufwand spürbar. Wenn Sie dazu Fragen haben: gern, ich ordne es ein.
Qui Linux-Services amb Delphi vol operar pensa primer en la viabilitat tècnica: es compila l’aplicació per a Linux? Funciona de manera estable? Són preguntes importants — però en l’explotació empresarial, rarament l’èxit depèn de la primera execució; compta més l’operativa posterior: actualitzacions sense temps d’inactivitat, desplegaments reproduïbles, logs traçables, responsabilitats clares, valors de seguretat per defecte ben definits i un model de servei que s’integri en la gestió operativa existent de Linux.
Delphi ha crescut històricament en moltes empreses — sovint com a software empresarial proper a l’escriptori, i de vegades com a component d’integració o backend. El pas cap a serveis basats en Linux (per exemple per a REST-APIs, automatització, preparació de dades o integracions) sovint no és una „construcció nova“, sinó un camí de modernització: parts de la lògica s’extreuen del client, les interfícies s’estabilitzen i l’operació s’estandarditza més. Precisament en això val la pena parlar aviat dels aspectes operatius — no només poc abans de la posada en producció.
Aquest article situa com s’opera tipicament un servei basat en Delphi sobre Linux, quines decisions arquitecturals simplifiquen l’operació i quins obstacles pràctics són rellevants — amb focus en la direcció de TI, administradors i responsables tècnics de projecte.
Per què serveis Linux a l’empresa — i per què Delphi hi continua sent rellevant
Linux és en molts centres de dades i entorns cloud l’estàndard per a càrregues de treball de servidor. Entre els motius hi ha: un model operatiu unificat (SSH, gestió de paquets, systemd), automatització ben establerta (entorns Ansible, Terraform), blocs de seguretat clars (SELinux/AppArmor, systemd-Sandboxing) i un ampli suport per part dels ecosistemes de monitorització i logging.
Delphi no és „estrany“, sinó sovint un component pragmàtic quan ja existeix al negoci una lògica extensa en Delphi. En lloc de reimplementar aquesta lògica completament, es pot migrar o complementar en serveis — per exemple com a REST-Server, com a processament en segon pla (Batch/Queue Worker) o com a servei d’integració entre ERP, DMS i altres sistemes.
La perspectiva és important: no es tracta de Delphi „contra“ Linux, sinó de Delphi en un model operatiu Linux. Qui planifiqui bé obtindrà un component fàcil d’administrar, que es comporta com un servei „normal“ de Linux.
Delphi sota Linux: model d’execució, dependències, empaquetament
Des del punt de vista operatiu no es tracta tant del llenguatge o l’IDE com dels artefactes: quins fitxers es despleguen? Quines biblioteques del sistema són necessàries? Quines configuracions són requerides en temps d’execució?
Binari, configuració, dades: separació clara
Per a un Windows- i Linux-Services és decisiva una separació neta d’aquests tres àmbits:
- Binari/fitxer de programa: l’executable compilat, idealment sense rutes configurades a mà i sense permisos d’escriptura al directori d’instal·lació.
- Configuració: separada del binari, p. ex. com a fitxer a
/etc/<service>/o com a variables d’entorn, gestionades per systemd. Les variables d’entorn solen ser més còmodas en explotació perquè es poden variar més fàcilment per entorn (Dev/Test/Prod). - Dades/Runtime: fitxers temporals, cachés, fitxers PID/socket – habitualment a
/var/lib,/var/cacheo/run.
Aquesta separació no és acadèmica: permet immutable Deployments (el binari és «invariable»), rollbacks més nets i menys deriva de diferències entre servidors.
Dependències i biblioteques: millor conscients que accidentals
Molts problemes a l’explotació no són causats per l’aplicació mateixa, sinó per divergències en les biblioteques del sistema. A la pràctica, cal aclarir-ho aviat:
- Quines Linux-distribucions són la plataforma objectiu (p. ex. Debian/Ubuntu vs. RHEL/Rocky)?
- Quines versions estan aprovades a l’estratègia de TI i com es parchegen?
- Com es documenten i es comproven les dependències natives (Build-Pipeline, Smoke-Tests)?
Un enfocament robust és compilar els serveis en un entorn de Build definit i alinear-hi l’entorn d’execució. Alternativament, l’execució en contenidors (p. ex. Docker/Podman) pot ajudar a estandarditzar la runtimes — però cal establir de manera neta el model d’operacions de contenidors (imatges, registri, escaneig de seguretat, límits de recursos).
systemd com a ancla d’explotació: unitat de servei, estratègia de reinici, recursos
En entorns Linux moderns, systemd és el gestor de serveis estàndard: inicia serveis, els supervisa, recull logs (mitjançant journald) i pot aplicar regles senzilles de seguretat i recursos. Per a l’explotació de TI això és central, perquè crea un model de control unificat.
Definició del servei: inici, aturada, reinici
Les preguntes més importants que ha de respondre una unitat systemd:
- Com s’inicia? (ruta, paràmetres, directori de treball)
- Quan es considera el servei «llest»? (p. ex. immediatament vs. després d’un bind correcte al port/socket)
- Què passa en cas d’errors? (política de reinici, retard, límits)
- Sota quin usuari s’executa el servei? (privilegis mínims en lloc de root)
L’estratègia de reinici és especialment decisiva a la pràctica. Un servei que, per un error de configuració, queda encallat en un bucle de reinicis genera càrrega i una inundació de logs. Són recomanables límits (p. ex. Start-Limit) i un maneig d’errors clar: si falta un paràmetre obligatori, el servei hauria de finalitzar de manera neta amb un missatge comprensible — no «arrencar a mig camí».
Recursos i estabilitat: memòria, CPU, descriptors de fitxer
systemd pot limitar recursos (quota de CPU, límits de memòria, nombre d’arxius oberts). Això no substitueix un programari net, però és una protecció contra valors extrems. Punts típics d’explotació:
- Descriptors de fitxer: Amb moltes connexions simultànies (HTTP, DB, sockets) els límits són rellevants.
- Memòria: Fuites de memòria o cachés descontrolats es fan visibles abans si els límits estan actius.
- Timeouts: Els timeouts d’inici i parada han d’ajustar-se a migracions de base de dades, fases de preparació o d’apagat.
Per als administradors, un servei que es manté dins de límits és clarament més fàcil d’explotar que un «procés incontrolat» que eventualment desestabilitzi l’amfitrió.
Operar serveis Linux amb Delphi: tipus de servei i patrons d’ús típics
El terme «servei» s’utilitza de manera diferent en el dia a dia. En el context Linux hi ha sobretot tres patrons rellevants que es diferencien clarament pel que fa a l’operació.
1) Servidor REST de llarga execució
Un REST-servidor (Representational State Transfer, interfície basada en HTTP) sovint és el primer objectiu: la lògica de negoci existent s’exposa mitjançant una API per connectar portals, integracions o automatitzacions. Des del punt de vista operatiu són importants:
- Enllaç del port i reverse proxy (p. ex. Nginx/Apache) per TLS, enrutament i, si escau, limitació de taxa.
- Comprovacions de salut (Liveness/Readiness): Pot el servei acceptar peticions? És accessible la base de dades?
- Límits de peticions: Protecció contra payloads massa grans i un paral·lelisme descontrolat.
Un REST-servidor no només ha d’estar en funcionament, sinó que ha de respondre de manera estable sota càrrega, registrar de manera rastrejable i degradar-se de forma definida en cas de fallades parcials (p. ex. la base de dades temporalment inaccessibles).
2) Worker/Daemon per a processos en segon pla
El processament en segon pla sovint és un millor punt de partida que un servidor API: importar fitxers, generar informes, conciliar dades, sincronitzar interfícies. Aquests workers es poden desacoblar bé si s’utilitza una cua (cua de missatges), p. ex. mitjançant taules de base de dades, broker de missatges o spools del sistema de fitxers.
Aspectes operatius importants:
- Idempotència (repetibilitat): Una tasca no ha de causar danys en ser repetida, p. ex. comptabilitzacions duplicades.
- Dead-Letter / dipòsit d’errors: Les tasques fallides s’emmagatzemen per separat i es poden analitzar.
- Backpressure: En cas d’acumulació ha d’estar clar com el worker redueix el ritme o escala.
3) Serveis basats en temporitzadors
Les tasques periòdiques (p. ex. exportació cada 5 minuts) sovint ja no es resolen clàssicament amb Cron en el context Linux, sinó mitjançant systemd-Timer. Avantatge: gestió centralitzada, registres nets, dependències i tractament d’errors uniforme. Això resulta atractiu per a les empreses perquè els cron-jobs sovint creixen de manera «invisible» i són difícils d’auditar.
Configuració en operació: Secrets, entorns, versionament
En entorns empresarials la configuració rarament és només «un fitxer ini». És una qüestió de governança: qui pot modificar-la? Com es registren els canvis? Com es protegeixen els secrets?
Fonts de configuració: fitxer vs. variables d’entorn
Des del punt de vista operatiu és habitual una combinació:
- Valors per defecte estàtics al binari (p. ex. timeouts per defecte) que rarament es modifiquen.
- Variables d’entorn per a paràmetres per entorn (DB-Host, Ports, Feature Flags). systemd pot gestionar-les de manera centralitzada.
- Fitxers de configuració per a paràmetres estructurats, especialment quan diversos valors estan relacionats lògicament.
És important que la configuració es validi: en arrencar, el servei hauria de comprovar tots els valors obligatoris i emetre errors comprensibles, en lloc de continuar funcionant en un estat poc clar.
Secrets: contrasenyes, tokens, certificats
Els secrets no han d’estar al Git ni en configuracions en text pla. Opcions pràcticament provades són:
- Fitxers d’entorn de systemd amb permisos de fitxer restrictius i responsabilitats separades.
- Magatzems de secrets (p. ex. enfocaments tipus Vault) — depenent de la vostra infraestructura.
Si un servei Delphi utilitza APIs externes, la rotació de tokens és un veritable tema operatiu: el servei ha de poder adoptar tokens sense reinici o mitjançant un reinici controlat.
Accés a la base de dades i persistència: estabilitat abans que comoditat
Molts serveis basats en Delphi són guiats per dades. Per això l’accés a la base de dades passa al centre: no en el sentit que el SQL sigui «bonic», sinó que les connexions siguin estables, els timeouts estiguin ben configurats i els estats d’error estiguin sota control.
FireDAC, PostgreSQL i companyia: pooling de connexions, timeouts, patrons d’errors
Si connecteu PostgreSQL, MariaDB o SQL Server: en explotació compten sobretot aquests punts:
- Gestió de connexions: Les connexions s’obren i es tanquen netament? Hi ha un concepte de pooling o, com a mínim, límits clars per a sessions paral·leles amb la base de dades?
- Timeouts: Timeouts de xarxa, timeouts de consultes, temps d’espera per bloqueigs — i una reacció clara i traçable quan es produeix un timeout.
- Transaccions: Límits clars de transacció, especialment en tasques worker, per evitar estats de dades incomplets.
- Migracions: Els canvis d’esquema de la base de dades han d’encaixar amb els desplegaments (compatibilitat cap endavant, estratègia de rollback).
Per a responsables IT és fonamental: un servei no ha d“““sorprendre“““ la base de dades. Això vol dir: controlar pics de càrrega, supervisar consultes, mantenir índexs i tractar els casos d’error (bloqueig, deadlocks, interrupció de xarxa) com a normalitat.
Gestió de dades dins del servei: caches i fitxers temporals
Si un servei treballa amb fitxers (importació/exportació/PDF/EDI), els dipòsits han de ser gestionats de forma ordenada: directoris definits, quotes, estratègies de neteja i un pla per al reprocessament. Els fitxers temporals no haurien de generar-se «en qualsevol lloc», sinó que han d’estar previstos en el model d’operació — inclòs un concepte de permisos.
Registre, monitorització i resolució d’incidències: sense telemetria no hi ha explotació
A la pràctica, els serveis rarament fallen per «errors de programa», sinó per manca de visibilitat. Un servei que no produeix logs explotables fa perdre temps a l’operació i a l’àrea de negoci — especialment amb errors esporàdics.
Estratègia de logs: esdeveniments estructurats en comptes de llargs blocs de text
Uns bons logs són:
- correlables (p. ex. Correlation-ID per request/treball, perquè un procés es pugui seguir a través de totes les línies del registre),
- estructurats (informació clau/valor que es pot filtrar),
- escassos (sense dades sensibles, sense payloads innecessaris),
- operativament útils (missatges d’error clars, codis d’eixida, estats traçables).
Sota Linux la interacció amb journald/systemd és útil, perquè inici/aturada/reinici i les sortides dels processos conflueixen de manera centralitzada. Per a entorns més grans cal planificar un reenví de logs (p. ex. cap a sistemes centrals de logs).
Monitorització: mètriques, endpoints de salut, regles d’alarma
A més dels logs, calen mètriques. Mètriques típiques que demostren el seu valor en explotació:
- Nombre de requests/treballs per unitat de temps
- Taxes d’error per endpoint/tipus de feina
- Temps de processament (latència), separats segons dependències externes (BD, API externa)
- Longitud de la cua o acumulació
- Recursos: memòria, CPU, connexions obertes
Més important que l’eina és la disciplina: les regles d’alarma han d’ajustar-se a la realitat operativa. Una alarma que salta constantment s’acaba ignorant. Una alarma que salta massa tard no ajuda.
Seguretat i enduriment: permisos, xarxa, actualitzacions
Un Linux-servei és un procés accessible de forma permanent – per tant forma part de la superfície d’atac. La bona notícia: Linux i systemd ofereixen molts mecanismes per aïllar serveis. La mala notícia: aquests mecanismes funcionen només si s’utilitzen de manera conscient.
Principi de mínims privilegis: usuari dedicat, permisos mínims
Un servei hauria de funcionar sota un usuari de sistema propi, amb permisos de fitxers mínims. Accés d’escriptura només als directoris realment necessaris. Això redueix els riscos en cas d’errors o compromís.
Interfícies de xarxa: obrir només el necessari
Una causa freqüent de troballes de seguretat és «massa xarxa»: els serveis s’enllacen a totes les interfícies, les bases de dades són accessibles des de massa xarxes, els punts d’administració no estan separats. Són sensates regles clares:
- Obrir ports d’API només internament; externament només via proxy invers/WAF.
- Separació d’interfícies públiques/privades, si cal, listeners separats.
- Restringir connexions sortints, si és possible.
Capacitat de patch i actualització: pensar OS i aplicació separadament
En funcionament han de funcionar conjuntament dos fluxos d’actualització: els patches del sistema operatiu i les versions de l’aplicació. Planifiqueu per això:
- Finestra de manteniment o estratègia de rolling update
- Configuracions compatibles (no «treball manual» per servidor)
- Capacitat de rollback (versió anterior executable, migracions de base de dades coordinades)
Especialment per a serveis que manipulen dades de negoci, una gestió de releases neta és més important que «desplegar ràpid».
Estratègies de deployment: de „copiar i esperar“ a releases reproduïbles
Moltes paisatges Delphi evolutius coneixen el deploy manual: copiar el binari, reiniciar el servei, llest. Sota Linux això passa factura com a molt tard quan hi ha diverses instàncies, entorns o equips implicats.
Reproductibilitat: l’artefacte de build i la versió han de coincidir
Un entorn operatiu net disposa de:
- Artefactes versionats (binari, esquema de configuració, si cal scripts de migració)
- un mecanisme clar de desplegament (paquet, repositori d’artefactes, contenidor)
- Proves de smoke després del desplegament (comprovació d’estat, peticions API simples, connexió a la BD)
L’objectiu no és «DevOps com a paraula de moda», sinó menys aturades per diferències aleatòries.
Rollback i migració de base de dades: la parella sovint oblidada
El rollback és senzill mentre només canviï el binari. Quan es migra l’esquema de la base de dades, es complica: un binari antic pot no reconèixer noves taules/columnes. En la pràctica funcionen bé:
- migracions compatibles cap endavant (afegir primer noves estructures, eliminar després les antigues),
- Feature Flags per a la nova lògica,
- finestra de migració planificada per a talls durs.
Si modernitzeu una aplicació Delphi (p. ex. de monolític d’escriptori a servei + portal), aquesta interacció és central. Aquí apareixen els riscos típics del projecte – i aquí val la pena la disciplina arquitectònica.
Migració: Windows-Service nach Linux – wie man Risiken begrenzt
En moltes empreses ja existeixen serveis Windows que processen dades o assumeixen integracions. La migració a Linux no és llavors un projecte tecnològic, sinó un projecte d’operacions i de riscos.
Diferències en el model operatiu
- Gestió del servei: Windows Service Control Manager vs. systemd
- Registre: Event Log vs. journald/fitxers de registre
- Sistema de fitxers i rutes: conceptes de rutes, permisos, sensibilitat a majúscules/minúscules
- Xarxa i DNS: altres eines estàndard, altres rutines d’operació
Aquestes diferències són gestionables, però han d’estar a la llista de verificació – si no, sorgeix una càrrega «invisible» en l’explotació.
Migració pas a pas en lloc d’un Big Bang
Una estratègia sovint viable a la pràctica:
- Desacoblar el servei: interfícies clares, responsabilitat de dades definida, si és possible cap dependència directa de la UI.
- Implantar observabilitat: millorar ja el logging i les mètriques dels Windows- i Linux-Services, perquè més endavant hi hagi comparabilitat.
- Funcionament paral·lel: Windows- und Linux-Services inicialment en mode shadow o per a una part de les feines/peticions.
- Canvi: cutover controlat, amb pla de reversió.
Així reduïu el risc que un canvi de plataforma coincideixi amb canvis de procés.
Explotació d’interfícies a la pràctica: contractes, versionat, tolerància a errors
Un servei sol formar part d’una cadena d’integració. Quan hi ha diversos sistemes implicats (ERP, DMS, CRM, portals), l’explotació es converteix en una tasca de coordinació. El que ajuda aquí són contractes d’API clars i una estratègia de versionat.
Versionament: fer que els canvis siguin planificables
El versionament d’API vol dir: els clients antics no poden deixar de funcionar sobtadament. En la pràctica això significa:
- Evitar canvis incompatibles o desplegar-los només mitjançant una nova versió
- Ampliar els formats de resposta mantenint compatibilitat cap enrere (afegir camps nous en lloc de renombrar els antics)
- Procés de deprecació (abandonament) amb terminis i monitorització de l’ús
Si gestioneu punts finals REST basats en Delphi, aquesta és una de les dimensions de qualitat operativa més importants – perquè evita directament fallades en sistemes veïns. (Pel que fa al contingut, aquí es pot enllaçar bé amb contribucions internes existents sobre l’arquitectura de REST, el tractament d’errors i el versionat.)
Cultura d’errors: respostes definides en lloc de «alguna cosa ha fallat»
Per a l’explotació i els departaments de negoci és important que els errors siguin inequívocs: codis d’estat HTTP, claus d’error, logs rastrejables, i una separació entre «error de client» (sol·licitud incorrecta) i «error de servidor» (problema en el servei o en dependències).
Llista de verificació per a responsables IT: què cal aclarir abans de posada en producció
Per acabar, una llista de verificació compacta que ha demostrat ser útil en projectes quan els serveis Delphi passin a producció sota Linux:
- Service-Unit: Restart-Policy, Timeouts, Start-Limits, usuari propi, permisos sobre rutes de dades
- Configuració: origen, validació, separació per entorns, valors per defecte documentats
- Secrets: emmagatzematge, permisos, rotació, vigència de certificats
- Logging: correlació, camps estructurats, recopilació central, protecció de dades (no incloure càrregues útils sensibles)
- Monitoring: Health-Checks, mètriques, regles d’alerta, dashboard per a l’operació
- Base de dades: Timeouts, transaccions, Pooling/Limitierung, pla de migració i rollback
- Deployment: artefactes versionats, procés reproduïble, Smoke-Tests
- Security: ports, Reverse Proxy/TLS, Hardening, Patch-Prozess
- Lliurament a operacions: Runbook (Start/Stop, patrons d’errors típics, ubicacions dels logs), responsabilitats
Conclusió: l’èxit resideix en el model d’explotació, no en la primera posada en marxa
Linux-Services amb Delphi operats són, en moltes organitzacions, una via raonable per exposar lògica consolidada com una component backend estable i fàcil d’integrar. El punt clau és que el servei s’operi com un Linux-dienst: systemd com a centre de control, una estratègia clara de configuració i de secrets, senyals netes de logging i monitoring, així com desplegaments que siguin reproduïbles i revertibles.
Si voleu evolucionar una arquitectura Delphi existent de manera gradual cap a REST-Services, Worker i components d’integració sobre Linux, val la pena fer aviat un workshop d’arquitectura i d’operacions: interfícies, fluxos de dades, seguretat i explotació s’han de pensar conjuntament — i no afegir-se només després del desenvolupament.
Si en voleu una avaluació tècnica per al vostre entorn, l’accés estructurat a través del contacte és la via més ràpida:
En l’àmbit tècnic també juguen un paper important el Delphi Linux Service i el Systemd Service quan integracions, fluxos de dades i evolució han de funcionar de manera neta i coordinada.
Pas següent
Quan un tema esdevé un projecte real, l'arquitectura, l'entorn existent i les operacions s'haurien de considerar conjuntament des de bon començament.
No només donem suport en qüestions puntuals, sinó també quan, a partir de fragments de codi font, temes de sistemes heredats o idees de portal, ha de sorgir un projecte empresarial sòlid.
- L'estat actual, la visió objectiu i els riscos tècnics s'avaluen conjuntament.
- REST, l'accés a les dades, els portals i el desplegament no es releguen a fases posteriors.
- Vostè veurà aviat quin camí és econòmicament i operativament viable.