VSCode Server¶
Docker Apps Rating
U/GID | TZ | SSO/Users | Existing FS | Portable | Subfolder | Mobile |
---|---|---|---|---|---|---|
❎ | ✅* | ❎🤵 | ✅ | ✅ | ✔ | ✔ |
services:
code-server:
image: lscr.io/linuxserver/code-server:latest
container_name: code-server
environment:
- PUID=1000
- PGID=1001
- TZ=America/Vancouver
- DEFAULT_WORKSPACE=/projects #optional
- DOCKER_MODS=linuxserver/mods:code-server-python3
env_file:
- .env
volumes:
# Master configuration
- ~/docker/code-server:/config
# dotfiles
- ~/.bashrc:/config/.bashrc
- ~/.ssh:/config/.ssh
- ~/.gitconfig:/config/.gitconfig
- ~/Documents/ssh:/config/Documents/ssh # ssh keys
# Workspace folders (eg. Docker, other projects)
- ~/docker:/docker
- ~/projects:/projects
ports:
- 4443:8443
networks:
- public
restart: unless-stopped
networks:
public:
name: public
external: true
Setup¶
The setup follows the same 01-docker-infra, since this is externally accessible, it has a network of public
Environments¶
DEFAULT_WORKSPACE
- the directory that VSCode will open to when accessing it, defaults to /config
The container is Linuxserver so it follows their standards of PUGID and TZ
The Docker Mods will add python3 into the environment for debugging python files.
env file¶
The environment file should contain the hashed password, use https://argon2.online/ to generate a hashed password.
Although 2FA and SSO is supported, it is still recommended to put another layer of password since VSCode server have access to very sensitive files.
Directory¶
The base configuration is stored in ~/docker/code-server
as usual
- the bind mount
/config
is the container is also theXDG_HOME
which is the default Linux home directory
Given that the config is also the home directory, many dotfiles such as bash, git and SSH configuration need to be bind mounted from the hosts~
directory into containers/config
or home directory.
The workspace folder contains docker
(docker configuration and data) and projects
(cloned from git repo) which are frequently edited files.
Usage¶
The app functions similarly to VSCode and mostly follows the shortcut of the desktop version. Such as Ctrl+Shift+P to open command palette.
The app has high idle usage, try to close workspace/sign out and restart after editing, or use solutions to use on-demand.
The app also have access to Github accounts, first clone a private repo and code-server will prompt for login for Github.
Problems¶
Official account sync login doesn’t work, third party extensions doesn’t work either, so the settings has to be done manually.
- for basic configurations
keybindings.json
andsettings.json
contains all the theme and extension settings for a minimal viable VSCode - the
json
files are periodically copied from main Desktop and synced to the server via Syncthing
Remote SSH doesn’t work, but can be solved by SSH extension.
Github Copilot doesn’t work.
Python syntax highlighting doesn’t work.
Extensions¶
SSH¶
Since the default Remote SSH doesn’t work, the extension SSH FS can be used.
The configuration is done in settings.json
and will show up in UI.
"sshfs.configs": [
{
"name": "mediaserver-docker",
"host": "10.10.120.16",
"username": "karis",
"privateKeyPath": "/config/Documents/ssh/openssh_keys/mediaserver.key",
"root": "~/docker"
},
{
"name": "mediaserver-homeassistant",
"host": "10.10.120.16",
"username": "karis",
"privateKeyPath": "/config/Documents/ssh/openssh_keys/mediaserver.key",
"root": "/srv/homeassistant"
}
],
The options from left to right are
- Open Folder - open the folder (configured as
root
) to workspace for editing, for SSH connections outside the network like VPS, the speed is slow - Open Terminal - start a terminal session to the remote folder
- Settings
- Disconnect - after editing the remote folder, this will remote the remote folder from the workspace
Reverse Proxy/Authentication¶
Reverse Proxy¶
The app supports both subdomain and subpath for proxying in Nginx Proxy Manager.
SSO¶
For Authelia SSO in Nginx Proxy Manager and custom location support.
location /vscode/ {
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection $http_connection;
include /snippets/proxy.conf;
include /snippets/authelia-authrequest.conf;
proxy_pass http://10.10.120.12:4443/;
}
This configuration support all of websocket, subpath and authelia. No additional authelia whitelist is needed.