Aunque WSL2 no ofrece un sistema de init tradicional como systemd
por defecto, es totalmente posible configurar y ejecutar servicios persistentes como nginx o PostgreSQL desde WSL2. Esto permite simular entornos de producción, realizar pruebas completas o levantar microservicios sin contenedores ni VMs adicionales.
Este artículo explica cómo instalar, configurar, automatizar y mantener servicios en segundo plano en WSL2 con enfoque práctico y seguro.
Requisitos
- Windows 10/11 con WSL2 habilitado
- Distro Ubuntu 22.04 (u otra basada en Debian)
- Acceso a
sudo
- Persistencia del sistema de archivos dentro de
~
(no usar/mnt/c/
)
Paso 1: Instalar nginx y PostgreSQL
sudo apt update
sudo apt install -y nginx postgresql
Verificar que los servicios estén disponibles:
nginx -v
psql --version
Paso 2: Iniciar servicios manualmente
Como no hay systemd
, se inician desde la terminal:
sudo service nginx start
sudo service postgresql start
Verificar estado:
ps -ef | grep nginx
ps -ef | grep postgres
Ver puertos activos:
ss -tuln
Paso 3: Hacer que los servicios se inicien automáticamente
Opción 1: Script de inicio en .bashrc
Agregar al final de ~/.bashrc
:
# Iniciar servicios al abrir WSL
if ! pgrep nginx > /dev/null; then
sudo service nginx start
fi
if ! pgrep postgres > /dev/null; then
sudo service postgresql start
fi
⚠️ Esto pedirá contraseña a menos que se configure sudo
sin contraseña para estos comandos.
Opción 2: Crear alias o comandos rápidos
alias start-services='sudo service nginx start && sudo service postgresql start'
Guardar en .bash_aliases
o directamente en .bashrc
.
Paso 4: Configuración básica de nginx
Editar archivo principal:
sudo nano /etc/nginx/sites-available/default
Configurar un servidor local:
server {
listen 80;
server_name localhost;
location / {
root /var/www/html;
index index.html;
}
}
Reiniciar para aplicar cambios:
sudo service nginx restart
Probar en navegador: http://localhost
Paso 5: Configurar PostgreSQL
Cambiar contraseña del usuario por defecto:
sudo -u postgres psql
\password postgres
Crear base de datos y usuario:
CREATE DATABASE testdb;
CREATE USER dev WITH ENCRYPTED PASSWORD 'clave123';
GRANT ALL PRIVILEGES ON DATABASE testdb TO dev;
Conectarse:
psql -U dev -d testdb -h localhost
Paso 6: Acceso desde el host (Windows)
Por defecto, los servicios expuestos en 127.0.0.1
dentro de WSL2 son accesibles desde Windows como localhost
.
Probar:
curl http://localhost
psql -h localhost -U dev -d testdb
Buenas prácticas
- Ejecutar servicios en
~/
o/etc
dentro del FS Linux, nunca desde/mnt/c/
- Automatizar con scripts
start-services.sh
- Usar
pgAdmin
,DBeaver
o VS Code para conexión visual a PostgreSQL - Para múltiples distros, considerar nginx reverse proxy o Docker
- Evitar usar
nohup
o&
sin monitoreo de procesos (usartmux
si es necesario)
Conclusión
Con unos pocos ajustes, es completamente posible ejecutar servicios persistentes como nginx y PostgreSQL en WSL2 sin contenedores. Esta configuración es ideal para desarrolladores que necesitan replicar entornos de servidor localmente con flexibilidad, rendimiento y compatibilidad total con Linux desde Windows.
Ver también
- Construcción de un asistente contextual para escritorio usando IA local con acceso al sistema
- Integración de inferencia local ONNX con Windows ML en apps modernas
- Integración con servicios locales vía App Services y extensión de funcionalidades entre apps
- Implementación de Background Tasks persistentes en apps modernas
- Empaquetado de apps modernas con MSIX y configuración avanzada del manifiesto