Indexul jurnaluluiDockup / notă de teren
Note / self-host-vikunja

Cum să găzduiești Vikunja pe cont propriu în 2026: URL public, bază de date și stocare de fișiere

Găzduiește Vikunja pe cont propriu cu porturi corecte, stocare persistentă, HTTPS, secrete, backupuri și verificări la upgrade. Află cum să remediezi situația în care URL-ul public al API-ului este greșit.

Dacă ai încercat deja să găzduiești Vikunja pe cont propriu, probabil îți este familiară situația frustrantă: interfața apare, dar URL-ul public al API-ului este greșit sau fișierele încărcate nu sunt stocate pe un volum. Recrearea containerului rezolvă rareori un dezacord între URL-uri, stare și dependențe.

Acest ghid folosește un singur criteriu concret de finalizare — crearea unui proiect, a unei sarcini, a unui atașament și a unui reminder, mutarea sarcinii pe un board și verificarea evenimentului din calendar și a notificării. Fiecare alegere de configurare este evaluată în raport cu acest criteriu, nu cu o insignă verde a containerului.

De ce depinde Vikunja

Delimitează trei zone în jurul Vikunja: ingress către portul 3456, starea persistentă și cerințele de suport. Containerul poate fi înlocuit, dar celelalte două au nevoie de responsabili expliciți. Contractul de rețea pentru Vikunja constă în Postgres sau MySQL și SMTP pentru echipele de producție. Păstrează endpointurile private în DNS intern, permite doar apelurile outbound necesare și oferă Vikunja un credential de serviciu cu scope limitat.

Diagrama este completă atunci când un client nou poate crea un proiect, o sarcină, un atașament și un reminder, poate muta sarcina pe un board și poate verifica evenimentul din calendar și notificarea. Colectează date despre durate și resurse pentru traficul atașamentelor, query-urile bazei de date, joburile de background și emailurile outbound, nu doar pentru micul proces API. Dacă tranzacția eșuează, prima zonă care nu se comportă conform documentației indică dacă trebuie să investighezi rutarea, capacitatea locală sau un serviciu de suport.

Volumele sunt doar primul nivel de recovery

Inventariază starea înainte de crearea primei înregistrări reale: baza de date, fișierele încărcate și configurația. Montează /app/vikunja/files înainte de bootstrap, scrie date de test inofensive și înlocuiește containerul pentru a demonstra că acea cale este într-adevăr persistentă. Confirmă mount-ul scriind date inofensive, înlocuind Vikunja și citindu-le din nou.

Snapshoturile sunt valoroase pentru rollback rapid, dar ai nevoie de un backup independent atunci când hostul sau volumul dispare. Restaurează într-un mediu gol folosind imaginea fixată și verifică dacă proiectele, istoricul sarcinilor, atașamentele, reminder-ele și utilizatorii reapar și dacă o notificare programată este trimisă în continuare. Folosește volume persistente și snapshoturi pentru a păstra distincte aceste două mecanisme de recovery.

Protejează partea valoroasă din Vikunja

După primul login, verifică ce poate face fiecare dintre un vizitator anonim, un utilizator obișnuit și un administrator. Problema Vikunja care trebuie evitată este folosirea unui secret JWT neschimbat sau lăsarea accidentală a înregistrării deschise. Politica dorită este să folosești un secret JWT stabil, să închizi înregistrarea după încheierea înscrierilor și să separi membrii obișnuiți de administratorii de proiect.

Generează VIKUNJA_SERVICE_JWTSECRET ca valoare lungă și aleatorie; rotirea lui invalidează în mod normal sesiunile sau tokenurile, așa că planifică impactul asupra utilizatorilor în loc să o tratezi ca pe o migrare de encryption. Păstrează conturile dependențelor separate de conturile umane, interzice egress-ul neutilizat acolo unde este practic și limitează activitatea influențată de traficul atașamentelor, query-urile bazei de date, joburile de background și emailurile outbound, nu doar micul proces API.

Transformă smoke test-ul Vikunja într-o verificare de release

Un release candidate pentru Vikunja merită trafic după ce finalizează un scenariu fix: creează un proiect, o sarcină, un atașament și un reminder, mută sarcina pe un board și verifică evenimentul din calendar și notificarea. Înregistrează digest-ul imaginii, configurația efectivă non-secretă, origin-ul public și timestampurile pentru acel scenariu. Datele de test trebuie să poată fi eliminate, dar să fie suficient de realiste pentru a exercita aceeași cale ca în cazul utilizatorilor.

Rulează testul după înlocuirea runtime-ului, apoi reconstruiește serviciul din baza de date, fișierele încărcate și configurație. Recovery-ul este reușit atunci când proiectele, istoricul sarcinilor, atașamentele, reminder-ele și utilizatorii reapar și o notificare programată este trimisă în continuare. Compară măsurătorile de resurse pentru traficul atașamentelor, query-urile bazei de date, joburile de background și emailurile outbound cu versiunea anterioară, nu doar micul proces API, și investighează variațiile semnificative înainte de promovare.

În cele din urmă, exersează acest failure controlat: interzice temporar identității de test accesul la Postgres sau MySQL și SMTP pentru echipele de producție. Verifică dacă Vikunja explică eroarea, nu deteriorează starea existentă și își reia activitatea după revenirea condiției valide. Salvează un fragment de log anonimizat și timpul de recovery. Împreună, aceste verificări acoperă comportamentul, durabilitatea și operabilitatea, nu doar uptime-ul procesului.

