---
title: "Stacks de Docker"
description: "Stacks de Docker"
type: "docs"
category: "doc"
tags: []
authors: [Anonymous]
date: "2026-09-25"
last_update: "2026-09-25"
time_minutes: 6
draft: false
unlisted: false
url: "https://www.billmysales.com/docs/stacks"
---

# Stacks de Docker

Nuestros [stacks de Docker](https://www.billmysales.com/stacks) permiten instalar en tu propio servidor cada plataforma que se integra con BillMySales, lista para producción. Son gratuitos y de código abierto (licencia MIT), y todos siguen las mismas convenciones: si sabes usar uno, sabes usarlos todos.

Esta guía explica lo que es común a todos los stacks. Lo propio de cada plataforma (variables obligatorias, recursos, actualizaciones y cómo restaurar un respaldo) está en la guía **Instalación con Docker** de cada origen de datos, y el detalle completo, en el README de su repositorio.

> [!TIP] ¿Prefieres que lo instalemos por ti?
>
> Evaluamos y cotizamos la instalación en tu servidor, dejándola conectada con BillMySales. [Conversemos](https://www.billmysales.com/meet).

## Qué incluye cada stack

- La plataforma, con su base de datos y los servicios que necesita (tareas programadas, colas, caché), cada uno en su propio contenedor.
- El servidor web Caddy, con HTTPS automático. Es el único servicio que publica puertos.
- Respaldos periódicos de la base de datos y de los archivos que no se pueden regenerar.
- Configuración segura por defecto y un límite de memoria en cada servicio.

## Requisitos

- Un servidor con **Docker Engine 24 o superior** y **Docker Compose v2.24 o superior**, además de **Git** para descargar el stack.
- Los puertos **80 y 443** accesibles desde internet.
- Un **dominio** con su registro DNS apuntando a la IP del servidor.
- Un servicio de **correo SMTP**, para que la plataforma pueda enviar correos (confirmaciones, recuperación de contraseñas, notificaciones).

La memoria y el disco necesarios dependen de cada plataforma y están indicados en su guía.

## Instalación

Descarga el stack de tu plataforma y crea el archivo de configuración a partir de la plantilla de producción. Por ejemplo, para WooCommerce:

```shell
git clone https://github.com/BillMySales/billmysales-docker-woocommerce.git
cd billmysales-docker-woocommerce
cp .env.prod.example .env
```

Abre el archivo `.env` con tu editor y completa las variables obligatorias: la URL pública de la plataforma, el dominio en `SITE_ADDRESS`, las contraseñas y claves secretas, y los datos de SMTP. Cada variable está documentada en el mismo archivo, y las obligatorias de cada plataforma están listadas en su guía.

Usa contraseñas y claves largas y aleatorias. Puedes generarlas con el comando que sugiere el `.env` de cada stack, normalmente:

```shell
openssl rand -hex 32
```

El formato hexadecimal evita caracteres como `/`, `+` o `=`, que pueden romper las URL de conexión a la base de datos.

Algunas plataformas necesitan claves con un formato especial; en ese caso, su guía indica cómo generarlas.

El cifrado del correo se define con `SMTP_SECURE`: `tls` (STARTTLS, normalmente en el puerto 587), `ssl` (SMTPS, puerto 465) o `none` (sin cifrado). El valor por defecto de cada stack está indicado en su `.env.prod.example`; ajústalo según tu proveedor de correo.

## Levantar la plataforma

```shell
docker compose up -d
docker compose logs -f setup
```

El stack no arranca si falta una variable obligatoria, y te indica cuál. El servicio `setup` instala la plataforma la primera vez y en los siguientes arranques aplica las migraciones necesarias; se puede ejecutar cuantas veces quieras. Cuando sus registros terminan con `==> Done`, la plataforma está lista en tu dominio.

Para revisar que todo esté bien:

```shell
docker compose ps
```

Todos los servicios deben aparecer como `healthy`, y `setup` como `Exited (0)`.

## HTTPS

Con tu dominio en `SITE_ADDRESS`, Caddy obtiene un certificado de Let's Encrypt y lo renueva automáticamente, sin configuración adicional. Si el servidor ya tiene otro proxy que se encarga del HTTPS, usa `SITE_ADDRESS=:80`.

### Detrás de Traefik

Si ya usas Traefik en el servidor, el stack puede publicarse a través de él sin exponer puertos propios. En el `.env`, además de lo anterior, deja estas variables (con la variable de URL que corresponde a tu plataforma):

```ini
COMPOSE_FILE=compose.yaml:overrides/traefik.yaml
TRAEFIK_HOST=tienda.example.com
WP_URL=https://tienda.example.com
SITE_ADDRESS=:80
```

Por defecto el stack se conecta a la red de Docker `shared_network` y usa el entrypoint `websecure` y el certresolver `letsencrypt`. Si tu Traefik usa otros nombres, ajusta `TRAEFIK_NETWORK`, `TRAEFIK_ENTRYPOINT` y `TRAEFIK_CERTRESOLVER`.

## Respaldos

En producción los respaldos quedan activos desde el primer arranque: se guardan al iniciar y luego cada 24 horas, y se eliminan los que tienen más de 7 días. Puedes cambiarlo con `BACKUP_INTERVAL_HOURS` y `BACKUP_KEEP_DAYS`.

```shell
docker compose run --rm --no-deps backup now
docker compose run --rm --no-deps backup list
```

El primer comando crea un respaldo en el momento y el segundo lista los disponibles. Los pasos para restaurar uno dependen de cada plataforma (qué servicios detener y qué hacer después) y están en su guía.

> [!WARNING] Copia tus respaldos fuera del servidor
>
> Los respaldos se guardan en el mismo servidor. Si el servidor falla, se pierden junto con la plataforma. Cópialos periódicamente a otro lugar.

## Actualizaciones

Cada componente usa una versión fija, definida en una variable del `.env`. Según la plataforma, la aplicación se actualiza de una de estas dos formas:

- **Desde su panel de administración**, como en cualquier instalación (por ejemplo, WooCommerce o PrestaShop).
- **Cambiando la versión en el `.env`** y volviendo a levantar el stack; `setup` aplica las migraciones de la nueva versión.

La guía de cada plataforma indica cuál corresponde. La URL pública se toma siempre del `.env`: si cambias de dominio, actualízala junto con `SITE_ADDRESS` y ejecuta `docker compose up -d`.

## Comandos útiles

| Comando | Para qué sirve |
|---|---|
| `docker compose ps` | Ver el estado de los servicios. |
| `docker compose logs -f` | Ver los registros de todos los servicios. |
| `docker compose down` | Detener la plataforma sin borrar datos. |

> [!DANGER] Nunca uses `docker compose down -v` en producción
>
> La opción `-v` elimina los volúmenes: la base de datos, los archivos de la plataforma y los respaldos.

## Seguridad

Los stacks vienen configurados de forma segura por defecto:

- Contraseñas y claves obligatorias, sin valores por defecto en producción.
- La base de datos no se expone fuera del servidor.
- Modo de depuración apagado y errores que nunca se muestran al visitante.
- Cabeceras de seguridad, versión de PHP oculta cuando aplica y rutas sensibles bloqueadas.

No incluyen un firewall de aplicaciones web, límite de intentos de inicio de sesión ni copias de respaldo fuera del servidor. Si los necesitas, agrégalos con las herramientas de tu plataforma o de tu proveedor.

La plantilla de desarrollo (`.env.dev.example`) usa contraseñas públicas: nunca la uses en un servidor.



---
Última actualización el 25/09/2026

