This guide helps you create your first DDEV workspace and start developing in the cloud.
Coder is an open-source platform for creating remote development environments. Instead of developing on your local machine, you work in a cloud-based workspace with all tools pre-installed.
Key concepts:
- Workspace - Your personal development environment (like a remote VM)
- Template - A blueprint for creating workspaces (pre-configured tools, settings)
- Agent - Software running in your workspace that connects to Coder server
What is DDEV?
DDEV is a local development tool for PHP, Node.js, and Python projects. It uses Docker containers to provide consistent development environments with databases, web servers, and development tools.
With this template, DDEV runs inside your cloud workspace, giving you all DDEV features without local setup.
You need access to a Coder server. Ask your administrator for:
- Coder server URL (e.g.,
https://coder.example.com) - Username and password (or SSO login)
- Confirmation that the
user-defined-webtemplate is available
Install on your local machine:
Coder CLI (required for SSH access):
# macOS (Homebrew)
brew install coder/coder/coder
# Linux (curl)
curl -L https://coder.com/install.sh | sh
# Windows (PowerShell)
winget install Coder.Coder
# Or download from: https://github.com/coder/coder/releasesSSH client (usually pre-installed):
# Verify SSH is available
ssh -VGit (optional, for cloning repositories):
# macOS
brew install git
# Linux
apt-get install git # or yum install git
# Windows
winget install Git.Git
# Verify
git --versionIf you prefer desktop VS Code over the web version:
# Download from https://code.visualstudio.com/
# Install Remote-SSH extension
code --install-extension ms-vscode-remote.remote-ssh- Open your Coder server URL in a browser
- Enter your username and password
- Click Login
You'll see the Coder dashboard.
# Login to Coder server
coder login https://coder.example.com
# Enter your credentials when prompted
# Or use an API token if providedVerify login:
coder list
# Should show your workspaces (empty if this is your first time)- Click Create Workspace button
- Select user-defined-web template
- Enter a workspace name (e.g.,
my-first-workspace)- Use lowercase, numbers, hyphens
- No spaces or special characters
- (Optional) Configure parameters:
- CPU: Number of cores (default: 4)
- Memory: RAM in GB (default: 8)
- Node.js version: Node version (default: 24)
- Click Create Workspace
Wait for workspace to start (1-3 minutes):
- Status will change from "Starting" to "Running"
- You'll see the workspace dashboard
# Create workspace with defaults
coder create --template user-defined-web my-first-workspace --yes
# Or with custom parameters
coder create --template user-defined-web my-first-workspace \
--parameter cpu=8 \
--parameter memory=16 \
--yesCheck workspace status:
coder list
# Should show your workspace as "Running"- In Coder dashboard, find your workspace
- Under Apps, click VS Code
- VS Code opens in your browser
You now have a full IDE in the cloud!
# SSH into workspace
coder ssh my-first-workspace
# You're now inside your workspace
# The prompt changes to: coder@my-first-workspace:~$Run your first command:
# Check DDEV is installed
ddev version
# Check Docker is running
docker ps
# Check Node.js version
node --version
# Exit SSH session
exit# Configure SSH for Coder workspaces
coder config-ssh
# Open desktop VS Code
# Use Remote-SSH extension to connect to: coder.my-first-workspace# Inside workspace (via SSH or VS Code terminal)
docker ps
# Should show: CONTAINER ID IMAGE COMMAND ...
# (Empty list is normal - no containers running yet)
docker info
# Should show Docker system informationIf Docker doesn't work, see Troubleshooting below.
ddev version
# Should show DDEV version (latest version from image)
ddev list
# Should show: No running DDEV projects were found.df -h
# Should show plenty of free space on / and /home/coder# CPU cores
nproc
# RAM
free -h
# Should match what you configured (default: 4 cores, 8GB RAM)# Create project directory
mkdir -p ~/projects/my-site
cd ~/projects/my-site
# Initialize DDEV project
# Choose a project type: php, wordpress, drupal, laravel, etc.
ddev config --project-type=php --docroot=web
# Start DDEV
ddev startWait for DDEV to start (1-2 minutes first time):
Starting my-site...
...
Successfully started my-site
Project can be reached at https://my-site.ddev.site
# Set up Git SSH first (see Step 8 below)
# Clone your repository
cd ~/projects
git clone git@github.com:username/repo.git my-site
cd my-site
# Configure DDEV (if not already configured)
ddev config --auto
# Start DDEV
ddev start# Create a Laravel project
mkdir -p ~/projects/demo-laravel
cd ~/projects/demo-laravel
# Configure DDEV
ddev config --project-type=laravel --docroot=public
# Use DDEV's Composer to create Laravel project
ddev composer create laravel/laravel
# Start DDEV
ddev startDDEV normally uses URLs like https://my-site.ddev.site, but in Coder, you access projects via port forwarding.
How it works:
- DDEV listens on ports 80/443 inside workspace
- Coder forwards these ports through its proxy
- You access via Coder's forwarded URLs
Via Coder Web UI (Recommended):
- Go to Coder dashboard
- Find your workspace
- Under Apps, click DDEV Web
- Your DDEV project loads in a new tab
The URL follows the pattern: https://ddev-web--workspace-name--owner.coder.example.com/
Via CLI Port Forward:
# Forward port to your local machine
coder port-forward my-first-workspace --tcp 8080:80
# Then access in your browser:
# http://localhost:8080Check DDEV status:
ddev describe
# Shows project details and status
# Note: URLs shown by ddev describe won't work - use Coder's forwarded URLs insteadVia VS Code for Web:
- Open VS Code (Apps → VS Code in Coder UI)
- Navigate to
~/projects/my-site - Edit files normally
- Changes are saved automatically
Via SSH and vim:
coder ssh my-first-workspace
cd ~/projects/my-site
vim web/index.php# Refresh your browser to see changes
# Or use DDEV commands:
ddev describe # Show project info
ddev logs # View container logs
ddev exec <cmd> # Run command in web container# Start project
ddev start
# Stop project
ddev stop
# Restart project
ddev restart
# View status
ddev describe
# View logs
ddev logs
# SSH into web container
ddev ssh
# Run Composer
ddev composer install
# Run npm
ddev npm install
ddev npm run dev
# Import database
ddev import-db --file=dump.sql.gz
# Export database
ddev export-db --file=dump.sql.gz
# View all commands
ddev help# Inside workspace
git config --global user.name "Your Name"
git config --global user.email "your.email@example.com"To clone private repositories or push to GitHub/GitLab/etc, you need to add your Coder public key to your Git host.
Step 1: Get your Coder public key
# Inside workspace (via SSH or VS Code terminal)
coder publickey
# This shows your Coder-managed public key
# Copy the entire output (starts with ssh-ed25519 or ssh-rsa)Step 2: Add key to your Git host
For GitHub:
- Go to https://github.com/settings/keys
- Click New SSH key
- Paste your Coder public key
- Click Add SSH key
For GitLab:
- Go to https://gitlab.com/-/profile/keys
- Paste your Coder public key
- Click Add key
For Bitbucket:
- Go to https://bitbucket.org/account/settings/ssh-keys/
- Click Add key
- Paste your Coder public key
Step 3: Test SSH connection
# Test GitHub
ssh -T git@github.com
# Should say: "Hi username! You've successfully authenticated..."
# Test GitLab
ssh -T git@gitlab.com
# Should say: "Welcome to GitLab, @username!"# Clone private repository
cd ~/projects
git clone git@github.com:username/private-repo.git
# Make changes
cd private-repo
# ... edit files ...
# Commit and push
git add .
git commit -m "Update from Coder workspace"
git pushHow it works: Coder's GitSSH wrapper automatically uses your Coder-managed SSH key for all Git operations. You don't need to manage SSH keys inside the workspace.
When not actively developing:
# Via CLI
coder stop my-first-workspace
# Via UI: Click "Stop" button on workspaceWhat happens when stopped:
- Workspace container stops
- All files in
/home/coderare preserved - DDEV projects are preserved
- Billing/resource usage stops
# Via CLI
coder start my-first-workspace
# Via UI: Click "Start" button on workspaceStartup time: about a minute (faster than initial create without cache)
After starting:
# SSH in
coder ssh my-first-workspace
# Restart DDEV projects
cd ~/projects/my-site
ddev start# Via CLI
coder delete my-first-workspace
# Via UI: Click "Delete" button, confirmWhat gets deleted:
- Workspace container
- All files in
/home/coder - All DDEV projects and databases
- Docker images and volumes inside workspace
Before deleting:
# Backup important data
cd ~/projects
tar -czf backup.tar.gz my-site/
# Download via VS Code or scpCheck status:
coder list
# If stuck in "Starting", check logs:
coder logs my-first-workspaceCommon causes:
- Template not deployed correctly (contact admin)
- Resource limits exceeded (contact admin)
- Sysbox runtime not installed on host (contact admin)
Symptom: Cannot connect to Docker daemon
Solution:
# Check Docker service
systemctl status docker
# Restart Docker
sudo systemctl restart docker
# Wait a few seconds, then test
docker psIf still broken, restart workspace: coder restart my-first-workspace
Symptom: ddev start fails
Check Docker first:
docker ps
# If this fails, fix Docker before DDEVCommon DDEV issues:
# Reset DDEV project
ddev poweroff
ddev start
# Or delete and recreate
ddev delete --omit-snapshot
ddev config --auto
ddev startSymptom: Port forwarding shows ports but URLs don't load
Check:
# Inside workspace
ddev describe
curl localhost:80
# Should return HTMLSolution:
- Use Coder's port forwarding links (not DDEV URLs)
- Find port URLs in the Ports section of Coder web UI
- DDEV's URLs (*.ddev.site) won't work in Coder
Symptom: Permission denied (publickey) when cloning
Solution:
- Get your Coder public key:
coder publickey - Add that key to GitHub/GitLab (Settings → SSH Keys)
- Test:
ssh -T git@github.com - If still failing, regenerate:
coder publickey --resetand add new key to Git host
Symptom: No space left on device
Solution:
# Clean Docker images and volumes
docker system prune -a --volumes -f
# Check disk usage
df -h
du -sh ~/projects/*
# Delete unused projects
rm -rf ~/projects/old-projectCheck resources:
# Inside workspace
top # Check CPU usage
free -h # Check RAM usage
docker stats # Check Docker container resourcesSolution:
- Stop unused DDEV projects:
ddev stop --all - Increase workspace resources (delete and recreate with higher CPU/RAM)
- Contact admin to increase default resources
- DDEV Documentation - Full DDEV docs
- DDEV Quickstart - DDEV basics
- DDEV Commands - Command reference
- Using Workspaces - Daily workflows and tips
- Coder CLI - CLI reference
- VS Code for Web - IDE features
# WordPress
ddev config --project-type=wordpress --docroot=web
ddev composer create roots/bedrock
# Drupal
ddev config --project-type=drupal --docroot=web
ddev composer create drupal/recommended-project
# Laravel
ddev config --project-type=laravel --docroot=public
ddev composer create laravel/laravel
# Node.js (generic)
ddev config --project-type=php --docroot=.
echo "console.log('Hello');" > server.js
node server.js
# Static site
ddev config --project-type=php --docroot=.
echo "<h1>Hello World</h1>" > index.html
ddev start# Install additional tools
sudo apt-get update
sudo apt-get install <package>
# Install global npm packages
npm install -g <package>
# Add shell aliases
echo 'alias ll="ls -la"' >> ~/.bashrc
source ~/.bashrcNote: Changes to system packages are lost when workspace is deleted. For permanent changes, ask admin to modify Docker image.
~/projects/ # All DDEV projects here
├── project1/
├── project2/
└── project3/
~/.ddev/ # DDEV global config (auto-created)
~/.ssh/ # SSH keys (managed by Coder)- Stop workspaces when not in use (saves costs)
- Stop unused DDEV projects:
ddev stop --all - Clean Docker regularly:
docker system prune -a
- Commit to Git regularly (safest backup)
- Export databases:
ddev export-db --file=backup.sql.gz - Download files via VS Code or
coder scp
- Use smaller workspaces for simple projects (2 CPU, 4GB RAM)
- Increase resources for large projects (8 CPU, 16GB RAM)
- Stop background services when not needed
- Using Workspaces - Advanced workflows
- Troubleshooting Guide - Detailed debugging
- DDEV Docs - DDEV reference
- Ask your administrator for Coder-specific issues
- GitHub Issues: Report bugs
- DDEV Community: DDEV Discord
- Coder Community: Coder Discord
- Check this guide's Troubleshooting section
- Review Troubleshooting Guide
- Collect error messages and logs
- Try restarting workspace:
coder restart my-first-workspace
Congratulations! You've created your first DDEV workspace. Happy coding! 🎉