Files
ROMFASTSQL/proxmox/vm201-windows/docs/vm201-roa-update-server.md
Claude Agent e08ffb1b68 docs(vm201): document ROA + CONTAFIN update server (IIS apps)
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>
2026-04-25 22:14:05 +00:00

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

  1. Aplicația ROA pe stația clientului (instalată din ROASTART) descarcă https://roa.romfast.ro/roaupdate/<CLIENT>.xml.
  2. XML-ul listează modulele și versiunile curente pentru clientul respectiv, plus URL-ul ZIP în _ARHIVE.
  3. Stația compară versiunile cu cele instalate local.
  4. 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ă

  1. Build modul VFP în D:\ROAUPDATE\<MODUL>\.
  2. Generează ZIP în _ARHIVE\<MODUL>\<MODUL>-x.y.z.ZIP.
  3. Rulează xmlupdatecreator.exe pentru regenerarea manifestului <CLIENT>.xml cu noua versiune.
  4. Pentru update-uri DB: commit scripturi în SVN (la SCRIPTURI sau SCRIPTURI_CLAR), apoi tasks.bat la următoarea rulare aduce update-ul pe server.
  5. 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 — vezi vm201-certificat-letsencrypt-iis.md).
  • Endpoint raportare erori: romfast.dnsalias.com:3000/errors/create_xml (din D:\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 și D:\APPUPDATESERVERAVFP: ambele sunt pe discul D:. 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.bat eșuează la svn update. Verifică URL-ul SVN configurat în TortoiseSVN local.
  • VFP9 runtime: D:\APPUPDATESERVERAVFP depinde de vfp9t.dll și msvcr71.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