Multiusuario VSCode Web + Copilot Chat y Repositorios: ¡Desarrolla en la nube con IA!

Multiusuario VSCode Web + Copilot Chat y Repositorios: ¡Desarrolla en la nube con IA!

¿Te imaginas tener tu propio entorno VSCode Web multiusuario, con acceso a GitHub Copilot Chat, gestión de repositorios git privada y totalmente desplegable en cualquier VPS? Hoy te enseño un docker-compose que agrupa exactamente eso, ideal para grupos de desarrollo, talleres online o centros educativos. Todo accesible desde el navegador, con integración de chat IA para autocompletar y explicaciones de código… ¡la oficina del futuro, pero sin dependencias complejas!

¿Qué aporta este proyecto?

  • Entorno de desarrollo completo en la nube (VSCode Web con code-server).
  • Multiusuario seguro: cada persona con su login, compartiendo acceso solo a sus proyectos.
  • Copilot Chat (vía copilot y extensiones compatibles), para sugerencias y chat de ayuda con IA.
  • Servidor Gitea para repositorios privados y gestión de código propia.
  • Base de datos PostgreSQL para Gitea y para proyectos que la precisen.
  • Todo bajo HTTPS automático con Traefik (certificados SSL gratuitos para todos los servicios).

El Docker Compose completo

Copia este fichero como docker-compose.yml y personalízalo donde veas comentarios. Para facilitar el arranque, todos los datos vitales se montan como volúmenes:


version: '3.9'

services:
  traefik:
    image: traefik:v3.0
    command:
      - "--api.insecure=true"
      - "--providers.docker=true"
      - "--entrypoints.web.address=:80"
      - "--entrypoints.websecure.address=:443"
      - "--certificatesresolvers.letsencrypt.acme.email=admin@tu-dominio.com"
      - "--certificatesresolvers.letsencrypt.acme.storage=/letsencrypt/acme.json"
      - "--certificatesresolvers.letsencrypt.acme.tlschallenge=true"
      - "--log.level=INFO"
    ports:
      - "80:80"
      - "443:443"
      - "8080:8080"  # Panel de Traefik
    volumes:
      - "./letsencrypt:/letsencrypt"
      - "/var/run/docker.sock:/var/run/docker.sock:ro"
    restart: always

  gitea:
    image: gitea/gitea:1.21.10
    environment:
      - USER_UID=1000
      - USER_GID=1000
      - GITEA__database__DB_TYPE=postgres
      - GITEA__database__HOST=db:5432
      - GITEA__database__NAME=gitea
      - GITEA__database__USER=gitea
      - GITEA__database__PASSWD=giteapassword
      - GITEA__server__DOMAIN=git.tu-dominio.com
      - GITEA__server__ROOT_URL=https://git.tu-dominio.com/
      - [email protected]
    volumes:
      - ./gitea/data:/data
    depends_on:
      - db
    labels:
      - "traefik.enable=true"
      - "traefik.http.routers.gitea.rule=Host(`git.tu-dominio.com`)"
      - "traefik.http.routers.gitea.entrypoints=websecure"
      - "traefik.http.routers.gitea.tls.certresolver=letsencrypt"
    restart: always

  db:
    image: postgres:16
    environment:
      - POSTGRES_DB=gitea
      - POSTGRES_USER=gitea
      - POSTGRES_PASSWORD=giteapassword
    volumes:
      - ./postgres:/var/lib/postgresql/data
    restart: always

  vscode:
    image: codercom/code-server:latest
    environment:
      - PASSWORD=cambiame
      - TZ=Europe/Madrid
      - GIT_EXTENSION_AUTO_UPDATE=true
    volumes:
      - ./code-server:/home/coder/project
      - ./data/vscode-settings:/home/coder/.local/share/code-server/User
      - ./data/vscode-extensions:/home/coder/.local/share/code-server/extensions
    labels:
      - "traefik.enable=true"
      - "traefik.http.routers.vscode.rule=Host(`vscode.tu-dominio.com`)"
      - "traefik.http.routers.vscode.entrypoints=websecure"
      - "traefik.http.routers.vscode.tls.certresolver=letsencrypt"
    restart: always

  copilot:
    image: ghcr.io/kohya-ss/copilot-server:latest
    environment:
      - OPENAI_API_KEY=tu_clave_openaid
    labels:
      - "traefik.enable=true"
      - "traefik.http.routers.copilot.rule=Host(`copilot.tu-dominio.com`)"
      - "traefik.http.routers.copilot.entrypoints=websecure"
      - "traefik.http.routers.copilot.tls.certresolver=letsencrypt"
    restart: always

networks:
  default:
    name: development
  

¿Cómo funciona y qué puedes hacer?

  • Traefik expone tus servicios por HTTPS en subdominios: vscode.tu-dominio.com y git.tu-dominio.com. ¡Seguro y sin complicaciones de certificados!
  • Gitea te permite gestionar repositorios git privados, issues, wikis y mucho más, sin depender de GitHub.
  • VSCode Web es multiusuario; si quieres autenticación por usuario, revisa la documentación y amplía la sección de usuarios (doc oficial).
  • Copilot Chat se enlaza mediante la extensión adecuada o en el panel a copilot.tu-dominio.com usando tu clave de OpenAI (o del proveedor LLM que prefieras).
  • La base de datos PostgreSQL sirve tanto para Gitea como para tus propios proyectos en VSCode.

Instalación rápida

  1. Establece los subdominios y claves (“tu-dominio.com”, claves de OpenAI, contraseñas banales, etcétera… cámbialo por los valores reales que vayas a usar).
  2. Lanza el stack con docker compose up -d.
  3. Accede a los servicios:
    • https://vscode.tu-dominio.com — desarrollo en la nube.
    • https://git.tu-dominio.com — repositorios privados.
    • https://copilot.tu-dominio.com — chat IA/autocompletar.
    • https://tu-dominio.com:8080 — panel Traefik (opcional).

Consejos extra y troubleshooting

  • Si algún contenedor muere con frecuencia: revisa los logs con docker compose logs {servicio}.
  • El primer arranque puede tardar, especialmente Gitea (inicializa la base de datos). Vas a poder ver los progresos en los logs.
  • Puedes añadir más servicios y volúmenes (por ejemplo, Redis, almacenamiento extra, runners de CI…), ampliando el docker-compose.yml.
  • ¿Quieres hacerlo plug & play? Puedes integrar Portainer o Watchtower para la gestión y actualización de contenedores.
  • ¡Ojo con las credenciales por defecto! Es importante cambiarlas antes del despliegue real.
  • Si quieres limitar el uso de recursos, añade secciones deploy.resources.limits a cada servicio.
  • Puedes conectar extensiones de VSCode para depuración remota, Docker, Kubernetes, etc. ¡El límite lo pone tu imaginación!
¿Ideas para más servicios? ¿Quieres añadir un runner de CI, gestor de tareas, o incluso un stack con IA más potente? ¡Déjalo en los comentarios!
Avatar

Por Mid