Săriți la conținut

Blog ·

Vindeți găzduire web cu Virtualmin

Vindeți găzduire pe Virtualmin: ce utilizator Webmin, de ce amprenta TLS e obligatorie, cum se mapează planurile și când cotele rămân goale.

De Provibr

Virtualmin este unul dintre cele mai vechi panouri de control încă în uz activ (există din 2004) și are o bază instalată pe care GitHub nu v-o arată. Pe 21 august 2026, depozitul avea 412 stele, 129 de bifurcări și 46 de contribuitori, ceea ce este mic după standardele GitHub și nu spune aproape nimic despre câte gazde mici îl rulează cu adevărat.

Ce spune într-adevăr este că s-a scris foarte puțin despre a vinde pe el. Această pagină este asta: cum se conectează Provibr la o cutie Virtualmin, ce decizii vă impune panoul și unde sunt muchiile ascuțite. Tot ce urmează a fost măsurat față de o instalare reală Virtualmin GPL 8.1.2 pe Ubuntu 24.04.

Webmin este panoul, Virtualmin face găzduirea

Cunoașteți produsul drept Webmin. Acela este numele de pe pagina de autentificare, din documentație și din fiecare căutare. Dar Webmin simplu gestionează o mașină Linux; nu are absolut nicio noțiune despre un cont de găzduire. Ce acționează de fapt Provibr este Virtualmin: modulul care știe despre domenii, planuri și cote.

Asta contează mai mult decât pare. Pe o cutie fără modul, endpointul API remote al Virtualmin pur și simplu nu este acolo: răspunde exact ca un nume de modul pe care l-ați inventat. Am măsurat asta la pasul zero al cercetării, înainte de a instala ceva. Așa că nu există revenire la Webmin simplu, iar Provibr nu se preface că există: conexiunea este refuzată cu un motiv, nu creată pe jumătate.

De ce aveți nevoie pentru a vă conecta

Patru câmpuri, iar două dintre ele sunt mai stricte decât pentru orice alt panou de control pe care îl acceptăm.

CâmpValoare
GazdăAdresa panoului. Trebuie să fie https. Portul 10000 este completat pentru dumneavoastră.
Utilizator Webminroot funcționează, dar un utilizator care are doar modulul Virtualmin este mai bun.
ParolăParola acelui utilizator.
Amprentă TLSObligatorie.

De ce sunt obligatorii atât https, cât și amprenta. Celelalte integrări de panou de control ale noastre acceptă o adresă http simplă și vă spun cât costă asta. Aceasta nu, iar diferența este natura secretului.

API-ul remote al Webmin vorbește HTTP Basic. Secretul aici este o parolă, nu un token. Aceea este o proprietate a Webmin, nu o alegere a noastră. O cheie de autentificare DirectAdmin poate fi limitată la o mână de comenzi; o parolă Webmin nu poate fi limitată deloc. A o trimite necriptată, sau către un certificat pe care nu l-a verificat nimeni, nu este un compromis pe care îl facem în numele dumneavoastră. Iar programul de instalare al Webmin lasă în urmă un certificat autosemnat, așa că câmpul de amprentă nu este teoretic: este cazul normal.

Sfat practic: creați un utilizator Webmin dedicat și dați-i modulul Virtualmin. Poate face tot ce poate face Virtualmin, ceea ce este mult, dar nu tot ce poate face Webmin.

Două lucruri care vor mușca o integrare

Acestea sunt cele două comportamente măsurate cu cea mai mare probabilitate de a vă costa o după-amiază dacă vă construiți asta singur.

Fiecare eroare sosește cu HTTP 200. Virtualmin are două forme de eșec (error la nivelul învelișului și failure la nivelul programului) și le livrează pe amândouă cu un cod de stare 200. Codul de stare nu vă spune nimic. Orice nu este exact status: "success" este un eșec, iar eroarea de înveliș trebuie verificată înaintea oricărei comparații de text, altfel „Remote program xyz does not exist” se citește ca un cont lipsă.

(Aceasta este o trăsătură de familie a API-urilor de panou de control, nu o ciudățenie Virtualmin. DirectAdmin face același lucru diferit: HTTP 200 cu error=1 în corp. O integrare care se încrede în codul de stare reușește în tăcere în timp ce nu s-a întâmplat nimic.)

