From 9446cc8245a3c03cd9b2ab5a1824b1b036df4b92 Mon Sep 17 00:00:00 2001 From: Asher Date: Mon, 15 Jul 2019 13:23:29 -0500 Subject: [PATCH] Update Dockerfile --- .dockerignore | 2 -- .node-version | 2 +- .travis.yml | 2 +- Dockerfile | 29 +++++++++++++++++++---------- README.md | 8 ++++---- scripts/ci.bash | 2 ++ scripts/tasks.bash | 14 ++++++++------ 7 files changed, 35 insertions(+), 24 deletions(-) diff --git a/.dockerignore b/.dockerignore index ee53f91e..007882d1 100644 --- a/.dockerignore +++ b/.dockerignore @@ -1,7 +1,5 @@ Dockerfile -# Docs doc/ -# GitHub stuff .github .gitignore .travis.yml diff --git a/.node-version b/.node-version index 1047f696..5007551b 100644 --- a/.node-version +++ b/.node-version @@ -1 +1 @@ -10.15.1 +10.16.0 diff --git a/.travis.yml b/.travis.yml index 5c4e3c55..764e357b 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,6 +1,6 @@ language: node_js node_js: -- 10.15.1 +- 10.16.0 services: - docker matrix: diff --git a/Dockerfile b/Dockerfile index 0610301a..74666527 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,4 +1,6 @@ -FROM node:10.15.1 +FROM node:10.16.0 +ARG codeServerVersion=docker +ARG vscodeVersion # Install VS Code's deps. These are the only two it seems we need. RUN apt-get update && apt-get install -y \ @@ -11,9 +13,14 @@ RUN npm install -g yarn@1.13 WORKDIR /src COPY . . -# In the future, we can use https://github.com/yarnpkg/rfcs/pull/53 to make yarn use the node_modules -# directly which should be fast as it is slow because it populates its own cache every time. -RUN yarn && NODE_ENV=production yarn task build:server:binary + +# In the future, we can use https://github.com/yarnpkg/rfcs/pull/53 to make +# yarn use the node_modules directly which should be fast as it is slow because +# it populates its own cache every time. +RUN yarn \ + && yarn build "${codeServerVersion}" "${vscodeVersion}" linux x64 \ + && yarn binary "${codeServerVersion}" "${vscodeVersion}" linux x64 \ + && mv "/src/build/code-server${codeServerVersion}-vsc${vscodeVersion}-linux-x64" /src/build/code-server # We deploy with ubuntu so that devs have a familiar environment. FROM ubuntu:18.04 @@ -30,7 +37,7 @@ RUN apt-get update && apt-get install -y \ wget RUN locale-gen en_US.UTF-8 -# We unfortunately cannot use update-locale because docker will not use the env variables +# We cannot use update-locale because docker will not use the env variables # configured in /etc/default/locale so we need to set it manually. ENV LC_ALL=en_US.UTF-8 @@ -38,16 +45,18 @@ RUN adduser --gecos '' --disabled-password coder && \ echo "coder ALL=(ALL) NOPASSWD:ALL" >> /etc/sudoers.d/nopasswd USER coder -# We create first instead of just using WORKDIR as when WORKDIR creates, the user is root. +# We create first instead of just using WORKDIR as when WORKDIR creates, the +# user is root. RUN mkdir -p /home/coder/project WORKDIR /home/coder/project -# This assures we have a volume mounted even if the user forgot to do bind mount. -# So that they do not lose their data if they delete the container. +# This ensures we have a volume mounted even if the user forgot to do bind +# mount. So that they do not lose their data if they delete the container. VOLUME [ "/home/coder/project" ] -COPY --from=0 /src/packages/server/cli-linux-x64 /usr/local/bin/code-server +COPY --from=0 /src/build/code-server /usr/local/bin/code-server EXPOSE 8443 +EXPOSE 8444 -ENTRYPOINT ["dumb-init", "code-server"] +ENTRYPOINT ["dumb-init", "code-server", "--host", "0.0.0.0"] diff --git a/README.md b/README.md index 1a9c69b2..70a1c2ff 100644 --- a/README.md +++ b/README.md @@ -10,7 +10,7 @@ remote server, accessible through the browser. Try it out: ```bash -docker run -it -p 127.0.0.1:8443:8443 -v "${PWD}:/home/coder/project" codercom/code-server --allow-http --no-auth +docker run -it -p 127.0.0.1:8443:8443 -p 127.0.0.1:8444:8444 -v "$PWD:/home/coder/project" codercom/code-server --allow-http --no-auth ``` - Code on your Chromebook, tablet, and laptop with a consistent dev environment. @@ -59,9 +59,9 @@ Quickstart guides for [Google Cloud](doc/admin/install/google_cloud.md), How to [secure your setup](/doc/security/ssl.md). ### Build -- If you also plan on developing, set the `OUT` environment variable: ` - export OUT=/path/to/some/directory`. Otherwise it will build in this - directory which will cause issues because then `yarn watch` will try to +- If you also plan on developing, set the `OUT` environment variable: + `export OUT=/path/to/some/directory`. Otherwise it will build in this + directory which will cause issues because `yarn watch` will try to compile the build directory as well. - For now `@coder/nbin` is a global dependency. - Run `yarn build ${codeServerVersion} ${vscodeVersion} ${target} ${arch}` in diff --git a/scripts/ci.bash b/scripts/ci.bash index 8a64f0c0..9fb77062 100755 --- a/scripts/ci.bash +++ b/scripts/ci.bash @@ -16,6 +16,8 @@ function docker-build() { # TODO: temporary as long as we are rebuilding modules. if [[ "${image}" == "codercom/nbin-alpine" ]] ; then docker exec "${containerId}" apk add libxkbfile-dev libsecret-dev + else + docker exec "${containerId}" yum install -y libxkbfile-devel libsecret-devel fi function docker-exec() { diff --git a/scripts/tasks.bash b/scripts/tasks.bash index ed0ae546..407f2f6d 100755 --- a/scripts/tasks.bash +++ b/scripts/tasks.bash @@ -94,13 +94,13 @@ function build-code-server() { rm -rf "${codeServerBuildPath}/out/vs/server/typings" # Rebuild to make sure the native modules work since at the moment all the - # pre-built packages are from one Linux system. This means you must build on - # the target system. + # pre-built packages are from one Linux system which compiles against the + # latest glibc. This means you must build on the target system. log "Installing remote dependencies" cd "${vscodeSourcePath}/remote" - if [[ "${target}" != "linux" ]] ; then - yarn --production --force - fi + # TODO: vscode-ripgrep errors saying node_modules doesn't exist. + # TODO: yarn --force should be the same but it doesn't fix it. + npm rebuild || true cp -r "${vscodeSourcePath}/remote/node_modules" "${codeServerBuildPath}" # Only keep the production dependencies. @@ -133,7 +133,9 @@ function build-vscode() { log "Installing VS Code dependencies" # Not entirely sure why but there seem to be problems with native modules # so rebuild them. - yarn --force + # TODO: vscode-ripgrep errors saying node_modules doesn't exist. + # TODO: yarn --force should be the same but it'. + npm rebuild || true # Keep just what we need to keep the pre-built archive smaller. rm -rf "${vscodeSourcePath}/test"