Cómo aislar aplicaciones web con entornos virtuales en Linux
Instalar múltiples aplicaciones web en un servidor Linux sin que unas afecten a otras es posible gracias a los entornos virtuales. Esta técnica te permite ejecutar diferentes versiones de PHP, Python o Node.js simultáneamente, manteniendo cada proyecto completamente aislado. Veamos sus ventajas:
Aislamiento de dependencias: Cada CMS puede tener sus propias versiones de librerías, PHP, Python o Node.js sin conflictos entre proyectos. Por ejemplo, puedes tener WordPress con PHP 7.4 y Drupal con PHP 8.2 simultáneamente.
Seguridad mejorada: Al aislar cada aplicación, si un CMS se ve comprometido, el impacto no afecta directamente al sistema host ni a otros proyectos.
Facilidad de mantenimiento: Puedes actualizar, probar o eliminar un CMS sin afectar el resto del sistema. Es como tener varios servidores en uno.
Reproducibilidad: Puedes replicar el mismo entorno en producción, evitando el clásico problema de «en mi máquina funciona».
Opciones principales para Linux
Docker/Contenedores: La opción más popular actualmente. Cada CMS corre en su propio contenedor con su stack completo (web server, base de datos, PHP/Python). Herramientas como Docker Compose facilitan la orquestación.
Máquinas virtuales (VirtualBox, KVM): Más pesadas pero con aislamiento completo a nivel de sistema operativo. Útiles si necesitas diferentes distribuciones de Linux.
Entornos virtuales de Python (venv, virtualenv): Específicos para CMS basados en Python como Django CMS o Wagtail. Aislan las dependencias de Python.
Chroot/Systemd-nspawn: Soluciones más ligeras que VMs pero con buen aislamiento.
Ejemplo práctico con Docker
Para instalar WordPress en un entorno aislado, crearías un docker-compose.yml:
version: '3'
services:
wordpress:
image: wordpress:latest
ports:
- "8080:80"
environment:
WORDPRESS_DB_HOST: db
WORDPRESS_DB_PASSWORD: ejemplo123
volumes:
- ./wordpress:/var/www/html
db:
image: mysql:5.7
environment:
MYSQL_ROOT_PASSWORD: ejemplo123Con un simple docker-compose up -d tendrías WordPress corriendo de forma aislada.
Otro ejemplo: instalar Odoo 18 en un entorno virtual
1. Preparar el sistema
Primero, asegúrate de tener las dependencias necesarias:
bash
sudo apt update
sudo apt install python3-dev python3-pip python3-venv \
libxml2-dev libxslt1-dev libldap2-dev libsasl2-dev \
libtiff5-dev libjpeg8-dev libopenjp2-7-dev zlib1g-dev \
libfreetype6-dev liblcms2-dev libwebp-dev libharfbuzz-dev \
libfribidi-dev libxcb1-dev libpq-dev nodejs npm git2. Crear estructura de directorios
bash
mkdir -p ~/odoo18
cd ~/odoo183. Crear el entorno virtual
python3 -m venv venv
source venv/bin/activateVerás que tu prompt cambia, mostrando (venv) al inicio, indicando que el entorno está activo.
4. Descargar Odoo 18
git clone https://github.com/odoo/odoo.git --depth 1 --branch 18.0 odoo18-src
cd odoo18-src5. Instalar dependencias de Python
pip install --upgrade pip
pip install wheel
pip install -r requirements.txt6. Instalar wkhtmltopdf (para PDFs)
sudo apt install wkhtmltopdf7. Crear base de datos PostgreSQL
sudo -u postgres createuser -s $USER
createdb odoo188. Crear archivo de configuración
Crea un archivo odoo18.conf:
nano ~/odoo18/odoo18.confCon este contenido:
[options]
admin_passwd = admin_password_seguro
db_host = localhost
db_port = 5432
db_user = tu_usuario
db_password = False
addons_path = /home/tu_usuario/odoo18/odoo18-src/addons
http_port = 8069
logfile = /home/tu_usuario/odoo18/odoo18.logNota importante: Cambia http_port si tu Odoo global usa el 8069. Usa 8070, 8071, etc.
9. Ejecutar Odoo 18
cd ~/odoo18/odoo18-src
./odoo-bin -c ~/odoo18/odoo18.confO con el entorno virtual:
source ~/odoo18/venv/bin/activate
python3 ~/odoo18/odoo18-src/odoo-bin -c ~/odoo18/odoo18.conf10. Acceder a Odoo 18
Abre tu navegador en: http://localhost:8069 (o el puerto que configuraste)
Script de inicio rápido
Crea un script para facilitar el inicio:
nano ~/odoo18/start_odoo18.sh#!/bin/bash
source ~/odoo18/venv/bin/activate
cd ~/odoo18/odoo18-src
./odoo-bin -c ~/odoo18/odoo18.confAhora le damos permiso de ejecución:
chmod +x ~/odoo18/start_odoo18.shAhora puedes iniciar con: ~/odoo18/start_odoo18.sh
Alternar entre instalaciones
- Odoo global: Ejecutas como lo haces normalmente
- Odoo 18 virtual: Activas el entorno (
source ~/odoo18/venv/bin/activate) y ejecutas desde allí
Cada uno usa su propio puerto, base de datos y librerías Python, sin interferencias.

