Adds vm201-roa-update-server.md describing the two IIS virtual apps under roa.romfast.ro that distribute application updates to ROMFAST clients: - /roaupdate -> D:\ROAUPDATE: per-client VFP XML manifests, _ARHIVE ZIPs for 35+ ROA modules (ROACONT, ROAFACTURARE, ROAGEST, etc.), SVN-backed DB scripts, xmlupdatecreator workflow. - /contafinupdate -> D:\APPUPDATESERVERAVFP: ActiveVFP server with AVFPHandler for *.avfp requests, VFP9 runtime. Also captures the full IIS site inventory (Default Web Site, ROA2WEB, Dokploy, Gitea, roa-qr, roa-apps) verified live on 2026-04-25, and lists the configured client manifests (ROMFAST, ROMPETROL, ARGENTA, etc.). Cross-references added in proxmox/README.md and vm201-windows/README.md. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
11 KiB
VM 201 — Server Update Aplicații ROA + CONTAFIN
Obiectiv
VM 201 găzduiește pe IIS două puncte de distribuție pentru update-urile aplicațiilor ROMFAST către clienți:
roa.romfast.ro/roaupdate— distribuție ZIP-uri + scripturi DB pentru modulele ROA (peste 35 module: ROACONT, ROAFACTURARE, ROAGEST, etc.).roa.romfast.ro/contafinupdate— server ActiveVFP (AVFP) pentru update-uri aplicație CONTAFIN.
Aceste două aplicații virtuale trăiesc sub site-ul Default Web Site
(roa.romfast.ro) și au path-uri fizice pe D:\ (separate de IIS root).
Layout IIS pe VM 201 (recap)
Default Web Site (roa.romfast.ro) → C:\inetpub\wwwroot (gol, doar landing IIS)
├── /contafinupdate [Application] → D:\APPUPDATESERVERAVFP (AVFP)
├── /roaupdate [Application] → D:\ROAUPDATE (ZIP + XML)
└── /* (catch-all) → proxy → 10.0.20.36 (ROA Windows prod)
ROA2WEB (roa2web.romfast.ro) → C:\inetpub\roa2web (web.config-only proxy → 10.0.20.36)
Dokploy (dokploy.romfast.ro) → proxy LXC 103 Traefik
Gitea (gitea.romfast.ro) → proxy LXC 106
roa-qr (roa-qr.romfast.ro) → proxy LXC 103 Traefik (pdf-qr-app)
roa-apps (*.roa.romfast.ro) → proxy LXC 103 Traefik (Dokploy apps)
Default Web Site → port 81 (binding intern)
/roaupdate — Distribuție Module ROA
Path fizic: D:\ROAUPDATE
URL public: https://roa.romfast.ro/roaupdate/
Web.config: Windows authentication + directory browse activat
Mecanism Update
- Aplicația ROA pe stația clientului (instalată din
ROASTART) descarcăhttps://roa.romfast.ro/roaupdate/<CLIENT>.xml. - XML-ul listează modulele și versiunile curente pentru clientul respectiv,
plus URL-ul ZIP în
_ARHIVE. - Stația compară versiunile cu cele instalate local.
- Pentru fiecare modul cu versiune nouă, descarcă
https://roa.romfast.ro/roaupdate/_ARHIVE/<MODUL>/<MODUL>-x.y.z.ZIP, dezarhivează și înlocuiește binarele locale.
Structura D:\ROAUPDATE
| Element | Conținut |
|---|---|
<CLIENT>.xml |
Manifest update per client (vezi mai jos) |
ROASTART_<CLIENT>.xml |
Manifest pentru bootstrap-ul ROASTART (COMUNROA, ROAPRINT, USERREPORTS) |
_ARHIVE/<MODUL>/ |
ZIP-urile efective per versiune (ex: _ARHIVE\ROACONT\ROACONT-2.11.49.ZIP) |
_UPDATE/ |
Buffer de pregătire build-uri noi (LastWrite recent = build activ) |
<MODUL>/ |
Sursele/proiectele VFP per modul (ex: ROACONT, ROAFACTURARE, ROARES) |
DATABASE/SCRIPTURI/, DATABASE/SCRIPTURI_CLAR/ |
Scripturi SQL versiunate în SVN — pull cu TortoiseSVN |
xmlupdatecreator.exe |
Tool VFP de generare a XML-urilor de manifest |
tasks.bat |
Job orchestrare: svn update pe SCRIPTURI + SCRIPTURI_CLAR, lansare tasks\tasks.exe |
settings.ini |
Endpoint raportare erori (romfast.dnsalias.com:3000/errors/create_xml) |
who9.exe, romfast_suport.exe |
Utilitare auxiliare (suport remote + diagnostic VFP9) |
firmanoua.zip, ROAREGISTRATURA.zip |
Pachete inițializare clienți noi |
Format Manifest Client
Exemplu fragment din ROMPETROL.xml:
<crsxmloutnew>
<item>ROACONT</item>
<version>2.11.49</version>
<fileurl>\_ARHIVE\ROACONT\ROACONT-2.11.49.ZIP</fileurl>
<usermsg/>
</crsxmloutnew>
<usermsg> — mesaj opțional afișat user-ului în timpul update-ului
(ex: instrucțiuni manuale, restart obligatoriu).
Module ROA Distribuite (extras din ROMFAST.xml)
ROAAPROV ROAAUTO ROACOMENZI ROACONT ROACONTRACTE
ROADECL ROADEF ROADEFSALARII ROADEVIZE ROAFACTURARE
ROAFURNIZORI ROAGEST ROAGRESTAURANT ROAHOTEL ROAHOTELCONFIG
ROAIMOB ROAINCHIDSAL ROAJURIDIC ROALUCRARI ROAMANAGER
ROAMASINI ROANOR ROAOBINV ROAOFERTA ROAOFERTARE
ROAPRETURI ROAPRODUCTIE ROAREGISTRATURA ROARES ROARESTAURANT
ROARETAIL ROASAL ROASALSPEC ROASITFIN ROASITOP
ROASUPORT ROAVIN
Modulul ROASTART (bootstrap) este publicat separat prin
ROASTART_<CLIENT>.xml și include: COMUNROA, ROAPRINT,
<CLIENT>_USERREPORTS.
Clienți Configurați (extras manifeste)
Manifeste per client găsite în D:\ROAUPDATE:
ABCVAL ACN ARGENTA AUTOHAUS AUTOMOTIVE
AVIS CAMBRIDGE CLEVER CONPRESS CONPRESSHOLDING
EDUARD EMS EUROPEANMETALSERVICES FRUVIMED HANULPIRATILOR
IDEEA IMA METACOM METACOMBUSINESSSRL METALICA
METALICAD.G.SRL POLARIS PRINTCONCEPT ROMCONSTRUCT ROMFAST
ROMPETROL SIGMA SOUTH STEAUANORDULUI UTMIDIA
VADECO VENDING VENDINGMASTERSRL VINRAI VOICU
DEMOROA DEVROA DEVROA2
CUSTOMER_4859 CUSTOMER_4863 CUSTOMER_4880 CUSTOMER_4886 CUSTOMER_4995
Scripturi DB (SVN)
tasks.bat apelează TortoiseSVN pentru a aduce ultimele scripturi:
TortoiseProc.exe /command:update /path:D:\ROAUPDATE\DATABASE\SCRIPTURI\
TortoiseProc.exe /command:update /path:D:\ROAUPDATE\DATABASE\SCRIPTURI_CLAR\
START D:\ROAUPDATE\DATABASE\SCRIPTURI_CLAR\2026
START D:\ROAUPDATE\tasks\tasks.exe
Scripturile sunt versionate într-un repo SVN extern (vezi configul TortoiseSVN local pentru URL).
Workflow Publicare Versiune Nouă
- Build modul VFP în
D:\ROAUPDATE\<MODUL>\. - Generează ZIP în
_ARHIVE\<MODUL>\<MODUL>-x.y.z.ZIP. - Rulează
xmlupdatecreator.exepentru regenerarea manifestului<CLIENT>.xmlcu noua versiune. - Pentru update-uri DB: commit scripturi în SVN (la SCRIPTURI sau
SCRIPTURI_CLAR), apoi
tasks.batla următoarea rulare aduce update-ul pe server. - Clienții văd noua versiune la următorul check (la pornire ROA sau manual din meniu).
/contafinupdate — Server ActiveVFP pentru CONTAFIN
Path fizic: D:\APPUPDATESERVERAVFP
URL public: https://roa.romfast.ro/contafinupdate/
Stack: ActiveVFP (Visual FoxPro server-side) + IIS handler AVFPHandler
Configurare AVFP
Web.Config mapează toate request-urile *.avfp (și catch-all *) către
AVFPHandler, plus modulul MazeComputer.AspManifestHelpers pentru
procesarea manifestelor:
<handlers>
<add verb="*" path="*.avfp" name="AVFPHandler" type="AVFPHandler" />
<add verb="*" path="*" name="AVFPRESTHandler" type="AVFPHandler" />
</handlers>
<defaultDocument>
<files>
<clear />
<add value="default.avfp" />
</files>
</defaultDocument>
<system.web>
<identity impersonate="true" />
</system.web>
appupdateserver.ini
Configurarea conexiunilor către sursa de update:
[general]
host=ROA_CENTRAL
user=soft_serii
password=***
downloadpath=d:\_CONTAFINUPDATE
roadownloadpath=d:\ROAUPDATE\_UPDATE
host_clienti=roa_romfast
user_clienti=romfast
password_clienti=***
host_soft=ROA_CENTRAL
user_soft=soft
password_soft=***
(Parolele reale sunt în fișierul de pe VM; nu sunt incluse aici.)
Componente Cheie
| Fișier | Rol |
|---|---|
default.avfp |
Entry-point AVFP (default document) |
activevfp.dll (+ .manifest) |
Handler AVFP nativ |
vfp9t.dll, VFP9RENU.DLL, vfp2c32.fll, json.fll |
Runtime VFP9 + extensii |
msvcr71.dll |
Runtime VC necesar VFP9 |
prg/, bin/, data/, reports/ |
Cod, binare, date, rapoarte AVFP |
Web.Config |
Mapare handler AVFP |
setup603.cmd |
Setup AVFP 6.0.3 (instalare runtime + handler) |
log.txt |
Log activitate (rotated manual) |
Operațiuni Curente
Verificare Stare Update Server (din Proxmox)
# Status IIS + applicații
ssh root@10.0.20.201 "qm guest exec 201 --timeout 30 -- powershell -Command \
\"Import-Module WebAdministration; Get-WebApplication\""
# Modulele ROA cu update recent (ultima săptămână)
ssh root@10.0.20.201 "qm guest exec 201 --timeout 30 -- powershell -Command \
\"Get-ChildItem 'D:\\ROAUPDATE' | Where-Object { \$_.LastWriteTime -gt (Get-Date).AddDays(-7) } | \
Select-Object Name, LastWriteTime\""
# Verificare manifest client (din browser sau curl)
curl -s https://roa.romfast.ro/roaupdate/ROMFAST.xml | head -50
Test Conectivitate Client
De pe stația clientului (sau VM 201 însăși):
# Test acces manifest
Invoke-WebRequest -Uri "https://roa.romfast.ro/roaupdate/ROMFAST.xml" -UseBasicParsing |
Select-Object StatusCode, @{n="Length";e={$_.Content.Length}}
# Test descărcare ZIP
Invoke-WebRequest -Uri "https://roa.romfast.ro/roaupdate/_ARHIVE/ROACONT/ROACONT-2.11.49.ZIP" `
-OutFile "$env:TEMP\test.zip" -UseBasicParsing
Restart IIS (după modificări majore)
ssh root@10.0.20.201 "qm guest exec 201 --timeout 30 -- cmd /c iisreset"
Securitate și Acces
- /roaupdate rulează cu
authentication mode="Windows"în web.config. Dacă se decide accesul anonim pentru clienți (caz uzual), trebuie verificat că IIS Anonymous Authentication este activ pe folder. - /contafinupdate folosește
identity impersonate=true— handler-ul AVFP rulează cu identitatea utilizatorului IIS curent. - TLS: terminat la nivel de IIS pe
roa.romfast.ro(certificat Let's Encrypt — vezivm201-certificat-letsencrypt-iis.md). - Endpoint raportare erori:
romfast.dnsalias.com:3000/errors/create_xml(dinD:\ROAUPDATE\settings.ini) — primește XML-uri de eroare de la clienți. Nu e găzduit pe VM 201; verifică separat dacă serviciul rulează.
Riscuri și Atenționări
- Backup
D:\ROAUPDATEșiD:\APPUPDATESERVERAVFP: ambele sunt pe disculD:. Backup-ul Proxmox VZDump al VM 201 le acoperă (snapshot întreg disk virtio0). Dar pentru recovery rapid al unei versiuni individuale (_ARHIVE\<MODUL>\<MODUL>-x.y.z.ZIPșters accidental) e util un backup separat al folderului. - SVN dependency: scripturile DB sunt în SVN extern. Dacă serverul SVN
cade,
tasks.bateșuează lasvn update. Verifică URL-ul SVN configurat în TortoiseSVN local. - VFP9 runtime:
D:\APPUPDATESERVERAVFPdepinde devfp9t.dllșimsvcr71.dll. Nu redenumi/șterge. - Manifest XML cu encoding
Windows-1252— la editare manuală păstrează encoding-ul (nu salva ca UTF-8) altfel parser-ul VFP de pe stația clientului poate ceda.
Referințe
- README VM 201:
../README.md - IIS SSL / Let's Encrypt:
vm201-certificat-letsencrypt-iis.md - Arhitectură domenii Dokploy:
vm201-dokploy-infrastructure.md - Aplicație CONTAFIN AVFP: documentație externă (ActiveVFP framework)
Ultima actualizare: 2026-04-25 Autor: Marius Mutu