Guía para Configurar WSL con Ubuntu Nginx y Certbot » Historial » Versión 1
Anibal Pendas Amador, 02/08/2025 04:19
1 | 1 | Anibal Pendas Amador | # Guía para Configurar WSL con Ubuntu, Nginx y Certbot |
---|---|---|---|
2 | |||
3 | Esta guía te explica paso a paso cómo instalar y configurar Windows Subsystem for Linux (WSL) con Ubuntu, configurar el servidor web Nginx, securizarlo con certificados SSL usando Certbot, realizar un respaldo de la distribución y clonar una distribución de Ubuntu. |
||
4 | |||
5 | ## Requisitos Previos |
||
6 | - Windows 10 (versión 2004 o posterior) o Windows 11 |
||
7 | - Acceso de administrador en tu máquina Windows |
||
8 | - Conexión a Internet |
||
9 | - Familiaridad básica con comandos de terminal |
||
10 | |||
11 | ## Paso 1: Habilitar e Instalar WSL con Ubuntu |
||
12 | 1. **Habilitar WSL**: |
||
13 | Abre PowerShell como administrador y ejecuta: |
||
14 | ```bash |
||
15 | wsl --install |
||
16 | ``` |
||
17 | Este comando habilita WSL e instala Ubuntu (distribución predeterminada) si no está instalado. Reinicia tu computadora si se te solicita. |
||
18 | |||
19 | 2. **Establecer WSL 2 como Predeterminado** (recomendado para mejor rendimiento): |
||
20 | ```bash |
||
21 | wsl --set-default-version 2 |
||
22 | ``` |
||
23 | |||
24 | 3. **Instalar Ubuntu**: |
||
25 | ### Opción 1: Usar la Microsoft Store |
||
26 | Abre la Microsoft Store, busca "Ubuntu" (por ejemplo, Ubuntu 20.04 LTS o 22.04 LTS) e instálalo. |
||
27 | |||
28 | ### Opción 2: Instalar Ubuntu sin la Microsoft Store |
||
29 | Si prefieres no usar la Microsoft Store, puedes descargar e instalar Ubuntu manualmente: |
||
30 | - **Descargar el archivo de distribución**: |
||
31 | Visita la página oficial de Ubuntu o el repositorio de Canonical para descargar la imagen de WSL (por ejemplo, Ubuntu 22.04). Alternativamente, usa el siguiente comando en PowerShell para descargar una distribución: |
||
32 | ```powershell |
||
33 | Invoke-WebRequest -Uri https://aka.ms/wslubuntu2204 -OutFile Ubuntu2204.appx -UseBasicParsing |
||
34 | ``` |
||
35 | - **Instalar la distribución**: |
||
36 | Cambia el nombre del archivo `.appx` a `.zip`, extráelo y ejecuta el archivo `ubuntu2204.exe` (o similar) para instalar. Sigue las instrucciones en pantalla para configurar la distribución. |
||
37 | ```powershell |
||
38 | Rename-Item Ubuntu2204.appx Ubuntu2204.zip |
||
39 | Expand-Archive Ubuntu2204.zip |
||
40 | cd Ubuntu2204 |
||
41 | .\ubuntu2204.exe |
||
42 | ``` |
||
43 | - **Registrar la distribución en WSL**: |
||
44 | Una vez instalado, registra la distribución: |
||
45 | ```powershell |
||
46 | wsl --import Ubuntu-22.04 <ruta_donde_deseas_instalar> <ruta_al_directorio_extraído> |
||
47 | ``` |
||
48 | Ejemplo: |
||
49 | ```powershell |
||
50 | wsl --import Ubuntu-22.04 C:\WSL\Ubuntu-22.04 C:\Users\<TuUsuario>\Downloads\Ubuntu2204 |
||
51 | ``` |
||
52 | |||
53 | 4. **Configurar Ubuntu**: |
||
54 | Inicia Ubuntu desde el menú de Inicio o ejecutando `wsl -d Ubuntu-22.04` en PowerShell. Se te pedirá crear un nombre de usuario y contraseña UNIX. Completa la configuración. |
||
55 | |||
56 | 5. **Actualizar Ubuntu**: |
||
57 | En la terminal de Ubuntu, ejecuta: |
||
58 | ```bash |
||
59 | sudo apt update && sudo apt upgrade -y |
||
60 | ``` |
||
61 | |||
62 | ## Paso 2: Instalar y Configurar Nginx |
||
63 | 1. **Instalar Nginx**: |
||
64 | En la terminal de Ubuntu, instala Nginx: |
||
65 | ```bash |
||
66 | sudo apt install nginx -y |
||
67 | ``` |
||
68 | |||
69 | 2. **Iniciar Nginx**: |
||
70 | Inicia el servicio de Nginx y habilítalo para que se ejecute al iniciar: |
||
71 | ```bash |
||
72 | sudo systemctl start nginx |
||
73 | sudo systemctl enable nginx |
||
74 | ``` |
||
75 | |||
76 | 3. **Verificar que Nginx esté funcionando**: |
||
77 | Comprueba el estado de Nginx: |
||
78 | ```bash |
||
79 | sudo systemctl status nginx |
||
80 | ``` |
||
81 | Deberías ver un estado "active (running)". |
||
82 | |||
83 | 4. **Probar Nginx en el Navegador**: |
||
84 | En tu navegador de Windows, navega a `http://localhost`. Deberías ver la página de bienvenida de Nginx. Si no, verifica que WSL esté redirigiendo los puertos correctamente (ver Solución de Problemas). |
||
85 | |||
86 | 5. **Configurar Nginx** (Opcional): |
||
87 | Crea un archivo de configuración básico para tu sitio. Edita la configuración predeterminada: |
||
88 | ```bash |
||
89 | sudo nano /etc/nginx/sites-available/default |
||
90 | ``` |
||
91 | Ejemplo de configuración: |
||
92 | ```nginx |
||
93 | server { |
||
94 | listen 80; |
||
95 | server_name example.com www.example.com; |
||
96 | root /var/www/html; |
||
97 | index index.html index.htm; |
||
98 | location / { |
||
99 | try_files $uri $uri/ /index.html; |
||
100 | } |
||
101 | } |
||
102 | ``` |
||
103 | Guarda y sal (`Ctrl+O`, `Enter`, `Ctrl+X`). |
||
104 | |||
105 | 6. **Probar y Recargar Nginx**: |
||
106 | ```bash |
||
107 | sudo nginx -t |
||
108 | sudo systemctl reload nginx |
||
109 | ``` |
||
110 | |||
111 | ## Paso 3: Instalar y Configurar Certbot para SSL |
||
112 | 1. **Instalar Certbot**: |
||
113 | Instala Certbot y el complemento para Nginx: |
||
114 | ```bash |
||
115 | sudo apt install certbot python3-certbot-nginx -y |
||
116 | ``` |
||
117 | |||
118 | 2. **Obtener Certificado SSL**: |
||
119 | Ejecuta Certbot para configurar automáticamente SSL para tu dominio (reemplaza `example.com` con tu dominio real): |
||
120 | ```bash |
||
121 | sudo certbot --nginx -d example.com -d www.example.com |
||
122 | ``` |
||
123 | Sigue las instrucciones: |
||
124 | - Proporciona un correo electrónico para notificaciones de renovación. |
||
125 | - Acepta los términos de servicio. |
||
126 | - Elige si deseas redirigir el tráfico HTTP a HTTPS (recomendado: selecciona redirigir). |
||
127 | |||
128 | 3. **Verificar Configuración SSL**: |
||
129 | Certbot modifica tu configuración de Nginx para usar el certificado SSL. Pruébalo visitando `https://example.com` en tu navegador. |
||
130 | |||
131 | 4. **Renovación Automática del Certificado**: |
||
132 | Certbot configura una tarea cron para renovaciones automáticas. Prueba el proceso de renovación: |
||
133 | ```bash |
||
134 | sudo certbot renew --dry-run |
||
135 | ``` |
||
136 | Esto asegura que los certificados se renueven automáticamente cada 90 días. |
||
137 | |||
138 | ## Paso 4: Crear un Sitio Web de Prueba |
||
139 | 1. **Crear un Archivo HTML de Ejemplo**: |
||
140 | ```bash |
||
141 | sudo nano /var/www/html/index.html |
||
142 | ``` |
||
143 | Agrega: |
||
144 | ```html |
||
145 | <!DOCTYPE html> |
||
146 | <html> |
||
147 | <head> |
||
148 | <title>Bienvenido a Nginx en WSL</title> |
||
149 | </head> |
||
150 | <body> |
||
151 | <h1>¡Hola desde Nginx en WSL con SSL!</h1> |
||
152 | </body> |
||
153 | </html> |
||
154 | ``` |
||
155 | Guarda y sal. |
||
156 | |||
157 | 2. **Establecer Permisos**: |
||
158 | Asegúrate de que Nginx pueda acceder a los archivos: |
||
159 | ```bash |
||
160 | sudo chown -R www-data:www-data /var/www/html |
||
161 | sudo chmod -R 755 /var/www/html |
||
162 | ``` |
||
163 | |||
164 | 3. **Recargar Nginx**: |
||
165 | ```bash |
||
166 | sudo systemctl reload nginx |
||
167 | ``` |
||
168 | |||
169 | ## Paso 5: Realizar un Respaldo y Clonar la Distribución de Ubuntu |
||
170 | 1. **Realizar un Respaldo de la Distribución de Ubuntu**: |
||
171 | - **Exportar la distribución actual**: |
||
172 | En PowerShell, exporta la distribución de Ubuntu a un archivo `.tar`: |
||
173 | ```powershell |
||
174 | wsl --export Ubuntu-22.04 C:\WSL\Backups\Ubuntu-22.04-backup-$(Get-Date -Format "yyyyMMdd").tar |
||
175 | ``` |
||
176 | Esto crea un archivo comprimido con el estado actual de la distribución, incluyendo todos los archivos, configuraciones y paquetes instalados (por ejemplo, Nginx y Certbot). |
||
177 | - **Verificar el respaldo**: |
||
178 | Asegúrate de que el archivo `.tar` se creó correctamente en la ruta especificada (por ejemplo, `C:\WSL\Backups\`). |
||
179 | |||
180 | 2. **Clonar la Distribución de Ubuntu**: |
||
181 | - **Crear una nueva distribución clonada**: |
||
182 | Importa el respaldo como una nueva distribución con un nombre diferente: |
||
183 | ```powershell |
||
184 | wsl --import Ubuntu-22.04-Clone C:\WSL\Ubuntu-22.04-Clone C:\WSL\Backups\Ubuntu-22.04-backup-<fecha>.tar |
||
185 | ``` |
||
186 | Reemplaza `<fecha>` con la fecha correspondiente del archivo de respaldo. |
||
187 | - **Verificar distribuciones**: |
||
188 | Lista las distribuciones instaladas para confirmar que el clon está registrado: |
||
189 | ```powershell |
||
190 | wsl --list --all |
||
191 | ``` |
||
192 | Deberías ver tanto `Ubuntu-22.04` como `Ubuntu-22.04-Clone`. |
||
193 | - **Iniciar la distribución clonada**: |
||
194 | Inicia la distribución clonada para verificar que funciona: |
||
195 | ```powershell |
||
196 | wsl -d Ubuntu-22.04-Clone |
||
197 | ``` |
||
198 | - **Probar Nginx en la distribución clonada**: |
||
199 | En la terminal de la distribución clonada, verifica que Nginx esté funcionando: |
||
200 | ```bash |
||
201 | sudo systemctl status nginx |
||
202 | ``` |
||
203 | Si está activo, prueba en el navegador visitando `http://localhost`. |
||
204 | |||
205 | 3. **Recomendaciones para Respaldos**: |
||
206 | - Realiza respaldos regularmente, especialmente antes de hacer cambios importantes en la configuración. |
||
207 | - Almacena los archivos `.tar` en una ubicación segura, como un disco externo o una nube. |
||
208 | - Para restaurar un respaldo, usa el comando `wsl --import` con un nuevo nombre de distribución si deseas conservar la original. |
||
209 | |||
210 | ## Solución de Problemas |
||
211 | - **Nginx no es accesible desde el navegador**: |
||
212 | - Verifica que Nginx esté corriendo: `sudo systemctl status nginx`. |
||
213 | - Comprueba si el puerto 80 está abierto: `sudo netstat -tuln | grep 80`. |
||
214 | - Si usas WSL 2, los puertos no se redirigen automáticamente. Ejecuta esto en PowerShell para redirigir puertos: |
||
215 | ```powershell |
||
216 | netsh interface portproxy add v4tov4 listenport=80 listenaddress=0.0.0.0 connectport=80 connectaddress=127.0.0.1 |
||
217 | ``` |
||
218 | - Asegúrate de que el Firewall de Windows permita el tráfico en los puertos 80 y 443. |
||
219 | |||
220 | - **Errores de dominio con Certbot**: |
||
221 | - Verifica que tu dominio apunte a la dirección IP de tu servidor. |
||
222 | - Asegúrate de que los puertos 80 y 443 estén abiertos y accesibles. |
||
223 | |||
224 | - **Problemas de red con WSL**: |
||
225 | - Reinicia WSL: `wsl --shutdown` en PowerShell, luego reinicia Ubuntu. |
||
226 | - Actualiza WSL: `wsl --update` en PowerShell. |
||
227 | |||
228 | - **Problemas con el respaldo o clonación**: |
||
229 | - Asegúrate de tener suficiente espacio en disco para el archivo `.tar`. |
||
230 | - Verifica que la ruta de destino para `--import` exista y tenga permisos adecuados. |
||
231 | - Si la distribución clonada no inicia, verifica que el archivo `.tar` no esté corrupto ejecutando: |
||
232 | ```powershell |
||
233 | wsl --import Ubuntu-22.04-Test C:\WSL\Test C:\WSL\Backups\Ubuntu-22.04-backup-<fecha>.tar |
||
234 | ``` |
||
235 | |||
236 | ## Notas Adicionales |
||
237 | - **Acceso a Archivos de WSL**: |
||
238 | Los archivos de WSL están en `\\wsl$\Ubuntu-22.04` (o similar) desde el Explorador de Archivos de Windows. |
||
239 | - **Detener Nginx**: |
||
240 | Para detener Nginx: `sudo systemctl stop nginx`. |
||
241 | - **Desinstalación**: |
||
242 | Para eliminar Nginx y Certbot: |
||
243 | ```bash |
||
244 | sudo apt remove --purge nginx certbot python3-certbot-nginx -y |
||
245 | sudo apt autoremove -y |
||
246 | ``` |
||
247 | - **Desinstalar Ubuntu sin Microsoft Store**: |
||
248 | Elimina la distribución instalada manualmente: |
||
249 | ```powershell |
||
250 | wsl --unregister Ubuntu-22.04 |
||
251 | ``` |
||
252 | - **Desinstalar una distribución clonada**: |
||
253 | Elimina la distribución clonada: |
||
254 | ```powershell |
||
255 | wsl --unregister Ubuntu-22.04-Clone |
||
256 | ``` |
||
257 | - **Copias de Seguridad**: |
||
258 | Haz copias de seguridad regulares de la configuración de Nginx (`/etc/nginx/`), los archivos del sitio web (`/var/www/html/`) y la distribución completa de WSL como se describió en el Paso 5. |