{"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":"handter-flere-miljoer-til-flere-projekter-pa-en-maskine","status":"publish","type":"post","link":"https:\/\/thecodest.co\/da\/blog\/handle-multiple-environments-for-multiple-projects-on-one-machine\/","title":{"rendered":"H\u00e5ndtere flere milj\u00f8er til flere projekter p\u00e5 \u00e9n maskine?"},"content":{"rendered":"<p>Lad os tage et kig p\u00e5 et typisk arbejdsmilj\u00f8 i en <a href=\"https:\/\/thecodest.co\/da\/dictionary\/how-to-choose-software-house\/\">Softwarehus<\/a>. Du har et par kunder, som har forskellige milj\u00f8er. Nogle foretr\u00e6kker MySQL, andre foretr\u00e6kker Postgres. En version af din applikation har brug for <a href=\"https:\/\/thecodest.co\/da\/blog\/top-programming-languages-to-build-e-commerce\/\">Java<\/a> 11, og en anden Java 17. Frontend har brug for npm 12 eller 16, fordi du bruger forskellige versioner af <a href=\"https:\/\/thecodest.co\/da\/dictionary\/what-is-node-js-used-for-in-angular\/\">kantet<\/a>. Endelig har du det tredimensionelle array, som indeholder kombinationer af alle dine DB'er, backend- og frontend-versioner. Det lyder slemt, men en dag siger din chef ...<\/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 din chef siger ...\"\/><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">R\u00f8dder til et multivers-milj\u00f8<\/h2>\n\n\n\n<p>Den situation, der er beskrevet ovenfor, er ikke ualmindelig. Migration mellem sprog- eller rammeversioner, opdateringer af databaser eller simpelthen forskellige krav fra kunder kan vende op og ned p\u00e5 alle konfigurationer. Vi b\u00f8r have en l\u00f8sning, der hj\u00e6lper <a href=\"https:\/\/thecodest.co\/da\/blog\/why-us-companies-are-opting-for-polish-developers\/\">os<\/a> h\u00e5ndtere disse \u00e6ndringer, en der matcher nogle f\u00e5 antagelser og\/eller krav og\/eller m\u00e5l:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><b> nem at bruge<\/b> - enkelt kommando til at \u00e6ndre en konfiguration eller en version,<\/li>\n\n\n\n<li><b>rigt bibliotek<\/b> - skal underst\u00f8tte flere teknologier og \"ting\" (biblioteker, frameworks, apps),<\/li>\n\n\n\n<li><b> udvidelig<\/b> - b\u00f8r du tilbyde muligheden for at tilf\u00f8je dine plugins.<\/li>\n<\/ul>\n\n\n\n<p>I denne artikel vil jeg fokusere p\u00e5 tre omr\u00e5der. Det f\u00f8rste er v\u00e6rkt\u00f8jer til Java og JVM. Det andet er v\u00e6rkt\u00f8jer til generelle form\u00e5l. Det tredje er, hvordan man bruger <a href=\"https:\/\/thecodest.co\/da\/dictionary\/docker-developer\/\">docker<\/a> for at n\u00e5 vores m\u00e5l.<\/p>\n\n\n\n<p>\u200b<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Jeg er Java, og jeg arbejder p\u00e5 JVM<\/h2>\n\n\n\n<p>N\u00e5r du er en <strong><a href=\"https:\/\/thecodest.co\/da\/dictionary\/java-developer\/\">Java-udvikler<\/a><\/strong> eller, mere generelt, du arbejder med <strong>JVM-teknologier<\/strong>s\u00e5 kan du bruge <a href=\"https:\/\/sdkman.io\/\">SDKMAN!<\/a>. Det er et meget flot og brugervenligt v\u00e6rkt\u00f8j, som underst\u00f8tter mange biblioteker, frameworks og sprog.<\/p>\n\n\n\n<p>Installationsprocessen af <strong>SDKMAN!<\/strong> Det er ret enkelt. Du er n\u00f8dt til at l\u00f8be:<\/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>og derefter<\/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>Nu kan du styre din <strong>Java<\/strong>, <strong>Scala<\/strong> og <strong>Maven<\/strong> versioner.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">H\u00e5ndtering af versioner - eksempel<\/h3>\n\n\n\n<p>I dette eksempel vil vi installere og opdatere versionen af nogle f\u00e5 v\u00e6rkt\u00f8jer. Dette er kun en lille delm\u00e6ngde af de tilg\u00e6ngelige v\u00e6rkt\u00f8jer.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Installation<\/h3>\n\n\n\n<p>Lad os antage, at din nye <a href=\"https:\/\/thecodest.co\/da\/dictionary\/why-do-projects-fail\/\">projekt<\/a> anvendelser <strong>Java 17<\/strong>. Du har ikke nogen <strong>Java<\/strong> version installeret. Du vil gerne installere den og derudover tilf\u00f8je et Maven Daemon-v\u00e6rkt\u00f8j for at g\u00f8re builds hurtigere. S\u00e5 du skal ogs\u00e5 installere Maven. For at g\u00f8re det skal du udf\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 installerer maven 3.8.4\n\n$ sdk install mvnd 0.7.1<\/code><\/pre>\n\n\n\n<p>I slutningen af installationen af hvert v\u00e6rkt\u00f8j bliver du spurgt, om du vil g\u00f8re det til standard:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"bash\" class=\"language-bash\"><code>Vil du have Java 17-open indstillet som standard (J\/N):<\/code><\/code>.<\/pre>\n\n\n\n<p>Dette er vigtigt, n\u00e5r du installerer en ny version af et bibliotek eller et sprog, fordi SDKMAN! vil indstille standardversionen som global for alle terminaler for den aktuelle bruger.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Kontrol af versioner og opdatering<\/h3>\n\n\n\n<p>Fra tid til anden er SDKMAN! n\u00f8dt til at opdatere indekser. I den forbindelse kan du f\u00e5 en besked om, at der er nye versioner af de v\u00e6rkt\u00f8jer, du bruger. Vi kan tjekke, hvilke versioner der er tilg\u00e6ngelige, ved at 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\">Tilg\u00e6ngelige Maven-versioner\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 version\n\naktuelt i brug\n\n================================================================================<\/code><\/pre>\n\n\n\n<p>Som vi ser ovenfor, har Maven en nyere version end den, vi bruger. Det samme g\u00e6lder for <code>mvnd<\/code> (0.8.2) og Java (19-open). Lad os opdatere det hele. For at g\u00f8re det skal vi bare kalde kommandoen install, men denne gang bruger vi ikke en versionsangivelse:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"bash\" class=\"language-bash\">$ sdk installer maven\n\n$ sdk installer mvnd\n\n$ sdk installer java<\/code><\/pre>\n\n\n\n<p>Men der skete noget forkert. <code>Maven<\/code> og <code>mvnd<\/code> har korrekte versioner, men <strong>Java<\/strong> har version <code>17.0.5-tem<\/code>. Det skyldes, at \"den nyeste\" version af v\u00e6rkt\u00f8jet styres af leverand\u00f8ren og ikke af den lokale SDKMAN! Hvem er denne leverand\u00f8r? En leverand\u00f8r i SDKMAN! er en person, der kan udgive en version. Men lad os sige, at vi endelig installerer <code>19-\u00e5ben<\/code>og vi gjorde den til standard, men af en eller anden grund er vi n\u00f8dt til at bruge <code>17-\u00e5ben<\/code>.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Lokale versioner og versionsstyring pr. terminal<\/h3>\n\n\n\n<p>\u200b<br>Vi kan konfigurere en <code>standard<\/code> version af et v\u00e6rkt\u00f8j, som er global for alle projekter og terminaler. Men n\u00e5r vi har brug for en specifik version, har vi to m\u00e5der at g\u00f8re det p\u00e5. Den f\u00f8rste er at bruge <code>sdk brug<\/code> hver gang vi vil bruge en bestemt version af et v\u00e6rkt\u00f8j i den aktuelle terminal. Det andet er at forberede en versionsliste i en <code>.sdkmanrc<\/code> fil, der er gemt sammen med projektet.<\/p>\n\n\n\n<p>Mens den f\u00f8rste mulighed er til engangsbrug, er den anden designet til at arbejde med teams og dele konfigurationer mellem <a href=\"https:\/\/thecodest.co\/da\/dictionary\/how-to-lead-software-development-team\/\">hold<\/a> medlemmer.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Fordele og ulemper ved SDKMAN!<\/h3>\n\n\n\n<p>SDKMAN! er meget let at bruge og har et rigt bibliotek af underst\u00f8ttede v\u00e6rkt\u00f8jer, frameworks og sprog. Det fungerer p\u00e5 Linux, MacOS og Windows. P\u00e5 den anden side er dette v\u00e6rkt\u00f8j JVM-fokuseret og kr\u00e6ver forfatterens accept af at v\u00e6re leverand\u00f8r. Derudover er mekanikeren i <code>.sdkmanrc<\/code> er meget d\u00e5rlig og kan forsinke processen med at skifte mappe betydeligt.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Jeg vil gerne bruge mange andre sprog<\/h2>\n\n\n\n<p>Hvis du har brug for at bruge mange sprog og v\u00e6rkt\u00f8jer, b\u00f8r du tage et kig p\u00e5 <a href=\"https:\/\/asdf-vm.com\/\">asdf<\/a>. Dette v\u00e6rkt\u00f8j er fokuseret p\u00e5 v\u00e6rkt\u00f8jer p\u00e5 \"h\u00f8jt niveau\". Mens du i SDKMAN! kan finde mange Java-specifikke v\u00e6rkt\u00f8jer, som Bpipe eller Znai, tilbyder asdf meget flere v\u00e6rkt\u00f8jer, men ikke s\u00e5 specifikke. Selvf\u00f8lgelig overlapper nogle af disse v\u00e6rkt\u00f8jer hinanden, f.eks. er Java, Tomcat eller mvnd tilg\u00e6ngelige i begge.<\/p>\n\n\n\n<p>N\u00e5r du gerne vil bruge <code>asdf<\/code>skal du have <code>git<\/code> og <code>kr\u00f8lle<\/code> installeret. Derefter skal du bare:<\/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>og tilf\u00f8j disse linjer 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>Nu kan du installere plugins og v\u00e6rkt\u00f8jer i dine foretrukne versioner.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Plugin-baseret administration<\/h3>\n\n\n\n<p>I mods\u00e6tning til SDKMAN! <code>asdf<\/code> bruger plugins til at administrere v\u00e6rkt\u00f8jer. S\u00e5 f\u00f8r du kan installere et v\u00e6rkt\u00f8j, skal du installere et plugin. Lad os g\u00e5 tilbage til vores eksempelprojekt og pr\u00f8ve at konfigurere milj\u00f8et ved hj\u00e6lp af <code>asadfsdf<\/code>.<\/p>\n\n\n\n<p>F\u00f8rst skal vi installere plugins:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"bash\" class=\"language-bash\">asdf-plugin tilf\u00f8jer java\n\nasdf-plugin tilf\u00f8j maven\n\nasdf-plugin add mvnd<\/code><\/pre>\n\n\n\n<p>S\u00e5 kan vi installere vores v\u00e6rkt\u00f8jer:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"bash\" class=\"language-bash\">asdf install java openjdk-17\n\nasdf installer maven 3.8.4\n\nasdf install mvnd 0.7.1<\/code><\/pre>\n\n\n\n<p>Og igen, i mods\u00e6tning til SDKMAN! <code>asdf<\/code> \u00e6ndrer ikke noget i vores milj\u00f8. N\u00e5r vi pr\u00f8ver at bruge java, f\u00e5r vi en fejlmeddelelse som:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"bash\" class=\"language-bash\">Der er ikke angivet nogen version for kommandoen Java\n\nOvervej at tilf\u00f8je en af f\u00f8lgende versioner i din konfigurationsfil i ~\/.tool-versions\n\njava openjdk-17<\/code><\/pre>\n\n\n\n<p>Vi er n\u00f8dt til at oprette filen <code>.v\u00e6rkt\u00f8js-versioner<\/code> i hjemmebiblioteket for at administrere standardversioner.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Lokale og globale versioner<\/h3>\n\n\n\n<p>Opdatering af softwareversioner med <code>asdf<\/code> er ret enkelt. Vi installerer bare en ny version. Da denne proces ikke p\u00e5virker milj\u00f8et, kan vi g\u00f8re det n\u00e5r som helst og hvor som helst i filsystemet. N\u00e5r vi vil bruge en bestemt version af noget software, skal vi i projektmappen oprette en <code>.v\u00e6rkt\u00f8js-versioner<\/code> fil, der kan deles mellem teammedlemmerne. Husk, at du skal garantere, at alle teammedlemmer har <code>asdf<\/code> og plugins installeret. Listen over plugins kan du finde <a href=\"https:\/\/github.com\/asdf-vm\/asdf-plugins\">her<\/a>.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Versionskonflikter<\/h3>\n\n\n\n<p><code>asdf<\/code> underst\u00f8tter ikke kun programmeringssprog, frameworks og v\u00e6rkt\u00f8jer som vim eller kubernetess. Den underst\u00f8tter ogs\u00e5 databaser. I et s\u00e5dant tilf\u00e6lde kunne vi installere flere versioner af f.eks. Postgres, men kun \u00e9n instans kunne k\u00f8re. Det skyldes, at <code>asdf<\/code> udf\u00f8rer kommandoer direkte p\u00e5 dit operativsystem uden noget separationslag. Det f\u00f8rer til problemer som \"port allerede i brug\" og konflikter om ressourcer.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Fordele og ulemper<\/h3>\n\n\n\n<p><code>asdf<\/code> er et rigtig godt v\u00e6rkt\u00f8j, hvis du gerne vil arbejde i et polyglot-milj\u00f8. Det underst\u00f8tter mange v\u00e6rkt\u00f8jer, sprog og frameworks. Plugin-baseret arkitektur g\u00f8r det meget nemt at udvide det. Men nogle af de v\u00e6rkt\u00f8jer, der findes i biblioteket, kr\u00e6ver ekstra arbejde under installationen for at levere alle de n\u00f8dvendige afh\u00e6ngigheder. <code>asdf<\/code> virker 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\">Sidst men ikke mindst - Docker<\/h2>\n\n\n\n<p>N\u00e5r jeg taler om havnekonflikten ovenfor, kender mange af jer l\u00f8sningen.<\/p>\n\n\n\n<p><a href=\"https:\/\/www.docker.com\/\">Docker<\/a> kan hj\u00e6lpe os i nogle tilf\u00e6lde. Jeg n\u00e6vner det af pligt, fordi dette v\u00e6rkt\u00f8j er s\u00e5 stort og komplekst, at vi ikke kan diskutere det i \u00e9n artikel.<\/p>\n\n\n\n<p>Sammen med Docker skal vi bruge en <a href=\"https:\/\/docs.docker.com\/compose\/\">docker-compose<\/a> v\u00e6rkt\u00f8j, der giver os mulighed for at koordinere milj\u00f8er med flere containere.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Fordele og ulemper ved Docker<\/h3>\n\n\n\n<p>Docker hj\u00e6lper os med at administrere v\u00e6rkt\u00f8jer, der har brug for bestemte ressourcer, f.eks. porte eller filer. Det adskiller instanser i containere og giver os fuld kontrol over dem. Ikke desto mindre er Docker et v\u00e6rkt\u00f8j, der introducerer en masse kompleksitet i vores arbejdsmilj\u00f8 og kan v\u00e6re problematisk i nogle tilf\u00e6lde. Et af disse tilf\u00e6lde med brug af Docker i en test er beskrevet i en af vores tidligere <a href=\"https:\/\/thecodest.co\/blog\/test-containers-how-to-make-tests-easier\">artikel<\/a>.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Opsummering<\/h2>\n\n\n\n<p>Jeg ved godt, at jeg ikke har beskrevet alle de v\u00e6rkt\u00f8jer, der kan bruges til at styre v\u00e6rkt\u00f8jsversioner. Der er mange flere af dem, f.eks. <a href=\"https:\/\/www.jenv.be\/\">jEnv<\/a> der kan erstatte SDKMAN,<\/p>\n\n\n\n<p>eller <a href=\"https:\/\/github.com\/nvm-sh\/nvm\">NVM<\/a> som vi kan bruge til at styre npm eller <a href=\"https:\/\/rvm.io\/\">RVM<\/a> for <a href=\"https:\/\/thecodest.co\/da\/case-studies\/providing-a-team-of-ruby-developers-for-a-fintech-company\/\">Ruby<\/a>. Jeg fokuserede p\u00e5 v\u00e6rkt\u00f8jer, 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>Findes der en gylden middelvej til at h\u00e5ndtere mange milj\u00f8er for et stort antal p\u00e5 bare \u00e9n maskine? Vores Java-ekspert Bart\u0142omiej kender 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\/da\/blog\/handter-flere-miljoer-til-flere-projekter-pa-en-maskine\/\" \/>\n<meta property=\"og:locale\" content=\"da_DK\" \/>\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\/da\/blog\/handter-flere-miljoer-til-flere-projekter-pa-en-maskine\/\" \/>\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\":\"da-DK\",\"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\":\"da-DK\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/thecodest.co\\\/blog\\\/handle-multiple-environments-for-multiple-projects-on-one-machine\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"da-DK\",\"@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\":\"da-DK\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/thecodest.co\\\/#organization\",\"name\":\"The Codest\",\"url\":\"https:\\\/\\\/thecodest.co\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"da-DK\",\"@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\":\"da-DK\",\"@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\\\/da\\\/author\\\/thecodest\\\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"H\u00e5ndtere flere milj\u00f8er til flere projekter p\u00e5 \u00e9n maskine? - The Codest","description":"Opdag, hvordan udviklere kan h\u00e5ndtere flere milj\u00f8er til forskellige projekter p\u00e5 en enkelt maskine ved hj\u00e6lp af versionsstyring 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\/da\/blog\/handter-flere-miljoer-til-flere-projekter-pa-en-maskine\/","og_locale":"da_DK","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\/da\/blog\/handter-flere-miljoer-til-flere-projekter-pa-en-maskine\/","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":"da-DK","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 til flere projekter p\u00e5 \u00e9n maskine? - 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":"Opdag, hvordan udviklere kan h\u00e5ndtere flere milj\u00f8er til forskellige projekter p\u00e5 en enkelt maskine ved hj\u00e6lp af versionsstyring og containerisering.","breadcrumb":{"@id":"https:\/\/thecodest.co\/blog\/handle-multiple-environments-for-multiple-projects-on-one-machine\/#breadcrumb"},"inLanguage":"da-DK","potentialAction":[{"@type":"ReadAction","target":["https:\/\/thecodest.co\/blog\/handle-multiple-environments-for-multiple-projects-on-one-machine\/"]}]},{"@type":"ImageObject","inLanguage":"da-DK","@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":"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":"da-DK"},{"@type":"Organization","@id":"https:\/\/thecodest.co\/#organization","name":"Codest","url":"https:\/\/thecodest.co\/","logo":{"@type":"ImageObject","inLanguage":"da-DK","@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":"da-DK","@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\/da\/author\/thecodest\/"}]}},"_links":{"self":[{"href":"https:\/\/thecodest.co\/da\/wp-json\/wp\/v2\/posts\/3348","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/thecodest.co\/da\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/thecodest.co\/da\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/thecodest.co\/da\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/thecodest.co\/da\/wp-json\/wp\/v2\/comments?post=3348"}],"version-history":[{"count":9,"href":"https:\/\/thecodest.co\/da\/wp-json\/wp\/v2\/posts\/3348\/revisions"}],"predecessor-version":[{"id":8550,"href":"https:\/\/thecodest.co\/da\/wp-json\/wp\/v2\/posts\/3348\/revisions\/8550"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/thecodest.co\/da\/wp-json\/wp\/v2\/media\/3349"}],"wp:attachment":[{"href":"https:\/\/thecodest.co\/da\/wp-json\/wp\/v2\/media?parent=3348"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/thecodest.co\/da\/wp-json\/wp\/v2\/categories?post=3348"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/thecodest.co\/da\/wp-json\/wp\/v2\/tags?post=3348"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}