diff --git a/deploy-container/README.md b/deploy-container/README.md index 46b99a2e..b8b2ec5e 100644 --- a/deploy-container/README.md +++ b/deploy-container/README.md @@ -4,8 +4,8 @@ An container image built for deploying code-server. ## Guides -* [Deploy on Railway](../guides/railway.md) -* [Deploy on Heroku](../guides/heroku.md) +- [Deploy on Railway](../guides/railway.md) +- [Deploy on Heroku](../guides/heroku.md) Docker Hub: `bencdr/code-server-deploy-container` @@ -15,7 +15,7 @@ To update your code-server version, modify the version number on line 2 in your We've included some examples on how to add additoonal dependencies in the root-level [Dockerfile](../Dockerfile): -``` Dockerfile +```Dockerfile # Install a VS Code extension: # Note: we use a different marketplace than VS Code. See https://github.com/cdr/code-server/blob/main/docs/FAQ.md#differences-compared-to-vs-code RUN code-server --install-extension esbenp.prettier-vscode @@ -23,7 +23,7 @@ RUN code-server --install-extension esbenp.prettier-vscode # Install apt packages: RUN sudo apt-get install -y ubuntu-make -# Copy files: +# Copy files: COPY deploy-container/myTool /home/coder/myTool ``` @@ -31,13 +31,16 @@ COPY deploy-container/myTool /home/coder/myTool ## Environment variables -| Variable Name | Description | Default Value | -| ----------------- | ------------------------------------------------------------------------------------------------ | ------------------- | -| `PASSWORD` | Password for code-server | | -| `HASHED_PASSWORD` | Overrrides PASSWORD. [SHA-256 hash](https://xorbin.com/tools/sha256-hash-calculator) of password | -| `USE_LINK` | Use code-server --link instead of a password (coming soon) | false | -| `GIT_REPO` | A git repository to clone | | -| `START_DIR` | The directory code-server opens (and clones repos in) | /home/coder/project | +| Variable Name | Description | Default Value | +| ------------------ | -------------------------------------------------------------------------------------------------- | ------------------- | +| `PASSWORD` | Password for code-server | | +| `HASHED_PASSWORD` | Overrrides PASSWORD. [SHA-256 hash](https://xorbin.com/tools/sha256-hash-calculator) of password | +| `USE_LINK` | Use code-server --link instead of a password (coming soon) | false | +| `GIT_REPO` | A git repository to clone | | +| `DOTFILES_REPO` | A [dotfiles](https://dotfiles.github.io/) repo to save preferences. Runs install.sh, if it exists. | | +| `DOTFILES_SYMLINK` | Symlinks dotfiles repo to $HOME, if exits. | true | +| `START_DIR` | The directory code-server opens (and clones repos in) | /home/coder/project | + --- Other code-server environment variables (such as `CODE_SERVER_CONFIG` ) can also be used. See the [code-server FAQ](https://github.com/cdr/code-server/blob/main/docs/FAQ.md) for details. @@ -48,7 +51,7 @@ This image has built-in support for [rclone](https://rclone.org/) so that your f You can generate the rclone config on any machine, but it works great on the code-server environment itself, or Google Cloud Shell :) -``` sh +```sh # 1. install rclone # see https://rclone.org/install/ for other install options $ curl https://rclone.org/install.sh | sudo bash @@ -65,16 +68,16 @@ Now, you can add the following the environment variables in the code-server clou | Environment Variable | Description | Default Value | Required | | -------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------- | -------- | -| RCLONE_DATA | the encoded rclone config you copied in step 3 | n/a | ✅ | -| RCLONE_REMOTE_NAME | the name of the remote you added in step 2.
check with `$ rclone listremotes` | code-server-remote | | +| RCLONE_DATA | the encoded rclone config you copied in step 3 | n/a | ✅ | +| RCLONE_REMOTE_NAME | the name of the remote you added in step 2.
check with `$ rclone listremotes` | code-server-remote | | | RCLONE_SOURCE | source directory to sync files in the code-server container | the project directory: `/home/coder/project` | | | RCLONE_DESTINATION | the path in the remote that rclone syncs to. change this if you have multiple code-server environments, or if you want to better organize your files. | code-server-files | | -| RCLONE_VSCODE_TASKS | import push and pull shortcuts into VS Code ![rclone screenshot from VS Code](../img/rclone-vscode-tasks.png) | true | +| RCLONE_VSCODE_TASKS | import push and pull shortcuts into VS Code ![rclone screenshot from VS Code](../img/rclone-vscode-tasks.png) | true | | RCLONE_AUTO_PUSH | automatically push files on startup if the rclone remote is empty (environment -> rclone remote) | true | | | RCLONE_AUTO_PULL | automatically pull files on startup if the rclone remote is not empty (rclone -> environment remote) | true | | -| RCLONE_FLAGS | additional flags to attach to the push and pull script.
type `$ rclone help flags` for a list. | | | +| RCLONE_FLAGS | additional flags to attach to the push and pull script.
type `$ rclone help flags` for a list. | | | -``` sh +```sh # --- How to use --- @@ -83,14 +86,14 @@ $ sh /home/coder/push_remote.sh # save your uncomitted files to the remote $ sh /home/coder/pull_remote.sh # get latest files from the remote # In VS Code: -# use items in bottom bar or ctrl + P, run task: push_remote or pull_remote or +# use items in bottom bar or ctrl + P, run task: push_remote or pull_remote or ``` ### Popular rclone flags To avoid syncing unnecessary directories, add this to `RCLONE_FLAGS` : -``` none +```none --exclude "node_modules/**" --exclude ".git/**" ``` @@ -98,8 +101,8 @@ To avoid syncing unnecessary directories, add this to `RCLONE_FLAGS` : ## Todo -* [ ] Make `push_remote` and `pull_remote` commands in path -* [ ] Impliment file watcher or auto file sync in VS Code -* [ ] Attach a "push" on a git stash?? -* [ ] Add support for SSH / VS Code remote access -* [ ] Make rclone logs visible in environment for debugging +- [ ] Make `push_remote` and `pull_remote` commands in path +- [ ] Impliment file watcher or auto file sync in VS Code +- [ ] Attach a "push" on a git stash?? +- [ ] Add support for SSH / VS Code remote access +- [ ] Make rclone logs visible in environment for debugging diff --git a/deploy-container/entrypoint.sh b/deploy-container/entrypoint.sh index a450f3a2..1420ea70 100755 --- a/deploy-container/entrypoint.sh +++ b/deploy-container/entrypoint.sh @@ -76,6 +76,25 @@ else fi +# Add dotfiles, if set +if [ -n "$DOTFILES_REPO" ]; then + # grab the files from the remote instead of running project_init() + echo "[$PREFIX] Cloning dotfiles..." + mkdir -p $HOME/dotfiles + git clone $DOTFILES_REPO $HOME/dotfiles + + DOTFILES_SYMLINK="${RCLONE_AUTO_PULL:-true}" + + # symlink repo to $HOME + if [ $DOTFILES_SYMLINK = "true" ]; then + shopt -s dotglob + ln -sf source_file $HOME/dotfiles/* $HOME + fi + + # run install script, if it exists + [ -f "$HOME/dotfiles/install.sh" ] && $HOME/dotfiles/install.sh +fi + echo "[$PREFIX] Starting code-server..." # Now we can run code-server with the default entrypoint /usr/bin/entrypoint.sh --bind-addr 0.0.0.0:8080 $START_DIR \ No newline at end of file