Skip to main content

Server Setup

Step 1: Create directories

mkdir -p cloud-dev-stack/{config,projects,init.d,shared}
cd cloud-dev-stack

Step 2: Download the files

# Container init script (desktop)
curl -fsSL https://raw.githubusercontent.com/Piero24/Cloud-Dev-Desktop/main/init.sh \
-o init.d/99-ssh.sh
chmod +x init.d/99-ssh.sh

# Container init script (vscode)
curl -fsSL https://raw.githubusercontent.com/Piero24/Cloud-Dev-Desktop/main/init.d/99-vscode-env.sh \
-o init.d/99-vscode-env.sh
chmod +x init.d/99-vscode-env.sh

# Plain Docker Compose file
curl -fsSL https://raw.githubusercontent.com/Piero24/Cloud-Dev-Desktop/main/compose.yaml \
-o compose.yaml

Step 3: Edit the values

nano compose.yaml

Replace in the desktop service:

  • CHANGE_ME_WEB_PASSWORD: login password for KasmVNC (desktop) and code-server
  • CHANGE_ME_SUDO_PASSWORD: sudo password, also used for SSH login
  • CHANGE_ME_ANTHROPIC_KEY: your Anthropic API key
  • CHANGE_ME_GIT_NAME / CHANGE_ME_GIT_EMAIL: your Git identity
  • CHANGE_ME_GITHUB_TOKEN: GitHub fine grained PAT
  • CUSTOM_RES_W / CUSTOM_RES_H: desktop resolution (default 1920×1080)
  • TZ: your timezone
Username is always abc

The system username is locked to abc. The linuxserver base image uses it for the pre configured desktop and services. Changing it would break KasmVNC, SSH, and file permissions. SSH login: ssh -p 3434 abc@<server-ip>.

Both containers share the same home

Desktop and vscode mount the same ./config volume as /config. They share shell config, git identity, nvm, Node, Claude Code, and all installed packages. Install something in one, it's available in the other.

Step 4: Start the stack

docker compose up -d
docker ps | grep dev-

You should see three containers: dev-desktop, dev-vscode, and dev-beszel-agent.

Step 5: Test direct access

TestURL / Command
Web desktophttp://<server-ip>:3000 KasmVNC login (user: abc, pass: PASSWORD)
Web VS Codehttp://<server-ip>:9090 code-server login (pass: PASSWORD)
SSHssh -p 3434 abc@<server-ip> login with SUDO_PASSWORD

If all four work, the stack is running correctly.