Manual Detallado: Instalación y Despliegue de Ubuntu Server con Ventoy, LAMP, OpenCart y Cloudflare Tunnel¶
Este documento unifica todos los pasos necesarios para:
- Preparar un pendrive de instalación con Ventoy
- Instalar y configurar un servidor Ubuntu con LAMP
- Asegurar MySQL y gestionar contraseñas
- Crear un túnel Cloudflare para exponer el sitio
- Configurar Apache y VirtualHosts
- Migrar una instancia local de OpenCart al servidor
Cada sección incluye explicaciones, validaciones y buenas prácticas para evitar errores comunes.
Variables de entorno¶
Define al principio valores personalizables para facilitar la automatización:
# Ruta de la ISO descargada
ISO_PATH="$HOME/Descargas/ubuntu-22.04.5-live-server-amd64.iso"
# Dispositivo USB (ajusta al resultado de `lsblk -f`)
USB_DEV="/dev/sdb"
# Nombre del túnel y dominio
TUNNEL_NAME="tienda-tunnel"
DOMAIN="tienda.mettgorras.uk"
📁 Requisitos Previos¶
- PC con GNU/Linux (Ubuntu, Debian, Kubuntu, etc.)
- Pendrive USB ≥ 8 GB (se formateará)
- Conexión a Internet para descargas
- Cuenta en Cloudflare con dominio apuntado
Valida que tengas las herramientas básicas:
which wget curl git lsblk ip systemctl cloudflared
🔧 Paso 1: Preparar Pendrive con Ventoy¶
-
Localiza tu pendrive con
lsblk -f
y confirma queUSB_DEV
corresponde al dispositivo correcto. -
Descarga Ventoy y extrae:
cd ~/Descargas
wget -q https://github.com/ventoy/Ventoy/releases/download/v1.1.05/ventoy-1.1.05-linux.tar.gz
tar -xzvf ventoy-1.1.05-linux.tar.gz
cd ventoy-1.1.05
- Instala Ventoy en el USB:
sudo sh Ventoy2Disk.sh -i "$USB_DEV"
Confirma con y
cuando se solicite. Ventoy creará dos particiones: gestor de arranque y exFAT para ISOs.
- Monta la partición Ventoy y copia la ISO:
udisksctl mount -b /dev/disk/by-label/Ventoy
cp "$ISO_PATH" /media/$USER/Ventoy/
sync
udisksctl unmount -b /dev/disk/by-label/Ventoy
- Arranca desde el USB en la máquina de destino y elige la ISO en el menú Ventoy.
🛠️ Paso 2: Instalar micro y Midnight Commander¶
Instalar micro¶
curl https://getmic.ro | bash
sudo mv micro /usr/local/bin/
micro --version
Instalar Midnight Commander¶
sudo apt update
sudo apt install -y mc
Configurar micro como editor por defecto¶
sudo update-alternatives --install /usr/bin/editor editor /usr/local/bin/micro 40
sudo update-alternatives --config editor
Ajustes automáticos para micro¶
install -d ~/.config/micro
cat > ~/.config/micro/settings.json << 'EOF'
{
"mkparents": true,
"paste": true,
"savecursor": true,
"saveundo": true,
"scrollbar": true,
"softwrap": true,
"tabstospaces": true,
"wordwrap": true
}
EOF
🚀 Paso 3: Instalación Rápida de LAMP¶
- Instala Apache, MariaDB y PHP con un solo comando:
sudo apt update
sudo apt install -y lamp-server^
- Asegura MySQL:
sudo mysql_secure_installation
- Habilita
mod_rewrite
en Apache:
sudo a2enmod rewrite
sudo systemctl restart apache2
🛡️ Paso 4: Configurar seguridad de MySQL¶
Responde en mysql_secure_installation
:
y
→ Activar VALIDATE PASSWORD COMPONENT1
→ Política MEDIUM- Enter → Saltar cambio de contraseña si usas auth_socket
y
→ Eliminar usuarios anónimosy
→ Deshabilitar login remoto de rooty
→ Eliminar base de datos testy
→ Recargar privilegios
🔐 Paso 5: Restablecer contraseña root de MySQL (recuperación)¶
Si skip-grant-tables
falla:
- Detén MySQL y elimina procesos sobrantes:
sudo systemctl stop mysql
sudo pkill -f mysqld_safe
- Crea directorio y ajusta permisos:
sudo mkdir -p /var/run/mysqld
sudo chown mysql:mysql /var/run/mysqld
- Inicia modo seguro:
sudo mysqld_safe --skip-grant-tables --skip-networking &
- Conéctate y cambia contraseña:
mysql -u root
FLUSH PRIVILEGES;
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'TuNuevaContraseña';
FLUSH PRIVILEGES;
EXIT;
- Reinicia MySQL:
sudo pkill -f mysqld_safe
sudo systemctl start mysql
🌐 Paso 6: Configurar Cloudflare Tunnel¶
- Instala cloudflared:
wget -q https://github.com/cloudflare/cloudflared/releases/latest/download/cloudflared-linux-amd64.deb
sudo dpkg -i cloudflared-linux-amd64.deb
- Autentica tu cuenta:
cloudflared tunnel login
- Crea el túnel:
cloudflared tunnel create "$TUNNEL_NAME"
- Asigna DNS al túnel:
cloudflared tunnel route dns "$TUNNEL_NAME" "$DOMAIN"
- Prepara
~/.cloudflared/config.yml
:
tunnel: <ID_DEL_TUNNEL>
credentials-file: ~/.cloudflared/<ID_DEL_TUNNEL>.json
ingress:
- hostname: $DOMAIN
service: http://localhost:80
- service: http_status:404
- Crea servicio systemd:
sudo tee /etc/systemd/system/cloudflared.service > /dev/null <<EOF
[Unit]
Description=Cloudflared Tunnel
After=network.target
[Service]
Type=simple
ExecStart=/usr/bin/cloudflared tunnel run $TUNNEL_NAME
Restart=always
RestartSec=5
User=$USER
[Install]
WantedBy=multi-user.target
EOF
sudo systemctl daemon-reload
sudo systemctl enable --now cloudflared
⚙️ Paso 7: Configuración de Apache y VirtualHosts¶
- Crea directorios base:
sudo mkdir -p /var/www/html/tienda /var/www/html/default-root
echo "<h1>No disponible</h1>" | sudo tee /var/www/html/default-root/index.html
- VirtualHost para la tienda:
sudo tee /etc/apache2/sites-available/tienda.conf > /dev/null <<EOF
<VirtualHost *:80>
ServerName $DOMAIN
DocumentRoot /var/www/html/tienda
<Directory /var/www/html/tienda>
Options -Indexes +FollowSymLinks
AllowOverride All
Require all granted
</Directory>
ErrorLog \${APACHE_LOG_DIR}/tienda_error.log
CustomLog \${APACHE_LOG_DIR}/tienda_access.log combined
</VirtualHost>
EOF
- VirtualHost por defecto protegido:
sudo tee /etc/apache2/sites-available/default-root.conf > /dev/null <<EOF
<VirtualHost *:80>
ServerName mettgorras.uk
DocumentRoot /var/www/html/default-root
<Directory /var/www/html/default-root>
Options -Indexes
AllowOverride None
Require all denied
</Directory>
ErrorLog \${APACHE_LOG_DIR}/default_error.log
CustomLog \${APACHE_LOG_DIR}/default_access.log combined
</VirtualHost>
EOF
- Habilitar y recargar:
sudo a2ensite tienda.conf default-root.conf
sudo a2dissite 000-default.conf
sudo systemctl reload apache2
💾 Paso 8: Migración de OpenCart del Entorno Local al Servidor¶
- Genera backup en local:
mkdir -p ~/Escritorio/backupTienda
tar czf ~/Escritorio/backupTienda/tienda.tar.gz -C /var/www/html/dotecomerce-dev .
tar czf ~/Escritorio/backupTienda/storage.tar.gz -C /var/www/storage-dev .
mysqldump -u root -p opencart2 > ~/Escritorio/backupTienda/db.sql
- Copia al servidor:
scp ~/Escritorio/backupTienda/* $USER@172.16.0.191:/tmp/
- Restaura en servidor:
sudo mkdir -p /var/www/html/tienda /var/www/storage
sudo tar xzf /tmp/tienda.tar.gz -C /var/www/html/tienda
sudo tar xzf /tmp/storage.tar.gz -C /var/www/storage
sudo chown -R www-data:www-data /var/www/html/tienda /var/www/storage
sudo chmod -R 755 /var/www/html/tienda /var/www/storage
mysql -u root -p -e "
CREATE DATABASE opencart2 CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
CREATE USER 'opencart1'@'localhost' IDENTIFIED BY 'TuContraseña';
GRANT ALL PRIVILEGES ON opencart2.* TO 'opencart1'@'localhost';
FLUSH PRIVILEGES;
"
mysql -u root -p opencart2 < /tmp/db.sql
-
Ajusta
config.php
yadmin/config.php
en/var/www/html/tienda
y/var/www/html/tienda/admin
con las rutas y credenciales correspondientes. -
Actualiza URLs en base de datos:
mysql -u root -p -D opencart2 -e "
UPDATE oc_setting
SET value = REPLACE(value, 'http://localhost/dotecomerce-dev', 'https://$DOMAIN')
WHERE value LIKE '%localhost%';
"
- Limpia caché y recarga Apache:
sudo rm -rf /var/www/storage/cache/* /var/www/storage/modification/*
sudo systemctl reload apache2
✅ Checklist Final¶
Paso | Estado |
---|---|
Pendrive con Ventoy y ISO | ☑ |
micro y mc instalados y configurados | ☑ |
LAMP instalado y mod_rewrite habilitado |
☑ |
MySQL seguro y contraseña root configurada | ☑ |
Túnel Cloudflare activo y DNS apuntado | ☑ |
VirtualHosts Apache configurados | ☑ |
Backup y migración de OpenCart completos | ☑ |
Configuraciones de config.php aplicadas |
☑ |
Caché limpiada y Apache recargado | ☑ |
Con este flujo tendrás un servidor Ubuntu preparado para servir tu tienda OpenCart de manera segura, accesible vía HTTPS por Cloudflare y con un despliegue fácilmente replicable y mantenible.