Remote dev environment

M-a lovit un gand zilele trecute si incerc sa ma documentez daca se poate face si mai ales cum e cel mai bine.
As fi vrut sa fac un remote dev environment. Momentan suntem 2 oameni care lucram pe aceleasi proiecte, proiecte in PHP, laravel, mysql etc.

Ce am fi vrut noi sa facem e sa ne hostam un server unde sa rulam acest dev environment pentru fiecare ca sa nu mai depindem de resursele de pe laptopurile noastre.
So far, docker pare a fi cea mai buna solutie, dar sa lucram pe aceeasi instanta nu prea merge, pentru ca putem lucra la features diferite, deci cumva ar trebui cate o imagine pentru fiecare per proiect.

Ma gandesc ca poate nu e rentabil sa avem toate imaginile ruland in acelasi timp pentru ca avem multe proiecte, si ar trebui sa le rulam on demand. Exista ceva solutie de hosting care poate fi instalata si sa faca managementul acestor imagini?

Sau aveti o solutie mai buna pentru ceea ce incerc sa realizez?

Multumesc anticipat pentru orice raspuns :slight_smile:

VSCode are un plugin care permite asta:

Docker e o solutie pentru deploy nu pentru development, cred ca mai mult te va incurca.

LE Versionarea va fi o problema, poate totusi gasiti o solutie git…

1 Like

Nu lucratul e problema. Are si jetbrains un plugin asemanator sau ceva built in. Mie imi trebuie solutia de hosting a imaginii pe care testez ce lucrez. Partea de deploy e separata.

Lucrand la chestii web, mai modific ceva si vreau sa vad daca functioneaza fara sa trec printr-un proces de deploy.

Eu ma gandesc asa:
Pe masina remote taceti 2 useri. Fiecare o sa lucreze la ce vrea folosit vscode server sau ceva similar. Folosit git. Fiecare cu contul lui.
Ce nu e ok la modul asta de lucru?

Ar trebui folosit git si deploy. Altfel daca va puneti amandoi madificarile pe acelasi server, riscati sa suprascrieti modificarile celuilalt. Sau vreti sa aveti doua instante de dev separate?

1 Like

Docker poate?
Cu containere separate.

Nu stiu, zic si eu

Sau 2 vm-uri.

Se poate face autodeploy cu docker, se pot face branches diferite.

dev-1.domain.ext ← branch dev-1
dev-2.domain.ext ← branch dev-2
dev.domain.ext ← branch dev

etc.

SAU

PHPStorm poate sa deschida direct un director din SFTP, si orice schimbare faci, se face upload direct pe server, el descarca tot sa iti permita autocomplete.

dev-1.domain.ext ← branch dev-1 ( no autodeploy )
dev-2.domain.ext ← branch dev-2 ( no autodeploy )
dev.domain.ext ← branch dev ( autodeploy )

Kubernetes setat cu traefik ca să îți facă o instanță pe cont on-demand. Adică automat fiecare dev va avea tot proiectul setat pe contul lui.

Poți folosi doar frontend-ul local configurand un gateway la fiecare serviciu și proxy la el cu webpack sau ceva proxy. Autentificarea trebuie să seteze token pe localhost.

Eu ma uitam la telepresence, skaffold și Tilt. Se poate face aproape orice.

Remote development-ul pentru backend e mai complicat, as incerca telepresence cu k8s.

Nu recomand docker compose, folosiți direct k8s.

Acum e și o problemă de costuri, o instanță de k8s pentru fiecare dev, fiecare cu 32gb ram si 8 core-uri, ingress/egress controller o să te rupă la buzunar. Mai bine dai fiecăruia un desktop.

1 Like

Fiecare cu mașina/setup-ul lui… nu văd motive să vă complicați…

2 Likes

Multumesc pentru toate raspunsurile.

Poate ar fi trebuit sa explic putin mai bine exact de ce ma interesam de o astfel de solutie.

