Qué hace Coder
Coder separa dos cosas que a menudo se confunden: el editor y el entorno. El editor sigue siendo el que prefieres — VS Code en el navegador, VS Code en tu equipo, un IDE de JetBrains o un simple terminal. El entorno vive en el servidor: un contenedor con el código, los lenguajes, las bases de datos de prueba y las herramientas del proyecto.
Este entorno se describe en una plantilla escrita en Terraform. El administrador la publica una vez; cada desarrollador crea después su espacio de trabajo a partir de ella, lo arranca cuando trabaja y lo detiene cuando termina. Un agente instalado en el espacio de trabajo se conecta al servidor Coder y transporta el terminal, los puertos y las sesiones del editor.
Lo que aporta Coder
- Espacios de trabajo idénticos — todos trabajan en el mismo entorno, descrito en una plantilla versionada.
- Plantilla Docker incluida — un contenedor por espacio de trabajo en el VPS, con un volumen
/homepersistente. - Todos los editores — code-server en el navegador, VS Code Remote-SSH, JetBrains Gateway,
coder ssh. - Redirección de puertos —
coder port-forwardabre en tu equipo la aplicación que estás desarrollando. - Parada automática — los espacios inactivos se detienen según la programación de la plantilla.
- Cuentas e inicio de sesión único — cuentas locales, GitHub u OpenID Connect.
Coder frente a otras opciones
Desplace la tabla
| Coder en un VPS | code-server solo | GitHub Codespaces | |
|---|---|---|---|
| Usuarios | Un equipo, con cuentas y roles | Una persona | Cuentas de GitHub |
| Entorno | Plantilla Terraform versionada | El propio servidor | Archivo devcontainer |
| Editores | Navegador, VS Code, JetBrains, SSH | Navegador | Navegador, VS Code, JetBrains |
| Dónde vive el código | En tu servidor | En tu servidor | En GitHub |
| Coste | El precio del VPS | El precio del VPS | Por hora de cómputo y almacenamiento |
Requisitos
Un VPS Ubuntu 24.04 con 2 GB de RAM y 20 GB de disco para uno o dos desarrolladores — cuenta con 4 a 8 GB de RAM para un equipo pequeño —, Docker y el plugin Compose instalados, y un subdominio que apunte al VPS, por ejemplo coder.example.com. El HTTPS es imprescindible: los agentes de los espacios de trabajo vuelven a llamar al servidor en esa dirección, y las sesiones del editor pasan por WebSocket.
Instalar Coder con Docker Compose
Preparar el directorio y los secretos
El archivo
.envcontiene la contraseña de la base de datos, el identificador del grupo Docker del host — permite al servidor usar el socket de Docker sin ejecutarse como root — y el dominio.mkdir -p /opt/coder && cd /opt/coder { echo "DB_PASSWORD=$(openssl rand -hex 16)" echo "DOCKER_GID=$(stat -c %g /var/run/docker.sock)" echo "DOMAIN=coder.example.com" } > .env chmod 600 .envEscribir el archivo docker-compose.yml
Dos servicios: el servidor Coder, que incluye Terraform, y PostgreSQL. El puerto solo se publica en la interfaz local; nginx se encargará del HTTPS.
services: coder: image: ghcr.io/coder/coder:v2.39.0 restart: unless-stopped group_add: - "${DOCKER_GID}" depends_on: database: condition: service_healthy ports: - "127.0.0.1:7080:7080" environment: CODER_HTTP_ADDRESS: "0.0.0.0:7080" CODER_ACCESS_URL: "https://${DOMAIN}" CODER_PG_CONNECTION_URL: "postgresql://coder:${DB_PASSWORD}@database:5432/coder?sslmode=disable" CODER_TELEMETRY_ENABLE: "false" volumes: - /var/run/docker.sock:/var/run/docker.sock database: image: postgres:17.11-alpine restart: unless-stopped environment: POSTGRES_USER: coder POSTGRES_PASSWORD: ${DB_PASSWORD} POSTGRES_DB: coder volumes: - coder-db:/var/lib/postgresql/data healthcheck: test: ["CMD-SHELL", "pg_isready -U coder -d coder"] interval: 5s retries: 12 volumes: coder-db: {}Arrancar y comprobar
El primer arranque crea el esquema de la base de datos en unos segundos.
docker compose up -d docker compose logs -f coder # attendre « View the Web UI » curl -fsS http://127.0.0.1:7080/healthz
El socket de Docker entrega las llaves del servidor
Coder crea los espacios de trabajo a través del socket de Docker, y cualquiera que pueda editar una plantilla puede lanzar cualquier contenedor en el VPS — y por tanto actuar como root en el host. Reserva los roles de propietario y de administrador de plantillas a personas de confianza, y no publiques nunca el puerto 7080 en la dirección pública.
Colocar Coder detrás de nginx en HTTPS
Obtén un certificado con certbot certonly --nginx -d coder.example.com y declara el sitio. Las cabeceras Upgrade y Connection son imprescindibles: sin ellas, el terminal web y las conexiones de los agentes fallan.
server {
listen 443 ssl;
http2 on;
server_name coder.example.com;
ssl_certificate /etc/letsencrypt/live/coder.example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/coder.example.com/privkey.pem;
location / {
proxy_pass http://127.0.0.1:7080;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_read_timeout 1h;
}
}Recarga nginx con nginx -t && systemctl reload nginx y abre https://coder.example.com. Crea la primera cuenta de inmediato: el primer visitante de la pantalla de bienvenida se convierte en propietario de la instalación.
Crear la primera plantilla y el primer espacio de trabajo
En Templates, pulsa Create Template y elige la plantilla de inicio Docker Containers. Coder descarga los proveedores de Terraform necesarios y publica la plantilla. Crea después un espacio de trabajo a partir de ella: un contenedor arranca en el VPS, su agente se conecta y la página muestra el estado Running con un botón para abrir code-server.
La plantilla es un simple archivo main.tf. Para adaptarla a tu proyecto, cambia la imagen base, añade herramientas al script de arranque del agente y publica una nueva versión: los espacios existentes la proponen en su siguiente reinicio.
Conectarse desde VS Code, JetBrains o SSH
El navegador basta para empezar, pero la mayoría de los desarrolladores prefieren su editor habitual. Instala la CLI en tu equipo y conéctala al servidor:
curl -L https://coder.com/install.sh | sh
coder login https://coder.example.com
coder list
coder ssh mon-espace
coder port-forward mon-espace --tcp 3000:3000
coder config-ssh # ajoute les hôtes coder.<espace> à ~/.ssh/configTras coder config-ssh, VS Code Remote-SSH y JetBrains Gateway ven cada espacio de trabajo como un host SSH normal. La conexión pasa por la dirección HTTPS del servidor: no se abre ningún puerto SSH adicional en el VPS.
Parada automática y recursos del VPS
En reposo, el servidor Coder y su base de datos ocupan unos 550 MB de RAM, y un espacio de trabajo inactivo basado en la imagen de la plantilla Docker unos 200 MB — mucho más durante una compilación o una batería de pruebas. En los ajustes de la plantilla, apartado Schedule, define un plazo de parada automática: un espacio olvidado por la tarde ya no consume nada durante la noche. El volumen /home se conserva al detenerse; solo el contenedor se recrea al reiniciar.
Copia de seguridad y actualización
Las cuentas, plantillas y ajustes están en PostgreSQL; el trabajo de los desarrolladores, en los volúmenes /home de los espacios de trabajo.
cd /opt/coder
docker compose exec -T database pg_dump -U coder coder | gzip > coder-$(date +%F).sql.gz
docker volume ls --filter name=coder- # volumes /home des espaces de travailPara actualizar, cambia la etiqueta de la imagen en docker-compose.yml según la [página de versiones](https://github.com/coder/coder/releases) y ejecuta docker compose pull && docker compose up -d: el servidor migra su base de datos al arrancar. Haz una copia de seguridad antes de cada actualización mayor.
Instalación con un clic en ServOrbit
En un VPS de ServOrbit, Coder se instala desde el Marketplace. El script despliega el servidor y su base PostgreSQL, genera la contraseña de administrador y crea la cuenta propietaria antes de cualquier exposición — así, la pantalla de registro del primer administrador nunca es accesible desde Internet. También configura el proxy inverso nginx en HTTPS con WebSocket, en un subdominio de tu dominio o en el subdominio gratuito del VPS. Inicia sesión con la dirección [email protected] y la contraseña que aparece en tu área de cliente, y cámbiala después en los ajustes de la cuenta.