{"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":"handtere-flere-miljoer-for-flere-prosjekter-pa-en-maskin","status":"publish","type":"post","link":"https:\/\/thecodest.co\/nb\/blog\/handle-multiple-environments-for-multiple-projects-on-one-machine\/","title":{"rendered":"H\u00e5ndtere flere milj\u00f8er for flere prosjekter p\u00e5 \u00e9n maskin?"},"content":{"rendered":"<p>La oss ta en titt p\u00e5 et typisk arbeidsmilj\u00f8 i en <a href=\"https:\/\/thecodest.co\/nb\/dictionary\/how-to-choose-software-house\/\">programvarehus<\/a>. Du har noen f\u00e5 kunder som har forskjellige milj\u00f8er. Noen foretrekker MySQL, andre foretrekker Postgres. \u00c9n versjon av applikasjonen din trenger <a href=\"https:\/\/thecodest.co\/nb\/blog\/top-programming-languages-to-build-e-commerce\/\">Java<\/a> 11, og en annen Java 17. Frontend trenger npm 12 eller 16 fordi du bruker forskjellige versjoner av <a href=\"https:\/\/thecodest.co\/nb\/dictionary\/what-is-node-js-used-for-in-angular\/\">kantete<\/a>. Til slutt har du den tredimensjonale matrisen som inneholder kombinasjoner av alle dine DB-er, backend- og frontend-versjoner. Det h\u00f8res ille ut, men en dag sier sjefen din...<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"\/app\/uploads\/2024\/05\/comic.png\" alt=\"tegneserier&lt;em&gt;med&lt;\/em&gt;boss\" title=\"...n\u00e5r sjefen din sier...\"\/><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">R\u00f8ttene til et multivers-milj\u00f8<\/h2>\n\n\n\n<p>Situasjonen beskrevet ovenfor er ikke uvanlig. Migrering mellom spr\u00e5k- eller rammeverksversjoner, oppdateringer av databaser eller rett og slett ulike krav fra kundene kan snu opp ned p\u00e5 alle konfigurasjoner. Vi b\u00f8r ha en l\u00f8sning som hjelper <a href=\"https:\/\/thecodest.co\/nb\/blog\/why-us-companies-are-opting-for-polish-developers\/\">oss<\/a> h\u00e5ndtere disse endringene, en som samsvarer med noen f\u00e5 forutsetninger og\/eller krav og\/eller m\u00e5l:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><b> enkel \u00e5 bruke<\/b> - enkeltkommando for \u00e5 endre en konfigurasjon eller en versjon,<\/li>\n\n\n\n<li><b>rikt bibliotek<\/b> - b\u00f8r st\u00f8tte flere teknologier og \"ting\" (biblioteker, rammeverk, apper),<\/li>\n\n\n\n<li><b> utvidbar<\/b> - b\u00f8r du tilby muligheten til \u00e5 legge til dine plugins.<\/li>\n<\/ul>\n\n\n\n<p>I denne artikkelen vil jeg fokusere p\u00e5 tre omr\u00e5der. Det f\u00f8rste er verkt\u00f8y for Java og JVM. Det andre er verkt\u00f8y for generelle form\u00e5l. Det tredje er hvordan du bruker <a href=\"https:\/\/thecodest.co\/nb\/dictionary\/docker-developer\/\">dokker<\/a> for \u00e5 n\u00e5 m\u00e5lene v\u00e5re.<\/p>\n\n\n\n<p>\u200b<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Jeg er Java og jobber p\u00e5 JVM<\/h2>\n\n\n\n<p>N\u00e5r du er en <strong><a href=\"https:\/\/thecodest.co\/nb\/dictionary\/java-developer\/\">Java-utvikler<\/a><\/strong> eller, mer generelt, du jobber med <strong>JVM-teknologier<\/strong>, s\u00e5 kan du bruke <a href=\"https:\/\/sdkman.io\/\">SDKMAN!<\/a>. Dette er et veldig fint og brukervennlig verkt\u00f8y som st\u00f8tter mange biblioteker, rammeverk og spr\u00e5k.<\/p>\n\n\n\n<p>Installasjonsprosessen for <strong>SDKMAN!<\/strong> Det er ganske enkelt. Du m\u00e5 l\u00f8pe:<\/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> &lt;\/code<\/pre>\n\n\n\n<p>og deretter<\/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> &lt;\/code<\/code> &lt;\/code<\/pre>\n\n\n\n<p>N\u00e5 kan du administrere din <strong>Java<\/strong>, <strong>Scala<\/strong> og <strong>Maven<\/strong> versjoner.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Administrere versjoner - eksempel<\/h3>\n\n\n\n<p>I dette eksemplet vil vi installere og oppdatere versjonen av noen f\u00e5 verkt\u00f8y. Dette er bare et lite utvalg av tilgjengelige verkt\u00f8y.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Installasjon<\/h3>\n\n\n\n<p>La oss anta at din nye <a href=\"https:\/\/thecodest.co\/nb\/dictionary\/why-do-projects-fail\/\">prosjekt<\/a> bruksomr\u00e5der <strong>Java 17<\/strong>. Du har ikke noe <strong>Java<\/strong> versjon installert. Du \u00f8nsker \u00e5 installere den og i tillegg legge til et Maven Daemon-verkt\u00f8y for \u00e5 gj\u00f8re byggingen raskere. Derfor m\u00e5 du ogs\u00e5 installere Maven. For \u00e5 gj\u00f8re det m\u00e5 du utf\u00f8re tre enkle kommandoer:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"bash\" class=\"language-bash\">$ sdk install java 17-open\n\n$ sdk install maven 3.8.4\n\n$ sdk install mvnd 0.7.1<\/code><\/pre>\n\n\n\n<p>P\u00e5 slutten av installasjonen av hvert verkt\u00f8y blir du spurt om du vil gj\u00f8re det til standard:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"bash\" class=\"language-bash\"><code>Vil du at Java 17-open skal v\u00e6re standardinnstilling (J\/N)?<\/code><\/code> &lt;\/code<\/pre>\n\n\n\n<p>Dette er viktig n\u00e5r du installerer en ny versjon av et bibliotek eller et spr\u00e5k, fordi SDKMAN! vil angi standardversjonen som global for alle terminaler for den aktuelle brukeren.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Kontrollerer versjoner og oppdaterer<\/h3>\n\n\n\n<p>Fra tid til annen m\u00e5 SDKMAN! oppdatere indekser. I l\u00f8pet av dette kan du f\u00e5 en melding om at det finnes nye versjoner av verkt\u00f8yene du bruker. Vi kan sjekke hvilke versjoner som er tilgjengelige ved \u00e5 skrive <code>sdk ls<\/code>. For <code>sdk ls maven<\/code>:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"bash\" class=\"language-bash\">Tilgjengelige Maven-versjoner\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\nlokal versjon\n\nfor \u00f8yeblikket i bruk\n\n================================================================================<\/code><\/pre>\n\n\n\n<p>Som vi ser ovenfor, har Maven en nyere versjon enn den vi bruker. Det samme gjelder for <code>mvnd<\/code> (0.8.2) og Java (19-open). La oss oppdatere alt. For \u00e5 gj\u00f8re det trenger vi bare \u00e5 kalle install-kommandoen, men denne gangen bruker vi ikke en versjonsspesifikator:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"bash\" class=\"language-bash\">$ sdk install maven\n\n$ sdk install mvnd\n\n$ sdk install java<\/code><\/pre>\n\n\n\n<p>Men noe galt skjedde. <code>Maven<\/code> og <code>mvnd<\/code> har riktige versjoner, men <strong>Java<\/strong> har versjon <code>17.0.5-tem<\/code>. Det er fordi \"den nyeste\" versjonen av verkt\u00f8yet kontrolleres av leverand\u00f8ren, ikke lokalt SDKMAN! hvem er denne leverand\u00f8ren? En leverand\u00f8r i SDKMAN! er noen som kan publisere en versjon. La oss imidlertid si at vi endelig installerer <code>19-\u00e5pen<\/code>og vi gjorde den til standard, men av en eller annen grunn m\u00e5 vi bruke <code>17-\u00e5pen<\/code>.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Lokale versjoner og versjonsh\u00e5ndtering per terminal<\/h3>\n\n\n\n<p>\u200b<br>Vi kan konfigurere en <code>standard<\/code> versjon av et verkt\u00f8y som er global for alle prosjekter og terminaler. Men n\u00e5r vi trenger en spesifikk versjon, har vi to m\u00e5ter \u00e5 gj\u00f8re det p\u00e5. Den f\u00f8rste er \u00e5 bruke <code>sdk use<\/code> kommandoen hver gang vi \u00f8nsker \u00e5 bruke en bestemt versjon av et verkt\u00f8y i den aktuelle terminalen. Det andre er \u00e5 lage en versjonsliste i en <code>.sdkmanrc<\/code> filen som er lagret sammen med prosjektet.<\/p>\n\n\n\n<p>Mens det f\u00f8rste alternativet er for engangsbruk, er det andre designet for \u00e5 jobbe med team og dele konfigurasjoner mellom <a href=\"https:\/\/thecodest.co\/nb\/dictionary\/how-to-lead-software-development-team\/\">team<\/a> medlemmer.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Fordeler og ulemper med SDKMAN!<\/h3>\n\n\n\n<p>SDKMAN! er sv\u00e6rt enkelt \u00e5 bruke og har et rikt bibliotek med verkt\u00f8y, rammeverk og spr\u00e5k som st\u00f8ttes. Det fungerer p\u00e5 Linux, MacOS og Windows. P\u00e5 den annen side er dette verkt\u00f8yet JVM-fokusert og krever forfatterens aksept for \u00e5 v\u00e6re en leverand\u00f8r. I tillegg er mekanikeren av <code>.sdkmanrc<\/code> er sv\u00e6rt d\u00e5rlig og kan forsinke prosessen med \u00e5 endre kataloger betydelig.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Jeg vil gjerne bruke mange andre spr\u00e5k<\/h2>\n\n\n\n<p>Hvis du har behov for \u00e5 bruke mange spr\u00e5k og verkt\u00f8y, b\u00f8r du ta en titt p\u00e5 <a href=\"https:\/\/asdf-vm.com\/\">asdf<\/a>. Dette verkt\u00f8yet er fokusert p\u00e5 \"h\u00f8yniv\u00e5verkt\u00f8y\". Mens du i SDKMAN! kan finne mange Java-spesifikke verkt\u00f8y, som Bpipe eller Znai, tilbyr asdf mye flere verkt\u00f8y, men ikke s\u00e5 spesifikke. Noen av disse verkt\u00f8yene overlapper hverandre, f.eks. Java, Tomcat eller mvnd er tilgjengelige i begge.<\/p>\n\n\n\n<p>N\u00e5r du \u00f8nsker \u00e5 bruke <code>asdf<\/code>m\u00e5 du ha <code>git<\/code> og <code>kr\u00f8ll<\/code> installert. Etter det er det bare \u00e5..:<\/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> &lt;\/code<\/pre>\n\n\n\n<p>og legg til disse linjene i <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\u00e5 kan du installere programtillegg og verkt\u00f8y i favorittversjonene dine.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Plugin-basert administrasjon<\/h3>\n\n\n\n<p>I motsetning til SDKMAN! <code>asdf<\/code> bruker plugins til \u00e5 administrere verkt\u00f8y. S\u00e5 f\u00f8r du kan installere et verkt\u00f8y, m\u00e5 du installere en plugin. La oss g\u00e5 tilbake til eksempelprosjektet v\u00e5rt og pr\u00f8ve \u00e5 konfigurere milj\u00f8et ved hjelp av <code>asadfsdf<\/code>.<\/p>\n\n\n\n<p>F\u00f8rst m\u00e5 vi installere plugins:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"bash\" class=\"language-bash\">asdf plugin add java\n\nasdf-plugin add maven\n\nasdf-plugin add mvnd<\/code><\/pre>\n\n\n\n<p>S\u00e5 kan vi installere verkt\u00f8yene v\u00e5re:<\/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>Og nok en gang, i motsetning til SDKMAN! <code>asdf<\/code> endrer ikke noe i milj\u00f8et v\u00e5rt. N\u00e5r vi pr\u00f8ver \u00e5 bruke java, f\u00e5r vi en feilmelding som:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"bash\" class=\"language-bash\">Ingen versjon er angitt for kommandoen Java\n\nVurder \u00e5 legge til en av f\u00f8lgende versjoner i konfigurasjonsfilen din p\u00e5 ~\/.tool-versions\n\njava openjdk-17<\/code><\/pre>\n\n\n\n<p>Vi m\u00e5 opprette filen <code>.verkt\u00f8yversjoner<\/code> i hjemmekatalogen for \u00e5 administrere standardversjoner.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Lokale og globale versjoner<\/h3>\n\n\n\n<p>Oppdatering av programvareversjoner med <code>asdf<\/code> er ganske enkelt. Vi installerer bare en ny versjon. Fordi denne prosessen ikke p\u00e5virker milj\u00f8et, kan vi gj\u00f8re det n\u00e5r som helst og hvor som helst i filsystemet. N\u00e5r vi \u00f8nsker \u00e5 bruke en bestemt versjon av en programvare, m\u00e5 vi opprette en <code>.verkt\u00f8yversjoner<\/code> fil som kan deles mellom teammedlemmene. Husk at du m\u00e5 s\u00f8rge for at alle teammedlemmene har <code>asdf<\/code> og plugins installert. Listen over plugins du kan finne <a href=\"https:\/\/github.com\/asdf-vm\/asdf-plugins\">her<\/a>.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Versjonskonflikter<\/h3>\n\n\n\n<p><code>asdf<\/code> st\u00f8tter ikke bare programmeringsspr\u00e5k, rammeverk og verkt\u00f8y som vim eller kubernetess. Den st\u00f8tter ogs\u00e5 databaser. I et slikt tilfelle kan vi installere flere versjoner av for eksempel Postgres, men bare \u00e9n instans kan kj\u00f8re. Det er fordi <code>asdf<\/code> kj\u00f8rer kommandoer direkte p\u00e5 operativsystemet ditt uten noe separasjonslag. Det f\u00f8rer til problemer som \"port allerede i bruk\" og konflikter om ressurser.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Fordeler og ulemper<\/h3>\n\n\n\n<p><code>asdf<\/code> er et sv\u00e6rt godt verkt\u00f8y hvis du \u00f8nsker \u00e5 jobbe i et polyglott milj\u00f8. Det st\u00f8tter mange verkt\u00f8y, spr\u00e5k og rammeverk. Den plugin-baserte arkitekturen gj\u00f8r det sv\u00e6rt enkelt \u00e5 utvide det. Noen av verkt\u00f8yene som finnes i biblioteket, krever imidlertid ekstra arbeid under installasjonen for \u00e5 levere alle n\u00f8dvendige avhengigheter. <code>asdf<\/code> fungerer ikke p\u00e5 Windows, selv ikke p\u00e5 <a href=\"https:\/\/en.wikipedia.org\/wiki\/Windows_Subsystem_for_Linux\">WSL<\/a>.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Sist, men ikke minst - Docker<\/h2>\n\n\n\n<p>N\u00e5r jeg snakker om havnekonflikten ovenfor, vet mange av dere l\u00f8sningen.<\/p>\n\n\n\n<p><a href=\"https:\/\/www.docker.com\/\">Docker<\/a> kan hjelpe oss i noen tilfeller. Jeg nevner det av plikt, fordi dette verkt\u00f8yet er s\u00e5 stort og komplekst at vi ikke kan diskutere det i \u00e9n artikkel.<\/p>\n\n\n\n<p>Sammen med Docker b\u00f8r vi bruke en <a href=\"https:\/\/docs.docker.com\/compose\/\">docker-compose<\/a> verkt\u00f8y som gir oss muligheten til \u00e5 koordinere milj\u00f8er med flere containere.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Fordeler og ulemper med Docker<\/h3>\n\n\n\n<p>Docker hjelper oss med \u00e5 administrere verkt\u00f8y som trenger bestemte ressurser, for eksempel porter eller filer. Det separerer instanser i containere og gir oss full kontroll over dem. Docker er imidlertid et verkt\u00f8y som introduserer mye kompleksitet i arbeidsmilj\u00f8et v\u00e5rt og kan v\u00e6re problematisk i noen tilfeller. Et av disse tilfellene med bruk av Docker i en test er beskrevet i en av v\u00e5re tidligere <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\">Oppsummering<\/h2>\n\n\n\n<p>Jeg vet at jeg ikke har beskrevet alle verkt\u00f8yene som kan brukes til \u00e5 administrere verkt\u00f8yversjoner. Det finnes mange flere av dem, for eksempel <a href=\"https:\/\/www.jenv.be\/\">jEnv<\/a> som kan erstatte SDKMAN,<\/p>\n\n\n\n<p>eller <a href=\"https:\/\/github.com\/nvm-sh\/nvm\">NVM<\/a> som vi kan bruke til \u00e5 administrere npm eller <a href=\"https:\/\/rvm.io\/\">RVM<\/a> for <a href=\"https:\/\/thecodest.co\/nb\/case-studies\/providing-a-team-of-ruby-developers-for-a-fintech-company\/\">Ruby<\/a>. Jeg har fokusert p\u00e5 verkt\u00f8y som jeg har \"testet p\u00e5 slagmarken\" og kan anbefale til alle.<\/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>Finnes det en gylden middelvei for \u00e5 h\u00e5ndtere mange milj\u00f8er for et stort antall p\u00e5 bare \u00e9n maskin? V\u00e5r Java-ekspert Bart\u0142omiej vet svaret!<\/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\/nb\/blogg\/handtere-flere-miljoer-for-flere-prosjekter-pa-en-maskin\/\" \/>\n<meta property=\"og:locale\" content=\"nb_NO\" \/>\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\/nb\/blogg\/handtere-flere-miljoer-for-flere-prosjekter-pa-en-maskin\/\" \/>\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\":\"nb-NO\",\"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\":\"nb-NO\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/thecodest.co\\\/blog\\\/handle-multiple-environments-for-multiple-projects-on-one-machine\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"nb-NO\",\"@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\":\"nb-NO\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/thecodest.co\\\/#organization\",\"name\":\"The Codest\",\"url\":\"https:\\\/\\\/thecodest.co\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"nb-NO\",\"@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\":\"nb-NO\",\"@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\\\/nb\\\/author\\\/thecodest\\\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"H\u00e5ndtere flere milj\u00f8er for flere prosjekter p\u00e5 \u00e9n maskin? - The Codest","description":"Finn ut hvordan utviklere kan h\u00e5ndtere flere milj\u00f8er for ulike prosjekter p\u00e5 \u00e9n og samme maskin ved hjelp av versjonsh\u00e5ndtering og containerisering.","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\/nb\/blogg\/handtere-flere-miljoer-for-flere-prosjekter-pa-en-maskin\/","og_locale":"nb_NO","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\/nb\/blogg\/handtere-flere-miljoer-for-flere-prosjekter-pa-en-maskin\/","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":"nb-NO","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":"H\u00e5ndtere flere milj\u00f8er for flere prosjekter p\u00e5 \u00e9n maskin? - 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":"Finn ut hvordan utviklere kan h\u00e5ndtere flere milj\u00f8er for ulike prosjekter p\u00e5 \u00e9n og samme maskin ved hjelp av versjonsh\u00e5ndtering og containerisering.","breadcrumb":{"@id":"https:\/\/thecodest.co\/blog\/handle-multiple-environments-for-multiple-projects-on-one-machine\/#breadcrumb"},"inLanguage":"nb-NO","potentialAction":[{"@type":"ReadAction","target":["https:\/\/thecodest.co\/blog\/handle-multiple-environments-for-multiple-projects-on-one-machine\/"]}]},{"@type":"ImageObject","inLanguage":"nb-NO","@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":"nb-NO"},{"@type":"Organization","@id":"https:\/\/thecodest.co\/#organization","name":"The Codest","url":"https:\/\/thecodest.co\/","logo":{"@type":"ImageObject","inLanguage":"nb-NO","@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":"nb-NO","@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\/nb\/author\/thecodest\/"}]}},"_links":{"self":[{"href":"https:\/\/thecodest.co\/nb\/wp-json\/wp\/v2\/posts\/3348","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/thecodest.co\/nb\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/thecodest.co\/nb\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/thecodest.co\/nb\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/thecodest.co\/nb\/wp-json\/wp\/v2\/comments?post=3348"}],"version-history":[{"count":9,"href":"https:\/\/thecodest.co\/nb\/wp-json\/wp\/v2\/posts\/3348\/revisions"}],"predecessor-version":[{"id":8550,"href":"https:\/\/thecodest.co\/nb\/wp-json\/wp\/v2\/posts\/3348\/revisions\/8550"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/thecodest.co\/nb\/wp-json\/wp\/v2\/media\/3349"}],"wp:attachment":[{"href":"https:\/\/thecodest.co\/nb\/wp-json\/wp\/v2\/media?parent=3348"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/thecodest.co\/nb\/wp-json\/wp\/v2\/categories?post=3348"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/thecodest.co\/nb\/wp-json\/wp\/v2\/tags?post=3348"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}