Recent am migrat in a folosi Lando https://lando.dev pentru a-mi putea configura fiecare proiect mai usor. Am proiecte cu legacy php code la care imi trebuie o versiune foarte veche si proiecte mai complexe pentru care imi trebuie si redis, elastic search etc si e mai convenabil sa folosesc docker.

Ce am descoperit de cand am facut asta e ca imi trebuie mult mai multe resurse locale, inclusiv ca spatiu. Cum pe macos hardware-ul este destul de scump ma gandeam ca poate pot face un pc cu linux pe care sa muta acest mod de lucru. ( e mai usor sa mai pun o placuta de ram sau un ssd pe pc decat sa cumpar un alt macbook cu mai mult spatiu) Foldere pentru fiecare proiect cu containerele lor cu port forwarding si ceva domain mapping sa le pot accesa.
Ce ma gandeam e ca poate exista o solutie ce ma poate ajuta mai usor sa vad ce e pornit, ce nu, care sa se ocupe de partea de networking.

1 Like

Cred ca faci ceva gresit, intrucat diferenta de resurse folosite de docker vs nativ nu e asa mare

1 Like

Nu imi e foarte clar dar tu cauti cumva ceva de genul remote containers?

  • Prea putin spatiu pe Mac => mapezi un folder in retea, hostat unde vrei tu.
  • Prea putin RAM pe Mac pentru a rula serverul? Greu de crezut… Dar rulezi serverul pe un Linux si aia e.
  • Prea putin RAM pe Mac pentru IDE si alte unelte de dezvoltare? Merge remote pe Linux, dar atunci de ce ati mai luat Macuri?

Probabil ca nu au mac-uri cu 32gb de ram și m1 pro.

Ceea ce e o problemă.
Docker rulează mult mai bine pe linux nativ. E.g. ia 5-10 secunde să pornească ceva ce ia 5 minute pe mac cu m1.

2 Likes

Exact. Avem m1pro dar cu basic config. Imaginile de docker pentru proiecte au ajuns sa ocupe in jur de 200gb. Daca fac un external storage ar trebui cumva sa fac un vpn sa pot sa il accesez de oriunde as fi.
Incerc sa vad daca exista o solutie mai buna :slight_smile:

Nu există nici un motiv pentru care să ai 200gb de date în dev env. Trebuie mockuite lucrurile.

Cod maxim 500mb pe serviciu dacă nu folosesti alpine.

Cred ca faci ceva total gresit, nu vad cum ai putea ajunge la asa ceva.

2 Likes

Și cum procedezi dacă ai un bug cu datele din producție dar nu-l poți reproduce cu datele mocked?

Case and point: am avut un bug în care, dacă numele fișierelor conțineau anumite caractere în simplified chinese, se întâmplau … nasoale. Din punctul de vedere al utilizatorului, nasoalele apăreau când salva un anumit articol, nu când urca un fișier, deci cauza nu era atât de evidentă.

Am tras de porcărioara aia câteva zile bune până, în sfârșit, am pus pe local datele din producție. Lo and behold, puteam reproduce problema :slight_smile: În total sunt un pic peste 100gb.

Un alt proiect era mai pe buget și nu aveam o instanță de joacă dev pentru elastic search și S3. Docker (ES + minio) + datele indexate mă duceau lejer la 100gb și >8gb ram păpați. Ce-i drept, aici aș fi putut rezolva cu puțină disciplină, să stau să șterg chestii manual & co, dar… parcă aș vrea să fac altceva cu timpul meu, nu să fac storage management :smiley_cat:

Daca ar fi 200 GB de date, se poate evita copierea lor mereu de colo-colo.

Ce spune Ionuț este corect. Uneori nu poti face mockup la date. Am un proiect la care am date in jur de 10-15 gb folosite la construirea unor configuratoare de jante. La un alt proiect am 5gb de date despre companii pentru realizarea unor statistici.
Uneori nu poti evita seturi mari de date.