# Desplegar un puesto

Ejecute el puesto en su servidor o NAS para recibir notificaciones de carpetas de correo electrónico seleccionadas. Necesita Docker, además de Docker Compose v2 para la instalación recomendada de Compose.

**Disponibilidad de imágenes**: las versiones disponibles se enumeran en [Lanzamientos de GitHub](https://github.com/mingzaily/mailwake/releases) y [GHCR](https://github.com/mingzaily/mailwake/pkgs/container/mailwake).

## 1. Elija un método de instalación

**Se recomienda Docker Compose**: la instalación, las actualizaciones y las copias de seguridad utilizan la misma configuración. La imagen es `ghcr.io/mingzaily/mailwake:latest`, para Linux amd64/arm64. `latest` sigue la versión estable. Para fijar una versión, reemplace `latest` con una etiqueta publicada de Lanzamientos.

En su terminal de servidor:

```
mkdir -p ~/mailwake
cd ~/mailwake
```

Crea `compose.yaml` en ese directorio con esta configuración completa:

```
services:
  core:
    image: ghcr.io/mingzaily/mailwake:latest
    restart: unless-stopped
    ports:
      - "127.0.0.1:8080:8080"
    environment:
      MAILWAKE_LISTEN: "0.0.0.0:8080"
      MAILWAKE_DATA_DIR: "/data"
      MAILWAKE_RELAY_URL: "${MAILWAKE_RELAY_URL:-}"
    volumes:
      - core-data:/data
    read_only: true
    security_opt:
      - no-new-privileges:true
    cap_drop:
      - ALL
    stop_grace_period: 30s
volumes:
  core-data:
```

Extraiga la imagen e inicie el puesto:

```
docker compose pull core
docker compose up -d
docker compose ps
docker compose logs --tail=50 core
```

**Verifique el resultado**: `core` muestra `Up` / `running` y los registros contienen el código de configuración inicial. Mantenga el terminal disponible para el siguiente paso. Ejecute futuros comandos de redacción desde `~/mailwake`.

El volumen Docker `core-data` almacena `/data`. Con este nombre de directorio, su nombre Docker predeterminado es `mailwake_core-data`. Recrear el contenedor lo conserva; `docker compose down -v` elimina el volumen y su contenido.

### Ejecución de Docker

Elija esta instalación equivalente si prefiere un solo comando. Utilice un método de instalación para su instancia.

```
docker volume create mailwake-data
docker run -d \
  --name mailwake \
  --restart unless-stopped \
  --stop-timeout 30 \
  --read-only \
  --security-opt no-new-privileges:true \
  --cap-drop ALL \
  -p 127.0.0.1:8080:8080 \
  -v mailwake-data:/data \
  ghcr.io/mingzaily/mailwake:latest
docker logs --tail=50 mailwake
```

Esta instalación utiliza el volumen `mailwake-data`. Los siguientes comandos de administración utilizan Compose; consulte el [Instrucciones de copia de seguridad de Docker Run](backup.md#hacer-una-copia-de-seguridad-de-una-instalación-de-docker-run) para ver la alternativa.

## 2. Abra la consola.

**En el host Docker**: abra <http://127.0.0.1:8080>.

**En un servidor remoto o NAS**: ejecute este comando en su propia computadora, reemplazando `user@server` con el usuario y la dirección SSH de su servidor:

```
ssh -L 18080:127.0.0.1:8080 user@server
```

Mantenga la conexión abierta y visite <http://127.0.0.1:18080> en su computadora. Esto es suficiente para completar la configuración inicial. Configure HTTPS a continuación cuando desee acceso continuo a través de un dominio.

**Comprueba el resultado**: se abre la pantalla de configuración de Mailwake. Ingrese el código de configuración de los registros y cree una contraseña de administrador de al menos 12 caracteres. Reiniciar el puesto antes de la configuración genera un nuevo código de configuración.

Continúe con [tu primera notificación](first-notification.md) para conectar un buzón y un canal de notificación.

## 3. Configurar HTTPS

Apunte su dominio al servidor y configure su proxy inverso para reenviarlo a `http://127.0.0.1:8080`. Para Caddy instalado en el mismo host, agregue su dominio a `Caddyfile`:

```
mail.example.org {
    reverse_proxy 127.0.0.1:8080
}
```

Verifique DNS y permita los puertos entrantes 80/443, luego valide y vuelva a cargar:

```
sudo caddy validate --config /etc/caddy/Caddyfile
sudo systemctl reload caddy
```

Abra `https://mail.example.org`, confirme que el certificado sea válido y verifique que puede iniciar sesión y abrir un buzón. Consulte [guía oficial de instalación de Caddy](https://caddyserver.com/docs/install) para instalar Caddy. En un panel de proxy como Nginx Proxy Manager, ingrese el dominio y la dirección de reenvío y solicite un certificado en el panel.

Para un proxy en otro contenedor, únalo a la red Docker del puesto y reenvíelo a `http://core:8080`; su `127.0.0.1` se refiere a sí mismo. Conserve el host original y configure `X-Forwarded-For`. El puesto acepta información de proxy de redes privadas y de loopback; exponga el puerto 8080 sólo al proxy y a los clientes locales de confianza.

## 4. Actualizar el puesto

Complete un [respaldo](backup.md) y luego ejecútelo en el directorio Compose:

```
docker compose pull core
docker compose up -d
docker compose ps
docker compose logs --tail=50 core
```

Para una versión fijada, primero cambie la etiqueta de imagen en `compose.yaml`. Abra la consola, verifique el monitoreo del buzón y envíe un nuevo correo electrónico para verificar la entrega. Mantenga la copia de seguridad previa a la actualización. Para retroceder, restaure tanto sus datos como su imagen coincidente usando el tutorial de restauración.

## 5. Solución de problemas

### La imagen no se puede extraer

Compruebe si GHCR contiene la versión solicitada. `manifest unknown` normalmente significa que falta una etiqueta. Verifique la dirección de la imagen y la visibilidad del paquete para ver si hay errores `denied` o la conectividad del servidor a GHCR para ver si se han agotado los tiempos de espera.

### La consola no se abre

`127.0.0.1` se refiere a la computadora que está utilizando. Utilice el túnel SSH o un dominio HTTPS para una instalación remota. Verifique primero `docker compose ps` y `docker compose logs --tail=50 core`. Si 8080 está ocupado, cambie la asignación a `127.0.0.1:18080:8080` y use el puerto de host 18080 en el navegador y el proxy inverso.

### Restablecer una contraseña de administrador

Ejecute en el directorio Compose e ingrese la nueva contraseña en el indicador del terminal:

```
docker compose stop core
docker compose run --rm -it core admin reset-password
docker compose start core
```

El comando de recuperación adquiere el bloqueo del directorio de datos, así que detenga primero el puesto. Restablecer la contraseña revoca las sesiones del navegador y conserva los tokens de API, los buzones de correo y la cola.

### Conecta la App oficial y Pro

La consola web gratuita y la entrega Bark/Pushover/Webhook funcionan de forma independiente. Para la aplicación oficial, siga [Integración de aplicaciones](connect-app.md) para HTTPS y emparejamiento.

Las compilaciones de origen y el desarrollo local se tratan en [guía de desarrollo](https://github.com/mingzaily/mailwake/blob/main/docs/development.md).

## Construcciones de código fuente y configuración de proceso

Para compilaciones de desarrollo, siga [repositorio de origen README](https://github.com/mingzaily/mailwake#run-from-source) y [guía de construcción para contribuyentes](https://github.com/mingzaily/mailwake/blob/main/CONTRIBUTING.md).

`MAILWAKE_LISTEN` por defecto es `127.0.0.1:8080` fuera de Docker; el contenedor utiliza `0.0.0.0:8080`. `MAILWAKE_DATA_DIR` por defecto es `data`; el contenedor utiliza `/data`. `MAILWAKE_RELAY_URL` por defecto es `https://notify.mailwake.oritx.com`. Mantenga el directorio de datos completo, incluido `secret.key`, durante los reinicios y las actualizaciones.

## Cambiar el entorno de entrega push

Production y Sandbox utilizan identidades de emparejamiento independientes. Para cambiar entornos intencionalmente, detenga el puesto y ejecute el reinicio en su directorio de datos existente y la dirección guardada del servicio de envío de notificaciones anterior:

```sh
docker compose stop core
docker compose run --rm -it core admin reset-native-push
```

Escriba `reset-native-push` cuando se le solicite. El comando revoca los emparejamientos en el antiguo servicio de envío de notificaciones. Si no se puede acceder a ese servicio, mantenga la configuración anterior y vuelva a intentarlo cuando esté disponible. Después de que confirme que no hay objetivos sin resolver, configure el nuevo `MAILWAKE_RELAY_URL`, vuelva a crear el puesto con `docker compose up -d` y [emparejar de nuevo](connect-app.md). El comando preserva la identidad de firma del puesto y el historial del canal ordinario.
