Instalación de Code-Server: VS Code en el Navegador
Code-server es la implementación oficial de VS Code que puedes ejecutar en tu servidor Linux y acceder desde cualquier navegador, convirtiendo cualquier dispositivo en una estación de desarrollo completa. Al combinar la potencia de un entorno remoto con la familiaridad del editor más popular, es perfecta para equipos distribuidos, desarrollo en servidores de producción o entornos con recursos limitados en el cliente.
Requisitos Previos
- Servidor Linux con Ubuntu 20.04+, Debian 11+ o CentOS 8+
- Mínimo 1 GB de RAM (recomendado 2 GB)
- Dominio configurado apuntando al servidor (para SSL)
- Acceso root o sudo
- Nginx instalado (para proxy inverso)
Instalación de Code-Server
El método más sencillo es usar el script oficial de instalación:
# Descargar e instalar code-server (método recomendado)
curl -fsSL https://code-server.dev/install.sh | sh
# Verificar la versión instalada
code-server --version
# Habilitar y arrancar el servicio
sudo systemctl enable --now code-server@$USER
# Comprobar el estado
sudo systemctl status code-server@$USER
Para instalación manual con el paquete .deb:
# Obtener la última versión disponible
VERSION=$(curl -s https://api.github.com/repos/coder/code-server/releases/latest \
| grep '"tag_name"' | cut -d'"' -f4 | sed 's/v//')
# Descargar el paquete para Debian/Ubuntu
wget "https://github.com/coder/code-server/releases/download/v${VERSION}/code-server_${VERSION}_amd64.deb"
# Instalar el paquete
sudo dpkg -i code-server_${VERSION}_amd64.deb
Configuración Inicial
El fichero de configuración se encuentra en ~/.config/code-server/config.yaml:
# Ver la configuración actual
cat ~/.config/code-server/config.yaml
Edita la configuración según tus necesidades:
# Escucha solo en localhost (Nginx hará el proxy)
bind-addr: 127.0.0.1:8080
auth: password
password: CAMBIA_ESTA_CONTRASEÑA_SEGURA
cert: false
# Reiniciar el servicio para aplicar cambios
sudo systemctl restart code-server@$USER
# Ver los logs
sudo journalctl -u code-server@$USER -f
Proxy Inverso con Nginx y SSL
Instala Nginx y Certbot para gestionar los certificados SSL:
# Ubuntu/Debian
sudo apt update && sudo apt install -y nginx certbot python3-certbot-nginx
# CentOS/Rocky
sudo dnf install -y nginx certbot python3-certbot-nginx
Crea la configuración de Nginx:
sudo tee /etc/nginx/sites-available/code-server << 'EOF'
server {
listen 80;
server_name vscode.tudominio.com;
return 301 https://$host$request_uri;
}
server {
listen 443 ssl http2;
server_name vscode.tudominio.com;
# Certificados SSL (Certbot los gestionará)
ssl_certificate /etc/letsencrypt/live/vscode.tudominio.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/vscode.tudominio.com/privkey.pem;
# Configuración SSL segura
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers HIGH:!aNULL:!MD5;
location / {
proxy_pass http://127.0.0.1:8080/;
proxy_set_header Host $host;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection upgrade;
proxy_set_header Accept-Encoding gzip;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
}
EOF
# Habilitar el sitio
sudo ln -s /etc/nginx/sites-available/code-server \
/etc/nginx/sites-enabled/code-server
# Verificar la configuración de Nginx
sudo nginx -t
# Obtener certificado SSL
sudo certbot --nginx -d vscode.tudominio.com
# Recargar Nginx
sudo systemctl reload nginx
Autenticación y Seguridad
Code-server soporta autenticación por contraseña o token. Para mayor seguridad, considera añadir autenticación HTTP básica en Nginx además de la de code-server:
# Instalar apache2-utils para htpasswd
sudo apt install -y apache2-utils
# Crear fichero de contraseñas
sudo htpasswd -c /etc/nginx/.htpasswd tuusuario
Añade autenticación básica al bloque location de Nginx:
location / {
# Capa adicional de autenticación
auth_basic "Acceso Restringido";
auth_basic_user_file /etc/nginx/.htpasswd;
proxy_pass http://127.0.0.1:8080/;
proxy_set_header Host $host;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection upgrade;
}
Restringe el acceso por IP si solo accedes desde ubicaciones conocidas:
location / {
# Solo permitir acceso desde tu IP
allow 203.0.113.10; # Tu IP pública
deny all;
proxy_pass http://127.0.0.1:8080/;
# ... resto de directivas
}
Gestión de Extensiones
Instala extensiones directamente desde la terminal del servidor:
# Instalar extensión por ID
code-server --install-extension ms-python.python
code-server --install-extension esbenp.prettier-vscode
code-server --install-extension dbaeumer.vscode-eslint
# Listar extensiones instaladas
code-server --list-extensions
# Instalar un conjunto de extensiones de desarrollo
for ext in \
ms-python.python \
golang.go \
rust-lang.rust-analyzer \
ms-vscode.cpptools \
redhat.java; do
code-server --install-extension $ext
done
Las extensiones de VS Code Marketplace no siempre están disponibles en el marketplace open-source de code-server. Para instalar extensiones del marketplace oficial:
# Descargar la extensión .vsix y luego instalar
wget https://marketplace.visualstudio.com/_apis/public/gallery/publishers/ms-vscode/vsextensions/remote-ssh/latest/vspackage \
-O remote-ssh.vsix
code-server --install-extension remote-ssh.vsix
Despliegue con Docker
Para un despliegue aislado con Docker:
# Ejecutar code-server con Docker
docker run -d \
--name code-server \
-p 127.0.0.1:8080:8080 \
-v "$HOME/.config:/home/coder/.config" \
-v "$PWD:/home/coder/project" \
-u "$(id -u):$(id -g)" \
-e "DOCKER_USER=$USER" \
ghcr.io/coder/code-server:latest
Con Docker Compose para un entorno más completo:
# docker-compose.yml
version: "3.8"
services:
code-server:
image: ghcr.io/coder/code-server:latest
container_name: code-server
restart: unless-stopped
ports:
- "127.0.0.1:8080:8080"
environment:
- PASSWORD=TU_CONTRASEÑA_SEGURA
- DOCKER_USER=${USER}
volumes:
- ./config:/home/coder/.config
- ./workspace:/home/coder/workspace
- /var/run/docker.sock:/var/run/docker.sock
user: "1000:1000"
# Arrancar el contenedor
docker compose up -d
# Ver logs
docker compose logs -f code-server
Solución de Problemas
Error de WebSocket al conectar:
# Verificar que Nginx pasa las cabeceras de upgrade
sudo nginx -t
# Comprobar los logs de Nginx
sudo tail -f /var/log/nginx/error.log
Code-server no arranca:
# Ver logs detallados del servicio
sudo journalctl -u code-server@$USER -n 50 --no-pager
# Comprobar que el puerto 8080 está libre
sudo ss -tlnp | grep 8080
Extensiones que no se instalan:
# Verificar conectividad desde el servidor
curl -I https://open-vsx.org
# Instalar extensión desde fichero local .vsix
code-server --install-extension /ruta/a/extension.vsix
Problemas de permisos en el workspace:
# Ajustar propietario del directorio de trabajo
sudo chown -R $USER:$USER /ruta/al/workspace
Conclusión
Code-server transforma cualquier servidor Linux en un entorno de desarrollo completo accesible desde el navegador, eliminando la necesidad de configurar entornos locales. Con Nginx como proxy inverso y certificados SSL, obtienes una instalación segura y profesional lista para equipos de cualquier tamaño. Combínalo con Docker para aislar proyectos y mantener entornos reproducibles.


