From cbf78fc200e044eb8d0caf35f90d13178bed0a53 Mon Sep 17 00:00:00 2001 From: erikfva Date: Sat, 24 Jun 2023 21:25:41 -0400 Subject: [PATCH 01/25] add docker --- Dockerfile | 12 ++++++++++++ docker-compose.yml | 24 ++++++++++++++++++++++++ 2 files changed, 36 insertions(+) create mode 100644 docker-compose.yml diff --git a/Dockerfile b/Dockerfile index 50a3794b..7f4381f9 100644 --- a/Dockerfile +++ b/Dockerfile @@ -41,6 +41,18 @@ RUN \ /var/lib/apt/lists/* \ /var/tmp/* +RUN apt-get update +RUN apt-get install ca-certificates curl gnupg +RUN install -m 0755 -d /etc/apt/keyrings +RUN curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg +RUN chmod a+r /etc/apt/keyrings/docker.gpg +RUN echo \ + "deb [arch="$(dpkg --print-architecture)" signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \ + "$(. /etc/os-release && echo "$VERSION_CODENAME")" stable" | \ + tee /etc/apt/sources.list.d/docker.list > /dev/null +RUN apt-get update +RUN apt-get -y install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin + # add local files COPY /root / diff --git a/docker-compose.yml b/docker-compose.yml new file mode 100644 index 00000000..e5e71b46 --- /dev/null +++ b/docker-compose.yml @@ -0,0 +1,24 @@ +version: "2.1" +services: + code-server: + build: + context: ./ + dockerfile: Dockerfile + # image: lscr.io/linuxserver/code-server:latest + image: code-server + container_name: code-server + environment: + - PUID=1000 + - PGID=1000 + - TZ=Etc/UTC + - PASSWORD=password #optional + - HASHED_PASSWORD= #optional + - SUDO_PASSWORD=password #optional + - SUDO_PASSWORD_HASH= #optional + - PROXY_DOMAIN=code-server.my.domain #optional + - DEFAULT_WORKSPACE=/config/workspace #optional + volumes: + - /path/to/appdata/config:/config + - /var/run/docker.sock:/var/run/docker.sock + ports: + - 8443:8443 \ No newline at end of file From 551f931494ca46720295fec1bb1f536894d3442d Mon Sep 17 00:00:00 2001 From: Erik Vargas Date: Sun, 25 Jun 2023 23:00:30 -0400 Subject: [PATCH 02/25] add nodejs --- Dockerfile | 2 ++ docker-compose.yml | 3 +-- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/Dockerfile b/Dockerfile index 7f4381f9..a1626cf6 100644 --- a/Dockerfile +++ b/Dockerfile @@ -53,6 +53,8 @@ RUN echo \ RUN apt-get update RUN apt-get -y install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin +RUN apt-get -y install nodejs npm + # add local files COPY /root / diff --git a/docker-compose.yml b/docker-compose.yml index e5e71b46..07585abc 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -5,7 +5,6 @@ services: context: ./ dockerfile: Dockerfile # image: lscr.io/linuxserver/code-server:latest - image: code-server container_name: code-server environment: - PUID=1000 @@ -18,7 +17,7 @@ services: - PROXY_DOMAIN=code-server.my.domain #optional - DEFAULT_WORKSPACE=/config/workspace #optional volumes: - - /path/to/appdata/config:/config + # - /path/to/appdata/config:/config - /var/run/docker.sock:/var/run/docker.sock ports: - 8443:8443 \ No newline at end of file From eb4f879b9a2a0c323d7c7587136b7ef27548a881 Mon Sep 17 00:00:00 2001 From: Erik Vargas Date: Fri, 14 Jul 2023 00:12:30 -0400 Subject: [PATCH 03/25] add S3 volumen --- .gitignore | 1 + Dockerfile | 14 +++++++++++++- docker-compose.yml | 10 ++++++++++ root/etc/s6-overlay/s6-rc.d/init-code-server/run | 8 ++++++++ 4 files changed, 32 insertions(+), 1 deletion(-) diff --git a/.gitignore b/.gitignore index 6e8ad977..5df90450 100644 --- a/.gitignore +++ b/.gitignore @@ -42,3 +42,4 @@ Network Trash Folder Temporary Items .apdisk .jenkins-external +.env diff --git a/Dockerfile b/Dockerfile index a1626cf6..c4862598 100644 --- a/Dockerfile +++ b/Dockerfile @@ -10,6 +10,10 @@ LABEL maintainer="aptalca" # environment settings ARG DEBIAN_FRONTEND="noninteractive" ENV HOME="/config" +ENV S3_ACCESS_KEY_ID= +ENV S3_SECRET_ACCESS_KEY= +ENV S3_BUCKET= +ENV S3_ENDPOINT= RUN \ echo "**** install runtime dependencies ****" && \ @@ -53,10 +57,18 @@ RUN echo \ RUN apt-get update RUN apt-get -y install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin -RUN apt-get -y install nodejs npm +# install nodejs latest version +RUN curl -fsSL https://deb.nodesource.com/setup_16.x | sudo -E bash - +RUN apt-get install -y nodejs +RUN node --version +RUN npm --version # add local files COPY /root / +RUN sudo apt install -y s3fs +# RUN echo 7004B98DEED21FB0A63A:n2oYUDMugcOigbKSj2NyR4deCWh1uk2FBNb6Gjq7 > ${HOME}/.passwd-s3fs +# RUN chmod 600 ${HOME}/.passwd-s3fs + # ports and volumes EXPOSE 8443 diff --git a/docker-compose.yml b/docker-compose.yml index 07585abc..d9a9ccc5 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -1,6 +1,7 @@ version: "2.1" services: code-server: + privileged: true build: context: ./ dockerfile: Dockerfile @@ -16,6 +17,15 @@ services: - SUDO_PASSWORD_HASH= #optional - PROXY_DOMAIN=code-server.my.domain #optional - DEFAULT_WORKSPACE=/config/workspace #optional + - S3_ACCESS_KEY_ID=${S3_ACCESS_KEY_ID} + - S3_SECRET_ACCESS_KEY=${S3_SECRET_ACCESS_KEY} + - S3_BUCKET=code-server + - S3_ENDPOINT=https://s3.filebase.com + devices: + - "/dev/fuse" + security_opt: + # - apparmor:unconfined + - "apparmor=unconfined" volumes: # - /path/to/appdata/config:/config - /var/run/docker.sock:/var/run/docker.sock diff --git a/root/etc/s6-overlay/s6-rc.d/init-code-server/run b/root/etc/s6-overlay/s6-rc.d/init-code-server/run index d93a4d26..d19dc949 100755 --- a/root/etc/s6-overlay/s6-rc.d/init-code-server/run +++ b/root/etc/s6-overlay/s6-rc.d/init-code-server/run @@ -29,3 +29,11 @@ chmod 700 /config/.ssh if [ -n "$(ls -A /config/.ssh)" ]; then chmod 600 /config/.ssh/* fi + +# echo $S3_ACCESS_KEY_ID:$S3_SECRET_ACCESS_KEY > /etc/passwd-s3fs +# chmod 600 /etc/passwd-s3fs + +echo $S3_ACCESS_KEY_ID:$S3_SECRET_ACCESS_KEY > ${HOME}/.passwd-s3fs +chmod 600 ${HOME}/.passwd-s3fs +mkdir /mnt/s3 +s3fs ${S3_BUCKET} /mnt/s3 -o passwd_file=${HOME}/.passwd-s3fs -o url=${S3_ENDPOINT} -o use_path_request_style -o uid=1000 -o gid=1000 -o umask=0002 -o allow_other -o mp_umask=0002 -o multireq_max=5 -o use_cache=/tmp -o nonempty -o use_xattr -o enable_noobj_cache -o parallel_count=10 #-o dbglevel=info -o curldbg From f41c6e7f8b759d0e66f5b452bc7d3d399d0f1e5b Mon Sep 17 00:00:00 2001 From: "Erik F. Vargas Agreda" Date: Sat, 22 Jul 2023 17:33:01 +0000 Subject: [PATCH 04/25] add yarn --- Dockerfile | 5 ++--- PUSH_DOCKER.md | 4 ++++ 2 files changed, 6 insertions(+), 3 deletions(-) create mode 100644 PUSH_DOCKER.md diff --git a/Dockerfile b/Dockerfile index c4862598..1346b361 100644 --- a/Dockerfile +++ b/Dockerfile @@ -46,7 +46,7 @@ RUN \ /var/tmp/* RUN apt-get update -RUN apt-get install ca-certificates curl gnupg +RUN apt-get install -y ca-certificates curl gnupg RUN install -m 0755 -d /etc/apt/keyrings RUN curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg RUN chmod a+r /etc/apt/keyrings/docker.gpg @@ -62,13 +62,12 @@ RUN curl -fsSL https://deb.nodesource.com/setup_16.x | sudo -E bash - RUN apt-get install -y nodejs RUN node --version RUN npm --version +RUN npm install --yes --global yarn # add local files COPY /root / RUN sudo apt install -y s3fs -# RUN echo 7004B98DEED21FB0A63A:n2oYUDMugcOigbKSj2NyR4deCWh1uk2FBNb6Gjq7 > ${HOME}/.passwd-s3fs -# RUN chmod 600 ${HOME}/.passwd-s3fs # ports and volumes EXPOSE 8443 diff --git a/PUSH_DOCKER.md b/PUSH_DOCKER.md new file mode 100644 index 00000000..412eff3a --- /dev/null +++ b/PUSH_DOCKER.md @@ -0,0 +1,4 @@ +# Push image to the Docker registry +docker build -t erikvargas/code-server . +docker login -u erikvargas +docker push erikvargas/code-server From e6dbccf1d0c0bc26310f7264dc6babba06495006 Mon Sep 17 00:00:00 2001 From: erikfva Date: Sat, 21 Oct 2023 04:21:15 +0000 Subject: [PATCH 05/25] add SSH file --- root/etc/s6-overlay/s6-rc.d/init-code-server/run | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/root/etc/s6-overlay/s6-rc.d/init-code-server/run b/root/etc/s6-overlay/s6-rc.d/init-code-server/run index d19dc949..828f696e 100755 --- a/root/etc/s6-overlay/s6-rc.d/init-code-server/run +++ b/root/etc/s6-overlay/s6-rc.d/init-code-server/run @@ -37,3 +37,9 @@ echo $S3_ACCESS_KEY_ID:$S3_SECRET_ACCESS_KEY > ${HOME}/.passwd-s3fs chmod 600 ${HOME}/.passwd-s3fs mkdir /mnt/s3 s3fs ${S3_BUCKET} /mnt/s3 -o passwd_file=${HOME}/.passwd-s3fs -o url=${S3_ENDPOINT} -o use_path_request_style -o uid=1000 -o gid=1000 -o umask=0002 -o allow_other -o mp_umask=0002 -o multireq_max=5 -o use_cache=/tmp -o nonempty -o use_xattr -o enable_noobj_cache -o parallel_count=10 #-o dbglevel=info -o curldbg + +# add SSH file +eval "$(ssh-agent -s)" +cp /mnt/s3/.ssh/id_ed25519 ~/.ssh/ +chmod 600 ~/.ssh/id_ed25519 +ssh-add ~/.ssh/id_ed25519 From 07c35955a10586e6194cdebd455a236b832171a2 Mon Sep 17 00:00:00 2001 From: Erik Vargas Date: Sun, 22 Oct 2023 20:10:23 -0400 Subject: [PATCH 06/25] add ssh key --- docker-compose.yml | 1 + .../s6-overlay/s6-rc.d/init-code-server/run | 25 ++++++++++++++++--- 2 files changed, 22 insertions(+), 4 deletions(-) diff --git a/docker-compose.yml b/docker-compose.yml index d9a9ccc5..99f5ad45 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -28,6 +28,7 @@ services: - "apparmor=unconfined" volumes: # - /path/to/appdata/config:/config + # - ./root/etc/s6-overlay/s6-rc.d/init-code-server/run:/etc/s6-overlay/s6-rc.d/init-code-server/run - /var/run/docker.sock:/var/run/docker.sock ports: - 8443:8443 \ No newline at end of file diff --git a/root/etc/s6-overlay/s6-rc.d/init-code-server/run b/root/etc/s6-overlay/s6-rc.d/init-code-server/run index 828f696e..3d6ac578 100755 --- a/root/etc/s6-overlay/s6-rc.d/init-code-server/run +++ b/root/etc/s6-overlay/s6-rc.d/init-code-server/run @@ -39,7 +39,24 @@ mkdir /mnt/s3 s3fs ${S3_BUCKET} /mnt/s3 -o passwd_file=${HOME}/.passwd-s3fs -o url=${S3_ENDPOINT} -o use_path_request_style -o uid=1000 -o gid=1000 -o umask=0002 -o allow_other -o mp_umask=0002 -o multireq_max=5 -o use_cache=/tmp -o nonempty -o use_xattr -o enable_noobj_cache -o parallel_count=10 #-o dbglevel=info -o curldbg # add SSH file -eval "$(ssh-agent -s)" -cp /mnt/s3/.ssh/id_ed25519 ~/.ssh/ -chmod 600 ~/.ssh/id_ed25519 -ssh-add ~/.ssh/id_ed25519 + +read_count=3 +interval_time=5 +for((i=1;i<=$read_count;i++)) +do + if [ -f "$ssh_file" ]; then + echo "ssh file exist ***" + # eval "$(ssh-agent -s)" + cp /mnt/s3/.ssh/id_ed25519 /config/.ssh/ + chmod 600 /config/.ssh/id_ed25519 + # cat /config/.ssh/id_ed25519 | tr -d '\r' | ssh-add - > /dev/null + # ssh-keyscan github.com >> /config/.ssh/known_hosts + # ssh-add /config/.ssh/id_ed25519 + # ssh-keyscan -t rsa github.com >> /config/.ssh/known_hosts + # ssh -T git@github.com + break + else + echo "ssh file not exist, wait $interval_time seconds" + sleep $interval_time + fi +done From dd9f817c9239a3ea5a2bf7c2bdf223c26f876046 Mon Sep 17 00:00:00 2001 From: Erik Vargas Date: Sun, 29 Oct 2023 01:11:33 -0400 Subject: [PATCH 07/25] update ssh config --- docker-compose.yml | 2 +- root/etc/s6-overlay/s6-rc.d/init-code-server/run | 8 +++++++- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/docker-compose.yml b/docker-compose.yml index 99f5ad45..fa222db9 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -28,7 +28,7 @@ services: - "apparmor=unconfined" volumes: # - /path/to/appdata/config:/config - # - ./root/etc/s6-overlay/s6-rc.d/init-code-server/run:/etc/s6-overlay/s6-rc.d/init-code-server/run + - ./root/etc/s6-overlay/s6-rc.d/init-code-server/run:/etc/s6-overlay/s6-rc.d/init-code-server/run - /var/run/docker.sock:/var/run/docker.sock ports: - 8443:8443 \ No newline at end of file diff --git a/root/etc/s6-overlay/s6-rc.d/init-code-server/run b/root/etc/s6-overlay/s6-rc.d/init-code-server/run index 3d6ac578..fa352992 100755 --- a/root/etc/s6-overlay/s6-rc.d/init-code-server/run +++ b/root/etc/s6-overlay/s6-rc.d/init-code-server/run @@ -42,13 +42,19 @@ s3fs ${S3_BUCKET} /mnt/s3 -o passwd_file=${HOME}/.passwd-s3fs -o url=${S3_ENDPOI read_count=3 interval_time=5 +ssh_file="/mnt/s3/.ssh/id_ed25519" for((i=1;i<=$read_count;i++)) do if [ -f "$ssh_file" ]; then echo "ssh file exist ***" # eval "$(ssh-agent -s)" - cp /mnt/s3/.ssh/id_ed25519 /config/.ssh/ + cp $ssh_file /config/.ssh/ + chown abc:abc /config/.ssh chmod 600 /config/.ssh/id_ed25519 + # ssh-keyscan -t rsa github.com >> ~/.ssh/known_hosts + # ssh-add /config/.ssh/id_ed25519 + # ssh -T git@github.com + # cat /config/.ssh/id_ed25519 | tr -d '\r' | ssh-add - > /dev/null # ssh-keyscan github.com >> /config/.ssh/known_hosts # ssh-add /config/.ssh/id_ed25519 From fbab2a3aed3868c869902c95f36cee6cf62d689e Mon Sep 17 00:00:00 2001 From: Erik Vargas Date: Tue, 31 Oct 2023 01:09:05 -0400 Subject: [PATCH 08/25] run as root --- docker-compose.yml | 2 ++ root/etc/s6-overlay/s6-rc.d/svc-code-server/run | 2 +- 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/docker-compose.yml b/docker-compose.yml index fa222db9..469b10d1 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -29,6 +29,8 @@ services: volumes: # - /path/to/appdata/config:/config - ./root/etc/s6-overlay/s6-rc.d/init-code-server/run:/etc/s6-overlay/s6-rc.d/init-code-server/run + - ./root/usr/local/bin/install-extension:/usr/local/bin/install-extension + - ./root/etc/s6-overlay/s6-rc.d/svc-code-server/run:/etc/s6-overlay/s6-rc.d/svc-code-server/run - /var/run/docker.sock:/var/run/docker.sock ports: - 8443:8443 \ No newline at end of file diff --git a/root/etc/s6-overlay/s6-rc.d/svc-code-server/run b/root/etc/s6-overlay/s6-rc.d/svc-code-server/run index 373dc0af..488d4949 100755 --- a/root/etc/s6-overlay/s6-rc.d/svc-code-server/run +++ b/root/etc/s6-overlay/s6-rc.d/svc-code-server/run @@ -15,7 +15,7 @@ fi exec \ s6-notifyoncheck -d -n 300 -w 1000 -c "nc -z 127.0.0.1 8443" \ - s6-setuidgid abc \ + s6-setuidgid root \ /app/code-server/bin/code-server \ --bind-addr 0.0.0.0:8443 \ --user-data-dir /config/data \ From eab1e545242f8b8798340bcfbdf6121f1307f45e Mon Sep 17 00:00:00 2001 From: Erik Vargas Date: Tue, 31 Oct 2023 19:37:25 -0400 Subject: [PATCH 09/25] add vscode extensions --- Dockerfile | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/Dockerfile b/Dockerfile index 1346b361..df20edf7 100644 --- a/Dockerfile +++ b/Dockerfile @@ -64,6 +64,16 @@ RUN node --version RUN npm --version RUN npm install --yes --global yarn +# install extensions +RUN /app/code-server/bin/code-server --extensions-dir ~/extensions --install-extension ms-azuretools.vscode-docker +RUN /app/code-server/bin/code-server --extensions-dir ~/extensions --install-extension IronGeek.vscode-env +RUN /app/code-server/bin/code-server --extensions-dir ~/extensions --install-extension esbenp.prettier-vscode +RUN /app/code-server/bin/code-server --extensions-dir ~/extensions --install-extension redhat.vscode-yaml +RUN /app/code-server/bin/code-server --extensions-dir ~/extensions --install-extension Vue.volar +RUN /app/code-server/bin/code-server --extensions-dir ~/extensions --install-extension johnsoncodehk.vscode-typescript-vue-plugin +RUN /app/code-server/bin/code-server --extensions-dir ~/extensions --install-extension nick-rudenko.back-n-forth +RUN /app/code-server/bin/code-server --extensions-dir ~/extensions --install-extension humao.rest-client + # add local files COPY /root / From 365f82d170b4725b818833e582ae2ccc9300073d Mon Sep 17 00:00:00 2001 From: Erik Vargas Date: Wed, 1 Nov 2023 01:29:59 -0400 Subject: [PATCH 10/25] add extensions --- Dockerfile | 21 ++++++++++--------- .../s6-overlay/s6-rc.d/init-code-server/run | 3 +++ 2 files changed, 14 insertions(+), 10 deletions(-) diff --git a/Dockerfile b/Dockerfile index df20edf7..494f6526 100644 --- a/Dockerfile +++ b/Dockerfile @@ -64,20 +64,21 @@ RUN node --version RUN npm --version RUN npm install --yes --global yarn -# install extensions -RUN /app/code-server/bin/code-server --extensions-dir ~/extensions --install-extension ms-azuretools.vscode-docker -RUN /app/code-server/bin/code-server --extensions-dir ~/extensions --install-extension IronGeek.vscode-env -RUN /app/code-server/bin/code-server --extensions-dir ~/extensions --install-extension esbenp.prettier-vscode -RUN /app/code-server/bin/code-server --extensions-dir ~/extensions --install-extension redhat.vscode-yaml -RUN /app/code-server/bin/code-server --extensions-dir ~/extensions --install-extension Vue.volar -RUN /app/code-server/bin/code-server --extensions-dir ~/extensions --install-extension johnsoncodehk.vscode-typescript-vue-plugin -RUN /app/code-server/bin/code-server --extensions-dir ~/extensions --install-extension nick-rudenko.back-n-forth -RUN /app/code-server/bin/code-server --extensions-dir ~/extensions --install-extension humao.rest-client - # add local files COPY /root / RUN sudo apt install -y s3fs +# install extensions +RUN mkdir -p /temp/config/extensions +RUN /app/code-server/bin/code-server --extensions-dir /temp/config/extensions --install-extension ms-azuretools.vscode-docker +RUN /app/code-server/bin/code-server --extensions-dir /temp/config/extensions --install-extension IronGeek.vscode-env +RUN /app/code-server/bin/code-server --extensions-dir /temp/config/extensions --install-extension esbenp.prettier-vscode +RUN /app/code-server/bin/code-server --extensions-dir /temp/config/extensions --install-extension redhat.vscode-yaml +RUN /app/code-server/bin/code-server --extensions-dir /temp/config/extensions --install-extension Vue.volar +RUN /app/code-server/bin/code-server --extensions-dir /temp/config/extensions --install-extension johnsoncodehk.vscode-typescript-vue-plugin +RUN /app/code-server/bin/code-server --extensions-dir /temp/config/extensions --install-extension nick-rudenko.back-n-forth +RUN /app/code-server/bin/code-server --extensions-dir /temp/config/extensions --install-extension humao.rest-client + # ports and volumes EXPOSE 8443 diff --git a/root/etc/s6-overlay/s6-rc.d/init-code-server/run b/root/etc/s6-overlay/s6-rc.d/init-code-server/run index fa352992..139c7df4 100755 --- a/root/etc/s6-overlay/s6-rc.d/init-code-server/run +++ b/root/etc/s6-overlay/s6-rc.d/init-code-server/run @@ -66,3 +66,6 @@ do sleep $interval_time fi done +# echo "installing extensions***" +# /app/code-server/bin/code-server --extensions-dir /config/extensions --install-extension IronGeek.vscode-env +mv -v /temp/config/extensions/* /config/extensions/ From 41915367b329cfbe2b798c72f4842ba8950bdece Mon Sep 17 00:00:00 2001 From: Erik Vargas Date: Wed, 8 Nov 2023 23:11:08 -0400 Subject: [PATCH 11/25] add s3 folder to workspace --- .env.example | 4 ++ docker-compose.yml | 3 + .../s6-overlay/s6-rc.d/init-code-server/run | 67 ++++++++++--------- .../s6-overlay/s6-rc.d/svc-code-server/run | 10 ++- 4 files changed, 53 insertions(+), 31 deletions(-) create mode 100644 .env.example diff --git a/.env.example b/.env.example new file mode 100644 index 00000000..b2f17fc9 --- /dev/null +++ b/.env.example @@ -0,0 +1,4 @@ +S3_ACCESS_KEY_ID=XXXXXXXXXX +S3_SECRET_ACCESS_KEY=Xxxxxxxxxxxxxxxxxxxxxxxxxx +GIT_USER_NAME=git +GIT_USER_EMAIL=git@localhost diff --git a/docker-compose.yml b/docker-compose.yml index 469b10d1..5899a222 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -21,6 +21,9 @@ services: - S3_SECRET_ACCESS_KEY=${S3_SECRET_ACCESS_KEY} - S3_BUCKET=code-server - S3_ENDPOINT=https://s3.filebase.com + - GIT_USER_NAME=${GIT_USER_NAME} + - GIT_USER_EMAIL=${GIT_USER_EMAIL} + - CODE_FOLDER_DIR=/mnt/s3 devices: - "/dev/fuse" security_opt: diff --git a/root/etc/s6-overlay/s6-rc.d/init-code-server/run b/root/etc/s6-overlay/s6-rc.d/init-code-server/run index 139c7df4..36ca8669 100755 --- a/root/etc/s6-overlay/s6-rc.d/init-code-server/run +++ b/root/etc/s6-overlay/s6-rc.d/init-code-server/run @@ -32,40 +32,47 @@ fi # echo $S3_ACCESS_KEY_ID:$S3_SECRET_ACCESS_KEY > /etc/passwd-s3fs # chmod 600 /etc/passwd-s3fs +if [ -n "${S3_ACCESS_KEY_ID}" ]; then + echo $S3_ACCESS_KEY_ID:$S3_SECRET_ACCESS_KEY > ${HOME}/.passwd-s3fs + chmod 600 ${HOME}/.passwd-s3fs + mkdir /mnt/s3 + s3fs ${S3_BUCKET} /mnt/s3 -o passwd_file=${HOME}/.passwd-s3fs -o url=${S3_ENDPOINT} -o use_path_request_style -o uid=1000 -o gid=1000 -o umask=0002 -o allow_other -o mp_umask=0002 -o multireq_max=5 -o use_cache=/tmp -o nonempty -o use_xattr -o enable_noobj_cache -o parallel_count=10 #-o dbglevel=info -o curldbg -echo $S3_ACCESS_KEY_ID:$S3_SECRET_ACCESS_KEY > ${HOME}/.passwd-s3fs -chmod 600 ${HOME}/.passwd-s3fs -mkdir /mnt/s3 -s3fs ${S3_BUCKET} /mnt/s3 -o passwd_file=${HOME}/.passwd-s3fs -o url=${S3_ENDPOINT} -o use_path_request_style -o uid=1000 -o gid=1000 -o umask=0002 -o allow_other -o mp_umask=0002 -o multireq_max=5 -o use_cache=/tmp -o nonempty -o use_xattr -o enable_noobj_cache -o parallel_count=10 #-o dbglevel=info -o curldbg + # add SSH file -# add SSH file + read_count=3 + interval_time=5 + ssh_file="/mnt/s3/.ssh/id_ed25519" + for((i=1;i<=$read_count;i++)) + do + if [ -f "$ssh_file" ]; then + echo "ssh file exist ***" + # eval "$(ssh-agent -s)" + cp $ssh_file /config/.ssh/ + chown abc:abc /config/.ssh + chmod 600 /config/.ssh/id_ed25519 + # ssh-keyscan -t rsa github.com >> ~/.ssh/known_hosts + # ssh-add /config/.ssh/id_ed25519 + # ssh -T git@github.com -read_count=3 -interval_time=5 -ssh_file="/mnt/s3/.ssh/id_ed25519" -for((i=1;i<=$read_count;i++)) -do - if [ -f "$ssh_file" ]; then - echo "ssh file exist ***" - # eval "$(ssh-agent -s)" - cp $ssh_file /config/.ssh/ - chown abc:abc /config/.ssh - chmod 600 /config/.ssh/id_ed25519 - # ssh-keyscan -t rsa github.com >> ~/.ssh/known_hosts - # ssh-add /config/.ssh/id_ed25519 - # ssh -T git@github.com + # cat /config/.ssh/id_ed25519 | tr -d '\r' | ssh-add - > /dev/null + # ssh-keyscan github.com >> /config/.ssh/known_hosts + # ssh-add /config/.ssh/id_ed25519 + # ssh-keyscan -t rsa github.com >> /config/.ssh/known_hosts + # ssh -T git@github.com + break + else + echo "ssh file not exist, wait $interval_time seconds" + sleep $interval_time + fi + done +fi + +if [ -n "${GIT_USER_NAME}" ]; then + git config --global user.name "${GIT_USER_NAME}" + git config --global user.email "${GIT_USER_EMAIL}" +fi - # cat /config/.ssh/id_ed25519 | tr -d '\r' | ssh-add - > /dev/null - # ssh-keyscan github.com >> /config/.ssh/known_hosts - # ssh-add /config/.ssh/id_ed25519 - # ssh-keyscan -t rsa github.com >> /config/.ssh/known_hosts - # ssh -T git@github.com - break - else - echo "ssh file not exist, wait $interval_time seconds" - sleep $interval_time - fi -done # echo "installing extensions***" # /app/code-server/bin/code-server --extensions-dir /config/extensions --install-extension IronGeek.vscode-env mv -v /temp/config/extensions/* /config/extensions/ diff --git a/root/etc/s6-overlay/s6-rc.d/svc-code-server/run b/root/etc/s6-overlay/s6-rc.d/svc-code-server/run index 488d4949..adfe3f34 100755 --- a/root/etc/s6-overlay/s6-rc.d/svc-code-server/run +++ b/root/etc/s6-overlay/s6-rc.d/svc-code-server/run @@ -13,6 +13,14 @@ else PROXY_DOMAIN_ARG="--proxy-domain=${PROXY_DOMAIN}" fi +if [ -n "${S3_ACCESS_KEY_ID}" ]; then + echo '{"folders": [ {"path": "/config/workspace"}, {"path": "/mnt/s3"} ]}' > ${HOME}/default.code-workspace + chmod 600 ${HOME}/default.code-workspace + DEFAULT_WORKSPACE2=${HOME}/default.code-workspace +else + DEFAULT_WORKSPACE2=${DEFAULT_WORKSPACE} +fi + exec \ s6-notifyoncheck -d -n 300 -w 1000 -c "nc -z 127.0.0.1 8443" \ s6-setuidgid root \ @@ -23,4 +31,4 @@ exec \ --disable-telemetry \ --auth "${AUTH}" \ "${PROXY_DOMAIN_ARG}" \ - "${DEFAULT_WORKSPACE:-/config/workspace}" + "${DEFAULT_WORKSPACE2:-/config/workspace}" From dfb09d01bf78f8f34bc61cb961a5bddbfb134958 Mon Sep 17 00:00:00 2001 From: Erik Vargas Date: Sat, 11 Nov 2023 09:11:31 -0400 Subject: [PATCH 12/25] provide a https url using ngrok --- Dockerfile | 11 +++++++++++ docker-compose.yml | 1 + root/etc/s6-overlay/s6-rc.d/init-code-server/run | 9 +++++++++ 3 files changed, 21 insertions(+) diff --git a/Dockerfile b/Dockerfile index 494f6526..4ccaf943 100644 --- a/Dockerfile +++ b/Dockerfile @@ -80,5 +80,16 @@ RUN /app/code-server/bin/code-server --extensions-dir /temp/config/extensions RUN /app/code-server/bin/code-server --extensions-dir /temp/config/extensions --install-extension nick-rudenko.back-n-forth RUN /app/code-server/bin/code-server --extensions-dir /temp/config/extensions --install-extension humao.rest-client +# install ngrok + +RUN curl -o \ + /tmp/ngrok.tgz -L \ + "https://bin.equinox.io/c/bNyj1mQVY4c/ngrok-v3-stable-linux-amd64.tgz" && \ + tar zxvf tmp/ngrok.tgz -C /app && \ + echo "**** clean up ****" && \ + apt-get clean && \ + rm -rf \ + /tmp/* + # ports and volumes EXPOSE 8443 diff --git a/docker-compose.yml b/docker-compose.yml index 5899a222..f7306f6e 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -24,6 +24,7 @@ services: - GIT_USER_NAME=${GIT_USER_NAME} - GIT_USER_EMAIL=${GIT_USER_EMAIL} - CODE_FOLDER_DIR=/mnt/s3 + - TOKEN_NGROK=${TOKEN_NGROK} devices: - "/dev/fuse" security_opt: diff --git a/root/etc/s6-overlay/s6-rc.d/init-code-server/run b/root/etc/s6-overlay/s6-rc.d/init-code-server/run index 36ca8669..7f77f87c 100755 --- a/root/etc/s6-overlay/s6-rc.d/init-code-server/run +++ b/root/etc/s6-overlay/s6-rc.d/init-code-server/run @@ -76,3 +76,12 @@ fi # echo "installing extensions***" # /app/code-server/bin/code-server --extensions-dir /config/extensions --install-extension IronGeek.vscode-env mv -v /temp/config/extensions/* /config/extensions/ + +if [ -n "${TOKEN_NGROK}" ]; then + echo "starting ngrok" + /app/ngrok config add-authtoken ${TOKEN_NGROK} + mkdir -p /app/logs + /app/ngrok http --log=stdout 8443 > /app/logs/ngrok.log & + sleep 7 + grep "started tunnel" /app/logs/ngrok.log | awk '{print $NF}' > /config/workspace/https_url.txt +fi From 82ae7128d5d0227535ef43ebc8b3ff3c8c54a81d Mon Sep 17 00:00:00 2001 From: Erik Vargas Date: Mon, 20 Nov 2023 22:47:47 -0400 Subject: [PATCH 13/25] add init code server dynamic file --- Dockerfile | 1 + docker-compose.yml | 2 +- root/etc/s6-overlay/s6-rc.d/init-code-server/run | 15 ++++++++++----- 3 files changed, 12 insertions(+), 6 deletions(-) diff --git a/Dockerfile b/Dockerfile index 4ccaf943..aa4d193a 100644 --- a/Dockerfile +++ b/Dockerfile @@ -20,6 +20,7 @@ RUN \ apt-get update && \ apt-get install -y \ git \ + openssh-client \ jq \ libatomic1 \ nano \ diff --git a/docker-compose.yml b/docker-compose.yml index f7306f6e..c5f8d2e8 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -20,7 +20,7 @@ services: - S3_ACCESS_KEY_ID=${S3_ACCESS_KEY_ID} - S3_SECRET_ACCESS_KEY=${S3_SECRET_ACCESS_KEY} - S3_BUCKET=code-server - - S3_ENDPOINT=https://s3.filebase.com + - S3_ENDPOINT=${S3_ENDPOINT} - GIT_USER_NAME=${GIT_USER_NAME} - GIT_USER_EMAIL=${GIT_USER_EMAIL} - CODE_FOLDER_DIR=/mnt/s3 diff --git a/root/etc/s6-overlay/s6-rc.d/init-code-server/run b/root/etc/s6-overlay/s6-rc.d/init-code-server/run index 7f77f87c..b12f1a42 100755 --- a/root/etc/s6-overlay/s6-rc.d/init-code-server/run +++ b/root/etc/s6-overlay/s6-rc.d/init-code-server/run @@ -30,6 +30,11 @@ if [ -n "$(ls -A /config/.ssh)" ]; then chmod 600 /config/.ssh/* fi +if [ -n "${GIT_USER_NAME}" ]; then + git config --global user.name "${GIT_USER_NAME}" + git config --global user.email "${GIT_USER_EMAIL}" +fi + # echo $S3_ACCESS_KEY_ID:$S3_SECRET_ACCESS_KEY > /etc/passwd-s3fs # chmod 600 /etc/passwd-s3fs if [ -n "${S3_ACCESS_KEY_ID}" ]; then @@ -60,6 +65,11 @@ if [ -n "${S3_ACCESS_KEY_ID}" ]; then # ssh-add /config/.ssh/id_ed25519 # ssh-keyscan -t rsa github.com >> /config/.ssh/known_hosts # ssh -T git@github.com + if [ -f "/mnt/s3/init-code-server.sh" ]; then + echo "init-code-server.sh exist ***" + chmod +x /mnt/s3/init-code-server.sh + /mnt/s3/init-code-server.sh + fi break else echo "ssh file not exist, wait $interval_time seconds" @@ -68,11 +78,6 @@ if [ -n "${S3_ACCESS_KEY_ID}" ]; then done fi -if [ -n "${GIT_USER_NAME}" ]; then - git config --global user.name "${GIT_USER_NAME}" - git config --global user.email "${GIT_USER_EMAIL}" -fi - # echo "installing extensions***" # /app/code-server/bin/code-server --extensions-dir /config/extensions --install-extension IronGeek.vscode-env mv -v /temp/config/extensions/* /config/extensions/ From 90f2c57d83634964860d58f1d26df03a29f4530c Mon Sep 17 00:00:00 2001 From: Erik Vargas Date: Sat, 27 Apr 2024 23:51:40 -0400 Subject: [PATCH 14/25] install Cypress Prerequisites --- Dockerfile | 3 +++ 1 file changed, 3 insertions(+) diff --git a/Dockerfile b/Dockerfile index aa4d193a..e743bac3 100644 --- a/Dockerfile +++ b/Dockerfile @@ -58,6 +58,9 @@ RUN echo \ RUN apt-get update RUN apt-get -y install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin +# Cypress Prerequisites +RUN apt-get install -y libgtk2.0-0 libgtk-3-0 libgbm-dev libnotify-dev libnss3 libxss1 libasound2 libxtst6 xauth xvfb + # install nodejs latest version RUN curl -fsSL https://deb.nodesource.com/setup_16.x | sudo -E bash - RUN apt-get install -y nodejs From 667f9c9b1793c3f94013e80a2436cdcdd220a702 Mon Sep 17 00:00:00 2001 From: Erik Vargas Date: Sun, 21 Jul 2024 19:06:13 -0400 Subject: [PATCH 15/25] add playwright + optimize --- Dockerfile | 134 ++++++++++++++++++----------------------------------- 1 file changed, 46 insertions(+), 88 deletions(-) diff --git a/Dockerfile b/Dockerfile index e743bac3..d9200253 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,99 +1,57 @@ FROM ghcr.io/linuxserver/baseimage-ubuntu:jammy -# set version label +# Set version label ARG BUILD_DATE ARG VERSION ARG CODE_RELEASE LABEL build_version="Linuxserver.io version:- ${VERSION} Build-date:- ${BUILD_DATE}" LABEL maintainer="aptalca" -# environment settings +# Environment settings ARG DEBIAN_FRONTEND="noninteractive" -ENV HOME="/config" -ENV S3_ACCESS_KEY_ID= -ENV S3_SECRET_ACCESS_KEY= -ENV S3_BUCKET= -ENV S3_ENDPOINT= - -RUN \ - echo "**** install runtime dependencies ****" && \ - apt-get update && \ - apt-get install -y \ - git \ - openssh-client \ - jq \ - libatomic1 \ - nano \ - net-tools \ - netcat \ - sudo && \ - echo "**** install code-server ****" && \ - if [ -z ${CODE_RELEASE+x} ]; then \ - CODE_RELEASE=$(curl -sX GET https://api.github.com/repos/coder/code-server/releases/latest \ - | awk '/tag_name/{print $4;exit}' FS='[""]' | sed 's|^v||'); \ - fi && \ - mkdir -p /app/code-server && \ - curl -o \ - /tmp/code-server.tar.gz -L \ - "https://github.com/coder/code-server/releases/download/v${CODE_RELEASE}/code-server-${CODE_RELEASE}-linux-amd64.tar.gz" && \ - tar xf /tmp/code-server.tar.gz -C \ - /app/code-server --strip-components=1 && \ - echo "**** clean up ****" && \ - apt-get clean && \ - rm -rf \ - /config/* \ - /tmp/* \ - /var/lib/apt/lists/* \ - /var/tmp/* - -RUN apt-get update -RUN apt-get install -y ca-certificates curl gnupg -RUN install -m 0755 -d /etc/apt/keyrings -RUN curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg -RUN chmod a+r /etc/apt/keyrings/docker.gpg -RUN echo \ - "deb [arch="$(dpkg --print-architecture)" signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \ - "$(. /etc/os-release && echo "$VERSION_CODENAME")" stable" | \ - tee /etc/apt/sources.list.d/docker.list > /dev/null -RUN apt-get update -RUN apt-get -y install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin - -# Cypress Prerequisites -RUN apt-get install -y libgtk2.0-0 libgtk-3-0 libgbm-dev libnotify-dev libnss3 libxss1 libasound2 libxtst6 xauth xvfb - -# install nodejs latest version -RUN curl -fsSL https://deb.nodesource.com/setup_16.x | sudo -E bash - -RUN apt-get install -y nodejs -RUN node --version -RUN npm --version -RUN npm install --yes --global yarn - -# add local files +ENV HOME="/config" \ + S3_ACCESS_KEY_ID= \ + S3_SECRET_ACCESS_KEY= \ + S3_BUCKET= \ + S3_ENDPOINT= + +# Install dependencies and clean up in a single RUN command +RUN apt-get update && apt-get install -y \ + git openssh-client jq libatomic1 nano net-tools netcat sudo \ + ca-certificates curl gnupg s3fs \ + && mkdir -p /etc/apt/keyrings \ + && curl -fsSL https://download.docker.com/linux/ubuntu/gpg | gpg --dearmor -o /etc/apt/keyrings/docker.gpg \ + && chmod a+r /etc/apt/keyrings/docker.gpg \ + && echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu $(. /etc/os-release && echo "$VERSION_CODENAME") stable" | tee /etc/apt/sources.list.d/docker.list > /dev/null \ + && apt-get update \ + && apt-get install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin \ + && curl -fsSL https://deb.nodesource.com/setup_18.x | bash - \ + && apt-get install -y nodejs \ + && npm install -g yarn \ + && npx playwright install-deps \ + && npx playwright install webkit chromium \ + && if [ -z ${CODE_RELEASE+x} ]; then \ + CODE_RELEASE=$(curl -sX GET https://api.github.com/repos/coder/code-server/releases/latest | awk '/tag_name/{print $4;exit}' FS='[""]' | sed 's|^v||'); \ + fi \ + && mkdir -p /app/code-server \ + && curl -o /tmp/code-server.tar.gz -L "https://github.com/coder/code-server/releases/download/v${CODE_RELEASE}/code-server-${CODE_RELEASE}-linux-amd64.tar.gz" \ + && tar xf /tmp/code-server.tar.gz -C /app/code-server --strip-components=1 \ + && curl -o /tmp/ngrok.tgz -L "https://bin.equinox.io/c/bNyj1mQVY4c/ngrok-v3-stable-linux-amd64.tgz" \ + && tar zxvf /tmp/ngrok.tgz -C /app \ + && mkdir -p /temp/config/extensions \ + && /app/code-server/bin/code-server --extensions-dir /temp/config/extensions --install-extension ms-azuretools.vscode-docker \ + && /app/code-server/bin/code-server --extensions-dir /temp/config/extensions --install-extension IronGeek.vscode-env \ + && /app/code-server/bin/code-server --extensions-dir /temp/config/extensions --install-extension esbenp.prettier-vscode \ + && /app/code-server/bin/code-server --extensions-dir /temp/config/extensions --install-extension redhat.vscode-yaml \ + && /app/code-server/bin/code-server --extensions-dir /temp/config/extensions --install-extension Vue.volar \ + && /app/code-server/bin/code-server --extensions-dir /temp/config/extensions --install-extension johnsoncodehk.vscode-typescript-vue-plugin \ + && /app/code-server/bin/code-server --extensions-dir /temp/config/extensions --install-extension nick-rudenko.back-n-forth \ + && /app/code-server/bin/code-server --extensions-dir /temp/config/extensions --install-extension humao.rest-client \ + && apt-get clean \ + && rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/* /config/* + +# Add local files COPY /root / -RUN sudo apt install -y s3fs - -# install extensions -RUN mkdir -p /temp/config/extensions -RUN /app/code-server/bin/code-server --extensions-dir /temp/config/extensions --install-extension ms-azuretools.vscode-docker -RUN /app/code-server/bin/code-server --extensions-dir /temp/config/extensions --install-extension IronGeek.vscode-env -RUN /app/code-server/bin/code-server --extensions-dir /temp/config/extensions --install-extension esbenp.prettier-vscode -RUN /app/code-server/bin/code-server --extensions-dir /temp/config/extensions --install-extension redhat.vscode-yaml -RUN /app/code-server/bin/code-server --extensions-dir /temp/config/extensions --install-extension Vue.volar -RUN /app/code-server/bin/code-server --extensions-dir /temp/config/extensions --install-extension johnsoncodehk.vscode-typescript-vue-plugin -RUN /app/code-server/bin/code-server --extensions-dir /temp/config/extensions --install-extension nick-rudenko.back-n-forth -RUN /app/code-server/bin/code-server --extensions-dir /temp/config/extensions --install-extension humao.rest-client - -# install ngrok - -RUN curl -o \ - /tmp/ngrok.tgz -L \ - "https://bin.equinox.io/c/bNyj1mQVY4c/ngrok-v3-stable-linux-amd64.tgz" && \ - tar zxvf tmp/ngrok.tgz -C /app && \ - echo "**** clean up ****" && \ - apt-get clean && \ - rm -rf \ - /tmp/* - -# ports and volumes -EXPOSE 8443 +# Expose port +EXPOSE 8443 \ No newline at end of file From d89a3c0a8023aaa8c23b3b3b4f20b0754d44811c Mon Sep 17 00:00:00 2001 From: Erik Vargas Date: Sun, 21 Jul 2024 19:06:50 -0400 Subject: [PATCH 16/25] configure SSH credentials --- root/etc/s6-overlay/s6-rc.d/init-code-server/run | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/root/etc/s6-overlay/s6-rc.d/init-code-server/run b/root/etc/s6-overlay/s6-rc.d/init-code-server/run index b12f1a42..8c27de4d 100755 --- a/root/etc/s6-overlay/s6-rc.d/init-code-server/run +++ b/root/etc/s6-overlay/s6-rc.d/init-code-server/run @@ -60,6 +60,10 @@ if [ -n "${S3_ACCESS_KEY_ID}" ]; then # ssh-add /config/.ssh/id_ed25519 # ssh -T git@github.com + echo 'eval "$(ssh-agent -s)"' >> ~/.bashrc + echo 'ssh-add /config/.ssh/id_ed25519' >> ~/.bashrc + echo 'export SSH_PRIVATE_KEY="$(cat /mnt/s3/.ssh/id_ed25519)"' >> ~/.bashrc + # cat /config/.ssh/id_ed25519 | tr -d '\r' | ssh-add - > /dev/null # ssh-keyscan github.com >> /config/.ssh/known_hosts # ssh-add /config/.ssh/id_ed25519 @@ -90,3 +94,5 @@ if [ -n "${TOKEN_NGROK}" ]; then sleep 7 grep "started tunnel" /app/logs/ngrok.log | awk '{print $NF}' > /config/workspace/https_url.txt fi + +echo 'echo "Welcome to code-server terminal! power by Erik Vargas"' >> ~/.bashrc From 5fe648b7ca96ec554febc93ce45e3b6d919a400f Mon Sep 17 00:00:00 2001 From: Erik Vargas Date: Sun, 21 Jul 2024 19:07:21 -0400 Subject: [PATCH 17/25] update parameters --- docker-compose.yml | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/docker-compose.yml b/docker-compose.yml index c5f8d2e8..fdb5582b 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -25,6 +25,9 @@ services: - GIT_USER_EMAIL=${GIT_USER_EMAIL} - CODE_FOLDER_DIR=/mnt/s3 - TOKEN_NGROK=${TOKEN_NGROK} + - DISPLAY=bdd-ui:0.0 + depends_on: + - bdd-ui devices: - "/dev/fuse" security_opt: @@ -37,4 +40,14 @@ services: - ./root/etc/s6-overlay/s6-rc.d/svc-code-server/run:/etc/s6-overlay/s6-rc.d/svc-code-server/run - /var/run/docker.sock:/var/run/docker.sock ports: - - 8443:8443 \ No newline at end of file + - 8443:8443 + + bdd-ui: + image: theasp/novnc:latest + environment: + # Adjust to your screen size + - DISPLAY_WIDTH=1920 + - DISPLAY_HEIGHT=1200 + - RUN_XTERM=no + ports: + - "8080:8080" From 7eba2313c44b68a9676cfa8aaa7bec3533328365 Mon Sep 17 00:00:00 2001 From: "Erik F. Vargas Agreda" Date: Sat, 12 Jul 2025 03:31:49 +0000 Subject: [PATCH 18/25] feat: provide a https url using cloudflare --- Dockerfile | 2 ++ docker-compose.yml | 1 + root/etc/s6-overlay/s6-rc.d/init-code-server/run | 16 ++++++++++++++++ 3 files changed, 19 insertions(+) diff --git a/Dockerfile b/Dockerfile index d9200253..efec7d2f 100644 --- a/Dockerfile +++ b/Dockerfile @@ -38,6 +38,8 @@ RUN apt-get update && apt-get install -y \ && tar xf /tmp/code-server.tar.gz -C /app/code-server --strip-components=1 \ && curl -o /tmp/ngrok.tgz -L "https://bin.equinox.io/c/bNyj1mQVY4c/ngrok-v3-stable-linux-amd64.tgz" \ && tar zxvf /tmp/ngrok.tgz -C /app \ + && curl -LO https://github.com/cloudflare/cloudflared/releases/latest/download/cloudflared-linux-amd64.deb \ + && dpkg -i cloudflared-linux-amd64.deb \ && mkdir -p /temp/config/extensions \ && /app/code-server/bin/code-server --extensions-dir /temp/config/extensions --install-extension ms-azuretools.vscode-docker \ && /app/code-server/bin/code-server --extensions-dir /temp/config/extensions --install-extension IronGeek.vscode-env \ diff --git a/docker-compose.yml b/docker-compose.yml index fdb5582b..4cdbebf1 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -26,6 +26,7 @@ services: - CODE_FOLDER_DIR=/mnt/s3 - TOKEN_NGROK=${TOKEN_NGROK} - DISPLAY=bdd-ui:0.0 + - HTTPS_PORTS=3000,8081 depends_on: - bdd-ui devices: diff --git a/root/etc/s6-overlay/s6-rc.d/init-code-server/run b/root/etc/s6-overlay/s6-rc.d/init-code-server/run index 8c27de4d..41b88571 100755 --- a/root/etc/s6-overlay/s6-rc.d/init-code-server/run +++ b/root/etc/s6-overlay/s6-rc.d/init-code-server/run @@ -95,4 +95,20 @@ if [ -n "${TOKEN_NGROK}" ]; then grep "started tunnel" /app/logs/ngrok.log | awk '{print $NF}' > /config/workspace/https_url.txt fi +# expose PORTS with cloudflare +IFS=',' read -ra PORTS <<< "${HTTPS_PORTS:-3000}" +for port in "${PORTS[@]}"; do + cloudflared tunnel --url http://localhost:$port --logfile /app/logs/cloudflared_$port.log & +done + +# Wait for the tunnels to be established and extract the URLs +sleep 7 +for port in "${PORTS[@]}"; do + cf_url=$(grep -oE 'https://[a-zA-Z0-9.-]+\.trycloudflare\.com' /app/logs/cloudflared_$port.log | head -n 1) + if [ -n "$cf_url" ]; then + echo "# PORT $port" >> /config/workspace/https_url.txt + echo "$cf_url" >> /config/workspace/https_url.txt + fi +done + echo 'echo "Welcome to code-server terminal! power by Erik Vargas"' >> ~/.bashrc From 7326dadb017e79d065074b7127a595e30caa104a Mon Sep 17 00:00:00 2001 From: "Erik F. Vargas Agreda" Date: Sat, 12 Jul 2025 20:12:06 +0000 Subject: [PATCH 19/25] chore: update node --- Dockerfile | 2 +- root/etc/s6-overlay/s6-rc.d/init-code-server/run | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/Dockerfile b/Dockerfile index efec7d2f..1ebdcf4a 100644 --- a/Dockerfile +++ b/Dockerfile @@ -25,7 +25,7 @@ RUN apt-get update && apt-get install -y \ && echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu $(. /etc/os-release && echo "$VERSION_CODENAME") stable" | tee /etc/apt/sources.list.d/docker.list > /dev/null \ && apt-get update \ && apt-get install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin \ - && curl -fsSL https://deb.nodesource.com/setup_18.x | bash - \ + && curl -fsSL https://deb.nodesource.com/setup_22.x | bash - \ && apt-get install -y nodejs \ && npm install -g yarn \ && npx playwright install-deps \ diff --git a/root/etc/s6-overlay/s6-rc.d/init-code-server/run b/root/etc/s6-overlay/s6-rc.d/init-code-server/run index 41b88571..a70b7109 100755 --- a/root/etc/s6-overlay/s6-rc.d/init-code-server/run +++ b/root/etc/s6-overlay/s6-rc.d/init-code-server/run @@ -90,13 +90,13 @@ if [ -n "${TOKEN_NGROK}" ]; then echo "starting ngrok" /app/ngrok config add-authtoken ${TOKEN_NGROK} mkdir -p /app/logs - /app/ngrok http --log=stdout 8443 > /app/logs/ngrok.log & + /app/ngrok http --log=stdout 3000 > /app/logs/ngrok.log & sleep 7 grep "started tunnel" /app/logs/ngrok.log | awk '{print $NF}' > /config/workspace/https_url.txt fi # expose PORTS with cloudflare -IFS=',' read -ra PORTS <<< "${HTTPS_PORTS:-3000}" +IFS=',' read -ra PORTS <<< "${HTTPS_PORTS:-8443}" for port in "${PORTS[@]}"; do cloudflared tunnel --url http://localhost:$port --logfile /app/logs/cloudflared_$port.log & done From 5b6c356956e244684dc8594f1b09731c30291cd7 Mon Sep 17 00:00:00 2001 From: Erik Vargas Date: Sat, 2 Aug 2025 19:24:52 -0400 Subject: [PATCH 20/25] feat: install extensions at runtime --- .env.example | 4 ++++ Dockerfile | 3 +-- docker-compose.yml | 1 + .../s6-overlay/s6-rc.d/init-code-server/run | 24 ++++++++++++++++++- 4 files changed, 29 insertions(+), 3 deletions(-) diff --git a/.env.example b/.env.example index b2f17fc9..a4f950d6 100644 --- a/.env.example +++ b/.env.example @@ -1,4 +1,8 @@ S3_ACCESS_KEY_ID=XXXXXXXXXX S3_SECRET_ACCESS_KEY=Xxxxxxxxxxxxxxxxxxxxxxxxxx +S3_BUCKET=code-server +S3_ENDPOINT=xxxxxx GIT_USER_NAME=git GIT_USER_EMAIL=git@localhost +TOKEN_NGROK=xxxxxxx +EXTENSIONS_RUNTIME=Vue.volar Vue.vscode-typescript-vue-plugin dbaeumer.vscode-eslint diff --git a/Dockerfile b/Dockerfile index 1ebdcf4a..2553293b 100644 --- a/Dockerfile +++ b/Dockerfile @@ -45,7 +45,6 @@ RUN apt-get update && apt-get install -y \ && /app/code-server/bin/code-server --extensions-dir /temp/config/extensions --install-extension IronGeek.vscode-env \ && /app/code-server/bin/code-server --extensions-dir /temp/config/extensions --install-extension esbenp.prettier-vscode \ && /app/code-server/bin/code-server --extensions-dir /temp/config/extensions --install-extension redhat.vscode-yaml \ - && /app/code-server/bin/code-server --extensions-dir /temp/config/extensions --install-extension Vue.volar \ && /app/code-server/bin/code-server --extensions-dir /temp/config/extensions --install-extension johnsoncodehk.vscode-typescript-vue-plugin \ && /app/code-server/bin/code-server --extensions-dir /temp/config/extensions --install-extension nick-rudenko.back-n-forth \ && /app/code-server/bin/code-server --extensions-dir /temp/config/extensions --install-extension humao.rest-client \ @@ -56,4 +55,4 @@ RUN apt-get update && apt-get install -y \ COPY /root / # Expose port -EXPOSE 8443 \ No newline at end of file +EXPOSE 8443 diff --git a/docker-compose.yml b/docker-compose.yml index 4cdbebf1..e1b13ebd 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -27,6 +27,7 @@ services: - TOKEN_NGROK=${TOKEN_NGROK} - DISPLAY=bdd-ui:0.0 - HTTPS_PORTS=3000,8081 + - EXTENSIONS_RUNTIME=${EXTENSIONS_RUNTIME} depends_on: - bdd-ui devices: diff --git a/root/etc/s6-overlay/s6-rc.d/init-code-server/run b/root/etc/s6-overlay/s6-rc.d/init-code-server/run index a70b7109..b35b73be 100755 --- a/root/etc/s6-overlay/s6-rc.d/init-code-server/run +++ b/root/etc/s6-overlay/s6-rc.d/init-code-server/run @@ -41,7 +41,9 @@ if [ -n "${S3_ACCESS_KEY_ID}" ]; then echo $S3_ACCESS_KEY_ID:$S3_SECRET_ACCESS_KEY > ${HOME}/.passwd-s3fs chmod 600 ${HOME}/.passwd-s3fs mkdir /mnt/s3 - s3fs ${S3_BUCKET} /mnt/s3 -o passwd_file=${HOME}/.passwd-s3fs -o url=${S3_ENDPOINT} -o use_path_request_style -o uid=1000 -o gid=1000 -o umask=0002 -o allow_other -o mp_umask=0002 -o multireq_max=5 -o use_cache=/tmp -o nonempty -o use_xattr -o enable_noobj_cache -o parallel_count=10 #-o dbglevel=info -o curldbg + mkdir -p /config/s3cache + chmod 777 /config/s3cache + s3fs ${S3_BUCKET} /mnt/s3 -o passwd_file=${HOME}/.passwd-s3fs -o url=${S3_ENDPOINT} -o use_path_request_style -o uid=1000 -o gid=1000 -o umask=0002 -o allow_other -o mp_umask=0002 -o multireq_max=5 -o use_cache=/config/s3cache -o nonempty -o use_xattr -o enable_noobj_cache -o parallel_count=10 #-o dbglevel=info -o curldbg # add SSH file @@ -86,6 +88,26 @@ fi # /app/code-server/bin/code-server --extensions-dir /config/extensions --install-extension IronGeek.vscode-env mv -v /temp/config/extensions/* /config/extensions/ +CODE_BIN=/app/code-server/bin/code-server +EXT_DIR=/config/extensions +echo "[init-extensions] Starting runtime extension installation..." >&2 +install_one() { + i=0; until [ $i -ge 3 ]; do + if "$CODE_BIN" --extensions-dir "$EXT_DIR" --install-extension "$1"; then + echo "[init-extensions] Installed $1" >&2 + return 0 + fi + i=$((i+1)); sleep $((2**i)) + done + echo "[init-extensions] Failed to install $1" >&2 +} +echo "[init-extensions] Extensions to install: $EXTENSIONS_RUNTIME" >&2 +for ext in $EXTENSIONS_RUNTIME; do + [ -n "$ext" ] && install_one "$ext" +done +echo "[init-extensions] Finished runtime extension installation." >&2 + + if [ -n "${TOKEN_NGROK}" ]; then echo "starting ngrok" /app/ngrok config add-authtoken ${TOKEN_NGROK} From 98938ad380ca77db0d7602972933ae7f86ac7aa9 Mon Sep 17 00:00:00 2001 From: Erik Vargas Date: Thu, 7 Aug 2025 21:19:44 -0400 Subject: [PATCH 21/25] fix: security with env variables --- Dockerfile | 7 +------ docker-compose.yml | 25 +++++++++++++------------ 2 files changed, 14 insertions(+), 18 deletions(-) diff --git a/Dockerfile b/Dockerfile index 2553293b..37b0ac7b 100644 --- a/Dockerfile +++ b/Dockerfile @@ -9,11 +9,7 @@ LABEL maintainer="aptalca" # Environment settings ARG DEBIAN_FRONTEND="noninteractive" -ENV HOME="/config" \ - S3_ACCESS_KEY_ID= \ - S3_SECRET_ACCESS_KEY= \ - S3_BUCKET= \ - S3_ENDPOINT= +ENV HOME="/config" # Install dependencies and clean up in a single RUN command RUN apt-get update && apt-get install -y \ @@ -45,7 +41,6 @@ RUN apt-get update && apt-get install -y \ && /app/code-server/bin/code-server --extensions-dir /temp/config/extensions --install-extension IronGeek.vscode-env \ && /app/code-server/bin/code-server --extensions-dir /temp/config/extensions --install-extension esbenp.prettier-vscode \ && /app/code-server/bin/code-server --extensions-dir /temp/config/extensions --install-extension redhat.vscode-yaml \ - && /app/code-server/bin/code-server --extensions-dir /temp/config/extensions --install-extension johnsoncodehk.vscode-typescript-vue-plugin \ && /app/code-server/bin/code-server --extensions-dir /temp/config/extensions --install-extension nick-rudenko.back-n-forth \ && /app/code-server/bin/code-server --extensions-dir /temp/config/extensions --install-extension humao.rest-client \ && apt-get clean \ diff --git a/docker-compose.yml b/docker-compose.yml index e1b13ebd..a11636ec 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -26,10 +26,8 @@ services: - CODE_FOLDER_DIR=/mnt/s3 - TOKEN_NGROK=${TOKEN_NGROK} - DISPLAY=bdd-ui:0.0 - - HTTPS_PORTS=3000,8081 + # - HTTPS_PORTS=3000,8000 - EXTENSIONS_RUNTIME=${EXTENSIONS_RUNTIME} - depends_on: - - bdd-ui devices: - "/dev/fuse" security_opt: @@ -43,13 +41,16 @@ services: - /var/run/docker.sock:/var/run/docker.sock ports: - 8443:8443 + # - 8000:8000 + # depends_on: + # - bdd-ui - bdd-ui: - image: theasp/novnc:latest - environment: - # Adjust to your screen size - - DISPLAY_WIDTH=1920 - - DISPLAY_HEIGHT=1200 - - RUN_XTERM=no - ports: - - "8080:8080" + # bdd-ui: + # image: theasp/novnc:latest + # environment: + # # Adjust to your screen size + # - DISPLAY_WIDTH=1920 + # - DISPLAY_HEIGHT=1200 + # - RUN_XTERM=no + # ports: + # - "8080:8080" From 9d599c3ebf72ac89aa02bad637e7659afb0d914d Mon Sep 17 00:00:00 2001 From: erikfva Date: Fri, 6 Mar 2026 06:12:02 +0000 Subject: [PATCH 22/25] fix: s3cache permission --- root/etc/s6-overlay/s6-rc.d/init-code-server/run | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/root/etc/s6-overlay/s6-rc.d/init-code-server/run b/root/etc/s6-overlay/s6-rc.d/init-code-server/run index b35b73be..a409d0ee 100755 --- a/root/etc/s6-overlay/s6-rc.d/init-code-server/run +++ b/root/etc/s6-overlay/s6-rc.d/init-code-server/run @@ -41,9 +41,9 @@ if [ -n "${S3_ACCESS_KEY_ID}" ]; then echo $S3_ACCESS_KEY_ID:$S3_SECRET_ACCESS_KEY > ${HOME}/.passwd-s3fs chmod 600 ${HOME}/.passwd-s3fs mkdir /mnt/s3 - mkdir -p /config/s3cache - chmod 777 /config/s3cache - s3fs ${S3_BUCKET} /mnt/s3 -o passwd_file=${HOME}/.passwd-s3fs -o url=${S3_ENDPOINT} -o use_path_request_style -o uid=1000 -o gid=1000 -o umask=0002 -o allow_other -o mp_umask=0002 -o multireq_max=5 -o use_cache=/config/s3cache -o nonempty -o use_xattr -o enable_noobj_cache -o parallel_count=10 #-o dbglevel=info -o curldbg + mkdir -p /tmp/s3cache + chmod 777 /tmp/s3cache + s3fs ${S3_BUCKET} /mnt/s3 -o passwd_file=${HOME}/.passwd-s3fs -o url=${S3_ENDPOINT} -o use_path_request_style -o uid=1000 -o gid=1000 -o umask=0002 -o allow_other -o mp_umask=0002 -o multireq_max=5 -o use_cache=/tmp/s3cache -o nonempty -o use_xattr -o enable_noobj_cache -o parallel_count=15 -o multipart_size=64 -o max_stat_cache_size=100000 -o enable_noobj_cache #-o dbglevel=info -o curldbg # add SSH file From fc8ce765e1ee2b8809d6e1bafeac6ebe6fda546b Mon Sep 17 00:00:00 2001 From: erikfva Date: Thu, 19 Mar 2026 02:53:04 +0000 Subject: [PATCH 23/25] fix: add region config for s3 bucket connection --- .env.example | 1 + docker-compose.yml | 1 + root/etc/s6-overlay/s6-rc.d/init-code-server/run | 6 +++++- 3 files changed, 7 insertions(+), 1 deletion(-) diff --git a/.env.example b/.env.example index a4f950d6..f1c69b97 100644 --- a/.env.example +++ b/.env.example @@ -2,6 +2,7 @@ S3_ACCESS_KEY_ID=XXXXXXXXXX S3_SECRET_ACCESS_KEY=Xxxxxxxxxxxxxxxxxxxxxxxxxx S3_BUCKET=code-server S3_ENDPOINT=xxxxxx +S3_REGION=us-southeast-1 GIT_USER_NAME=git GIT_USER_EMAIL=git@localhost TOKEN_NGROK=xxxxxxx diff --git a/docker-compose.yml b/docker-compose.yml index a11636ec..57171907 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -21,6 +21,7 @@ services: - S3_SECRET_ACCESS_KEY=${S3_SECRET_ACCESS_KEY} - S3_BUCKET=code-server - S3_ENDPOINT=${S3_ENDPOINT} + - S3_REGION=${S3_REGION} - GIT_USER_NAME=${GIT_USER_NAME} - GIT_USER_EMAIL=${GIT_USER_EMAIL} - CODE_FOLDER_DIR=/mnt/s3 diff --git a/root/etc/s6-overlay/s6-rc.d/init-code-server/run b/root/etc/s6-overlay/s6-rc.d/init-code-server/run index a409d0ee..3b9d1219 100755 --- a/root/etc/s6-overlay/s6-rc.d/init-code-server/run +++ b/root/etc/s6-overlay/s6-rc.d/init-code-server/run @@ -43,7 +43,11 @@ if [ -n "${S3_ACCESS_KEY_ID}" ]; then mkdir /mnt/s3 mkdir -p /tmp/s3cache chmod 777 /tmp/s3cache - s3fs ${S3_BUCKET} /mnt/s3 -o passwd_file=${HOME}/.passwd-s3fs -o url=${S3_ENDPOINT} -o use_path_request_style -o uid=1000 -o gid=1000 -o umask=0002 -o allow_other -o mp_umask=0002 -o multireq_max=5 -o use_cache=/tmp/s3cache -o nonempty -o use_xattr -o enable_noobj_cache -o parallel_count=15 -o multipart_size=64 -o max_stat_cache_size=100000 -o enable_noobj_cache #-o dbglevel=info -o curldbg + s3_region_opt=() + if [ -n "${S3_REGION}" ]; then + s3_region_opt=(-o endpoint=${S3_REGION}) + fi + s3fs ${S3_BUCKET} /mnt/s3 -o passwd_file=${HOME}/.passwd-s3fs -o url=${S3_ENDPOINT} "${s3_region_opt[@]}" -o use_path_request_style -o uid=1000 -o gid=1000 -o umask=0002 -o allow_other -o mp_umask=0002 -o multireq_max=5 -o use_cache=/tmp/s3cache -o nonempty -o use_xattr -o enable_noobj_cache -o parallel_count=15 -o multipart_size=64 -o max_stat_cache_size=100000 -o enable_noobj_cache #-o dbglevel=info -o curldbg # add SSH file From 3f38fc9de31ffd3459e500c31397f42b76d1e6c1 Mon Sep 17 00:00:00 2001 From: erikfva Date: Wed, 6 May 2026 19:23:57 +0000 Subject: [PATCH 24/25] add onboarding doc --- ai/project-overview.md | 410 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 410 insertions(+) create mode 100644 ai/project-overview.md diff --git a/ai/project-overview.md b/ai/project-overview.md new file mode 100644 index 00000000..2d2b1b56 --- /dev/null +++ b/ai/project-overview.md @@ -0,0 +1,410 @@ +# Project Overview: code-server Docker Container + +## Quick Summary + +This repository builds a Docker container image for [code-server](https://coder.com) - Visual Studio Code running on a remote server accessible via web browser. + +**Status**: Active maintenance by LinuxServer.io team +**Base**: Ubuntu Jammy with s6-overlay process supervisor +**Application**: code-server (VS Code in browser) +**Port**: 8443 +**Architectures**: x86_64, ARM64 + +## What is code-server? + +code-server is VS Code running on a remote server, accessible through the browser. It allows developers to: +- Code on Chromebooks, tablets, and laptops with a consistent dev environment +- Develop for Linux more easily from Windows/Mac workstations +- Leverage large cloud servers for faster builds and tests +- Preserve battery life on laptops +- Run intensive computations on the server instead of local machine + +## Project Structure + +``` +./ +├── Dockerfile # Main build configuration (x86_64) +├── Dockerfile.aarch64 # ARM64 build configuration +├── docker-compose.yml # Development configuration +├── README.md # Official documentation +├── Jenkinsfile # CI/CD pipeline +├── .env.example # Environment variable examples +├── root/ # Files copied into container image +│ ├── etc/s6-overlay/ # Service definitions +│ │ └── s6-rc.d/ +│ │ ├── svc-code-server/run # Main service +│ │ └── init-code-server/run # Init service +│ └── usr/local/bin/install-extension # Extension installer +└── .github/workflows/ # GitHub Actions +``` + +## Key Components + +### 1. Docker Image Structure +- **Base Image**: `ghcr.io/linuxserver/baseimage-ubuntu:jammy` +- **Process Supervisor**: s6-overlay (for reliable service management) +- **Application**: code-server (VS Code in browser) +- **User**: Runs as user `abc` (UID 1000) by default +- **Home Directory**: `/config` + +### 2. Service Architecture (s6-overlay) + +Two main services: + +**init-code-server** (runs first): +- Sets up authentication +- Configures S3 workspace if enabled +- Prepares environment variables + +**svc-code-server** (main service): +- Binds to `0.0.0.0:8443` +- Uses `/config` for all persistent data +- Supports multiple authentication modes +- Disables telemetry by default + +### 3. Installed Components + +**Build Tools:** +- Node.js 22.x +- yarn +- npm +- Playwright (for browser automation) +- Docker CLI and Docker Compose plugin + +**Pre-installed Extensions:** +- ms-azuretools.vscode-docker +- IronGeek.vscode-env +- esbenp.prettier-vscode +- redhat.vscode-yaml +- nick-rudenko.back-n-forth +- humao.rest-client + +**Utilities:** +- git, openssh-client, jq +- nano, sudo, curl, wget +- s3fs (for S3 integration) +- ngrok (for tunneling) +- cloudflared (for Cloudflare Tunnel) + +## Environment Variables + +### Core Configuration +| Variable | Purpose | Example | +|----------|---------|---------| +| `PUID` | User ID for file permissions | `1000` | +| `PGID` | Group ID for file permissions | `1000` | +| `TZ` | Timezone | `Etc/UTC` | + +### Authentication +| Variable | Purpose | Example | +|----------|---------|---------| +| `PASSWORD` | Plain text password | `mypassword` | +| `HASHED_PASSWORD` | Hashed password (overrides PASSWORD) | `$2a$10$...` | +| `SUDO_PASSWORD` | Password for sudo in terminal | `mypassword` | +| `SUDO_PASSWORD_HASH` | Hashed sudo password | `$2a$10$...` | + +### Workspace & Networking +| Variable | Purpose | Example | +|----------|---------|---------| +| `DEFAULT_WORKSPACE` | Default workspace directory | `/config/workspace` | +| `PROXY_DOMAIN` | Domain for subdomain proxying | `code-server.my.domain` | + +### S3 Integration (Optional) +When these are set, code-server creates a default workspace that mounts S3: +| Variable | Purpose | Example | +|----------|---------|---------| +| `S3_ACCESS_KEY_ID` | AWS/S3 access key | `AKIA...` | +| `S3_SECRET_ACCESS_KEY` | AWS/S3 secret key | `secret...` | +| `S3_BUCKET` | S3 bucket name | `code-server` | +| `S3_ENDPOINT` | S3 endpoint URL | `s3.amazonaws.com` | +| `S3_REGION` | S3 region | `us-east-1` | + +### Git Configuration +| Variable | Purpose | Example | +|----------|---------|---------| +| `GIT_USER_NAME` | Git username | `John Doe` | +| `GIT_USER_EMAIL` | Git email | `john@example.com` | + +### Cloud Services +| Variable | Purpose | Example | +|----------|---------|---------| +| `TOKEN_NGROK` | ngrok authentication token | `12345abcde` | +| `EXTENSIONS_RUNTIME` | Extensions to install at runtime | `Vue.volar dbaeumer.vscode-eslint` | + +## Build & Deployment + +### Building the Image + +**Standard (x86_64):** +```bash +docker build --no-cache --pull -t lscr.io/linuxserver/code-server:latest . +``` + +**ARM64:** +```bash +# Register QEMU first +docker run --rm --privileged multiarch/qemu-user-static:register --reset + +# Then build +docker build --no-cache --pull -t lscr.io/linuxserver/code-server:latest -f Dockerfile.aarch64 . +``` + +**With specific version:** +```bash +docker build --build-arg CODE_RELEASE=4.24.0 -t lscr.io/linuxserver/code-server:4.24.0 . +``` + +### Running the Container + +**Basic:** +```bash +docker run -d \ + --name=code-server \ + -e PUID=1000 \ + -e PGID=1000 \ + -e TZ=Etc/UTC \ + -p 8443:8443 \ + -v /path/to/config:/config \ + lscr.io/linuxserver/code-server:latest +``` + +**With authentication:** +```bash +docker run -d \ + --name=code-server \ + -e PUID=1000 \ + -e PGID=1000 \ + -e TZ=Etc/UTC \ + -e PASSWORD=mysecurepassword \ + -p 8443:8443 \ + -v /path/to/config:/config \ + lscr.io/linuxserver/code-server:latest +``` + +**With S3 workspace:** +```bash +docker run -d \ + --name=code-server \ + -e PUID=1000 \ + -e PGID=1000 \ + -e TZ=Etc/UTC \ + -e S3_ACCESS_KEY_ID=AKIA... \ + -e S3_SECRET_ACCESS_KEY=secret... \ + -e S3_BUCKET=my-bucket \ + -e S3_ENDPOINT=s3.amazonaws.com \ + -e S3_REGION=us-east-1 \ + -p 8443:8443 \ + -v /path/to/config:/config \ + lscr.io/linuxserver/code-server:latest +``` + +## Development Workflow + +### 1. Clone the Repository +```bash +git clone https://github.com/linuxserver/docker-code-server.git +cd docker-code-server +``` + +### 2. Make Changes +- Modify `Dockerfile` for new packages/extensions +- Update service definitions in `root/etc/s6-overlay/s6-rc.d/` +- Test locally with `docker-compose up --build` + +### 3. Test Your Changes +```bash +# Build and run +docker-compose up --build + +# Access at http://localhost:8443 + +# Shell into container +docker exec -it code-server /bin/bash + +# View logs +docker logs -f code-server +``` + +### 4. Install Extensions at Runtime +```bash +# Install via helper script +docker exec -it code-server install-extension ms-python.python + +# Or via code-server CLI +docker exec -it code-server /app/code-server/bin/code-server --extensions-dir /config/extensions --install-extension ms-python.python +``` + +## Key Files to Understand + +### Dockerfile (lines 1-47) +**What it does:** +- Sets up base Ubuntu Jammy image +- Installs all dependencies (apt packages, Node.js, Docker CLI) +- Downloads and configures code-server +- Installs extensions at build time +- Cleans up apt cache + +**Key sections:** +- Lines 15-28: Package installation +- Lines 29-34: code-server download and extraction +- Lines 40-45: Extension installation + +### svc-code-server/run (root/etc/s6-overlay/s6-rc.d/svc-code-server/run) +**What it does:** +- Defines the main code-server service +- Configures authentication +- Sets up workspace +- Starts code-server with proper arguments + +**Key settings:** +- `--bind-addr 0.0.0.0:8443` - Makes it accessible from outside container +- `--user-data-dir /config/data` - Persistent user data +- `--extensions-dir /config/extensions` - Persistent extensions +- `--auth` - Authentication mode (password/none) + +### install-extension (root/usr/local/bin/install-extension) +**What it does:** +- Helper script for installing extensions at runtime +- Runs as the correct user (abc) +- Usage: `install-extension extension-name@version` + +## CI/CD Pipeline + +**Platform**: Jenkins (managed by LinuxServer.io team) + +**Pipeline Stages:** +1. **Build**: Creates Docker images for x86_64 and ARM64 +2. **Test**: Validates the build works correctly +3. **Publish**: Pushes images to: + - Docker Hub: `lscr.io/linuxserver/code-server` + - GitHub Container Registry + - Quay.io +4. **Cleanup**: Removes old images + +**Build Frequency**: Weekly base OS updates, plus updates when code-server releases new versions + +## Common Use Cases + +### 1. Personal Development Environment +```bash +docker run -d \ + --name=code-server \ + -e PUID=$(id -u) \ + -e PGID=$(id -g) \ + -e TZ=America/New_York \ + -e PASSWORD=mysecurepassword \ + -e DEFAULT_WORKSPACE=/config/workspace \ + -p 8443:8443 \ + -v ~/code-server-config:/config \ + lscr.io/linuxserver/code-server:latest +``` + +### 2. Team Development Server +```bash +docker run -d \ + --name=code-server \ + -e PUID=1000 \ + -e PGID=1000 \ + -e TZ=UTC \ + -e HASHED_PASSWORD='$2a$10$...' \ + -e PROXY_DOMAIN=code.company.com \ + -p 8443:8443 \ + -v /mnt/shared/config:/config \ + --restart unless-stopped \ + lscr.io/linuxserver/code-server:latest +``` + +### 3. Cloud Development with S3 Storage +```bash +docker run -d \ + --name=code-server \ + -e PUID=1000 \ + -e PGID=1000 \ + -e TZ=UTC \ + -e S3_ACCESS_KEY_ID=${AWS_ACCESS_KEY_ID} \ + -e S3_SECRET_ACCESS_KEY=${AWS_SECRET_ACCESS_KEY} \ + -e S3_BUCKET=dev-bucket \ + -e S3_ENDPOINT=s3.us-east-1.amazonaws.com \ + -e S3_REGION=us-east-1 \ + -e GIT_USER_NAME="Dev Team" \ + -e GIT_USER_EMAIL="dev@company.com" \ + -p 8443:8443 \ + -v /mnt/code-server:/config \ + --restart unless-stopped \ + lscr.io/linuxserver/code-server:latest +``` + +## Troubleshooting + +### Can't access web UI +**Check:** +- Container is running: `docker ps` +- Port is mapped: `docker port code-server` should show `8443/tcp -> 0.0.0.0:8443` +- No firewall blocking port 8443 +- Try `http://localhost:8443` or `http://:8443` + +### Authentication not working +**Check:** +- If using password, ensure `PASSWORD` or `HASHED_PASSWORD` is set +- If using no auth, ensure neither is set +- Hashed passwords must be properly formatted (use code-server's hashing tool) + +### Extensions missing +**Check:** +- Extensions directory exists: `/config/extensions` +- Correct permissions: owned by user abc (UID 1000) +- Try installing via `install-extension` script + +### Slow startup with large workspace +**Note:** Workspace directory contents are NOT chowned during startup (performance optimization) + +### Permission issues +**Solution:** Use `PUID` and `PGID` environment variables to match your host user + +## Version Management + +**code-server versions** are tracked in the Dockerfile and can be updated by: +1. Setting `CODE_RELEASE` build arg +2. Or letting the Dockerfile auto-detect latest via GitHub API + +**Container image versions** follow the pattern: `YYYY.MM.DD` + +## Security Considerations + +- **Authentication**: Always set a password or hashed password for production +- **File Permissions**: Use `PUID`/`PGID` to match host user +- **Sensitive Data**: Use Docker secrets or environment files for credentials +- **SSH Keys**: Mount to `/config/.ssh` for GitHub integration +- **Network**: Bind to specific IP if not using 0.0.0.0 + +## Performance Tips + +- Use SSD storage for `/config` volume +- Allocate sufficient memory (code-server can use 1GB+) +- Consider CPU limits for shared environments +- Disable telemetry: `--disable-telemetry` flag in service definition + +## Resources & Links + +- **code-server**: https://coder.com / https://github.com/coder/code-server +- **s6-overlay**: https://github.com/just-containers/s6-overlay +- **LinuxServer.io**: https://linuxserver.io +- **Docker Multi-arch**: https://github.com/docker/distribution/blob/master/docs/spec/manifest-v2-2.md +- **VS Code Extensions**: https://marketplace.visualstudio.com/vscode + +## Quick Reference + +| Task | Command | +|------|---------| +| Build image | `docker build -t my-code-server .` | +| Run container | `docker run -d -p 8443:8443 -v /config:/config my-code-server` | +| Shell access | `docker exec -it code-server /bin/bash` | +| View logs | `docker logs -f code-server` | +| Install extension | `docker exec -it code-server install-extension ms-python.python` | +| Update image | `docker pull lscr.io/linuxserver/code-server:latest` | + +--- + +**Last Updated**: May 2026 +**Maintainer**: LinuxServer.io team +**License**: OSS (see LICENSE file) From bedcd432975c6c37147e9f3e1428479c22d15fce Mon Sep 17 00:00:00 2001 From: erikfva Date: Fri, 8 May 2026 15:00:26 +0000 Subject: [PATCH 25/25] fix: use different directory for /config as HOME --- Dockerfile | 16 ++--- Dockerfile.aarch64 | 2 +- README.md | 2 + docker-compose.yml | 1 - .../s6-overlay/s6-rc.d/init-code-server/run | 69 ++++++++++--------- .../s6-overlay/s6-rc.d/svc-code-server/run | 12 ++-- root/usr/local/bin/install-extension | 2 +- 7 files changed, 54 insertions(+), 50 deletions(-) diff --git a/Dockerfile b/Dockerfile index 37b0ac7b..b03abdc6 100644 --- a/Dockerfile +++ b/Dockerfile @@ -36,15 +36,15 @@ RUN apt-get update && apt-get install -y \ && tar zxvf /tmp/ngrok.tgz -C /app \ && curl -LO https://github.com/cloudflare/cloudflared/releases/latest/download/cloudflared-linux-amd64.deb \ && dpkg -i cloudflared-linux-amd64.deb \ - && mkdir -p /temp/config/extensions \ - && /app/code-server/bin/code-server --extensions-dir /temp/config/extensions --install-extension ms-azuretools.vscode-docker \ - && /app/code-server/bin/code-server --extensions-dir /temp/config/extensions --install-extension IronGeek.vscode-env \ - && /app/code-server/bin/code-server --extensions-dir /temp/config/extensions --install-extension esbenp.prettier-vscode \ - && /app/code-server/bin/code-server --extensions-dir /temp/config/extensions --install-extension redhat.vscode-yaml \ - && /app/code-server/bin/code-server --extensions-dir /temp/config/extensions --install-extension nick-rudenko.back-n-forth \ - && /app/code-server/bin/code-server --extensions-dir /temp/config/extensions --install-extension humao.rest-client \ + && mkdir -p /temp/extensions \ + && /app/code-server/bin/code-server --extensions-dir /temp/extensions --install-extension ms-azuretools.vscode-docker \ + && /app/code-server/bin/code-server --extensions-dir /temp/extensions --install-extension IronGeek.vscode-env \ + && /app/code-server/bin/code-server --extensions-dir /temp/extensions --install-extension esbenp.prettier-vscode \ + && /app/code-server/bin/code-server --extensions-dir /temp/extensions --install-extension redhat.vscode-yaml \ + && /app/code-server/bin/code-server --extensions-dir /temp/extensions --install-extension nick-rudenko.back-n-forth \ + && /app/code-server/bin/code-server --extensions-dir /temp/extensions --install-extension humao.rest-client \ && apt-get clean \ - && rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/* /config/* + && rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/* "${HOME:?}"/* # Add local files COPY /root / diff --git a/Dockerfile.aarch64 b/Dockerfile.aarch64 index 9502c20a..0baa06e8 100644 --- a/Dockerfile.aarch64 +++ b/Dockerfile.aarch64 @@ -36,7 +36,7 @@ RUN \ echo "**** clean up ****" && \ apt-get clean && \ rm -rf \ - /config/* \ + "${HOME:?}"/* \ /tmp/* \ /var/lib/apt/lists/* \ /var/tmp/* diff --git a/README.md b/README.md index d4270a0d..e46a1557 100644 --- a/README.md +++ b/README.md @@ -146,6 +146,8 @@ Containers are configured using parameters passed at runtime (such as those abov | `-e DEFAULT_WORKSPACE=/config/workspace` | If this optional variable is set, code-server will open this directory by default | | `-v /config` | Contains all relevant configuration files. | +The container uses `HOME=/config` by default for code-server data, extensions, workspace files, and shell configuration. If overriding `HOME` with `-e HOME=/some/path`, use an absolute path inside the container and mount persistent storage at that same path. + ## Environment variables from files (Docker secrets) You can set any environment variable from a file by using a special prepend `FILE__`. diff --git a/docker-compose.yml b/docker-compose.yml index 57171907..2c39beab 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -16,7 +16,6 @@ services: - SUDO_PASSWORD=password #optional - SUDO_PASSWORD_HASH= #optional - PROXY_DOMAIN=code-server.my.domain #optional - - DEFAULT_WORKSPACE=/config/workspace #optional - S3_ACCESS_KEY_ID=${S3_ACCESS_KEY_ID} - S3_SECRET_ACCESS_KEY=${S3_SECRET_ACCESS_KEY} - S3_BUCKET=code-server diff --git a/root/etc/s6-overlay/s6-rc.d/init-code-server/run b/root/etc/s6-overlay/s6-rc.d/init-code-server/run index 3b9d1219..d01f2e90 100755 --- a/root/etc/s6-overlay/s6-rc.d/init-code-server/run +++ b/root/etc/s6-overlay/s6-rc.d/init-code-server/run @@ -1,6 +1,6 @@ #!/usr/bin/with-contenv bash -mkdir -p /config/{extensions,data,workspace,.ssh} +mkdir -p "${HOME}"/{extensions,data,workspace,.ssh} if [ -n "${SUDO_PASSWORD}" ] || [ -n "${SUDO_PASSWORD_HASH}" ]; then echo "setting up sudo access" @@ -17,17 +17,17 @@ if [ -n "${SUDO_PASSWORD}" ] || [ -n "${SUDO_PASSWORD_HASH}" ]; then fi fi -[[ ! -f /config/.bashrc ]] && \ - cp /root/.bashrc /config/.bashrc -[[ ! -f /config/.profile ]] && \ - cp /root/.profile /config/.profile - -# fix permissions (ignore contents of /config/workspace) -find /config -path /config/workspace -prune -o -exec chown abc:abc {} + -chown abc:abc /config/workspace -chmod 700 /config/.ssh -if [ -n "$(ls -A /config/.ssh)" ]; then - chmod 600 /config/.ssh/* +[[ ! -f "${HOME}/.bashrc" ]] && \ + cp /root/.bashrc "${HOME}/.bashrc" +[[ ! -f "${HOME}/.profile" ]] && \ + cp /root/.profile "${HOME}/.profile" + +# fix permissions (ignore contents of ${HOME}/workspace) +find "${HOME}" -path "${HOME}/workspace" -prune -o -exec chown abc:abc {} + +chown abc:abc "${HOME}/workspace" +chmod 700 "${HOME}/.ssh" +if [ -n "$(ls -A "${HOME}/.ssh")" ]; then + chmod 600 "${HOME}"/.ssh/* fi if [ -n "${GIT_USER_NAME}" ]; then @@ -38,8 +38,8 @@ fi # echo $S3_ACCESS_KEY_ID:$S3_SECRET_ACCESS_KEY > /etc/passwd-s3fs # chmod 600 /etc/passwd-s3fs if [ -n "${S3_ACCESS_KEY_ID}" ]; then - echo $S3_ACCESS_KEY_ID:$S3_SECRET_ACCESS_KEY > ${HOME}/.passwd-s3fs - chmod 600 ${HOME}/.passwd-s3fs + echo $S3_ACCESS_KEY_ID:$S3_SECRET_ACCESS_KEY > "${HOME}/.passwd-s3fs" + chmod 600 "${HOME}/.passwd-s3fs" mkdir /mnt/s3 mkdir -p /tmp/s3cache chmod 777 /tmp/s3cache @@ -47,7 +47,7 @@ if [ -n "${S3_ACCESS_KEY_ID}" ]; then if [ -n "${S3_REGION}" ]; then s3_region_opt=(-o endpoint=${S3_REGION}) fi - s3fs ${S3_BUCKET} /mnt/s3 -o passwd_file=${HOME}/.passwd-s3fs -o url=${S3_ENDPOINT} "${s3_region_opt[@]}" -o use_path_request_style -o uid=1000 -o gid=1000 -o umask=0002 -o allow_other -o mp_umask=0002 -o multireq_max=5 -o use_cache=/tmp/s3cache -o nonempty -o use_xattr -o enable_noobj_cache -o parallel_count=15 -o multipart_size=64 -o max_stat_cache_size=100000 -o enable_noobj_cache #-o dbglevel=info -o curldbg + s3fs ${S3_BUCKET} /mnt/s3 -o passwd_file="${HOME}/.passwd-s3fs" -o url=${S3_ENDPOINT} "${s3_region_opt[@]}" -o use_path_request_style -o uid=1000 -o gid=1000 -o umask=0002 -o allow_other -o mp_umask=0002 -o multireq_max=5 -o use_cache=/tmp/s3cache -o nonempty -o use_xattr -o enable_noobj_cache -o parallel_count=15 -o multipart_size=64 -o max_stat_cache_size=100000 -o enable_noobj_cache #-o dbglevel=info -o curldbg # add SSH file @@ -59,21 +59,21 @@ if [ -n "${S3_ACCESS_KEY_ID}" ]; then if [ -f "$ssh_file" ]; then echo "ssh file exist ***" # eval "$(ssh-agent -s)" - cp $ssh_file /config/.ssh/ - chown abc:abc /config/.ssh - chmod 600 /config/.ssh/id_ed25519 + cp "$ssh_file" "${HOME}/.ssh/" + chown abc:abc "${HOME}/.ssh" + chmod 600 "${HOME}/.ssh/id_ed25519" # ssh-keyscan -t rsa github.com >> ~/.ssh/known_hosts - # ssh-add /config/.ssh/id_ed25519 + # ssh-add "${HOME}/.ssh/id_ed25519" # ssh -T git@github.com - echo 'eval "$(ssh-agent -s)"' >> ~/.bashrc - echo 'ssh-add /config/.ssh/id_ed25519' >> ~/.bashrc - echo 'export SSH_PRIVATE_KEY="$(cat /mnt/s3/.ssh/id_ed25519)"' >> ~/.bashrc + echo 'eval "$(ssh-agent -s)"' >> "${HOME}/.bashrc" + echo "ssh-add ${HOME}/.ssh/id_ed25519" >> "${HOME}/.bashrc" + echo 'export SSH_PRIVATE_KEY="$(cat /mnt/s3/.ssh/id_ed25519)"' >> "${HOME}/.bashrc" - # cat /config/.ssh/id_ed25519 | tr -d '\r' | ssh-add - > /dev/null - # ssh-keyscan github.com >> /config/.ssh/known_hosts - # ssh-add /config/.ssh/id_ed25519 - # ssh-keyscan -t rsa github.com >> /config/.ssh/known_hosts + # cat "${HOME}/.ssh/id_ed25519" | tr -d '\r' | ssh-add - > /dev/null + # ssh-keyscan github.com >> "${HOME}/.ssh/known_hosts" + # ssh-add "${HOME}/.ssh/id_ed25519" + # ssh-keyscan -t rsa github.com >> "${HOME}/.ssh/known_hosts" # ssh -T git@github.com if [ -f "/mnt/s3/init-code-server.sh" ]; then echo "init-code-server.sh exist ***" @@ -89,11 +89,11 @@ if [ -n "${S3_ACCESS_KEY_ID}" ]; then fi # echo "installing extensions***" -# /app/code-server/bin/code-server --extensions-dir /config/extensions --install-extension IronGeek.vscode-env -mv -v /temp/config/extensions/* /config/extensions/ +# /app/code-server/bin/code-server --extensions-dir "${HOME}/extensions" --install-extension IronGeek.vscode-env +mv -v /temp/extensions/* "${HOME}/extensions/" CODE_BIN=/app/code-server/bin/code-server -EXT_DIR=/config/extensions +EXT_DIR="${HOME}/extensions" echo "[init-extensions] Starting runtime extension installation..." >&2 install_one() { i=0; until [ $i -ge 3 ]; do @@ -118,7 +118,7 @@ if [ -n "${TOKEN_NGROK}" ]; then mkdir -p /app/logs /app/ngrok http --log=stdout 3000 > /app/logs/ngrok.log & sleep 7 - grep "started tunnel" /app/logs/ngrok.log | awk '{print $NF}' > /config/workspace/https_url.txt + grep "started tunnel" /app/logs/ngrok.log | awk '{print $NF}' > "${HOME}/workspace/https_url.txt" fi # expose PORTS with cloudflare @@ -132,9 +132,12 @@ sleep 7 for port in "${PORTS[@]}"; do cf_url=$(grep -oE 'https://[a-zA-Z0-9.-]+\.trycloudflare\.com' /app/logs/cloudflared_$port.log | head -n 1) if [ -n "$cf_url" ]; then - echo "# PORT $port" >> /config/workspace/https_url.txt - echo "$cf_url" >> /config/workspace/https_url.txt + echo "# PORT $port" >> "${HOME}/workspace/https_url.txt" + echo "$cf_url" >> "${HOME}/workspace/https_url.txt" fi done -echo 'echo "Welcome to code-server terminal! power by Erik Vargas"' >> ~/.bashrc +welcome_message='echo "Welcome to code-server terminal! power by Erik Vargas"' +if ! grep -Fxq "$welcome_message" "${HOME}/.bashrc"; then + echo "$welcome_message" >> "${HOME}/.bashrc" +fi diff --git a/root/etc/s6-overlay/s6-rc.d/svc-code-server/run b/root/etc/s6-overlay/s6-rc.d/svc-code-server/run index adfe3f34..a86d5641 100755 --- a/root/etc/s6-overlay/s6-rc.d/svc-code-server/run +++ b/root/etc/s6-overlay/s6-rc.d/svc-code-server/run @@ -14,9 +14,9 @@ else fi if [ -n "${S3_ACCESS_KEY_ID}" ]; then - echo '{"folders": [ {"path": "/config/workspace"}, {"path": "/mnt/s3"} ]}' > ${HOME}/default.code-workspace - chmod 600 ${HOME}/default.code-workspace - DEFAULT_WORKSPACE2=${HOME}/default.code-workspace + printf '{"folders": [ {"path": "%s/workspace"}, {"path": "/mnt/s3"} ]}\n' "${HOME}" > "${HOME}/default.code-workspace" + chmod 600 "${HOME}/default.code-workspace" + DEFAULT_WORKSPACE2="${HOME}/default.code-workspace" else DEFAULT_WORKSPACE2=${DEFAULT_WORKSPACE} fi @@ -26,9 +26,9 @@ exec \ s6-setuidgid root \ /app/code-server/bin/code-server \ --bind-addr 0.0.0.0:8443 \ - --user-data-dir /config/data \ - --extensions-dir /config/extensions \ + --user-data-dir "${HOME}/data" \ + --extensions-dir "${HOME}/extensions" \ --disable-telemetry \ --auth "${AUTH}" \ "${PROXY_DOMAIN_ARG}" \ - "${DEFAULT_WORKSPACE2:-/config/workspace}" + "${DEFAULT_WORKSPACE2:-${HOME}/workspace}" diff --git a/root/usr/local/bin/install-extension b/root/usr/local/bin/install-extension index 79c922a6..6a6e6eeb 100755 --- a/root/usr/local/bin/install-extension +++ b/root/usr/local/bin/install-extension @@ -1,7 +1,7 @@ #!/usr/bin/with-contenv bash # shellcheck shell=bash -_install=(/app/code-server/bin/code-server "--extensions-dir" "/config/extensions" "--install-extension") +_install=(/app/code-server/bin/code-server "--extensions-dir" "${HOME}/extensions" "--install-extension") if [ "$(whoami)" == "abc" ]; then "${_install[@]}" "$@"