Error running multiple Open edX platforms on a single server

According to the documentation to run multiple platforms on a single server, it says that you have to declare the variables

TUTOR_ROOT
LOCAL_PROJECT_NAME
CADDY_HTTP_PORT
LMS_HOST
CMS_HOST

for which I have made 3 files with the variables for site01, site02, site03. which I load with source site0X.

I install the first site and even everything there is correct, but when installing the second platform, it stops all the containers and installs the second platform. At the end and check the running containers I see that there is only the last one that I installed.

If I reload the variables of the first platform and start the containers it starts to regenerate the containers to make the first platform again, killing the second one, with no chance of having two platforms running on the same server.

ubuntu@multi:~$ docker ps --all
CONTAINER ID   IMAGE                                   COMMAND                  CREATED        STATUS                    PORTS                                                           NAMES
af6c7b5ef3f4   portainer/portainer-ce:latest           "/portainer --bind=:…"   5 hours ago    Up 5 hours                8000/tcp, 9443/tcp, 0.0.0.0:9000->9000/tcp, :::9000->9000/tcp   focused_pascal
73ca870db21c   portainer/portainer-ce:latest           "/portainer --bind=:…"   5 hours ago    Exited (2) 5 hours ago                                                                    infallible_golick
d76917c51502   portainer/portainer-ce:latest           "/portainer --bind=:…"   5 hours ago    Exited (0) 5 hours ago                                                                    pensive_wozniak
5e6a9df14782   portainer/portainer-ce:latest           "/portainer --bind=:…"   5 hours ago    Exited (0) 5 hours ago                                                                    festive_rhodes
a83f0ceaedf8   overhangio/openedx:13.1.9               "docker-entrypoint.s…"   23 hours ago   Up 23 hours               8000/tcp                                                        tutor_local_cms-worker_1
5a243a8dda0d   overhangio/openedx:13.1.9               "docker-entrypoint.s…"   23 hours ago   Up 23 hours               8000/tcp                                                        tutor_local_cms_1
b2a322a8e9ee   overhangio/openedx:13.1.9               "docker-entrypoint.s…"   23 hours ago   Up 23 hours               8000/tcp                                                        tutor_local_lms-worker_1
ac769bdf1dbb   overhangio/openedx:13.1.9               "docker-entrypoint.s…"   23 hours ago   Up 23 hours               8000/tcp                                                        tutor_local_lms_1
c642079a7ed8   mongo:4.2.17                            "docker-entrypoint.s…"   23 hours ago   Up 23 hours               27017/tcp                                                       tutor_local_mongodb_1
6df154a6f547   redis:6.2.6                             "docker-entrypoint.s…"   23 hours ago   Up 23 hours               6379/tcp                                                        tutor_local_redis_1
17b6cfd14aad   elasticsearch:7.10.1                    "/tini -- /usr/local…"   23 hours ago   Up 23 hours               9200/tcp, 9300/tcp                                              tutor_local_elasticsearch_1
bd295c3e5d61   mysql:5.7.35                            "docker-entrypoint.s…"   23 hours ago   Up 23 hours               3306/tcp, 33060/tcp                                             tutor_local_mysql_1
c17513abb597   caddy:2.4.6                             "caddy run --config …"   23 hours ago   Up 23 hours               443/tcp, 0.0.0.0:80->80/tcp, :::80->80/tcp, 2019/tcp            tutor_local_caddy_1
e6324c473097   overhangio/openedx-mfe:13.0.2           "caddy run --config …"   23 hours ago   Up 23 hours               80/tcp, 443/tcp, 2019/tcp                                       tutor_local_mfe_1
2c6e3e8fd7e4   devture/exim-relay:4.95-r0-2            "/sbin/tini -- exim …"   23 hours ago   Up 23 hours               8025/tcp                                                        tutor_local_smtp_1
d204063259ee   overhangio/openedx-permissions:13.1.9   "setowner 1000 /open…"   23 hours ago   Exited (0) 23 hours ago                                                                   tutor_local_cms-permissions_1
c0e40b310da8   overhangio/openedx-permissions:13.1.9   "setowner 999 /var/l…"   23 hours ago   Exited (0) 23 hours ago                                                                   tutor_local_mysql-permissions_1
9647ec71d653   overhangio/openedx-permissions:13.1.9   "setowner 1000 /open…"   23 hours ago   Exited (0) 23 hours ago                                                                   tutor_local_lms-permissions_1
f0f044866de9   overhangio/openedx-permissions:13.1.9   "setowner 999 /data/…"   23 hours ago   Exited (0) 23 hours ago                                                                   tutor_local_mongodb-permissions_1
08d001b6c3c2   overhangio/openedx-permissions:13.1.9   "setowner 1000 /open…"   23 hours ago   Exited (0) 23 hours ago                                                                   tutor_local_redis-permissions_1
8f00385a8c42   overhangio/openedx-permissions:13.1.9   "setowner 1000 /usr/…"   23 hours ago   Exited (0) 23 hours ago                                                                   tutor_local_elasticsearch-permissions_1
ubuntu@multi:~$ tutor config printroot
/home/ubuntu/.local/share/sitio01
ubuntu@multi:~$

