{"id":3348,"date":"2022-12-01T11:08:38","date_gmt":"2022-12-01T11:08:38","guid":{"rendered":"http:\/\/the-codest.localhost\/blog\/handle-multiple-environments-for-multiple-projects-on-one-machine\/"},"modified":"2026-03-09T13:07:45","modified_gmt":"2026-03-09T13:07:45","slug":"hallata-mitut-keskkonda-mitme-projekti-jaoks-uhes-masinas","status":"publish","type":"post","link":"https:\/\/thecodest.co\/et\/blog\/handle-multiple-environments-for-multiple-projects-on-one-machine\/","title":{"rendered":"K\u00e4sitleda mitut keskkonda mitme projekti jaoks \u00fches masinas?"},"content":{"rendered":"<p>Vaatleme t\u00fc\u00fcpilist t\u00f6\u00f6keskkonda \u00fches <a href=\"https:\/\/thecodest.co\/et\/dictionary\/how-to-choose-software-house\/\">tarkvaramaja<\/a>. Teil on m\u00f5ned kliendid, kellel on erinevad keskkonnad. M\u00f5ned eelistavad MySQL-i, teised eelistavad Postgres'i. \u00dcks teie rakenduse versioon vajab <a href=\"https:\/\/thecodest.co\/et\/blog\/top-programming-languages-to-build-e-commerce\/\">Java<\/a> 11 ja teine Java 17. Frontend vajab npm 12 v\u00f5i 16, sest te kasutate erinevaid versioone <a href=\"https:\/\/thecodest.co\/et\/dictionary\/what-is-node-js-used-for-in-angular\/\">nurgeline<\/a>. L\u00f5puks on teil see kolmem\u00f5\u00f5tmeline massiivi, mis sisaldab k\u00f5igi teie andmebaaside, backend- ja frontend-versioonide kombinatsioone. K\u00f5lab halvasti, kuid \u00fchel p\u00e4eval \u00fctleb teie \u00fclemus...<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"\/app\/uploads\/2024\/05\/comic.png\" alt=\"koomiksid&lt;em&gt; koos&lt;\/em&gt;bossiga\" title=\"kui teie \u00fclemus \u00fctleb...\"\/><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">Multiversumi keskkonna juured<\/h2>\n\n\n\n<p>Eespool kirjeldatud olukord ei ole midagi haruldast. Migratsioon keele v\u00f5i raamistiku versioonide vahel, andmebaaside uuendamine v\u00f5i lihtsalt klientide erinevad n\u00f5uded v\u00f5ivad k\u00f5ik konfiguratsioonid pea peale p\u00f6\u00f6rata. Meil peaks olema lahendus, mis aitab <a href=\"https:\/\/thecodest.co\/et\/blog\/why-us-companies-are-opting-for-polish-developers\/\">us<\/a> hallata neid muudatusi, mis vastab m\u00f5nele eeldusele ja\/v\u00f5i n\u00f5uetele ja\/v\u00f5i eesm\u00e4rkidele:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><b> lihtne kasutada<\/b> - \u00fcks k\u00e4sk konfiguratsiooni v\u00f5i versiooni muutmiseks,<\/li>\n\n\n\n<li><b>rikkalik raamatukogu<\/b> - peaks toetama mitmeid tehnoloogiaid ja \"asju\" (raamatukogud, raamistikud, rakendused),<\/li>\n\n\n\n<li><b> laiendatav<\/b> - peaksite pakkuma v\u00f5imalust lisada oma pistikprogramme.<\/li>\n<\/ul>\n\n\n\n<p>K\u00e4esolevas artiklis keskendun kolmele valdkonnale. Esimene on Java ja JVMi t\u00f6\u00f6riistad. Teine on \u00fcldotstarbelised t\u00f6\u00f6riistad. Kolmas on see, kuidas kasutada <a href=\"https:\/\/thecodest.co\/et\/dictionary\/docker-developer\/\">dokkeri<\/a> meie eesm\u00e4rkide saavutamiseks.<\/p>\n\n\n\n<p>\u200b<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Ma olen Java ja t\u00f6\u00f6tan JVMi peal.<\/h2>\n\n\n\n<p>Kui olete <strong><a href=\"https:\/\/thecodest.co\/et\/dictionary\/java-developer\/\">Java arendaja<\/a><\/strong> v\u00f5i \u00fcldisemalt, te t\u00f6\u00f6tate koos <strong>JVM tehnoloogiad<\/strong>, siis saate kasutada <a href=\"https:\/\/sdkman.io\/\">SDKMAN!<\/a>. See on v\u00e4ga kena ja kergesti kasutatav t\u00f6\u00f6riist, mis toetab paljusid raamatukogusid, raamistikke ja keeli.<\/p>\n\n\n\n<p>Paigaldusprotsess on <strong>SDKMAN!<\/strong> See on \u00fcsna lihtne. Sa pead jooksma:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"bash\" class=\"language-bash\"><code>curl -s \"https:\/\/get.sdkman.io\" | bash<\/code><\/code><\/pre>\n\n\n\n<p>ja siis<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"bash\" class=\"language-bash\"><code><code>source \"$HOME\/.sdkman\/bin\/sdkman-init.sh\"<\/code><\/code><\/code><\/pre>\n\n\n\n<p>N\u00fc\u00fcd saate hallata oma <strong>Java<\/strong>, <strong>Scala<\/strong> ja <strong>Maven<\/strong> versioonid.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Versioonide haldamine - n\u00e4ide<\/h3>\n\n\n\n<p>Selles n\u00e4ites paigaldame ja uuendame m\u00f5ne t\u00f6\u00f6riista versiooni. See on vaid v\u00e4ike osa olemasolevatest t\u00f6\u00f6riistadest.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Paigaldamine<\/h3>\n\n\n\n<p>Oletame, et teie uus <a href=\"https:\/\/thecodest.co\/et\/dictionary\/why-do-projects-fail\/\">projekt<\/a> kasutab <strong>Java 17<\/strong>. Sul ei ole \u00fchtegi <strong>Java<\/strong> paigaldatud versioon. Te soovite selle paigaldada ja lisaks lisada Maven Daemon t\u00f6\u00f6riista, et muuta koostamine kiiremaks. Seega tuleb paigaldada ka Maven. Selleks tuleb t\u00e4ita kolm lihtsat k\u00e4sku:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"bash\" class=\"language-bash\">$ sdk install java 17-open\n\n$ sdk paigaldada maven 3.8.4\n\n$ sdk install mvnd 0.7.1<\/code><\/pre>\n\n\n\n<p>Iga t\u00f6\u00f6riista paigaldamise l\u00f5pus k\u00fcsitakse, kas see on vaikimisi seadistatud:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"bash\" class=\"language-bash\"><code>Kas soovite, et Java 17-open oleks vaikimisi m\u00e4\u00e4ratud? (Y\/n):<\/code><\/code><\/pre>\n\n\n\n<p>See on oluline, kui paigaldate uue raamatukogu v\u00f5i keele versiooni, sest SDKMAN! seab selle vaikimisi versiooni globaalseks k\u00f5igi terminali jaoks praeguse kasutaja jaoks.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Versioonide kontrollimine ja ajakohastamine<\/h3>\n\n\n\n<p>Aeg-ajalt peab SDKMAN! uuendama indekseid. Selle k\u00e4igus v\u00f5ite saada teate, et on olemas m\u00f5ned uued versioonid t\u00f6\u00f6riistadest, mida te kasutate. Saame kontrollida, millised versioonid on saadaval, kui sisestame <code>sdk ls<\/code>. Sest <code>sdk ls maven<\/code>:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"bash\" class=\"language-bash\">Saadaolevad Maven versioonid\n\n================================================================================\n\n    3.8.6 3.3.3\n\n    3.8.5 3.3.1\n\n3.8.4 3.2.5\n\n    3.8.3 3.2.3\n\n    3.8.2 3.2.2\n\n    3.8.1 3.2.1\n\n    3.6.3 3.1.1\n\n    3.6.2 3.1.0\n\n    3.6.1 3.0.5\n\n    3.6.0 3.0.4\n\n    3.5.4\n\n    3.5.3\n\n    3.5.2\n\n    3.5.0\n\n    3.3.9\n\n\n\n================================================================================\n\nkohalik versioon\n\npraegu kasutusel\n\n================================================================================<\/code><\/pre>\n\n\n\n<p>Nagu eespool n\u00e4ha, on Mavenil uuem versioon kui see, mida me kasutame. Sama kehtib ka <code>mvnd<\/code> (0.8.2) ja Java (19-open). Uuendame k\u00f5ike. Selleks peame lihtsalt kutsuma k\u00e4su install, kuid seekord me ei kasuta versiooni t\u00e4psustajat:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"bash\" class=\"language-bash\">$ sdk paigaldada maven\n\n$ sdk install mvnd\n\n$ sdk installida java<\/code><\/pre>\n\n\n\n<p>Kuid midagi juhtus valesti. <code>Maven<\/code> ja <code>mvnd<\/code> on \u00f5iged versioonid, kuid <strong>Java<\/strong> on versioon <code>17.0.5-tem<\/code>. Seda seet\u00f5ttu, et t\u00f6\u00f6riista \"uusimat\" versiooni kontrollib selle m\u00fc\u00fcja, mitte kohalik SDKMAN! kes on see m\u00fc\u00fcja? SDKMAN! m\u00fc\u00fcja on keegi, kes saab avaldada versiooni. Oletame aga, et me l\u00f5puks installeerime <code>19-avatud<\/code>, ja me tegime selle vaikimisi, kuid mingil p\u00f5hjusel peame kasutama <code>17-avatud<\/code>.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Kohalikud versioonid ja terminali versioonihaldus<\/h3>\n\n\n\n<p>\u200b<br>Me saame konfigureerida <code>vaikimisi<\/code> t\u00f6\u00f6riista versioon, mis on globaalne k\u00f5igi projektide ja terminalide jaoks. Kui aga vajame konkreetset versiooni, on meil selleks kaks v\u00f5imalust. Esimene on kasutada <code>sdk use<\/code> k\u00e4sk iga kord, kui me tahame kasutada mingi t\u00f6\u00f6riista konkreetset versiooni praeguses terminalis. Teiseks tuleb koostada versioonide nimekiri <code>.sdkmanrc<\/code> faili, mis on salvestatud koos projektiga.<\/p>\n\n\n\n<p>Kui esimene variant on m\u00f5eldud \u00fchekordseks kasutamiseks, siis teine on m\u00f5eldud meeskonnat\u00f6\u00f6ks ja konfiguratsioonide jagamiseks j\u00e4rgmiste seadmete vahel. <a href=\"https:\/\/thecodest.co\/et\/dictionary\/how-to-lead-software-development-team\/\">meeskond<\/a> liikmed.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">SDKMANi plussid ja miinused!<\/h3>\n\n\n\n<p>SDKMAN! on v\u00e4ga lihtne kasutada ja sellel on rikkalik toetatud t\u00f6\u00f6riistade, raamistike ja keelte raamatukogu. See t\u00f6\u00f6tab Linuxis, MacOSis ja Windowsis. Teisest k\u00fcljest on see t\u00f6\u00f6riist JVM-keskne ja n\u00f5uab autori n\u00f5usolekut m\u00fc\u00fcjale. Lisaks sellele on mehaanika <code>.sdkmanrc<\/code> on v\u00e4ga halb ja v\u00f5ib kataloogide muutmise protsessi m\u00e4rkimisv\u00e4\u00e4rselt aeglustada.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Tahaksin kasutada paljusid teisi keeli<\/h2>\n\n\n\n<p>Kui teil on vaja kasutada paljusid keeli ja vahendeid, siis peaksite vaatama <a href=\"https:\/\/asdf-vm.com\/\">asdf<\/a>. See t\u00f6\u00f6riist keskendub \"k\u00f5rgetasemelistele\" t\u00f6\u00f6riistadele. Kui SDKMAN! leiate palju Java-spetsiifilisi t\u00f6\u00f6riistu, nagu Bpipe v\u00f5i Znai, siis asdf pakub palju rohkem t\u00f6\u00f6riistu, kuid mitte nii spetsiifilisi. Loomulikult kattuvad m\u00f5ned neist t\u00f6\u00f6riistadest, nt Java, Tomcat v\u00f5i mvnd on m\u00f5lemas saadaval.<\/p>\n\n\n\n<p>Kui soovite kasutada <code>asdf<\/code>, peate olema <code>git<\/code> ja <code>curl<\/code> paigaldatud. P\u00e4rast seda te lihtsalt:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"bash\" class=\"language-bash\"><code>git clone https:\/\/github.com\/asdf-vm\/asdf.git ~\/.asdf --branch v0.10.2<\/code><\/code><\/pre>\n\n\n\n<p>ja lisada need read <code>~\/.bashrc<\/code> file:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"bash\" class=\"language-bash\">. $HOME\/.asdf\/asdf.sh\n\n. $HOME\/.asdf\/completions\/asdf.bash<\/code><\/pre>\n\n\n\n<p>N\u00fc\u00fcd saate installida pluginad ja t\u00f6\u00f6riistad oma lemmikversioonides.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Pistikupesa-p\u00f5hine juhtimine<\/h3>\n\n\n\n<p>Erinevalt SDKMANist!, <code>asdf<\/code> kasutab t\u00f6\u00f6riistade haldamiseks pluginaid. Seega, enne kui saate t\u00f6\u00f6riista paigaldada, peate paigaldama plugina. L\u00e4hme tagasi meie n\u00e4idisprojekti juurde ja proovime seadistada keskkonda kasutades <code>asadfsdf<\/code>.<\/p>\n\n\n\n<p>K\u00f5igepealt peame paigaldama pluginad:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"bash\" class=\"language-bash\">asdf plugin lisab java\n\nasdf plugin lisada maven\n\nasdf plugin add mvnd<\/code><\/pre>\n\n\n\n<p>Seej\u00e4rel saame paigaldada oma t\u00f6\u00f6riistad:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"bash\" class=\"language-bash\">asdf install java openjdk-17\n\nasdf install maven 3.8.4\n\nasdf install mvnd 0.7.1<\/code><\/pre>\n\n\n\n<p>Ja veel kord, erinevalt SDKMANist!, <code>asdf<\/code> ei muuda midagi meie keskkonnas. Kui me \u00fcritame kasutada java't, saame veateate nagu:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"bash\" class=\"language-bash\">K\u00e4skkirja Java jaoks ei ole versiooni m\u00e4\u00e4ratud\n\nKaaluge, kas lisada \u00fcks j\u00e4rgmistest versioonidest oma konfiguratsioonifaili ~\/.tool-versions\n\njava openjdk-17<\/code><\/pre>\n\n\n\n<p>Me peame looma faili <code>.tool-versioonid<\/code> kodukataloogis, et hallata vaikimisi versioone.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Kohalikud ja globaalsed versioonid<\/h3>\n\n\n\n<p>Tarkvaraversioonide uuendamine koos <code>asdf<\/code> on \u00fcsna lihtne. Me lihtsalt paigaldame uue versiooni. Kuna see protsess ei m\u00f5juta keskkonda, v\u00f5ime seda teha igal ajal ja igas kohas failis\u00fcsteemis. Kui me tahame kasutada mingi tarkvara konkreetset versiooni, peame looma projekti kataloogi <code>.tool-versioonid<\/code> faili, mida saab meeskonnaliikmete vahel jagada. Pidage meeles, et peate tagama, et k\u00f5igil meeskonnaliikmetel on <code>asdf<\/code> ja pluginad paigaldatud. Pistikprogrammide loetelu leiate <a href=\"https:\/\/github.com\/asdf-vm\/asdf-plugins\">siin<\/a>.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Versioonikonfliktid<\/h3>\n\n\n\n<p><code>asdf<\/code> toetab mitte ainult programmeerimiskeeli, raamistikke ja vahendeid nagu vim v\u00f5i kubernetess. See toetab ka andmebaase. Sellisel juhul v\u00f5iksime paigaldada mitu versiooni n\u00e4iteks Postgresist, kuid k\u00e4ivitada saaksime ainult \u00fche instantsi. Seda seet\u00f5ttu, et <code>asdf<\/code> t\u00e4idab k\u00e4ske otse teie operatsioonis\u00fcsteemis ilma eralduskihita. See toob kaasa selliseid probleeme nagu \"port on juba kasutusel\" ja konfliktid ressurssidega.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Plussid ja miinused<\/h3>\n\n\n\n<p><code>asdf<\/code> on v\u00e4ga hea vahend, kui soovite t\u00f6\u00f6tada mitmekeelses keskkonnas. See toetab paljusid t\u00f6\u00f6riistu, keeli ja raamistikke. Plugin-p\u00f5hine arhitektuur teeb selle laiendamise v\u00e4ga lihtsaks. Siiski vajavad m\u00f5ned t\u00f6\u00f6riistad, mis tal raamatukogus on, paigaldamise ajal lisat\u00f6\u00f6d, et tagada k\u00f5ik vajalikud s\u00f5ltuvused. <code>asdf<\/code> ei t\u00f6\u00f6ta Windowsis, isegi mitte <a href=\"https:\/\/en.wikipedia.org\/wiki\/Windows_Subsystem_for_Linux\">WSL<\/a>.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Viimane, kuid mitte v\u00e4hem oluline - Docker<\/h2>\n\n\n\n<p>Kui ma r\u00e4\u00e4gin eespool sadamakonfliktist, siis paljud teist teavad lahendust.<\/p>\n\n\n\n<p><a href=\"https:\/\/www.docker.com\/\">Docker<\/a> v\u00f5iks meid m\u00f5nel juhul aidata. Ma mainin seda kohusetundest, sest see t\u00f6\u00f6riist on nii suur ja keeruline, et me ei saa seda \u00fches artiklis arutada.<\/p>\n\n\n\n<p>Koos Dockeriga peaksime kasutama <a href=\"https:\/\/docs.docker.com\/compose\/\">docker-compose<\/a> vahend, mis annab meile v\u00f5imaluse koordineerida mitme konteineri keskkondi.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Dockeri plussid ja miinused<\/h3>\n\n\n\n<p>Docker aitab meil hallata t\u00f6\u00f6riistu, mis vajavad teatavaid ressursse, n\u00e4iteks porte v\u00f5i faile. See eraldab instantsid konteinerites ja annab meile t\u00e4ieliku kontrolli nende \u00fcle. Sellest hoolimata on Docker vahend, mis toob meie t\u00f6\u00f6keskkonda palju keerukust ja v\u00f5ib m\u00f5nel juhul olla problemaatiline. \u00dcks sellistest Dockeri kasutamise juhtudest testis on kirjeldatud \u00fches meie varasemas <a href=\"https:\/\/thecodest.co\/blog\/test-containers-how-to-make-tests-easier\">artikkel<\/a>.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Kokkuv\u00f5te<\/h2>\n\n\n\n<p>Ma tean, et ma ei kirjeldanud k\u00f5iki vahendeid, mida v\u00f5iks kasutada t\u00f6\u00f6riistade versioonide haldamiseks. Neid on palju rohkem, n\u00e4iteks <a href=\"https:\/\/www.jenv.be\/\">jEnv<\/a> mis v\u00f5iks asendada SDKMANi,<\/p>\n\n\n\n<p>v\u00f5i <a href=\"https:\/\/github.com\/nvm-sh\/nvm\">NVM<\/a> mida me saame kasutada npm v\u00f5i <a href=\"https:\/\/rvm.io\/\">RVM<\/a> . <a href=\"https:\/\/thecodest.co\/et\/case-studies\/providing-a-team-of-ruby-developers-for-a-fintech-company\/\">Ruby<\/a>. Ma keskendusin vahenditele, mida ma \"katsetasin lahinguv\u00e4ljal\" ja mida v\u00f5in soovitada k\u00f5igile.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><a href=\"https:\/\/thecodest.co\/contact\/\"><img loading=\"lazy\" decoding=\"async\" width=\"1283\" height=\"460\" src=\"https:\/\/thecodest.co\/app\/uploads\/2024\/05\/interested_in_cooperation_.png\" alt=\"\" class=\"wp-image-4927\" srcset=\"https:\/\/thecodest.co\/app\/uploads\/2024\/05\/interested_in_cooperation_.png 1283w, https:\/\/thecodest.co\/app\/uploads\/2024\/05\/interested_in_cooperation_-300x108.png 300w, https:\/\/thecodest.co\/app\/uploads\/2024\/05\/interested_in_cooperation_-1024x367.png 1024w, https:\/\/thecodest.co\/app\/uploads\/2024\/05\/interested_in_cooperation_-768x275.png 768w, https:\/\/thecodest.co\/app\/uploads\/2024\/05\/interested_in_cooperation_-18x6.png 18w, https:\/\/thecodest.co\/app\/uploads\/2024\/05\/interested_in_cooperation_-67x24.png 67w\" sizes=\"auto, (max-width: 1283px) 100vw, 1283px\" \/><\/a><\/figure>","protected":false},"excerpt":{"rendered":"<p>Kas on olemas kuldne kesktee, et suure hulga keskkondade k\u00e4sitlemiseks vaid \u00fche masina abil? Meie Java ekspert Bart\u0142omiej teab vastust!<\/p>","protected":false},"author":2,"featured_media":3349,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"inline_featured_image":false,"footnotes":""},"categories":[8],"tags":[],"class_list":["post-3348","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-software-development"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v27.3 (Yoast SEO v27.3) - https:\/\/yoast.com\/product\/yoast-seo-premium-wordpress\/ -->\n<title>Handle multiple environments for multiple projects on one machine? - The Codest<\/title>\n<meta name=\"description\" content=\"Discover how developers can handle multiple environments for different projects on a single machine using version managers and containerization.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/thecodest.co\/et\/blogi\/hallata-mitut-keskkonda-mitme-projekti-jaoks-uhes-masinas\/\" \/>\n<meta property=\"og:locale\" content=\"et_EE\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Handle multiple environments for multiple projects on one machine?\" \/>\n<meta property=\"og:description\" content=\"Discover how developers can handle multiple environments for different projects on a single machine using version managers and containerization.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/thecodest.co\/et\/blogi\/hallata-mitut-keskkonda-mitme-projekti-jaoks-uhes-masinas\/\" \/>\n<meta property=\"og:site_name\" content=\"The Codest\" \/>\n<meta property=\"article:published_time\" content=\"2022-12-01T11:08:38+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2026-03-09T13:07:45+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/thecodest.co\/app\/uploads\/2024\/05\/how_to_handle_multiple_environments_for_numerous_projects_on_just_one_machine_.png\" \/>\n\t<meta property=\"og:image:width\" content=\"960\" \/>\n\t<meta property=\"og:image:height\" content=\"540\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"thecodest\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"thecodest\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"7 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/thecodest.co\\\/blog\\\/handle-multiple-environments-for-multiple-projects-on-one-machine\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/thecodest.co\\\/blog\\\/handle-multiple-environments-for-multiple-projects-on-one-machine\\\/\"},\"author\":{\"name\":\"thecodest\",\"@id\":\"https:\\\/\\\/thecodest.co\\\/#\\\/schema\\\/person\\\/7e3fe41dfa4f4e41a7baad4c6e0d4f76\"},\"headline\":\"Handle multiple environments for multiple projects on one machine?\",\"datePublished\":\"2022-12-01T11:08:38+00:00\",\"dateModified\":\"2026-03-09T13:07:45+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/thecodest.co\\\/blog\\\/handle-multiple-environments-for-multiple-projects-on-one-machine\\\/\"},\"wordCount\":1315,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\\\/\\\/thecodest.co\\\/#organization\"},\"image\":{\"@id\":\"https:\\\/\\\/thecodest.co\\\/blog\\\/handle-multiple-environments-for-multiple-projects-on-one-machine\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/thecodest.co\\\/app\\\/uploads\\\/2024\\\/05\\\/how_to_handle_multiple_environments_for_numerous_projects_on_just_one_machine_.png\",\"articleSection\":[\"Software Development\"],\"inLanguage\":\"et\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/thecodest.co\\\/blog\\\/handle-multiple-environments-for-multiple-projects-on-one-machine\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/thecodest.co\\\/blog\\\/handle-multiple-environments-for-multiple-projects-on-one-machine\\\/\",\"url\":\"https:\\\/\\\/thecodest.co\\\/blog\\\/handle-multiple-environments-for-multiple-projects-on-one-machine\\\/\",\"name\":\"Handle multiple environments for multiple projects on one machine? - The Codest\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/thecodest.co\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/thecodest.co\\\/blog\\\/handle-multiple-environments-for-multiple-projects-on-one-machine\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/thecodest.co\\\/blog\\\/handle-multiple-environments-for-multiple-projects-on-one-machine\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/thecodest.co\\\/app\\\/uploads\\\/2024\\\/05\\\/how_to_handle_multiple_environments_for_numerous_projects_on_just_one_machine_.png\",\"datePublished\":\"2022-12-01T11:08:38+00:00\",\"dateModified\":\"2026-03-09T13:07:45+00:00\",\"description\":\"Discover how developers can handle multiple environments for different projects on a single machine using version managers and containerization.\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/thecodest.co\\\/blog\\\/handle-multiple-environments-for-multiple-projects-on-one-machine\\\/#breadcrumb\"},\"inLanguage\":\"et\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/thecodest.co\\\/blog\\\/handle-multiple-environments-for-multiple-projects-on-one-machine\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"et\",\"@id\":\"https:\\\/\\\/thecodest.co\\\/blog\\\/handle-multiple-environments-for-multiple-projects-on-one-machine\\\/#primaryimage\",\"url\":\"https:\\\/\\\/thecodest.co\\\/app\\\/uploads\\\/2024\\\/05\\\/how_to_handle_multiple_environments_for_numerous_projects_on_just_one_machine_.png\",\"contentUrl\":\"https:\\\/\\\/thecodest.co\\\/app\\\/uploads\\\/2024\\\/05\\\/how_to_handle_multiple_environments_for_numerous_projects_on_just_one_machine_.png\",\"width\":960,\"height\":540},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/thecodest.co\\\/blog\\\/handle-multiple-environments-for-multiple-projects-on-one-machine\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/thecodest.co\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Handle multiple environments for multiple projects on one machine?\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/thecodest.co\\\/#website\",\"url\":\"https:\\\/\\\/thecodest.co\\\/\",\"name\":\"The Codest\",\"description\":\"\",\"publisher\":{\"@id\":\"https:\\\/\\\/thecodest.co\\\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/thecodest.co\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"et\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/thecodest.co\\\/#organization\",\"name\":\"The Codest\",\"url\":\"https:\\\/\\\/thecodest.co\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"et\",\"@id\":\"https:\\\/\\\/thecodest.co\\\/#\\\/schema\\\/logo\\\/image\\\/\",\"url\":\"https:\\\/\\\/thecodest.co\\\/app\\\/uploads\\\/2024\\\/03\\\/thecodest-logo.svg\",\"contentUrl\":\"https:\\\/\\\/thecodest.co\\\/app\\\/uploads\\\/2024\\\/03\\\/thecodest-logo.svg\",\"width\":144,\"height\":36,\"caption\":\"The Codest\"},\"image\":{\"@id\":\"https:\\\/\\\/thecodest.co\\\/#\\\/schema\\\/logo\\\/image\\\/\"},\"sameAs\":[\"https:\\\/\\\/pl.linkedin.com\\\/company\\\/codest\",\"https:\\\/\\\/clutch.co\\\/profile\\\/codest\"]},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/thecodest.co\\\/#\\\/schema\\\/person\\\/7e3fe41dfa4f4e41a7baad4c6e0d4f76\",\"name\":\"thecodest\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"et\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/5dbfe6a1e8c86e432e8812759e34e6fe82ebac75119ae3237a6c1311fa19caf4?s=96&d=mm&r=g\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/5dbfe6a1e8c86e432e8812759e34e6fe82ebac75119ae3237a6c1311fa19caf4?s=96&d=mm&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/5dbfe6a1e8c86e432e8812759e34e6fe82ebac75119ae3237a6c1311fa19caf4?s=96&d=mm&r=g\",\"caption\":\"thecodest\"},\"url\":\"https:\\\/\\\/thecodest.co\\\/et\\\/author\\\/thecodest\\\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"K\u00e4sitleda mitut keskkonda mitme projekti jaoks \u00fches masinas? - The Codest","description":"Avastage, kuidas arendajad saavad versioonihaldurite ja konteinerite abil hallata mitme erineva projekti keskkondi \u00fches masinas.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/thecodest.co\/et\/blogi\/hallata-mitut-keskkonda-mitme-projekti-jaoks-uhes-masinas\/","og_locale":"et_EE","og_type":"article","og_title":"Handle multiple environments for multiple projects on one machine?","og_description":"Discover how developers can handle multiple environments for different projects on a single machine using version managers and containerization.","og_url":"https:\/\/thecodest.co\/et\/blogi\/hallata-mitut-keskkonda-mitme-projekti-jaoks-uhes-masinas\/","og_site_name":"The Codest","article_published_time":"2022-12-01T11:08:38+00:00","article_modified_time":"2026-03-09T13:07:45+00:00","og_image":[{"width":960,"height":540,"url":"https:\/\/thecodest.co\/app\/uploads\/2024\/05\/how_to_handle_multiple_environments_for_numerous_projects_on_just_one_machine_.png","type":"image\/png"}],"author":"thecodest","twitter_card":"summary_large_image","twitter_misc":{"Written by":"thecodest","Est. reading time":"7 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/thecodest.co\/blog\/handle-multiple-environments-for-multiple-projects-on-one-machine\/#article","isPartOf":{"@id":"https:\/\/thecodest.co\/blog\/handle-multiple-environments-for-multiple-projects-on-one-machine\/"},"author":{"name":"thecodest","@id":"https:\/\/thecodest.co\/#\/schema\/person\/7e3fe41dfa4f4e41a7baad4c6e0d4f76"},"headline":"Handle multiple environments for multiple projects on one machine?","datePublished":"2022-12-01T11:08:38+00:00","dateModified":"2026-03-09T13:07:45+00:00","mainEntityOfPage":{"@id":"https:\/\/thecodest.co\/blog\/handle-multiple-environments-for-multiple-projects-on-one-machine\/"},"wordCount":1315,"commentCount":0,"publisher":{"@id":"https:\/\/thecodest.co\/#organization"},"image":{"@id":"https:\/\/thecodest.co\/blog\/handle-multiple-environments-for-multiple-projects-on-one-machine\/#primaryimage"},"thumbnailUrl":"https:\/\/thecodest.co\/app\/uploads\/2024\/05\/how_to_handle_multiple_environments_for_numerous_projects_on_just_one_machine_.png","articleSection":["Software Development"],"inLanguage":"et","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/thecodest.co\/blog\/handle-multiple-environments-for-multiple-projects-on-one-machine\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/thecodest.co\/blog\/handle-multiple-environments-for-multiple-projects-on-one-machine\/","url":"https:\/\/thecodest.co\/blog\/handle-multiple-environments-for-multiple-projects-on-one-machine\/","name":"K\u00e4sitleda mitut keskkonda mitme projekti jaoks \u00fches masinas? - The Codest","isPartOf":{"@id":"https:\/\/thecodest.co\/#website"},"primaryImageOfPage":{"@id":"https:\/\/thecodest.co\/blog\/handle-multiple-environments-for-multiple-projects-on-one-machine\/#primaryimage"},"image":{"@id":"https:\/\/thecodest.co\/blog\/handle-multiple-environments-for-multiple-projects-on-one-machine\/#primaryimage"},"thumbnailUrl":"https:\/\/thecodest.co\/app\/uploads\/2024\/05\/how_to_handle_multiple_environments_for_numerous_projects_on_just_one_machine_.png","datePublished":"2022-12-01T11:08:38+00:00","dateModified":"2026-03-09T13:07:45+00:00","description":"Avastage, kuidas arendajad saavad versioonihaldurite ja konteinerite abil hallata mitme erineva projekti keskkondi \u00fches masinas.","breadcrumb":{"@id":"https:\/\/thecodest.co\/blog\/handle-multiple-environments-for-multiple-projects-on-one-machine\/#breadcrumb"},"inLanguage":"et","potentialAction":[{"@type":"ReadAction","target":["https:\/\/thecodest.co\/blog\/handle-multiple-environments-for-multiple-projects-on-one-machine\/"]}]},{"@type":"ImageObject","inLanguage":"et","@id":"https:\/\/thecodest.co\/blog\/handle-multiple-environments-for-multiple-projects-on-one-machine\/#primaryimage","url":"https:\/\/thecodest.co\/app\/uploads\/2024\/05\/how_to_handle_multiple_environments_for_numerous_projects_on_just_one_machine_.png","contentUrl":"https:\/\/thecodest.co\/app\/uploads\/2024\/05\/how_to_handle_multiple_environments_for_numerous_projects_on_just_one_machine_.png","width":960,"height":540},{"@type":"BreadcrumbList","@id":"https:\/\/thecodest.co\/blog\/handle-multiple-environments-for-multiple-projects-on-one-machine\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/thecodest.co\/"},{"@type":"ListItem","position":2,"name":"Handle multiple environments for multiple projects on one machine?"}]},{"@type":"WebSite","@id":"https:\/\/thecodest.co\/#website","url":"https:\/\/thecodest.co\/","name":"The Codest","description":"","publisher":{"@id":"https:\/\/thecodest.co\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/thecodest.co\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"et"},{"@type":"Organization","@id":"https:\/\/thecodest.co\/#organization","name":"The Codest","url":"https:\/\/thecodest.co\/","logo":{"@type":"ImageObject","inLanguage":"et","@id":"https:\/\/thecodest.co\/#\/schema\/logo\/image\/","url":"https:\/\/thecodest.co\/app\/uploads\/2024\/03\/thecodest-logo.svg","contentUrl":"https:\/\/thecodest.co\/app\/uploads\/2024\/03\/thecodest-logo.svg","width":144,"height":36,"caption":"The Codest"},"image":{"@id":"https:\/\/thecodest.co\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/pl.linkedin.com\/company\/codest","https:\/\/clutch.co\/profile\/codest"]},{"@type":"Person","@id":"https:\/\/thecodest.co\/#\/schema\/person\/7e3fe41dfa4f4e41a7baad4c6e0d4f76","name":"thecodest","image":{"@type":"ImageObject","inLanguage":"et","@id":"https:\/\/secure.gravatar.com\/avatar\/5dbfe6a1e8c86e432e8812759e34e6fe82ebac75119ae3237a6c1311fa19caf4?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/5dbfe6a1e8c86e432e8812759e34e6fe82ebac75119ae3237a6c1311fa19caf4?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/5dbfe6a1e8c86e432e8812759e34e6fe82ebac75119ae3237a6c1311fa19caf4?s=96&d=mm&r=g","caption":"thecodest"},"url":"https:\/\/thecodest.co\/et\/author\/thecodest\/"}]}},"_links":{"self":[{"href":"https:\/\/thecodest.co\/et\/wp-json\/wp\/v2\/posts\/3348","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/thecodest.co\/et\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/thecodest.co\/et\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/thecodest.co\/et\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/thecodest.co\/et\/wp-json\/wp\/v2\/comments?post=3348"}],"version-history":[{"count":9,"href":"https:\/\/thecodest.co\/et\/wp-json\/wp\/v2\/posts\/3348\/revisions"}],"predecessor-version":[{"id":8550,"href":"https:\/\/thecodest.co\/et\/wp-json\/wp\/v2\/posts\/3348\/revisions\/8550"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/thecodest.co\/et\/wp-json\/wp\/v2\/media\/3349"}],"wp:attachment":[{"href":"https:\/\/thecodest.co\/et\/wp-json\/wp\/v2\/media?parent=3348"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/thecodest.co\/et\/wp-json\/wp\/v2\/categories?post=3348"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/thecodest.co\/et\/wp-json\/wp\/v2\/tags?post=3348"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}