codai docs
Proiecte și medii

Instalare pe propriul server

Înrolează orice mașină Linux pe care o controlezi ca mediu gratuit, cu daemonul codaid — instalare, înrolare, rulare ca serviciu.

Un mediu bring-your-own (BYO) este o mașină pe care o ai deja — un VPS, un server de acasă, o stație de lucru liberă. Instalezi codaid, îl înrolezi cu un token de unică folosință, iar el se conectează spre relay prin conexiuni de ieșire. Mediile BYO sunt gratuite și disponibile oricărei chei.

Platforme suportate

PlatformăBinarInstallerServiciu
Linux x86_64 / aarch64codaid-linux-x86_64, codaid-linux-aarch64 (musl static)install.shsystemd (codaid.service)
Windows x86_64codaid-windows-x86_64.exeDescărcare manuală de pe pagina de releaseNiciunul — rulezi singur codaid run
macOSÎncă nepublicatInstaller-ul acceptă darwin, dar nu există încă un binar — în curândNiciunul

Conturile Linux per membru și izolarea în containere cer Linux cu root; vezi medii de echipă.

Creează mediul și obține un token

Hub: deschide hub.codai.ro/projects, creează un proiect, apoi Mediu nou → Propria mașină. Pe pagina mediului alege Generează token de înrolare; tokenul e de unică folosință, valabil 30 de minute, iar pagina afișează comanda exactă de instalare.

CLI: cu CODAI_API_KEY setat (sau o cheie în ~/.codai/codaid.json):

codaid env create --project my-app --name dev-box
# afișează mediul și:
#   curl -fsSL https://codai.ro/install-codaid.sh | CODAI_ENROLL_TOKEN=codai_env_… sh

API: POST /v1/environments cu "provider": "byo", apoi POST /v1/environments/{id}/enroll-token — vezi pagina de API.

Instalează și înrolează (Linux)

Rulează pe mașină, cu un utilizator care are sudo:

curl -fsSL https://github.com/codai-ro/codaid/releases/latest/download/install.sh \
  | CODAI_ENROLL_TOKEN=codai_env_XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX sh

Installer-ul descarcă binarul pentru arhitectura ta în /usr/local/bin/codaid (verificând .sha256-ul publicat), rulează codaid enroll și — dacă systemd rulează — instalează și pornește codaid.service pentru utilizatorul care l-a lansat. Are nevoie de curl sau wget.

Pentru că un mediu BYO nu are o cheie API proprie, codaid enroll pornește apoi o autentificare cu cod de dispozitiv: afișează un URL și un cod, le aprobi în browser de pe orice dispozitiv, iar daemonul salvează cheia obținută. Transmite CODAI_API_KEY=codai_… ca să sari peste acest pas (util pentru flote).

Variabilă a installer-uluiEfect
CODAI_ENROLL_TOKENÎnrolează după instalare (omite-o ca doar să instalezi).
CODAI_SERVICE_SCOPE=systemUnitate deținută de root, cu home /var/lib/codai; activează conturile Linux per membru.
CODAI_IDENTITY=sharedÎmpreună cu scope-ul system: un singur cont de serviciu codai pentru toți, în loc de câte un utilizator Linux per membru.
CODAI_API_KEYFolosește această cheie în locul autentificării cu cod de dispozitiv.
VERSIONFixează o versiune, de ex. VERSION=0.3.3; implicit latest.
INSTALL_DIRLocația binarului; implicit /usr/local/bin.
CODAI_GATEWAY_URL, CODAI_AUTH_URL, CODAI_RELAY_URL, CODAID_WORKSPACETransmise mai departe către codaid enroll.

Același script este oglindit la https://codai.ro/install-codaid.sh; URL-ul release-ului de pe GitHub este mereu cel mai nou.

Sau înrolează manual

codaid enroll --token codai_env_… [--api-key codai_…] [--workspace /srv/app]
codaid run            # în prim-plan; Ctrl-C îl oprește
codaid status         # JSON: configurație (cheie ascunsă), workspace, git, porturi, identitate, lock-uri

enroll scrie ~/.codai/codaid.json (director 0700, fișier 0600) cu id-ul dispozitivului, cheia API, id-ul mediului și URL-ul relay-ului. O reînrolare păstrează același id de dispozitiv. Cheia nu este afișată niciodată — status arată doar prefixul și lungimea ei.

Pe Windows, descarcă codaid-windows-x86_64.exe, apoi rulează codaid enroll --token … și codaid run într-un terminal. Comenzile de shell se execută în PowerShell. Nu există încă un serviciu Windows.

Rulează ca serviciu

# unitate pentru propriul utilizator (ce face installer-ul)
codaid install-service --user "$USER" | sudo tee /etc/systemd/system/codaid.service
sudo systemctl daemon-reload && sudo systemctl enable --now codaid

# unitate de sistem (root): conturi Linux per membru, repository-uri partajate, lock de build per repo
sudo codaid install-service --system [--identity per-user|shared] [--user codai] [--home /var/lib/codai]

--system trebuie rulat ca root, pe Linux cu systemd; creează utilizatorul serviciului și, în modul per-user, grupul codai-dev plus /srv/codai/repos și /var/lib/codai/locks. Dacă mașina nu e încă înrolată, afișează comanda sudo CODAI_HOME=/var/lib/codai/.codai codaid enroll … de rulat în continuare. Unitatea repornește la eșec, la fiecare 5 s.

Verifică dacă e online

codaid env status dev-box      # online=true, versiunea daemonului, porturi, branch git

Hub-ul afișează Daemon conectat, iar vizualizarea Medii din desktop arată un punct verde. Daemonul trimite un heartbeat la fiecare 15 s și se reconectează cu back-off (1 s → 30 s) de câte ori cade socket-ul; relay-ul închide orice WebSocket după o oră, iar daemonul se reconectează imediat.

Ce poate face daemonul

Totul trece prin relay; daemonul nu ascultă niciodată pe un port.

CapabilitateObservații
shellbash -lc (PowerShell pe Windows). Timeout implicit 60 s, maximum 10 min; până la 64 KB per flux de ieșire; la timeout se oprește tot arborele de procese.
fs_read, fs_write, fs_list, fs_rootsLimitate la rădăcina workspace-ului (sau la worktree-ul membrului); ieșirile prin symlink sunt refuzate.
Terminale (pty)Shell interactiv în workspace, redimensionabil.
Fluxuri de port (tcp, http)Conectare la 127.0.0.1:<port> în mașină — folosite de preview-uri și de codaid env forward.
RapoartePorturile care ascultă la fiecare 15 s, starea git (branch, modificări, ahead/behind, worktree-uri) la fiecare 30 s, activitatea (idle, human, agent) și lock-urile deținute la fiecare heartbeat.

shell nu este limitat la workspace — rulează cu privilegiile contului Linux sub care se execută. În modul de identitate shared toți membrii rulează sub același cont, așa că tratează mașina ca nesigură pentru secrete. Folosește CODAI_SERVICE_SCOPE=system cu identitatea implicită per-user când mai multe persoane împart o mașină.

Fișiere și variabile

ElementLocație
Configurație~/.codai/codaid.json ($CODAI_HOME înlocuiește ~/.codai); în scope-ul system /var/lib/codai/.codai/codaid.json
Rădăcina workspace-uluiworkspace din configurație → $CODAID_WORKSPACE → /workspace dacă există → directorul home
Lock-uri de build$CODAI_HOME/locks (shared) sau /var/lib/codai/locks (per-user)
Nivel de logCODAID_LOG (implicit info)

Pe această pagină