if i start a different site this happens

ubuntu@multi:~$ source site02
ubuntu@multi:~$
ubuntu@multi:~$
ubuntu@multi:~$
ubuntu@multi:~$ tutor local start -d
docker-compose -f /home/ubuntu/.local/share/sitio02/env/local/docker-compose.yml -f /home/ubuntu/.local/share/sitio02/env/local/docker-compose.prod.yml --project-name tutor_local up --remove-orphans --build -d
Building mfe
Step 1/104 : FROM docker.io/node:12-bullseye-slim AS base
 ---> 1b80f419aade
Step 2/104 : RUN apt update   && apt install -y git     gcc git libgl1 libxi6 make
 ---> Using cache
 ---> ee169a592928
Step 3/104 : RUN mkdir -p /openedx/app /openedx/env
 ---> Using cache
 ---> 31990ec89b8e
Step 4/104 : WORKDIR /openedx/app
 ---> Using cache
 ---> eeb6d2686be8
Step 5/104 : ENV PATH ./node_modules/.bin:${PATH}
 ---> Using cache
 ---> 6a62ce6088e3

Step 6/104 : FROM base AS i18n
 ---> 6a62ce6088e3
Step 7/104 : COPY ./i18n /openedx/i18n
 ---> Using cache
 ---> 1c7c42884af5
