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ă | Binar | Installer | Serviciu |
|---|---|---|---|
| Linux x86_64 / aarch64 | codaid-linux-x86_64, codaid-linux-aarch64 (musl static) | install.sh | systemd (codaid.service) |
| Windows x86_64 | codaid-windows-x86_64.exe | Descărcare manuală de pe pagina de release | Niciunul — rulezi singur codaid run |
| macOS | Încă nepublicat | Installer-ul acceptă darwin, dar nu există încă un binar — în curând | Niciunul |
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_… shAPI: 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 shInstaller-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-ului | Efect |
|---|---|
CODAI_ENROLL_TOKEN | Înrolează după instalare (omite-o ca doar să instalezi). |
CODAI_SERVICE_SCOPE=system | Unitate 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_KEY | Folosește această cheie în locul autentificării cu cod de dispozitiv. |
VERSION | Fixează o versiune, de ex. VERSION=0.3.3; implicit latest. |
INSTALL_DIR | Locația binarului; implicit /usr/local/bin. |
CODAI_GATEWAY_URL, CODAI_AUTH_URL, CODAI_RELAY_URL, CODAID_WORKSPACE | Transmise 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-urienroll 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 gitHub-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.
| Capabilitate | Observații |
|---|---|
shell | bash -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_roots | Limitate 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. |
| Rapoarte | Porturile 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
| Element | Locaț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-ului | workspace 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 log | CODAID_LOG (implicit info) |
Proiecte și medii
Dă-i agentului o mașină reală — un VM administrat sau propriul tău server — și conectează-te la ea din desktop, din CLI sau din hub.
Medii administrate
VM-uri pe care codai le provizionează pentru tine pe OpenStack sau Hetzner — dimensiuni, regiuni, pornire și oprire, oprire automată și snapshot-uri.