O cale de UI răspunde cu 200 și o pagină de autentificare. Dacă indicați spre o cale de modul Webmin în loc de API-ul remote, primiți HTTP 200 cu o pagină HTML de autentificare, pentru o parolă greșită, o parolă corectă și nicio parolă la fel, toate trei nedistingibile prin codul de stare. API-ul remote în sine o face cum se cuvine, cu un 401. Acea diferență este ceea ce face eroarea utilizabilă: un 200 cu HTML nu poate însemna decât că nu sunteți îndreptat spre API, iar Provibr spune asta pe nume în loc să vă arate o eroare de parsare JSON pe un panou care funcționează bine.

Unele instalări au ruta API-ului remote dezactivată. O reactivați din Webmin → Webmin Configuration → Advanced Options.

Setări: nu există

Un server Virtualmin decide singur unde locuiește un cont și ce adresă primește. Nu vă mai rămâne nimic de configurat, așa că tabul de setări nu poartă nimic în afară de opțiunea de a retrimite datele de autentificare.

Asta include adresa IP. Virtualmin pune un cont pe adresa partajată a gazdei în mod implicit; am măsurat ip_address revenind ca 192.0.2.10 (Shared), așa că gestionarea IP-urilor de către Provibr rămâne dezactivată pentru acest furnizor. Un IPAM care ar sugera că atribuie adresa ar minți.

Planuri

Un plan Virtualmin este propria descriere a panoului pentru un cont: cotă de disc, trafic lunar, câte domenii și căsuțe de e-mail, ce funcții sunt pornite. Nu este un plan Provibr și nu este un sistem de operare. Este un nume la care ne referim, iar conținutul lui se poate schimba pe serverul dumneavoastră fără să observăm.

Pagina de integrare citește lista de planuri cu conținutul lor, așa că puteți vedea ce alegeți în loc să tastați un nume din memorie. Un plan de găzduire web Provibr fixează apoi un plan Virtualmin pe o integrare și îi dă un nume de-al dumneavoastră. Comanda printr-un plan bate alegerea unuia liber, iar selectorul liber rămâne disponibil pentru cazurile pe care un plan nu le acoperă.

⚠️ O capcană măsurată care merită cunoscută: modify-domain cu un nume de plan care nu există răspunde status: "success" și lasă planul exact unde era. Nu există o formă de eroare de clasificat: refuzul este tăcere. Provibr compară ce a cerut cu ce citește înapoi ulterior, așa că o schimbare de plan care nu s-a întâmplat este raportată ca una care nu s-a întâmplat.

Cum arată un cont în Provibr

Un cont de găzduire este un rând obișnuit de server de tip webserver. Crearea unuia are nevoie de un domeniu, o adresă de e-mail, un plan și o parolă.

  • Identificatorul este numărul intern pe care Virtualmin îl dă domeniului, nu numele. Virtualmin poate redenumi un domeniu; o cheie bazată pe nume s-ar desprinde de rândul său prima dată când face cineva asta.
  • Utilizatorul unix este derivat din domeniu, așa că my-client.nl devine my-client. Cratimele sunt forma normală aici, nu excepția, iar limita este cea proprie a Linux, de 32 de caractere. Aceasta este spre deosebire de DirectAdmin și cPanel, care au propriile reguli de denumire mai stricte.
  • Granița contului este utilizatorul unix, nu domeniul. Subserverele și aliasurile ar ateriza altfel fiecare în numărătoarea licenței ca conturi de găzduire separate.
  • Parola nu este consemnată nicăieri. Doar faptul că ați furnizat una este; valoarea călătorește separat și nu este niciodată scrisă într-un rând de audit.
  • Ulterior puteți suspenda, relua, schimba planul și șterge. Nu există consolă: un cont de găzduire nu are una.

Suspendat înseamnă că un câmp există

Acesta este cel mai ascuțit detaliu al întregii integrări și este cel pe care un parser făcut manual îl greșește.

Pe un cont suspendat, list-domains capătă un câmp numit disabled. Pe un cont activ, acel câmp este pur și simplu absent. Nu există disabled: "No".