Construiește un container Vikunja care poate fi înlocuit

Comanda următoare face vizibilă limita containerului fără să pretindă că furnizează fiecare serviciu extern.

docker run -d \
  --name vikunja \
  --restart unless-stopped \
  -p 127.0.0.1:3456:3456 \
  -v vikunja-data:/app/vikunja/files \
  -e VIKUNJA_SERVICE_JWTSECRET=replace-with-a-long-random-value \
  vikunja/vikunja:latest

Înainte de a deschide ingress-ul, inspectează environment-ul rezolvat, mount-urile și listenerul. Adaugă setările de conexiune verificate pentru Postgres sau MySQL și SMTP pentru echipele de producție; folosește nume private pentru serviciile private. O pornire reușită se încheie atunci când poți crea un proiect, o sarcină, un atașament și un reminder, poți muta sarcina pe un board și poți verifica evenimentul din calendar și notificarea, nu atunci când docker ps afișează Up.

Rutează Vikunja fără să induci în eroare în privința HTTPS

Evită origin-urile publice temporare și permanente pentru Vikunja. În schimb, setează VIKUNJA_SERVICE_PUBLICURL la origin-ul HTTPS exact, indică numele DNS ales către ruta platformei și fă proxy doar către portul 3456.

Execută această acțiune din afara hostului: creează un proiect, o sarcină, un atașament și un reminder, mută sarcina pe un board și verifică evenimentul din calendar și notificarea. Dacă ingress-ul eșuează, ghidul de depanare pentru 502 acoperă greșelile de port și listener. Dacă Vikunja primește requestul, dar URL-ul public al API-ului este greșit sau fișierele încărcate nu sunt stocate pe un volum, dovezile indică acum o problemă dincolo de proxy.

Diagnostichează un Vikunja care pare sănătos

Pentru Vikunja, monitorizează o tranzacție, nu un proces: creează un proiect, o sarcină, un atașament și un reminder, mută sarcina pe un board și verifică evenimentul din calendar și notificarea. Corelează latența și rata de erori cu traficul atașamentelor, query-urile bazei de date, joburile de background și emailurile outbound, nu doar cu micul proces API, astfel încât o alertă să identifice componenta constrânsă.

Repetiția upgrade-ului trebuie să acopere faptul că migrările bazei de date și compatibilitatea frontend/API trebuie testate înainte de schimbarea versiunilor Vikunja. Restaurează, migrează și rulează tranzacția înainte de înlocuirea în producție. Dacă URL-ul public al API-ului este greșit sau fișierele încărcate nu sunt stocate pe un volum, nu șterge datele pentru a face pornirea să apară ca reușită; compară în această ordine versiunea, variabilele, mount-urile și accesibilitatea dependențelor.

Fă deploy pentru Vikunja pe Dockup fără să-i pierzi limitele

Dockup poate administra componentele înlocuibile ale platformei: rutează traficul către portul 3456, emite domeniul și certificatul, injectează secrete, atașează stocare persistentă și conectează Vikunja la servicii managed sau atașate privat. Poate face acest lucru pe infrastructura Dockup sau pe un server pe care îl atașezi.

Partea de acceptanță pentru Vikunja rămâne explicită. După deployment-ul one-click, setează VIKUNJA_SERVICE_PUBLICURL la origin-ul HTTPS exact, conectează și testează Postgres sau MySQL și SMTP pentru echipele de producție și rulează acest scenariu: creează un proiect, o sarcină, un atașament și un reminder, mută sarcina pe un board și verifică evenimentul din calendar și notificarea. Această împărțire este intenționată: Dockup elimină configurarea repetitivă a infrastructurii fără să pretindă că rolurile aplicației, credentialele providerului sau politica de restore se aleg singure.

Întrebări frecvente

De ce are nevoie Vikunja pentru un deployment în producție?

Rutează containerul Vikunja pe portul 3456 printr-un singur origin HTTPS. Cerința de rețea pentru serviciile de suport este Postgres sau MySQL și SMTP pentru echipele de producție. Nu considera Vikunja pregătit până când nu poți crea un proiect, o sarcină, un atașament și un reminder, nu poți muta sarcina pe un board și nu poți verifica evenimentul din calendar și notificarea.

Ce date Vikunja trebuie incluse într-un backup?

Fă persistent /app/vikunja/files și include baza de date, fișierele încărcate și configurația în același manifest de recovery. Un restore Vikunja curat este reușit doar atunci când proiectele, istoricul sarcinilor, atașamentele, reminder-ele și utilizatorii reapar și o notificare programată este trimisă în continuare.

Are Vikunja nevoie de HTTPS în spatele unui reverse proxy?

Folosește HTTPS pentru origin-ul public Vikunja și păstrează portul 3456 pe ruta internă. Aplică corect setarea Vikunja: setează VIKUNJA_SERVICE_PUBLICURL la origin-ul HTTPS exact. Pentru Vikunja, HTTPS protejează credentialele sau conținutul utilizatorilor în tranzit și păstrează consecvent comportamentul clientului dependent de origin.

Cum trebuie testat un upgrade Vikunja?

Restaurează starea curentă Vikunja într-un deployment izolat, aplică versiunea candidată și repetă tranzacția de acceptanță. Acordă o atenție deosebită acestui aspect, deoarece migrările bazei de date și compatibilitatea frontend/API trebuie testate înainte de schimbarea versiunilor Vikunja. Păstrează imaginea Vikunja anterioară până când limitele de migrare a datelor și rollback sunt înțelese.