Step 8/104 : RUN chmod a+x /openedx/i18n/*.js
 ---> Using cache
 ---> 47de88c44d1f
Step 9/104 : RUN echo "copying i18n data"   && mkdir -p /openedx/i18n/account   && mkdir -p /openedx/i18n/gradebook   && mkdir -p /openedx/i18n/learning   && mkdir -p /openedx/i18n/profile   echo "done."
 ---> Using cache
 ---> ee7171f4415b

Step 10/104 : FROM base AS account-src
 ---> 6a62ce6088e3
Step 11/104 : RUN git clone https://github.com/edx/frontend-app-account --branch open-release/maple.2 --depth 1 .
 ---> Using cache
 ---> 8a8be0358c39
Step 12/104 : RUN stat /openedx/app/src/i18n/messages 2> /dev/null || (echo "missing messages folder" && mkdir -p /openedx/app/src/i18n/messages)
 ---> Using cache
 ---> 6d839d2b9363

Step 13/104 : FROM base AS account-i18n
 ---> 6a62ce6088e3
Step 14/104 : COPY --from=account-src /openedx/app/src/i18n/messages /openedx/app/src/i18n/messages
 ---> Using cache
 ---> c3e8ebdcb70a
Step 15/104 : COPY --from=i18n /openedx/i18n/account /openedx/i18n/account
 ---> Using cache
 ---> d78999e65c55
Step 16/104 : COPY --from=i18n /openedx/i18n/i18n-merge.js /openedx/i18n/i18n-merge.js
 ---> Using cache
 ---> 86b66e1841fc
Step 17/104 : RUN /openedx/i18n/i18n-merge.js /openedx/app/src/i18n/messages /openedx/i18n/account /openedx/app/src/i18n/messages
 ---> Using cache
 ---> 2b4f97c1f673

Step 18/104 : FROM base AS account-dev
 ---> 6a62ce6088e3
Step 19/104 : COPY --from=account-src /openedx/app/package.json /openedx/app/package.json
 ---> Using cache
 ---> 88d2b18235bf
Step 20/104 : COPY --from=account-src /openedx/app/package-lock.json /openedx/app/package-lock.json
 ---> Using cache
 ---> 9d7919b333e9
Step 21/104 : ARG NPM_REGISTRY=https://registry.npmjs.org/
 ---> Using cache
 ---> f400a4ac740c
Step 22/104 : RUN npm install --no-audit --no-fund --registry=$NPM_REGISTRY   && rm -rf ~/.npm
 ---> Using cache
 ---> 80f1b0aaa688
Step 23/104 : COPY --from=account-src /openedx/app /openedx/app
 ---> Using cache
 ---> 4d04c7e0460c
Step 24/104 : COPY --from=account-i18n /openedx/app/src/i18n/messages /openedx/app/src/i18n/messages
 ---> Using cache
 ---> 7a6a67fdf39e
Step 25/104 : ENV PUBLIC_PATH='/account/'
 ---> Using cache
 ---> 27e0d37cc9ec
Step 26/104 : EXPOSE 1997
 ---> Using cache
 ---> 9b7f7f794abe
Step 27/104 : CMD ["npm", "run", "start"]
 ---> Using cache
 ---> 3a337b0935ca

Step 28/104 : FROM account-dev AS account
 ---> 3a337b0935ca
Step 29/104 : COPY ./env/production /openedx/env/production
 ---> Using cache
 ---> cedaf50ca217
Step 30/104 : RUN touch /openedx/env/production.override   && echo "COACHING_ENABLED=''" >> /openedx/env/production.override   && echo "ENABLE_DEMOGRAPHICS_COLLECTION=''" >> /openedx/env/production.override   && echo "done setting production overrides"
 ---> Using cache
 ---> f08caabb4c5a
Step 31/104 : RUN bash -c "set -a && source /openedx/env/production && source /openedx/env/production.override && npm run build"
 ---> Using cache
 ---> 29ac19d073ac

Step 32/104 : FROM base AS gradebook-src
 ---> 6a62ce6088e3
Step 33/104 : RUN git clone https://github.com/edx/frontend-app-gradebook --branch open-release/maple.2 --depth 1 .
 ---> Using cache
 ---> f9ffb5bfbe89
Step 34/104 : RUN stat /openedx/app/src/i18n/messages 2> /dev/null || (echo "missing messages folder" && mkdir -p /openedx/app/src/i18n/messages)
 ---> Using cache
 ---> 63ffce59414e

Step 35/104 : FROM base AS gradebook-i18n
 ---> 6a62ce6088e3
Step 36/104 : COPY --from=gradebook-src /openedx/app/src/i18n/messages /openedx/app/src/i18n/messages
 ---> Using cache
 ---> 3c580debf1db
Step 37/104 : COPY --from=i18n /openedx/i18n/gradebook /openedx/i18n/gradebook
 ---> Using cache
 ---> 417a2e8b1bf2
Step 38/104 : COPY --from=i18n /openedx/i18n/i18n-merge.js /openedx/i18n/i18n-merge.js
 ---> Using cache
 ---> 31d4aeaf1f3f
Step 39/104 : RUN /openedx/i18n/i18n-merge.js /openedx/app/src/i18n/messages /openedx/i18n/gradebook /openedx/app/src/i18n/messages
 ---> Using cache
 ---> ecea5dbfb9c2

Step 40/104 : FROM base AS gradebook-dev
 ---> 6a62ce6088e3
Step 41/104 : COPY --from=gradebook-src /openedx/app/package.json /openedx/app/package.json
 ---> Using cache
 ---> 488dd647fcb7
Step 42/104 : COPY --from=gradebook-src /openedx/app/package-lock.json /openedx/app/package-lock.json
 ---> Using cache
 ---> 6a6da4db6dbc
Step 43/104 : ARG NPM_REGISTRY=https://registry.npmjs.org/
 ---> Using cache
 ---> c996856202f5
Step 44/104 : RUN npm install --no-audit --no-fund --registry=$NPM_REGISTRY   && rm -rf ~/.npm
 ---> Using cache
 ---> 929ad3d38b3e
Step 45/104 : COPY --from=gradebook-src /openedx/app /openedx/app
 ---> Using cache
 ---> ce647f7ed504
Step 46/104 : COPY --from=gradebook-i18n /openedx/app/src/i18n/messages /openedx/app/src/i18n/messages
 ---> Using cache
 ---> 6c38689b0b09
Step 47/104 : ENV PUBLIC_PATH='/gradebook/'
 ---> Using cache
 ---> 350339ae3614
Step 48/104 : EXPOSE 1994
 ---> Using cache
 ---> 7c1350e8d17d
Step 49/104 : CMD ["npm", "run", "start"]
 ---> Using cache
 ---> 3589206f1fc4

Step 50/104 : FROM gradebook-dev AS gradebook
 ---> 3589206f1fc4
Step 51/104 : COPY ./env/production /openedx/env/production
 ---> Using cache
 ---> 431fcb8dd16c
Step 52/104 : RUN touch /openedx/env/production.override   && echo "done setting production overrides"
 ---> Using cache
 ---> d80d31602610
Step 53/104 : RUN bash -c "set -a && source /openedx/env/production && source /openedx/env/production.override && npm run build"
 ---> Using cache
 ---> 8a65a547241d

Step 54/104 : FROM base AS learning-src
 ---> 6a62ce6088e3
Step 55/104 : RUN git clone https://github.com/edx/frontend-app-learning --branch open-release/maple.2 --depth 1 .
 ---> Using cache
 ---> 81b3e12ecf67
Step 56/104 : RUN stat /openedx/app/src/i18n/messages 2> /dev/null || (echo "missing messages folder" && mkdir -p /openedx/app/src/i18n/messages)
 ---> Using cache
 ---> a6f601667d15

Step 57/104 : FROM base AS learning-i18n
 ---> 6a62ce6088e3
Step 58/104 : COPY --from=learning-src /openedx/app/src/i18n/messages /openedx/app/src/i18n/messages
 ---> Using cache
 ---> 2bdc086b72d6
Step 59/104 : COPY --from=i18n /openedx/i18n/learning /openedx/i18n/learning
 ---> Using cache
 ---> 37bcadb793a4
Step 60/104 : COPY --from=i18n /openedx/i18n/i18n-merge.js /openedx/i18n/i18n-merge.js
 ---> Using cache
 ---> 309d32900d6f
Step 61/104 : RUN /openedx/i18n/i18n-merge.js /openedx/app/src/i18n/messages /openedx/i18n/learning /openedx/app/src/i18n/messages
 ---> Using cache
 ---> 2232759ebba9

Step 62/104 : FROM base AS learning-dev
 ---> 6a62ce6088e3
Step 63/104 : COPY --from=learning-src /openedx/app/package.json /openedx/app/package.json
 ---> Using cache
 ---> 2b50098c968a
Step 64/104 : COPY --from=learning-src /openedx/app/package-lock.json /openedx/app/package-lock.json
 ---> Using cache
 ---> 4171ade86126
Step 65/104 : ARG NPM_REGISTRY=https://registry.npmjs.org/
 ---> Using cache
 ---> 77725edebb8e
Step 66/104 : RUN npm install --no-audit --no-fund --registry=$NPM_REGISTRY   && rm -rf ~/.npm
 ---> Using cache
 ---> 65c5cfaf2ab1
Step 67/104 : COPY --from=learning-src /openedx/app /openedx/app
 ---> Using cache
 ---> badc2ee1e05b
Step 68/104 : COPY --from=learning-i18n /openedx/app/src/i18n/messages /openedx/app/src/i18n/messages
 ---> Using cache
 ---> 5f84b10a4607
Step 69/104 : ENV PUBLIC_PATH='/learning/'
 ---> Using cache
 ---> 66a60c976c45
Step 70/104 : EXPOSE 2000
 ---> Using cache
 ---> 935e8894f435
Step 71/104 : CMD ["npm", "run", "start"]
 ---> Using cache
 ---> da513b5795e5

Step 72/104 : FROM learning-dev AS learning
 ---> da513b5795e5
Step 73/104 : COPY ./env/production /openedx/env/production
 ---> Using cache
 ---> b3adad7d59b2
Step 74/104 : RUN touch /openedx/env/production.override   && echo "done setting production overrides"
 ---> Using cache
 ---> e5a38b76be0c
Step 75/104 : RUN bash -c "set -a && source /openedx/env/production && source /openedx/env/production.override && npm run build"
 ---> Using cache
 ---> 029f178e58b2

Step 76/104 : FROM base AS profile-src
 ---> 6a62ce6088e3
Step 77/104 : RUN git clone https://github.com/edx/frontend-app-profile --branch open-release/maple.2 --depth 1 .
 ---> Using cache
 ---> 7a4f7fd33fac
Step 78/104 : RUN stat /openedx/app/src/i18n/messages 2> /dev/null || (echo "missing messages folder" && mkdir -p /openedx/app/src/i18n/messages)
 ---> Using cache
 ---> 56b2ed4ee21e

Step 79/104 : FROM base AS profile-i18n
 ---> 6a62ce6088e3
Step 80/104 : COPY --from=profile-src /openedx/app/src/i18n/messages /openedx/app/src/i18n/messages
 ---> Using cache
 ---> f9e6d177cf2a
Step 81/104 : COPY --from=i18n /openedx/i18n/profile /openedx/i18n/profile
 ---> Using cache
 ---> fdf2944f5fa0
Step 82/104 : COPY --from=i18n /openedx/i18n/i18n-merge.js /openedx/i18n/i18n-merge.js
 ---> Using cache
 ---> cad1467cbd03
Step 83/104 : RUN /openedx/i18n/i18n-merge.js /openedx/app/src/i18n/messages /openedx/i18n/profile /openedx/app/src/i18n/messages
 ---> Using cache
 ---> c6fb58aff521

Step 84/104 : FROM base AS profile-dev
 ---> 6a62ce6088e3
Step 85/104 : COPY --from=profile-src /openedx/app/package.json /openedx/app/package.json
 ---> Using cache
 ---> 553d36f40966
Step 86/104 : COPY --from=profile-src /openedx/app/package-lock.json /openedx/app/package-lock.json
 ---> Using cache
 ---> 70e10a59229b
Step 87/104 : ARG NPM_REGISTRY=https://registry.npmjs.org/
 ---> Using cache
 ---> 876654875874
Step 88/104 : RUN npm install --no-audit --no-fund --registry=$NPM_REGISTRY   && rm -rf ~/.npm
 ---> Using cache
 ---> cbabaa408925
Step 89/104 : COPY --from=profile-src /openedx/app /openedx/app
 ---> Using cache
 ---> 1bfb158683fe
Step 90/104 : COPY --from=profile-i18n /openedx/app/src/i18n/messages /openedx/app/src/i18n/messages
 ---> Using cache
 ---> 2a6df3150635
Step 91/104 : ENV PUBLIC_PATH='/profile/'
 ---> Using cache
 ---> a5e7317a8b48
Step 92/104 : EXPOSE 1995
 ---> Using cache
 ---> c6bdcb8cc1d8
Step 93/104 : CMD ["npm", "run", "start"]
 ---> Using cache
 ---> efb3e3d800a5

Step 94/104 : FROM profile-dev AS profile
 ---> efb3e3d800a5
Step 95/104 : COPY ./env/production /openedx/env/production
 ---> Using cache
 ---> 179d8fdc0563
Step 96/104 : RUN touch /openedx/env/production.override   && echo "done setting production overrides"
 ---> Using cache
 ---> fbfbde0a0e96
Step 97/104 : RUN bash -c "set -a && source /openedx/env/production && source /openedx/env/production.override && npm run build"
 ---> Using cache
 ---> e203b4de46bf

Step 98/104 : FROM docker.io/caddy:2.4.6 as production
 ---> 1ace180df3e6
Step 99/104 : RUN mkdir -p /openedx/dist
 ---> Using cache
 ---> 44c15c13a9bf
Step 100/104 : COPY --from=account /openedx/app/dist /openedx/dist/account
 ---> Using cache
 ---> 70e91694c8c6
Step 101/104 : COPY --from=gradebook /openedx/app/dist /openedx/dist/gradebook
 ---> Using cache
 ---> b4c3260cd52b
Step 102/104 : COPY --from=learning /openedx/app/dist /openedx/dist/learning
 ---> Using cache
 ---> 33d12ce1df58
Step 103/104 : COPY --from=profile /openedx/app/dist /openedx/dist/profile
 ---> Using cache
 ---> 0cf100b6f741
Step 104/104 : COPY ./Caddyfile /etc/caddy/Caddyfile
 ---> Using cache
 ---> caa56f40a808

Successfully built caa56f40a808
Successfully tagged overhangio/openedx-mfe:13.0.2
Recreating tutor_local_mongodb-permissions_1       ... done
Recreating tutor_local_cms-permissions_1           ... done
Recreating tutor_local_smtp_1                      ... done
Recreating tutor_local_redis-permissions_1         ... done
Recreating tutor_local_elasticsearch-permissions_1 ... done
Recreating tutor_local_lms-permissions_1           ... done
Recreating tutor_local_mysql-permissions_1         ... done
Recreating tutor_local_caddy_1                     ... done
Recreating tutor_local_mfe_1                       ... done
Recreating tutor_local_mysql_1                     ... done
Recreating tutor_local_mongodb_1                   ... done
Recreating tutor_local_elasticsearch_1             ... done
Recreating tutor_local_redis_1                     ... done
Recreating tutor_local_lms_1                       ... done
Recreating tutor_local_cms_1                       ... done
Recreating tutor_local_lms-worker_1                ... done
Recreating tutor_local_cms-worker_1                ... done

ubuntu@multi:~$
ubuntu@multi:~$ tutor config  print
printroot   printvalue
ubuntu@multi:~$ tutor config  printroot
/home/ubuntu/.local/share/sitio02
ubuntu@multi:~$

So what do I have to do so that the two platforms can run at the same time.

The sites file has these variables:

ubuntu@multi:~$ cat site01
export TUTOR_ROOT=/home/ubuntu/.local/share/sitio01
export LOCAL_PROJECT_NAME=Sitio01
export CADDY_HTTP_PORT=81
export LMS_HOST=sitio01.lan
export CMS_HOST=studio.sitio01.lan
export ENABLE_WEB_PROXY=false
ubuntu@multi:~$ cat site02
export TUTOR_ROOT=/home/ubuntu/.local/share/sitio02
export LOCAL_PROJECT_NAME=Sitio02
export CADDY_HTTP_PORT=82
export LMS_HOST=sitio02.lan
export CMS_HOST=studio.sitio02.lan
ENABLE_WEB_PROXY=false
ubuntu@multi:~$

I believe TUTOR_ROOT should be defined in env, and the rest options like LOCAL_PROJECT_NAME etc should be defined in the file config.yml in your TUTOR_ROOT directory

1 Like

Hi,

In my environment variable files if I have both the TUTOR_ROOT variable and the LOCAL_PROJECT_NAME variable set.

In fact, I have two folders, where the information of each site is stored, what is not clear to me is how docker takes the LOCAL_PROJECT_NAME variable, to separate the containers of each project.

ubuntu@multi:~$ cat site01
export TUTOR_ROOT=/home/ubuntu/.local/share/sitio01
export LOCAL_PROJECT_NAME=Sitio01
export CADDY_HTTP_PORT=81
export LMS_HOST=sitio01.lan
export CMS_HOST=studio.sitio01.lan
export ENABLE_WEB_PROXY=false
ubuntu@multi:~$ cat site02
export TUTOR_ROOT=/home/ubuntu/.local/share/sitio02
export LOCAL_PROJECT_NAME=Sitio02
export CADDY_HTTP_PORT=82
export LMS_HOST=sitio02.lan
export CMS_HOST=studio.sitio02.lan
ENABLE_WEB_PROXY=false
ubuntu@multi:~$
ubuntu@multi:~/.local/share$ ls -al
total 16
drwxrwxr-x 4 ubuntu ubuntu 4096 Apr  7 21:23 .
drwxrwxr-x 3 ubuntu ubuntu 4096 Apr  7 19:34 ..
drwxrwxr-x 4 ubuntu ubuntu 4096 Apr 14 18:17 sitio01
drwxrwxr-x 4 ubuntu ubuntu 4096 Apr  7 21:32 sitio02

Hi, I’ve mentioned clearly that

the rest options like LOCAL_PROJECT_NAME etc should be defined in the file config.yml in your TUTOR_ROOT directory

Have you seen that?

Greetings,

Sorry, I had not understood you correctly, I checked the config.yml file and indeed the options were not there, so I added them with the command:

tutor config save --set LOCAL_PROJECT_NAME=Sitio01
tutor config save --set ENABLE_WEB_PROXY=false
tutor config save --set CADDY_HTTP_PORT=81

The sites began to run through different ports, now I only have to configure the proxy so that it does not use ports

1 Like