{"id":3464,"date":"2025-11-13T10:21:36","date_gmt":"2025-11-13T03:21:36","guid":{"rendered":"https:\/\/portal-atlasx.cdg.co.th\/home\/?post_type=docs&#038;p=3464"},"modified":"2025-11-13T10:21:36","modified_gmt":"2025-11-13T03:21:36","slug":"linux-server","status":"publish","type":"docs","link":"https:\/\/portal-atlasx.cdg.co.th\/home\/docs\/atlasx-container\/deployment\/linux-server\/","title":{"rendered":"Linux Server"},"content":{"rendered":"\n<h1 class=\"wp-block-heading\" id=\"container-deployment-on-linux-server\">Container Deployment on Linux Server<\/h1>\n\n\n\n<p>\u0e43\u0e19\u0e01\u0e32\u0e23 Deploy AtlasX Container \u0e1a\u0e19\u0e40\u0e04\u0e23\u0e37\u0e48\u0e2d\u0e07 server \u0e17\u0e35\u0e48\u0e40\u0e1b\u0e47\u0e19 Linux \u0e19\u0e31\u0e49\u0e19\u0e2a\u0e32\u0e21\u0e32\u0e23\u0e16\u0e17\u0e33\u0e44\u0e14\u0e49\u0e07\u0e48\u0e32\u0e22 \u0e46 \u0e40\u0e1e\u0e35\u0e22\u0e07\u0e41\u0e04\u0e48\u0e43\u0e0a\u0e49 Docker Compose \u0e01\u0e47\u0e2a\u0e32\u0e21\u0e32\u0e23\u0e16\u0e17\u0e33\u0e43\u0e2b\u0e49 container \u0e23\u0e31\u0e19\u0e02\u0e36\u0e49\u0e19\u0e21\u0e32\u0e44\u0e14\u0e49<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"prerequisite\">Prerequisite<\/h2>\n\n\n\n<p>\u0e1a\u0e19\u0e40\u0e04\u0e23\u0e37\u0e48\u0e2d\u0e07 server \u0e17\u0e35\u0e48\u0e08\u0e30\u0e17\u0e33\u0e01\u0e32\u0e23 deploy \u0e08\u0e30\u0e15\u0e49\u0e2d\u0e07\u0e21\u0e35\u0e01\u0e32\u0e23\u0e40\u0e15\u0e23\u0e35\u0e22\u0e21 library \u0e15\u0e48\u0e32\u0e07 \u0e46 \u0e15\u0e32\u0e21\u0e19\u0e35\u0e49<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Docker Engine &#8211; \u0e43\u0e0a\u0e49\u0e43\u0e19\u0e01\u0e32\u0e23\u0e23\u0e31\u0e19 container<\/li>\n\n\n\n<li>Docker Compose &#8211; \u0e40\u0e1b\u0e47\u0e19 CLI \u0e17\u0e35\u0e48\u0e43\u0e0a\u0e49\u0e43\u0e19\u0e01\u0e32\u0e23\u0e23\u0e31\u0e19 container \u0e14\u0e49\u0e27\u0e22 manifest file<\/li>\n\n\n\n<li>Container Registry &#8211; \u0e43\u0e0a\u0e49\u0e43\u0e19\u0e01\u0e32\u0e23\u0e40\u0e01\u0e47\u0e1a image \u0e02\u0e2d\u0e07 container<\/li>\n\n\n\n<li>Reverse Proxy (Nginx, Apache, Traefik, etc.) &#8211; \u0e43\u0e0a\u0e49\u0e43\u0e19\u0e01\u0e32\u0e23 redirect \u0e44\u0e1b\u0e22\u0e31\u0e07 container \u0e17\u0e35\u0e48\u0e15\u0e49\u0e2d\u0e07\u0e01\u0e32\u0e23<\/li>\n\n\n\n<li>Docker Manifest File &#8211; \u0e44\u0e1f\u0e25\u0e4c\u0e17\u0e35\u0e48\u0e43\u0e0a\u0e49\u0e43\u0e19\u0e01\u0e32\u0e23\u0e23\u0e31\u0e19 container \u0e14\u0e49\u0e27\u0e22 Docker Compose \u0e14\u0e32\u0e27\u0e19\u0e4c\u0e42\u0e2b\u0e25\u0e14\u0e44\u0e14\u0e49\u0e08\u0e32\u0e01<a href=\"https:\/\/portal-atlasx.cdg.co.th\/tools\/downloads\/docker-file\" target=\"_blank\" rel=\"noreferrer noopener\">\u0e17\u0e35\u0e48\u0e19\u0e35\u0e48<\/a><\/li>\n<\/ol>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"docker-compose-file\">Docker Compose file<\/h2>\n\n\n\n<p>\u0e17\u0e32\u0e07\u0e17\u0e35\u0e21 AtlasX \u0e44\u0e14\u0e49\u0e40\u0e25\u0e37\u0e2d\u0e01\u0e43\u0e0a\u0e49&nbsp;<a href=\"https:\/\/doc.traefik.io\/traefik\/\" target=\"_blank\" rel=\"noreferrer noopener\">Traefik Proxy<\/a>&nbsp;\u0e40\u0e1b\u0e47\u0e19 Reverse Proxy \u0e41\u0e25\u0e30 Service Load Balancer \u0e43\u0e19\u0e01\u0e32\u0e23\u0e08\u0e31\u0e14\u0e01\u0e32\u0e23 traffic \u0e17\u0e35\u0e48\u0e08\u0e30\u0e40\u0e02\u0e49\u0e32\u0e21\u0e32\u0e43\u0e19\u0e41\u0e2d\u0e1e\u0e1e\u0e25\u0e34\u0e40\u0e0a\u0e31\u0e48\u0e19 \u0e14\u0e31\u0e07\u0e19\u0e31\u0e49\u0e19\u0e44\u0e1f\u0e25\u0e4c&nbsp;<code>docker-compose.yaml<\/code>&nbsp;\u0e08\u0e36\u0e07\u0e21\u0e35\u0e01\u0e32\u0e23\u0e01\u0e33\u0e2b\u0e19\u0e14\u0e43\u0e2b\u0e49\u0e43\u0e0a\u0e49\u0e07\u0e32\u0e19\u0e23\u0e48\u0e27\u0e21\u0e01\u0e31\u0e1a Traefik Proxy \u0e14\u0e49\u0e27\u0e22 \u0e0b\u0e36\u0e48\u0e07\u0e08\u0e30\u0e21\u0e35\u0e23\u0e39\u0e1b\u0e41\u0e1a\u0e1a\u0e14\u0e31\u0e07\u0e19\u0e35\u0e49<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-Fira-Code\" style=\"font-size:.875rem;font-family:Code-Pro-Fira-Code,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span role=\"button\" tabindex=\"0\" style=\"color:#000000;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>version: '3.8'\n\nservices:\n  webservice:\n    image: '${WEBSERVICE_IMAGE}:${WEBSERVICE_VERSION}'\n    container_name: atlasx-webservice\n    networks:\n      - frontend\n    labels:\n      - 'traefik.enable=true'\n      # HTTP\n      - 'traefik.http.routers.${WEBSERVICE_PROJECT_NAME}.entrypoints=web'\n      # HTTPS\n      # - 'traefik.http.routers.${WEBSERVICE_PROJECT_NAME}.entrypoints=websecure'\n      # - 'traefik.http.routers.${WEBSERVICE_PROJECT_NAME}.tls=true'\n      - 'traefik.http.routers.${WEBSERVICE_PROJECT_NAME}.rule=Host(`${WEBSERVICE_URL}`) &amp;&amp; PathPrefix(`\/${WEBSERVICE_BASEPATH}`)'\n      - 'traefik.http.routers.${WEBSERVICE_PROJECT_NAME}.middlewares=${WEBSERVICE_PROJECT_NAME}-stripprefix'\n      - 'traefik.http.middlewares.${WEBSERVICE_PROJECT_NAME}-stripprefix.stripprefix.prefixes=\/${WEBSERVICE_BASEPATH}'\n      - 'traefik.http.services.${WEBSERVICE_PROJECT_NAME}.loadbalancer.server.port=8080'\n    environment:\n      - ASPNETCORE_BASEPATH=\/${WEBSERVICE_BASEPATH}\n    restart: unless-stopped\n  webapp:\n    image: '${WEBAPP_IMAGE}:${WEBAPP_VERSION}'\n    container_name: atlasx-webapp\n    networks:\n      - frontend\n    labels:\n      - 'traefik.enable=true'\n      # HTTP\n      - 'traefik.http.routers.${WEBAPP_PROJECT_NAME}.entrypoints=web'\n      # HTTPS\n      # - 'traefik.http.routers.${WEBAPP_PROJECT_NAME}.entrypoints=websecure'\n      # - 'traefik.http.routers.${WEBAPP_PROJECT_NAME}.tls=true'\n      - 'traefik.http.routers.${WEBAPP_PROJECT_NAME}.rule=Host(`${WEBAPP_URL}`) &amp;&amp; PathPrefix(`\/${WEBAPP_BASEPATH}`)'\n      - 'traefik.http.routers.${WEBAPP_PROJECT_NAME}.middlewares=${WEBAPP_PROJECT_NAME}-stripprefix'\n      - 'traefik.http.middlewares.${WEBAPP_PROJECT_NAME}-stripprefix.stripprefix.prefixes=\/${WEBAPP_BASEPATH}'\n      - 'traefik.http.services.${WEBAPP_PROJECT_NAME}.loadbalancer.server.port=8080'\n    restart: unless-stopped\n\nnetworks:\n  frontend:\n    external: true<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M4.5 12.75l6 6 9-13.5\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M16.5 8.25V6a2.25 2.25 0 00-2.25-2.25H6A2.25 2.25 0 003.75 6v8.25A2.25 2.25 0 006 16.5h2.25m8.25-8.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-7.5A2.25 2.25 0 018.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 00-2.25 2.25v6\"><\/path><\/svg><\/span><pre class=\"shiki light-plus\" style=\"background-color: #FFFFFF\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #000000\">version: <\/span><span style=\"color: #A31515\">&#39;3.8&#39;<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #000000\">services:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  webservice:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">    image: <\/span><span style=\"color: #A31515\">&#39;${WEBSERVICE_IMAGE}:${WEBSERVICE_VERSION}&#39;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">    container_name: <\/span><span style=\"color: #001080\">atlasx<\/span><span style=\"color: #000000\">-<\/span><span style=\"color: #001080\">webservice<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">    networks:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">      - <\/span><span style=\"color: #001080\">frontend<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">    labels:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">      - <\/span><span style=\"color: #A31515\">&#39;traefik.enable=true&#39;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">      # <\/span><span style=\"color: #0070C1\">HTTP<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">      - <\/span><span style=\"color: #A31515\">&#39;traefik.http.routers.${WEBSERVICE_PROJECT_NAME}.entrypoints=web&#39;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">      # <\/span><span style=\"color: #0070C1\">HTTPS<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">      # - <\/span><span style=\"color: #A31515\">&#39;traefik.http.routers.${WEBSERVICE_PROJECT_NAME}.entrypoints=websecure&#39;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">      # - <\/span><span style=\"color: #A31515\">&#39;traefik.http.routers.${WEBSERVICE_PROJECT_NAME}.tls=true&#39;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">      - <\/span><span style=\"color: #A31515\">&#39;traefik.http.routers.${WEBSERVICE_PROJECT_NAME}.rule=Host(`${WEBSERVICE_URL}`) &amp;&amp; PathPrefix(`\/${WEBSERVICE_BASEPATH}`)&#39;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">      - <\/span><span style=\"color: #A31515\">&#39;traefik.http.routers.${WEBSERVICE_PROJECT_NAME}.middlewares=${WEBSERVICE_PROJECT_NAME}-stripprefix&#39;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">      - <\/span><span style=\"color: #A31515\">&#39;traefik.http.middlewares.${WEBSERVICE_PROJECT_NAME}-stripprefix.stripprefix.prefixes=\/${WEBSERVICE_BASEPATH}&#39;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">      - <\/span><span style=\"color: #A31515\">&#39;traefik.http.services.${WEBSERVICE_PROJECT_NAME}.loadbalancer.server.port=8080&#39;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">    environment:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">      - <\/span><span style=\"color: #0070C1\">ASPNETCORE_BASEPATH<\/span><span style=\"color: #000000\">=\/<\/span><span style=\"color: #001080\">$<\/span><span style=\"color: #000000\">{<\/span><span style=\"color: #0070C1\">WEBSERVICE_BASEPATH<\/span><span style=\"color: #000000\">}<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">    restart: <\/span><span style=\"color: #001080\">unless<\/span><span style=\"color: #000000\">-<\/span><span style=\"color: #001080\">stopped<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  webapp:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">    image: <\/span><span style=\"color: #A31515\">&#39;${WEBAPP_IMAGE}:${WEBAPP_VERSION}&#39;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">    container_name: <\/span><span style=\"color: #001080\">atlasx<\/span><span style=\"color: #000000\">-<\/span><span style=\"color: #001080\">webapp<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">    networks:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">      - <\/span><span style=\"color: #001080\">frontend<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">    labels:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">      - <\/span><span style=\"color: #A31515\">&#39;traefik.enable=true&#39;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">      # <\/span><span style=\"color: #0070C1\">HTTP<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">      - <\/span><span style=\"color: #A31515\">&#39;traefik.http.routers.${WEBAPP_PROJECT_NAME}.entrypoints=web&#39;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">      # <\/span><span style=\"color: #0070C1\">HTTPS<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">      # - <\/span><span style=\"color: #A31515\">&#39;traefik.http.routers.${WEBAPP_PROJECT_NAME}.entrypoints=websecure&#39;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">      # - <\/span><span style=\"color: #A31515\">&#39;traefik.http.routers.${WEBAPP_PROJECT_NAME}.tls=true&#39;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">      - <\/span><span style=\"color: #A31515\">&#39;traefik.http.routers.${WEBAPP_PROJECT_NAME}.rule=Host(`${WEBAPP_URL}`) &amp;&amp; PathPrefix(`\/${WEBAPP_BASEPATH}`)&#39;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">      - <\/span><span style=\"color: #A31515\">&#39;traefik.http.routers.${WEBAPP_PROJECT_NAME}.middlewares=${WEBAPP_PROJECT_NAME}-stripprefix&#39;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">      - <\/span><span style=\"color: #A31515\">&#39;traefik.http.middlewares.${WEBAPP_PROJECT_NAME}-stripprefix.stripprefix.prefixes=\/${WEBAPP_BASEPATH}&#39;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">      - <\/span><span style=\"color: #A31515\">&#39;traefik.http.services.${WEBAPP_PROJECT_NAME}.loadbalancer.server.port=8080&#39;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">    restart: <\/span><span style=\"color: #001080\">unless<\/span><span style=\"color: #000000\">-<\/span><span style=\"color: #001080\">stopped<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #000000\">networks:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  frontend:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">    external: <\/span><span style=\"color: #0000FF\">true<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<h5 class=\"wp-block-heading\">Note<\/h5>\n\n\n\n<p><\/p>\n\n\n\n<p>\u0e43\u0e19\u0e01\u0e32\u0e23\u0e01\u0e33\u0e2b\u0e19\u0e14\u0e04\u0e48\u0e32\u0e15\u0e48\u0e32\u0e07 \u0e46 \u0e40\u0e1e\u0e37\u0e48\u0e2d\u0e43\u0e2b\u0e49 Traefik Proxy \u0e2a\u0e32\u0e21\u0e32\u0e23\u0e16\u0e04\u0e49\u0e19\u0e2b\u0e32 container \u0e44\u0e14\u0e49\u0e19\u0e31\u0e49\u0e19 \u0e08\u0e30\u0e15\u0e49\u0e2d\u0e07\u0e21\u0e35\u0e01\u0e32\u0e23\u0e01\u0e33\u0e2b\u0e19\u0e14\u0e04\u0e48\u0e32\u0e43\u0e19\u0e2a\u0e48\u0e27\u0e19\u0e02\u0e2d\u0e07 labels \u0e0b\u0e36\u0e48\u0e07\u0e16\u0e49\u0e32\u0e21\u0e35\u0e01\u0e32\u0e23\u0e43\u0e0a\u0e49\u0e07\u0e32\u0e19 Reverse Proxy \u0e2d\u0e37\u0e48\u0e19 \u0e46 \u0e01\u0e47\u0e2a\u0e32\u0e21\u0e32\u0e23\u0e16\u0e25\u0e1a label \u0e43\u0e19\u0e2a\u0e48\u0e27\u0e19\u0e17\u0e35\u0e48\u0e40\u0e01\u0e35\u0e48\u0e22\u0e27\u0e02\u0e49\u0e2d\u0e07\u0e01\u0e31\u0e1a Traefik Proxy \u0e2d\u0e2d\u0e01\u0e44\u0e1b\u0e44\u0e14\u0e49<\/p>\n<\/blockquote>\n\n\n\n<p>\u0e08\u0e30\u0e2a\u0e31\u0e07\u0e40\u0e01\u0e15\u0e44\u0e14\u0e49\u0e27\u0e48\u0e32\u0e43\u0e19\u0e44\u0e1f\u0e25\u0e4c&nbsp;<code>docker-compose.yaml<\/code>&nbsp;\u0e08\u0e30\u0e21\u0e35\u0e01\u0e32\u0e23\u0e01\u0e33\u0e2b\u0e19\u0e14\u0e43\u0e2b\u0e49\u0e23\u0e31\u0e19 container 2 \u0e15\u0e31\u0e27\u0e04\u0e37\u0e2d&nbsp;<code>webapp<\/code>&nbsp;\u0e41\u0e25\u0e30&nbsp;<code>webservice<\/code>&nbsp;\u0e0b\u0e36\u0e48\u0e07\u0e40\u0e23\u0e32\u0e2a\u0e32\u0e21\u0e32\u0e23\u0e16\u0e01\u0e33\u0e2b\u0e19\u0e14\u0e43\u0e2b\u0e49\u0e21\u0e35\u0e01\u0e35\u0e48\u0e15\u0e31\u0e27\u0e01\u0e47\u0e44\u0e14\u0e49 \u0e2d\u0e35\u0e01\u0e17\u0e31\u0e49\u0e07\u0e22\u0e31\u0e07\u0e21\u0e35\u0e01\u0e32\u0e23\u0e01\u0e33\u0e2b\u0e19\u0e14 environment variable \u0e43\u0e19\u0e01\u0e32\u0e23\u0e01\u0e33\u0e2b\u0e19\u0e14\u0e04\u0e48\u0e32\u0e15\u0e48\u0e32\u0e07 \u0e46 \u0e2d\u0e35\u0e01\u0e14\u0e49\u0e27\u0e22<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"configuration\">Configuration<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"environment-variables\">Environment Variables<\/h3>\n\n\n\n<p>\u0e43\u0e19 manifest template \u0e08\u0e30\u0e21\u0e35\u0e44\u0e1f\u0e25\u0e4c&nbsp;<code>example.env<\/code>&nbsp;\u0e0b\u0e36\u0e48\u0e07\u0e08\u0e30\u0e40\u0e1b\u0e47\u0e19\u0e44\u0e1f\u0e25\u0e4c\u0e17\u0e35\u0e48\u0e43\u0e0a\u0e49\u0e43\u0e19\u0e01\u0e32\u0e23\u0e01\u0e33\u0e2b\u0e19\u0e14\u0e04\u0e48\u0e32\u0e15\u0e48\u0e32\u0e07 \u0e46 \u0e02\u0e2d\u0e07\u0e41\u0e2d\u0e1e\u0e1e\u0e25\u0e34\u0e40\u0e04\u0e0a\u0e31\u0e48\u0e19 \u0e0b\u0e36\u0e48\u0e07\u0e08\u0e30\u0e21\u0e35\u0e23\u0e39\u0e1b\u0e41\u0e1a\u0e1a\u0e14\u0e31\u0e07\u0e19\u0e35\u0e49<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-Fira-Code\" style=\"font-size:.875rem;font-family:Code-Pro-Fira-Code,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span role=\"button\" tabindex=\"0\" style=\"color:#000000;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly># Web Service\nWEBSERVICE_IMAGE=\"atlasx-registry.cdg.co.th\/atlasx\/webservice\"\nWEBSERVICE_VERSION=\nWEBSERVICE_PROJECT_NAME=\nWEBSERVICE_BASEPATH=\nWEBSERVICE_URL=\n\n# Web Application\nWEBAPP_IMAGE=\"atlasx-registry.cdg.co.th\/atlasx\/webapp\"\nWEBAPP_VERSION=\nWEBAPP_PROJECT_NAME=\nWEBAPP_BASEPATH=\nWEBAPP_URL=<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M4.5 12.75l6 6 9-13.5\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M16.5 8.25V6a2.25 2.25 0 00-2.25-2.25H6A2.25 2.25 0 003.75 6v8.25A2.25 2.25 0 006 16.5h2.25m8.25-8.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-7.5A2.25 2.25 0 018.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 00-2.25 2.25v6\"><\/path><\/svg><\/span><pre class=\"shiki light-plus\" style=\"background-color: #FFFFFF\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #000000\"># <\/span><span style=\"color: #001080\">Web<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #001080\">Service<\/span><\/span>\n<span class=\"line\"><span style=\"color: #0070C1\">WEBSERVICE_IMAGE<\/span><span style=\"color: #000000\">=<\/span><span style=\"color: #A31515\">&quot;atlasx-registry.cdg.co.th\/atlasx\/webservice&quot;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #0070C1\">WEBSERVICE_VERSION<\/span><span style=\"color: #000000\">=<\/span><\/span>\n<span class=\"line\"><span style=\"color: #0070C1\">WEBSERVICE_PROJECT_NAME<\/span><span style=\"color: #000000\">=<\/span><\/span>\n<span class=\"line\"><span style=\"color: #0070C1\">WEBSERVICE_BASEPATH<\/span><span style=\"color: #000000\">=<\/span><\/span>\n<span class=\"line\"><span style=\"color: #0070C1\">WEBSERVICE_URL<\/span><span style=\"color: #000000\">=<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #000000\"># <\/span><span style=\"color: #001080\">Web<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #001080\">Application<\/span><\/span>\n<span class=\"line\"><span style=\"color: #0070C1\">WEBAPP_IMAGE<\/span><span style=\"color: #000000\">=<\/span><span style=\"color: #A31515\">&quot;atlasx-registry.cdg.co.th\/atlasx\/webapp&quot;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #0070C1\">WEBAPP_VERSION<\/span><span style=\"color: #000000\">=<\/span><\/span>\n<span class=\"line\"><span style=\"color: #0070C1\">WEBAPP_PROJECT_NAME<\/span><span style=\"color: #000000\">=<\/span><\/span>\n<span class=\"line\"><span style=\"color: #0070C1\">WEBAPP_BASEPATH<\/span><span style=\"color: #000000\">=<\/span><\/span>\n<span class=\"line\"><span style=\"color: #0070C1\">WEBAPP_URL<\/span><span style=\"color: #000000\">=<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<p>\u0e43\u0e2b\u0e49\u0e17\u0e33\u0e01\u0e32\u0e23\u0e04\u0e31\u0e14\u0e25\u0e2d\u0e01\u0e44\u0e1f\u0e25\u0e4c&nbsp;<code>example.env<\/code>&nbsp;\u0e41\u0e25\u0e30\u0e40\u0e1b\u0e25\u0e35\u0e48\u0e22\u0e19\u0e0a\u0e37\u0e48\u0e2d\u0e44\u0e1f\u0e25\u0e4c\u0e40\u0e1b\u0e47\u0e19&nbsp;<code>.env<\/code>&nbsp;\u0e41\u0e25\u0e30\u0e01\u0e33\u0e2b\u0e19\u0e14\u0e04\u0e48\u0e32\u0e15\u0e48\u0e32\u0e07 \u0e46 \u0e43\u0e2b\u0e49\u0e16\u0e39\u0e01\u0e15\u0e49\u0e2d\u0e07 (Docker Compose \u0e08\u0e30\u0e2d\u0e48\u0e32\u0e19\u0e04\u0e48\u0e32\u0e08\u0e32\u0e01\u0e44\u0e1f\u0e25\u0e4c&nbsp;<code>.env<\/code>&nbsp;\u0e42\u0e14\u0e22\u0e2d\u0e31\u0e15\u0e42\u0e19\u0e21\u0e31\u0e15\u0e34)<\/p>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"definition\">Definition<\/h4>\n\n\n\n<ul class=\"wp-block-list\">\n<li><code>WEBSERVICE_IMAGE<\/code>\u00a0: \u0e40\u0e1b\u0e47\u0e19\u0e0a\u0e37\u0e48\u0e2d\u0e02\u0e2d\u0e07 Web Service Image \u0e17\u0e35\u0e48\u0e08\u0e30\u0e43\u0e0a\u0e49\u0e43\u0e19\u0e01\u0e32\u0e23\u0e23\u0e31\u0e19 container<\/li>\n\n\n\n<li><code>WEBSERVICE_VERSION<\/code>\u00a0: \u0e40\u0e1b\u0e47\u0e19 tag \u0e02\u0e2d\u0e07 Web Service Image \u0e17\u0e35\u0e48\u0e08\u0e30\u0e43\u0e0a\u0e49\u0e43\u0e19\u0e01\u0e32\u0e23\u0e23\u0e31\u0e19 container<\/li>\n\n\n\n<li><code>WEBSERVICE_PROJECT_NAME<\/code>\u00a0: \u0e40\u0e1b\u0e47\u0e19\u0e0a\u0e37\u0e48\u0e2d\u0e02\u0e2d\u0e07 service \u0e17\u0e35\u0e48\u0e08\u0e30\u0e19\u0e33\u0e44\u0e1b\u0e23\u0e30\u0e1a\u0e38\u0e1a\u0e19 Traefik Proxy \u0e41\u0e25\u0e30\u0e08\u0e30\u0e15\u0e49\u0e2d\u0e07\u0e44\u0e21\u0e48\u0e0b\u0e49\u0e33\u0e01\u0e31\u0e1a\u0e0a\u0e37\u0e48\u0e2d service \u0e17\u0e35\u0e48\u0e21\u0e35\u0e2d\u0e22\u0e39\u0e48\u0e41\u0e25\u0e49\u0e27\u0e1a\u0e19\u0e40\u0e04\u0e23\u0e37\u0e48\u0e2d\u0e07\u0e19\u0e31\u0e49\u0e19 \u0e46 (\u0e41\u0e19\u0e30\u0e19\u0e33\u0e43\u0e2b\u0e49\u0e15\u0e31\u0e49\u0e07\u0e40\u0e1b\u0e47\u0e19\u0e0a\u0e37\u0e48\u0e2d\u0e42\u0e04\u0e23\u0e07\u0e01\u0e32\u0e23 \u0e40\u0e0a\u0e48\u0e19\u00a0<code>ax-portal<\/code>,\u00a0<code>mea-smartlife-api<\/code>)<\/li>\n\n\n\n<li><code>WEBSERVICE_BASEPATH<\/code>\u00a0: \u0e40\u0e1b\u0e47\u0e19 Base Path \u0e02\u0e2d\u0e07 Web Service \u0e17\u0e35\u0e48\u0e08\u0e30\u0e43\u0e2b\u0e49 reverse proxy \u0e40\u0e02\u0e49\u0e32\u0e21\u0e32<\/li>\n\n\n\n<li><code>WEBSERVICE_URL<\/code>\u00a0: \u0e40\u0e1b\u0e47\u0e19 URL \u0e02\u0e2d\u0e07 Web Service \u0e17\u0e35\u0e48\u0e08\u0e30\u0e43\u0e2b\u0e49 reverse proxy \u0e40\u0e02\u0e49\u0e32\u0e21\u0e32<\/li>\n\n\n\n<li><code>WEBAPP_IMAGE<\/code>\u00a0: \u0e40\u0e1b\u0e47\u0e19\u0e0a\u0e37\u0e48\u0e2d\u0e02\u0e2d\u0e07 Web Application Image \u0e17\u0e35\u0e48\u0e08\u0e30\u0e43\u0e0a\u0e49\u0e43\u0e19\u0e01\u0e32\u0e23\u0e23\u0e31\u0e19 container<\/li>\n\n\n\n<li><code>WEBAPP_VERSION<\/code>\u00a0: \u0e40\u0e1b\u0e47\u0e19 tag \u0e02\u0e2d\u0e07 Web Application Image \u0e17\u0e35\u0e48\u0e08\u0e30\u0e43\u0e0a\u0e49\u0e43\u0e19\u0e01\u0e32\u0e23\u0e23\u0e31\u0e19 container<\/li>\n\n\n\n<li><code>WEBAPP_PROJECT_NAME<\/code>\u00a0: \u0e40\u0e1b\u0e47\u0e19\u0e0a\u0e37\u0e48\u0e2d\u0e02\u0e2d\u0e07 service \u0e17\u0e35\u0e48\u0e08\u0e30\u0e19\u0e33\u0e44\u0e1b\u0e23\u0e30\u0e1a\u0e38\u0e1a\u0e19 Traefik Proxy \u0e41\u0e25\u0e30\u0e08\u0e30\u0e15\u0e49\u0e2d\u0e07\u0e44\u0e21\u0e48\u0e0b\u0e49\u0e33\u0e01\u0e31\u0e1a\u0e0a\u0e37\u0e48\u0e2d service \u0e17\u0e35\u0e48\u0e21\u0e35\u0e2d\u0e22\u0e39\u0e48\u0e41\u0e25\u0e49\u0e27\u0e1a\u0e19\u0e40\u0e04\u0e23\u0e37\u0e48\u0e2d\u0e07\u0e19\u0e31\u0e49\u0e19 \u0e46 (\u0e41\u0e19\u0e30\u0e19\u0e33\u0e43\u0e2b\u0e49\u0e15\u0e31\u0e49\u0e07\u0e40\u0e1b\u0e47\u0e19\u0e0a\u0e37\u0e48\u0e2d\u0e42\u0e04\u0e23\u0e07\u0e01\u0e32\u0e23 \u0e40\u0e0a\u0e48\u0e19\u00a0<code>ax-portal-api<\/code>,\u00a0<code>mea-smartlife-api<\/code>)<\/li>\n\n\n\n<li><code>WEBAPP_BASEPATH<\/code>\u00a0: \u0e40\u0e1b\u0e47\u0e19 Base Path \u0e02\u0e2d\u0e07 Web Application \u0e17\u0e35\u0e48\u0e08\u0e30\u0e43\u0e2b\u0e49 reverse proxy \u0e40\u0e02\u0e49\u0e32\u0e21\u0e32 \u0e41\u0e25\u0e30\u0e08\u0e30\u0e15\u0e49\u0e2d\u0e07\u0e15\u0e23\u0e07\u0e01\u0e31\u0e1a base href \u0e17\u0e35\u0e48\u0e01\u0e33\u0e2b\u0e19\u0e14\u0e15\u0e2d\u0e19 build Angular \u0e14\u0e49\u0e27\u0e22<\/li>\n\n\n\n<li><code>WEBAPP_URL<\/code>\u00a0: \u0e40\u0e1b\u0e47\u0e19 URL \u0e02\u0e2d\u0e07 Web Application \u0e17\u0e35\u0e48\u0e08\u0e30\u0e43\u0e2b\u0e49 reverse proxy \u0e40\u0e02\u0e49\u0e32\u0e21\u0e32<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"docker-compose-configuration\">Docker Compose Configuration<\/h3>\n\n\n\n<p>\u0e43\u0e19\u0e44\u0e1f\u0e25\u0e4c&nbsp;<code>docker-compose.yaml<\/code>&nbsp;\u0e08\u0e30\u0e21\u0e35\u0e01\u0e32\u0e23\u0e01\u0e33\u0e2b\u0e19\u0e14\u0e43\u0e2b\u0e49\u0e41\u0e15\u0e48\u0e25\u0e30 container \u0e23\u0e31\u0e19\u0e2d\u0e22\u0e39\u0e48\u0e43\u0e19 network&nbsp;<code>frontend<\/code><\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-Fira-Code\" style=\"font-size:.875rem;font-family:Code-Pro-Fira-Code,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span role=\"button\" tabindex=\"0\" style=\"color:#000000;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>networks:\n  - frontend<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M4.5 12.75l6 6 9-13.5\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M16.5 8.25V6a2.25 2.25 0 00-2.25-2.25H6A2.25 2.25 0 003.75 6v8.25A2.25 2.25 0 006 16.5h2.25m8.25-8.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-7.5A2.25 2.25 0 018.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 00-2.25 2.25v6\"><\/path><\/svg><\/span><pre class=\"shiki light-plus\" style=\"background-color: #FFFFFF\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #000000\">networks:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  - <\/span><span style=\"color: #001080\">frontend<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<p>\u0e0b\u0e36\u0e48\u0e07\u0e40\u0e1b\u0e47\u0e19 network \u0e20\u0e32\u0e22\u0e43\u0e19\u0e02\u0e2d\u0e07 Docker \u0e17\u0e33\u0e43\u0e2b\u0e49 container \u0e43\u0e14 \u0e46 \u0e17\u0e35\u0e48\u0e2d\u0e22\u0e39\u0e48 network \u0e27\u0e07\u0e40\u0e14\u0e35\u0e22\u0e27\u0e01\u0e31\u0e19 \u0e2a\u0e32\u0e21\u0e32\u0e23\u0e16\u0e40\u0e0a\u0e37\u0e48\u0e2d\u0e21\u0e15\u0e48\u0e2d\u0e01\u0e31\u0e19\u0e44\u0e14\u0e49 \u0e23\u0e27\u0e21\u0e16\u0e36\u0e07 reverse proxy \u0e14\u0e49\u0e27\u0e22 \u0e41\u0e25\u0e30\u0e40\u0e23\u0e32\u0e44\u0e14\u0e49\u0e01\u0e33\u0e2b\u0e19\u0e14\u0e43\u0e2b\u0e49 network \u0e19\u0e35\u0e49\u0e40\u0e1b\u0e47\u0e19 external network \u0e40\u0e1b\u0e47\u0e19\u0e01\u0e32\u0e23\u0e1a\u0e2d\u0e01 Docker Compose \u0e27\u0e48\u0e32\u0e43\u0e2b\u0e49\u0e43\u0e0a\u0e49 network \u0e17\u0e35\u0e48\u0e2a\u0e23\u0e49\u0e32\u0e07\u0e14\u0e49\u0e27\u0e22 Docker \u0e44\u0e21\u0e48\u0e43\u0e0a\u0e48\u0e08\u0e32\u0e01 Docker Compose<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-Fira-Code\" style=\"font-size:.875rem;font-family:Code-Pro-Fira-Code,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span role=\"button\" tabindex=\"0\" style=\"color:#000000;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>networks:\n  frontend:\n    external: true<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M4.5 12.75l6 6 9-13.5\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M16.5 8.25V6a2.25 2.25 0 00-2.25-2.25H6A2.25 2.25 0 003.75 6v8.25A2.25 2.25 0 006 16.5h2.25m8.25-8.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-7.5A2.25 2.25 0 018.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 00-2.25 2.25v6\"><\/path><\/svg><\/span><pre class=\"shiki light-plus\" style=\"background-color: #FFFFFF\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #000000\">networks:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  frontend:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">    external: <\/span><span style=\"color: #0000FF\">true<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<p>\u0e14\u0e31\u0e07\u0e19\u0e31\u0e49\u0e19\u0e40\u0e23\u0e32\u0e08\u0e36\u0e07\u0e15\u0e49\u0e2d\u0e07\u0e2a\u0e23\u0e49\u0e32\u0e07 network \u0e19\u0e35\u0e49\u0e01\u0e48\u0e2d\u0e19\u0e17\u0e35\u0e48\u0e08\u0e30\u0e23\u0e31\u0e19 Docker Compose \u0e14\u0e49\u0e27\u0e22\u0e04\u0e33\u0e2a\u0e31\u0e48\u0e07 (\u0e43\u0e19\u0e01\u0e23\u0e13\u0e35\u0e17\u0e35\u0e48\u0e22\u0e31\u0e07\u0e44\u0e21\u0e48\u0e21\u0e35 network \u0e19\u0e35\u0e49\u0e2d\u0e22\u0e39\u0e48)<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-Fira-Code\" style=\"font-size:.875rem;font-family:Code-Pro-Fira-Code,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span role=\"button\" tabindex=\"0\" style=\"color:#000000;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>docker network create frontend<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M4.5 12.75l6 6 9-13.5\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M16.5 8.25V6a2.25 2.25 0 00-2.25-2.25H6A2.25 2.25 0 003.75 6v8.25A2.25 2.25 0 006 16.5h2.25m8.25-8.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-7.5A2.25 2.25 0 018.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 00-2.25 2.25v6\"><\/path><\/svg><\/span><pre class=\"shiki light-plus\" style=\"background-color: #FFFFFF\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #001080\">docker<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #001080\">network<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #001080\">create<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #001080\">frontend<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"deployment\">Deployment<\/h2>\n\n\n\n<p>\u0e40\u0e21\u0e37\u0e48\u0e2d\u0e15\u0e31\u0e49\u0e07\u0e04\u0e48\u0e32\u0e17\u0e38\u0e01\u0e2d\u0e22\u0e48\u0e32\u0e07\u0e40\u0e23\u0e35\u0e22\u0e1a\u0e23\u0e49\u0e2d\u0e22\u0e41\u0e25\u0e49\u0e27 \u0e43\u0e2b\u0e49\u0e21\u0e31\u0e48\u0e19\u0e43\u0e08\u0e27\u0e48\u0e32\u0e44\u0e1f\u0e25\u0e4c\u0e15\u0e48\u0e32\u0e07 \u0e46 \u0e2d\u0e22\u0e39\u0e48\u0e43\u0e19\u0e42\u0e1f\u0e25\u0e40\u0e14\u0e2d\u0e23\u0e4c\u0e17\u0e35\u0e48\u0e16\u0e39\u0e01\u0e15\u0e49\u0e2d\u0e07<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-Fira-Code\" style=\"font-size:.875rem;font-family:Code-Pro-Fira-Code,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span role=\"button\" tabindex=\"0\" style=\"color:#000000;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>MyProject\/\n\u251c\u2500\u2500 .env\n\u2514\u2500\u2500 docker-compose.yaml<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M4.5 12.75l6 6 9-13.5\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M16.5 8.25V6a2.25 2.25 0 00-2.25-2.25H6A2.25 2.25 0 003.75 6v8.25A2.25 2.25 0 006 16.5h2.25m8.25-8.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-7.5A2.25 2.25 0 018.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 00-2.25 2.25v6\"><\/path><\/svg><\/span><pre class=\"shiki light-plus\" style=\"background-color: #FFFFFF\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #001080\">MyProject<\/span><span style=\"color: #000000\">\/<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">\u251c\u2500\u2500 .<\/span><span style=\"color: #001080\">env<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">\u2514\u2500\u2500 <\/span><span style=\"color: #001080\">docker<\/span><span style=\"color: #000000\">-<\/span><span style=\"color: #001080\">compose<\/span><span style=\"color: #000000\">.<\/span><span style=\"color: #001080\">yaml<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<p>\u0e41\u0e25\u0e30\u0e17\u0e33\u0e01\u0e32\u0e23\u0e23\u0e31\u0e19 Docker Compose \u0e14\u0e49\u0e27\u0e22\u0e04\u0e33\u0e2a\u0e31\u0e48\u0e07<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-Fira-Code\" style=\"font-size:.875rem;font-family:Code-Pro-Fira-Code,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span role=\"button\" tabindex=\"0\" style=\"color:#000000;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>docker-compose up -d<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M4.5 12.75l6 6 9-13.5\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M16.5 8.25V6a2.25 2.25 0 00-2.25-2.25H6A2.25 2.25 0 003.75 6v8.25A2.25 2.25 0 006 16.5h2.25m8.25-8.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-7.5A2.25 2.25 0 018.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 00-2.25 2.25v6\"><\/path><\/svg><\/span><pre class=\"shiki light-plus\" style=\"background-color: #FFFFFF\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #001080\">docker<\/span><span style=\"color: #000000\">-<\/span><span style=\"color: #001080\">compose<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #001080\">up<\/span><span style=\"color: #000000\"> -<\/span><span style=\"color: #001080\">d<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<p>\u0e40\u0e21\u0e37\u0e48\u0e2d\u0e23\u0e31\u0e19\u0e40\u0e2a\u0e23\u0e47\u0e08\u0e41\u0e25\u0e49\u0e27 \u0e43\u0e2b\u0e49\u0e40\u0e02\u0e49\u0e32\u0e44\u0e1b\u0e17\u0e35\u0e48 URL \u0e02\u0e2d\u0e07 Web Application \u0e17\u0e35\u0e48\u0e01\u0e33\u0e2b\u0e19\u0e14\u0e44\u0e27\u0e49\u0e43\u0e19\u0e44\u0e1f\u0e25\u0e4c&nbsp;<code>.env<\/code>&nbsp;\u0e41\u0e25\u0e49\u0e27\u0e40\u0e23\u0e32\u0e08\u0e30\u0e40\u0e2b\u0e47\u0e19\u0e27\u0e48\u0e32 Web Application \u0e17\u0e33\u0e07\u0e32\u0e19\u0e44\u0e14\u0e49\u0e1b\u0e01\u0e15\u0e34<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"tls\">TLS<\/h2>\n\n\n\n<p>\u0e2a\u0e33\u0e2b\u0e23\u0e31\u0e1a\u0e01\u0e32\u0e23 deploy application \u0e43\u0e2b\u0e49\u0e2a\u0e32\u0e21\u0e32\u0e23\u0e16\u0e40\u0e02\u0e49\u0e32\u0e43\u0e0a\u0e49\u0e07\u0e32\u0e19\u0e1c\u0e48\u0e32\u0e19 HTTPS \u0e44\u0e14\u0e49 \u0e40\u0e23\u0e32\u0e08\u0e30\u0e15\u0e49\u0e2d\u0e07\u0e01\u0e33\u0e2b\u0e19\u0e14\u0e43\u0e2b\u0e49 application \u0e02\u0e2d\u0e07\u0e40\u0e23\u0e32\u0e40\u0e02\u0e49\u0e32\u0e16\u0e36\u0e07\u0e44\u0e14\u0e49\u0e1c\u0e48\u0e32\u0e19\u0e17\u0e32\u0e07&nbsp;<code>websecure<\/code>&nbsp;entrypoints \u0e02\u0e2d\u0e07 Traefik Proxy \u0e14\u0e31\u0e07\u0e19\u0e35\u0e49<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-Fira-Code\" style=\"font-size:.875rem;font-family:Code-Pro-Fira-Code,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span role=\"button\" tabindex=\"0\" style=\"color:#000000;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>labels:\n  - 'traefik.http.routers.${WEBSERVICE_PROJECT_NAME}.entrypoints=websecure'\n  - 'traefik.http.routers.${WEBSERVICE_PROJECT_NAME}.tls=true'<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M4.5 12.75l6 6 9-13.5\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M16.5 8.25V6a2.25 2.25 0 00-2.25-2.25H6A2.25 2.25 0 003.75 6v8.25A2.25 2.25 0 006 16.5h2.25m8.25-8.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-7.5A2.25 2.25 0 018.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 00-2.25 2.25v6\"><\/path><\/svg><\/span><pre class=\"shiki light-plus\" style=\"background-color: #FFFFFF\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #000000\">labels:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  - <\/span><span style=\"color: #A31515\">&#39;traefik.http.routers.${WEBSERVICE_PROJECT_NAME}.entrypoints=websecure&#39;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  - <\/span><span style=\"color: #A31515\">&#39;traefik.http.routers.${WEBSERVICE_PROJECT_NAME}.tls=true&#39;<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<p>\u0e0b\u0e36\u0e48\u0e07\u0e40\u0e14\u0e34\u0e21 entrypoints \u0e08\u0e30\u0e40\u0e1b\u0e47\u0e19&nbsp;<code>web<\/code>&nbsp;\u0e43\u0e2b\u0e49\u0e40\u0e23\u0e32\u0e40\u0e1b\u0e25\u0e35\u0e48\u0e22\u0e19\u0e40\u0e1b\u0e47\u0e19&nbsp;<code>websecure<\/code>&nbsp;\u0e08\u0e30\u0e17\u0e33\u0e43\u0e2b\u0e49 application \u0e40\u0e02\u0e49\u0e32\u0e44\u0e14\u0e49\u0e1c\u0e48\u0e32\u0e19 HTTPS \u0e40\u0e17\u0e48\u0e32\u0e19\u0e31\u0e49\u0e19<\/p>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<h5 class=\"wp-block-heading\">Note<\/h5>\n\n\n\n<p><\/p>\n\n\n\n<p>\u0e2b\u0e32\u0e01\u0e15\u0e49\u0e2d\u0e07\u0e01\u0e32\u0e23\u0e43\u0e2b\u0e49 application \u0e40\u0e02\u0e49\u0e32\u0e44\u0e14\u0e49\u0e17\u0e31\u0e49\u0e07 HTTP \u0e41\u0e25\u0e30 HTTPS \u0e43\u0e2b\u0e49\u0e43\u0e0a\u0e49&nbsp;<code>web,websecure<\/code>&nbsp;\u0e41\u0e17\u0e19<\/p>\n<\/blockquote>\n","protected":false},"featured_media":0,"parent":3463,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"nav_title":"","positive":"","negative":"","footnotes":""},"docs_category":[],"class_list":["post-3464","docs","type-docs","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/portal-atlasx.cdg.co.th\/home\/wp-json\/wp\/v2\/docs\/3464","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/portal-atlasx.cdg.co.th\/home\/wp-json\/wp\/v2\/docs"}],"about":[{"href":"https:\/\/portal-atlasx.cdg.co.th\/home\/wp-json\/wp\/v2\/types\/docs"}],"replies":[{"embeddable":true,"href":"https:\/\/portal-atlasx.cdg.co.th\/home\/wp-json\/wp\/v2\/comments?post=3464"}],"version-history":[{"count":1,"href":"https:\/\/portal-atlasx.cdg.co.th\/home\/wp-json\/wp\/v2\/docs\/3464\/revisions"}],"predecessor-version":[{"id":3465,"href":"https:\/\/portal-atlasx.cdg.co.th\/home\/wp-json\/wp\/v2\/docs\/3464\/revisions\/3465"}],"up":[{"embeddable":true,"href":"https:\/\/portal-atlasx.cdg.co.th\/home\/wp-json\/wp\/v2\/docs\/3463"}],"wp:attachment":[{"href":"https:\/\/portal-atlasx.cdg.co.th\/home\/wp-json\/wp\/v2\/media?parent=3464"}],"wp:term":[{"taxonomy":"docs_category","embeddable":true,"href":"https:\/\/portal-atlasx.cdg.co.th\/home\/wp-json\/wp\/v2\/docs_category?post=3464"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}