Configurar entorno remoto VPS
Configurar entorno remoto VPS
Guía completa para configurar un servidor VPS, establecer conexión SSH sin contraseña y desarrollar remotamente con VS Code + Docker.
📋 Revisión de archivos
Antes de comenzar, asegúrate de tener estos archivos:
- Dockerfile – Configuración del contenedor Python Dockerfile
- docker-compose.yml – Orquestación del contenedor docker-compose.yml
✅ Los archivos proporcionados están correctos y listos para usar.
FASE 1: Configuración del Servidor VPS
📦 Paso 1: Instalar Docker en el VPS
Conéctate a tu VPS vía SSH y ejecuta:
# Actualizar sistema
sudo apt update && sudo apt upgrade -y
# Instalar dependencias necesarias
sudo apt install -y apt-transport-https ca-certificates curl software-properties-common
# Agregar repositorio oficial de Docker
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
# Instalar Docker
sudo apt update
sudo apt install -y docker-ce docker-ce-cli containerd.io
# Instalar Docker Compose
sudo curl -L "https://github.com/docker/compose/releases/latest/download/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose
# Verificar instalación
docker --version
docker-compose --version
👤 Paso 2: Configurar usuario para Docker
Para usar Docker sin sudo:
# Agregar tu usuario al grupo docker
sudo usermod -aG docker $USER
# Aplicar cambios
newgrp docker
# Verificar que funciona sin sudo
docker ps
Nota: Es posible que necesites cerrar sesión y volver a conectarte para que los cambios surtan efecto.
📁 Paso 3: Crear estructura de directorios
# Crear directorio del proyecto
mkdir -p ~/my_project/app
cd ~/my_project
# Verificar la ruta completa
pwd
# Debería mostrar: /home/TU_USUARIO/my_project
📄 Paso 4: Subir archivos al VPS
Desde tu máquina Windows (PowerShell o CMD):
# Navegar a donde tienes tus archivos
cd C:\ruta\a\tus\archivos
# Copiar Dockerfile
scp Dockerfile usuario@IP_VPS:~/my_project/
# Copiar docker-compose.yml
scp docker-compose.yml usuario@IP_VPS:~/my_project/
# O copiar todo el directorio
scp -r . usuario@IP_VPS:~/my_project/
⚙️ Paso 5: Ajustar docker-compose.yml
En el VPS:
cd ~/my_project
nano docker-compose.yml
Modificar la ruta del volumen:
version: '3.8'
services:
dev-container:
image: python-dev
container_name: dev-container
ports:
- "4070:4070"
stdin_open: true
tty: true
volumes:
- './app:/app' # Ruta relativa (más portable)
🐳 Paso 6: Construir y ejecutar el contenedor
# Construir la imagen
docker build -t python-dev .
# Verificar que se creó
docker images
# Levantar el contenedor
docker-compose up -d
# Verificar que está corriendo
docker ps
# Ver logs
docker-compose logs
FASE 2: Configuración SSH sin Contraseña
🔑 Paso 1: Generar clave SSH en Windows
En PowerShell:
# Verificar si ya tienes una clave
ls ~\.ssh\
# Si no existe, generar nueva clave
ssh-keygen -t ed25519 -C "tu_email@ejemplo.com"
# Presiona Enter para aceptar ubicación por defecto
# Puedes dejar la passphrase vacía o poner una
# Verificar archivos creados
ls ~\.ssh\
# Deberías ver: id_ed25519 (privada) y id_ed25519.pub (pública)
💡 Tip de seguridad: Aunque puedes dejar la passphrase vacía, es recomendable agregar una para mayor protección de tu clave privada.
📤 Paso 2: Copiar clave pública al VPS
Opción A – Usando ssh-copy-id (Git Bash):
ssh-copy-id -i ~/.ssh/id_ed25519.pub usuario@IP_VPS
Opción B – Manual (PowerShell):
# Ver tu clave pública
type ~\.ssh\id_ed25519.pub
# Copiarla (Ctrl+C)
Luego en el VPS:
# Crear directorio .ssh si no existe
mkdir -p ~/.ssh
chmod 700 ~/.ssh
# Agregar tu clave pública
nano ~/.ssh/authorized_keys
# Pegar la clave pública y guardar (Ctrl+O, Enter, Ctrl+X)
# Establecer permisos correctos
chmod 600 ~/.ssh/authorized_keys
🔒 Paso 3: Configurar SSH (opcional pero recomendado)
sudo nano /etc/ssh/sshd_config
Configuraciones recomendadas:
PermitRootLogin no
PubkeyAuthentication yes
PasswordAuthentication no # Solo después de verificar que funciona
Port 22 # O cambiar a otro puerto
Reiniciar SSH:
sudo systemctl restart sshd
⚠️ Advertencia: No deshabilites
PasswordAuthenticationhasta verificar que la autenticación por clave funciona correctamente.
✅ Paso 4: Probar conexión sin contraseña
En Windows PowerShell:
# Conectar sin contraseña
ssh usuario@IP_VPS
# Si funciona, ¡éxito! 🎉
📝 Paso 5: Configurar alias SSH (opcional)
Crear/editar archivo de configuración:
# Crear archivo config
notepad ~\.ssh\config
Agregar:
Host mivps
HostName IP_VPS
User usuario
Port 22
IdentityFile ~/.ssh/id_ed25519
Ahora puedes conectar con:
ssh mivps
FASE 3: Configurar VS Code para Desarrollo Remoto
🔌 Paso 1: Instalar extensiones en VS Code
- Abrir VS Code
- Ir a Extensions (Ctrl+Shift+X)
- Instalar:
- Remote – SSH (Microsoft)
- Remote – SSH: Editing Configuration Files (Microsoft)
- Dev Containers (Microsoft) – opcional
🌐 Paso 2: Configurar conexión SSH
- Presiona F1 o Ctrl+Shift+P
- Escribe:
Remote-SSH: Connect to Host... - Selecciona
+ Add New SSH Host... - Ingresa:
ssh usuario@IP_VPS - Selecciona el archivo de configuración
🔗 Paso 3: Conectarse al VPS
- Presiona F1 →
Remote-SSH: Connect to Host... - Selecciona tu servidor
- VS Code abrirá una nueva ventana conectada
- En la esquina inferior izquierda verás:
SSH: IP_VPS
📂 Paso 4: Abrir carpeta del proyecto
- En VS Code conectado al VPS
- File → Open Folder…
- Navegar a:
/home/usuario/my_project/app - Click en OK
🐳 Paso 5: Trabajar dentro del contenedor (opcional)
- Presiona F1 →
Dev Containers: Attach to Running Container... - Selecciona:
dev-container - VS Code se reconectará dentro del contenedor
FASE 4: Crear y Ejecutar «Hola Mundo»
📝 Paso 1: Crear archivo Python
En VS Code (conectado al VPS), crear hola_mundo.py:
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
def saludar(nombre="Mundo"):
"""
Función que imprime un saludo personalizado
"""
mensaje = f"¡Hola, {nombre}! 👋"
print(mensaje)
print("=" * len(mensaje))
print("Este programa se está ejecutando desde:")
print("🐳 Docker Container → 🖥️ VPS → 💻 VS Code Remoto")
return mensaje
if __name__ == "__main__":
# Saludo por defecto
saludar()
# Saludo personalizado
saludar("Desarrollador")
# Información adicional
print("\n✅ Configuración exitosa!")
print("🚀 Ahora puedes desarrollar remotamente con VS Code")
▶️ Paso 2: Ejecutar el programa
Opción A – Terminal integrada de VS Code:
# Abrir terminal: Ctrl+Ñ o View → Terminal
docker exec -it dev-container python /app/hola_mundo.py
Opción B – Desde el host (VPS):
cd ~/my_project
docker exec -it dev-container python /app/hola_mundo.py
Opción C – Dentro del contenedor:
# Entrar al contenedor
docker exec -it dev-container bash
# Dentro del contenedor
cd /app
python hola_mundo.py
# Salir
exit
Salida esperada:
¡Hola, Mundo! 👋
===================
Este programa se está ejecutando desde:
🐳 Docker Container → 🖥️ VPS → 💻 VS Code Remoto
¡Hola, Desarrollador! 👋
===========================
Este programa se está ejecutando desde:
🐳 Docker Container → 🖥️ VPS → 💻 VS Code Remoto
✅ Configuración exitosa!
🚀 Ahora puedes desarrollar remotamente con VS Code
📊 Paso 3: Crear un servidor web (bonus)
Crear servidor.py:
#!/usr/bin/env python3
from http.server import HTTPServer, BaseHTTPRequestHandler
import json
from datetime import datetime
class MiHandler(BaseHTTPRequestHandler):
def do_GET(self):
self.send_response(200)
self.send_header('Content-type', 'application/json')
self.end_headers()
respuesta = {
"mensaje": "¡Hola Mundo desde VPS!",
"hora": datetime.now().strftime("%Y-%m-%d %H:%M:%S"),
"servidor": "Python + Docker + VPS",
"estado": "funcionando ✅"
}
self.wfile.write(json.dumps(respuesta, indent=2, ensure_ascii=False).encode())
print(f"[{datetime.now()}] Solicitud recibida desde {self.client_address[0]}")
if __name__ == "__main__":
puerto = 4070
servidor = HTTPServer(('0.0.0.0', puerto), MiHandler)
print(f"🚀 Servidor iniciado en puerto {puerto}")
print(f"🌐 Accede desde: http://IP_VPS:{puerto}")
print("Presiona Ctrl+C para detener")
servidor.serve_forever()
Ejecutar:
docker exec -it dev-container python /app/servidor.py
Probar desde tu navegador:
http://IP_VPS:4070
🎯 Comandos Útiles
🐳 Docker
# Ver contenedores corriendo
docker ps
# Ver logs
docker logs dev-container
# Entrar al contenedor
docker exec -it dev-container bash
# Reiniciar contenedor
docker restart dev-container
# Detener todo
docker-compose down
# Levantar de nuevo
docker-compose up -d
🔄 Sincronización de archivos
# Desde Windows, subir cambios
scp archivo.py usuario@IP_VPS:~/my_project/app/
# Bajar archivo desde VPS
scp usuario@IP_VPS:~/my_project/app/archivo.py .
🔍 Debugging
# Ver uso de recursos del contenedor
docker stats dev-container
# Ver procesos dentro del contenedor
docker top dev-container
# Inspeccionar contenedor
docker inspect dev-container
✅ Checklist Final
- ✓ Docker instalado en VPS
- ✓ Directorio
~/my_project/appcreado - ✓ Archivos Dockerfile y docker-compose.yml subidos
- ✓ Imagen
python-devconstruida - ✓ Contenedor corriendo (
docker ps) - ✓ Clave SSH generada en Windows
- ✓ Clave pública copiada al VPS
- ✓ Conexión SSH sin contraseña funciona
- ✓ VS Code con extensión Remote-SSH instalada
- ✓ VS Code conectado al VPS
- ✓ Programa
hola_mundo.pyejecutado exitosamente - ✓ Puerto 4070 accesible
🆘 Solución de Problemas
❌ No puedo conectar por SSH sin contraseña
# En el VPS, verificar permisos
ls -la ~/.ssh/
# authorized_keys debe ser 600
# .ssh debe ser 700
chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys
❌ Docker: Permission denied
sudo usermod -aG docker $USER
newgrp docker
❌ El contenedor no inicia
docker logs dev-container
docker-compose logs
❌ No puedo acceder al puerto 4070
# Verificar firewall en VPS
sudo ufw allow 4070/tcp
sudo ufw status
# O con iptables
sudo iptables -A INPUT -p tcp --dport 4070 -j ACCEPT
Resumen rápido completo
# === EN EL VPS ===
# Instalar Docker
sudo apt update && sudo apt upgrade -y
sudo apt install -y docker-ce docker-ce-cli containerd.io docker-compose
docker --version
# Configurar usuario
sudo usermod -aG docker $USER
newgrp docker
# Crear proyecto
mkdir -p ~/my_project/app
cd ~/my_project
# Construir contenedor
docker build -t python-dev .
docker-compose up -d
docker ps
# === EN WINDOWS ===
# Generar clave SSH
ssh-keygen -t ed25519 -C "tu_email@ejemplo.com"
# Copiar al VPS
type ~\.ssh\id_ed25519.pub
# Pegar en VPS: ~/.ssh/authorized_keys
# Probar conexión
ssh usuario@IP_VPS
# === VS CODE ===
# 1. Instalar extensión "Remote - SSH"
# 2. F1 → Remote-SSH: Connect to Host
# 3. Agregar: ssh usuario@IP_VPS
# 4. Conectar y abrir: /home/usuario/my_project/app
# === HOLA MUNDO ===
# Crear hola_mundo.py
docker exec -it dev-container python /app/hola_mundo.py
# === COMANDOS ÚTILES ===
docker ps # Ver contenedores
docker logs dev-container # Ver logs
docker exec -it dev-container bash # Entrar al contenedor
docker-compose down # Detener
docker-compose up -d # Levantar
🎓 ¡Felicidades! Has completado la configuración de tu entorno de desarrollo remoto. Ahora puedes programar desde cualquier lugar usando VS Code conectado a tu VPS con Docker. 🚀
📚 Recursos adicionales
IMPORTANTE: Para que tu progreso quede registrado y puedas avanzar en el curso, recuerda hacer clic en el botón «Completar» al terminar esta lección.
- Solo al marcar la lección como completada se desbloquearán las siguientes lecciones.
- Es necesario marcar todas las lecciones de este módulo como completadas para poder pasar al Módulo 02.
Cuando termines de revisar el contenido, baja hasta el final de la página y haz clic en «Completar» antes de continuar.