Un parser care caută o valoare nu găsește niciodată una și citește fiecare cont ca activ, inclusiv pe cele suspendate. Într-un context de facturare, acela nu este un defect cosmetic: înseamnă că un cont pe care l-ați suspendat pentru neplată se raportează ca viu, iar numărarea capacității dumneavoastră este greșită în direcția care vă costă bani.

Cotă și consum: uneori nu este nimic de arătat

Cota de disc și traficul merg alături de interogarea obișnuită, așa că un cont primește un grafic de consum fără să se activeze nimic în plus, cu condiția ca serverul să le poată măsura.

Virtualmin raportează cotă și consum doar când cotele de sistem de fișiere sunt activate, iar o instalare proaspătă le are dezactivate. Am măsurat asta: quotaon -p / a raportat off pe o instalare standard, pentru că programul de instalare scrie vechiul format de cotă în /etc/fstab, în timp ce un kernel ext4 modern vrea cotă cu jurnalizare. Până când cineva le activează, în ieșirea API-ului nu apare deloc niciun câmp de cotă.

Provibr nu arată nimic în loc de un zero. Nicio măsurătoare și niciun consum nu sunt același lucru, iar un grafic fixat la zero arată ca al doilea când este primul.

O notă înrudită, dacă citiți vreodată singur ieșirea brută: preferați câmpurile lizibile de mașină (created_unix_time, databases_byte_size) în locul gemenilor lor pentru oameni (created_on, databases_size). Cei pentru oameni poartă unități și un format de dată care depind de localizarea panoului, iar parsarea lor este exact genul de eșec tăcut care apare mai întâi la un client cu o setare diferită.

Două omisiuni deliberate

Testul de conexiune nu afișează o linie de versiune. Virtualmin nu are niciun program de API care să își returneze propria versiune: virtualmin info cunoaște douăzeci și una de chei de căutare și niciuna dintre ele nu este o versiune, iar antetul Server: MiniServ nu poartă niciun număr. O linie goală ar pretinde că am încercat și nu am reușit să o citim; a o lăsa afară spune adevărul. Testul afișează în schimb lista dumneavoastră de planuri, ceea ce este ce vreți de fapt să confirmați.

Și nimic secret din panou nu este vreodată stocat. list-domains --multiline poartă hashed_password, password_for_mysql și password_storage literalmente în ieșirea sa. Provibr filtrează cu o listă de permise înainte de a citi, nu redactând ulterior; o listă de interdicții ratează următorul secret care capătă un nume diferit. Am verificat asta cu un contra-test în aceeași rulare: răspunsul brut al panoului poartă în mod demonstrabil acele trei câmpuri, iar lista de import nu conține niciunul dintre ele.

Adoptarea conturilor care există deja

Tabul de import enumeră conturile de pe panou și vă lasă să le luați în Provibr pe cele pe care le vreți. Conturile deja cunoscute sunt afișate, dar nu pot fi selectate din nou, așa că vedeți întreaga imagine, nu una filtrată.

Conturile importate contează la capacitatea dumneavoastră exact ca și conturile pe care le-ați comandat. Importați mai multe decât aveți loc și se deschide o depășire, cu perioada de grație obișnuită.

Unde lasă asta o gazdă mică

Virtualmin este un panou bun cu aproape nicio unealtă comercială în jurul lui. Sfatul obișnuit (mutați-vă pe ceva pe care sistemele de facturare îl vorbesc deja) vă cere să migrați clienți activi de pe o cutie funcțională pentru a rezolva o problemă de hârțogărie.

Provibr se conectează la panouri de control, hipervizoare și panouri de joc unele lângă altele. Păstrați cutia Virtualmin pe care o aveți, puneți comanda și numărarea capacității deasupra ei și adăugați mai târziu un VPS sau un panou de jocuri lângă ea, fără a schimba nimic din felul în care funcționează partea de găzduire.

Începeți cu o gazdă și un agent

Creați un cont, instalați agentul cu o singură comandă și conectați primul dumneavoastră host Proxmox. Perioada de probă durează 14 zile și nu cere date de plată.