PostgreSQL y MySQL
PostgreSQL y MySQL
Dokploy gestiona bases de datos como servicios independientes dentro de Docker. Cada base de datos corre en su propio contenedor con volumen persistente, credenciales aisladas y acceso desde la red interna.
Crear una base de datos PostgreSQL
Desde el panel principal:
- Clic en Create Service
- Seleccionar Database
- Elegir PostgreSQL
- Asignar un nombre descriptivo (ejemplo:
api-postgres)
Dokploy crea el contenedor con la imagen oficial de PostgreSQL y genera credenciales automaticamente.
Configuracion inicial
Al crear la base de datos, el panel muestra la seccion General con estos campos:
| Campo | Descripcion |
|---|---|
| Database Name | Nombre de la base de datos interna |
| Database User | Usuario con permisos sobre la base |
| Database Password | Contrasena generada automaticamente |
| Docker Image | Imagen y version (default: postgres:16) |
Para cambiar la version de PostgreSQL, edita el campo Docker Image:
postgres:15
postgres:16-alpine
postgres:17
Despues de modificar cualquier campo, presiona Save y luego Redeploy para aplicar los cambios.
Variables de conexion
Dokploy genera automaticamente las variables de conexion en la pestana Environment. Las variables clave son:
DATABASE_URL=postgresql://usuario:contrasena@nombre-contenedor:5432/nombre_db
POSTGRES_USER=usuario
POSTGRES_PASSWORD=contrasena
POSTGRES_DB=nombre_db
La variable DATABASE_URL usa el nombre del contenedor como host, lo que permite la conexion directa desde cualquier aplicacion dentro de la misma red Docker.
Crear una base de datos MySQL
El proceso es identico:
- Create Service > Database > MySQL
- Asignar nombre (ejemplo:
wordpress-mysql)
Configuracion de MySQL
Los campos disponibles son similares:
| Campo | Descripcion |
|---|---|
| Database Name | Nombre de la base |
| Database User | Usuario principal |
| Database Password | Contrasena |
| Database Root Password | Contrasena del usuario root |
| Docker Image | Default: mysql:8 |
MySQL tiene un campo adicional: Root Password. Este usuario tiene privilegios totales sobre el servidor. Usalo solo para tareas administrativas.
Versiones disponibles:
mysql:8.0
mysql:8.4
mysql:9
Acceder via terminal integrada
Dokploy incluye una terminal web para acceder directamente al contenedor de la base de datos.
Terminal de PostgreSQL
- Selecciona la base de datos en el panel
- Ve a la pestana Terminal
- Ejecuta:
psql -U $POSTGRES_USER -d $POSTGRES_DB
Comandos utiles dentro de psql:
-- Listar bases de datos
\l
-- Listar tablas
\dt
-- Describir una tabla
\d nombre_tabla
-- Ver tamano de la base de datos
SELECT pg_size_pretty(pg_database_size(current_database()));
-- Salir
\q
Terminal de MySQL
mysql -u $MYSQL_USER -p$MYSQL_PASSWORD $MYSQL_DATABASE
Comandos utiles dentro de mysql:
-- Listar bases de datos
SHOW DATABASES;
-- Listar tablas
SHOW TABLES;
-- Describir una tabla
DESCRIBE nombre_tabla;
-- Ver tamano de todas las bases
SELECT table_schema, ROUND(SUM(data_length + index_length) / 1024 / 1024, 2) AS 'Size (MB)'
FROM information_schema.tables
GROUP BY table_schema;
Conectar una aplicacion a la base de datos
La conexion entre una aplicacion y una base de datos en Dokploy se hace a traves de la red interna de Docker. No necesitas exponer puertos al exterior.
Paso 1: Obtener el nombre del contenedor
En la seccion General de la base de datos, el campo App Name o el nombre del servicio es el hostname interno. Dokploy asigna un nombre con formato:
nombre-servicio-hash
Puedes verlo en la pestana Terminal ejecutando:
hostname
Paso 2: Configurar variables de entorno en la aplicacion
Ve a tu aplicacion en Dokploy, pestana Environment, y agrega las variables de conexion:
DATABASE_HOST=nombre-contenedor-db
DATABASE_PORT=5432
DATABASE_USER=usuario
DATABASE_PASSWORD=contrasena
DATABASE_NAME=nombre_db
Para frameworks que usan una URL de conexion unica:
# PostgreSQL
DATABASE_URL=postgresql://usuario:contrasena@nombre-contenedor-db:5432/nombre_db
# MySQL
DATABASE_URL=mysql://usuario:contrasena@nombre-contenedor-db:3306/nombre_db
Paso 3: Redesplegar la aplicacion
Despues de agregar las variables, presiona Redeploy en la aplicacion. Las variables se inyectan en el contenedor al iniciar.
Ejemplo practico: Node.js con PostgreSQL
Si tu aplicacion usa pg o Prisma:
# En la pestana Environment de la aplicacion
DATABASE_URL=postgresql://api_user:secretpass@api-postgres-abc123:5432/api_db
El codigo no necesita cambios. Prisma, TypeORM, Drizzle y la mayoria de ORMs leen DATABASE_URL automaticamente.
Monitorear recursos de la base de datos
Dokploy muestra metricas basicas de cada servicio de base de datos.
Pestana Monitoring
Accede a la base de datos y selecciona Monitoring. Las metricas disponibles son:
- CPU Usage: porcentaje de CPU consumido por el contenedor
- Memory Usage: RAM utilizada vs limite asignado
- Network I/O: trafico de red entrante y saliente
- Disk I/O: operaciones de lectura y escritura
Verificar estado desde terminal
Para PostgreSQL:
-- Conexiones activas
SELECT count(*) FROM pg_stat_activity;
-- Tamano de tablas
SELECT relname, pg_size_pretty(pg_total_relation_size(relid))
FROM pg_catalog.pg_statio_user_tables
ORDER BY pg_total_relation_size(relid) DESC;
Para MySQL:
-- Estado del servidor
SHOW STATUS;
-- Conexiones activas
SHOW PROCESSLIST;
-- Variables de rendimiento
SHOW VARIABLES LIKE 'max_connections';
Limitar recursos
En la pestana Advanced de la base de datos puedes configurar limites de Docker:
| Parametro | Ejemplo | Descripcion |
|---|---|---|
| Memory Limit | 512m | RAM maxima del contenedor |
| Memory Reservation | 256m | RAM minima garantizada |
| CPU Limit | 1.0 | Nucleos de CPU maximos |
Estos limites previenen que una base de datos consuma todos los recursos del servidor.
Siguiente: Capitulo 11: MongoDB, Redis y MariaDB —>