# Implantar um posto

Execute o posto em seu servidor ou NAS para receber notificações de pastas de e-mail selecionadas. Você precisa do Docker, além do Docker Compose v2 para a instalação recomendada do Compose.

**Disponibilidade de imagem**: as versões disponíveis estão listadas em [Lançamentos do GitHub](https://github.com/mingzaily/mailwake/releases) e [GHCR](https://github.com/mingzaily/mailwake/pkgs/container/mailwake) .

## 1. Escolha um método de instalação

**Docker Compose é recomendado**: instalação, atualizações e backups usam a mesma configuração. A imagem é `ghcr.io/mingzaily/mailwake:latest`, para Linux amd64/arm64. `latest` segue a versão estável. Para fixar uma versão, substitua `latest` por uma tag publicada em Releases.

No terminal do seu servidor:

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

Crie `compose.yaml` nesse diretório com esta configuração 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:
```

Extraia a imagem e inicie o posto:

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

**Verifique o resultado**: `core` mostra `Up` / `running` e os logs contêm o código de configuração inicial. Mantenha o terminal disponível para a próxima etapa. Execute comandos futuros do Compose de `~/mailwake` .

O volume Docker `core-data` armazena `/data` . Com esse nome de diretório, seu nome Docker padrão é `mailwake_core-data` . Recriar o contêiner o preserva; `docker compose down -v` exclui o volume e seu conteúdo.

### Execução do Docker

Escolha esta instalação equivalente se preferir um único comando. Use um método de instalação para sua instância.

```
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 instalação usa o volume `mailwake-data`. Os comandos de gerenciamento a seguir usam o Compose; consulte [Instruções de backup de execução do Docker](backup.md#fazer-backup-de-uma-instalação-do-docker-run) para obter a alternativa.

## 2. Abra o console

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

**Em um servidor remoto ou NAS**: execute este comando em seu próprio computador, substituindo `user@server` pelo usuário e endereço SSH do seu servidor:

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

Mantenha a conexão aberta e visite <http://127.0.0.1:18080> em seu computador. Isso é suficiente para concluir a configuração inicial. Configure o HTTPS abaixo quando desejar acesso contínuo por meio de um domínio.

**Verifique o resultado**: a tela de configuração do Mailwake é aberta. Insira o código de configuração dos registros e crie uma senha de administrador de pelo menos 12 caracteres. Reiniciar o posto antes da configuração gera um novo código de configuração.

Continue com [sua primeira notificação](first-notification.md) para conectar uma caixa postal e um canal de notificação.

## 3. Configurar HTTPS

Aponte seu domínio para o servidor e configure seu proxy reverso para encaminhar para `http://127.0.0.1:8080` . Para Caddy instalado no mesmo host, adicione seu domínio a `Caddyfile`:

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

Verifique o DNS e permita as portas de entrada 80/443, depois valide e recarregue:

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

Abra `https://mail.example.org` , confirme se o certificado é válido e verifique se você pode entrar e abrir uma caixa de correio. Consulte o [guia oficial de instalação do Caddy](https://caddyserver.com/docs/install) para instalar o Caddy. Em um painel proxy como o Nginx Proxy Manager, insira o domínio e o endereço de encaminhamento e solicite um certificado no painel.

Para um proxy em outro contêiner, junte-o à rede Docker do posto e encaminhe para `http://core:8080` ; seu `127.0.0.1` refere-se a si mesmo. Preserve o Host original e defina `X-Forwarded-For` . O posto aceita informações de proxy de redes privadas e de loopback; exponha a porta 8080 apenas ao proxy e aos clientes locais confiáveis.

## 4. Atualize o posto

Conclua um [backup](backup.md) e execute no diretório Compose:

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

Para uma versão fixada, altere primeiro a tag da imagem em `compose.yaml`. Abra o console, verifique o monitoramento da caixa de correio e envie um novo email para verificar a entrega. Mantenha o backup pré-atualização. Para reverter, restaure os dados e a imagem correspondente usando o tutorial de restauração.

## 5. Solução de problemas

### A imagem não pode ser extraída

Verifique se o GHCR contém a versão solicitada. `manifest unknown` geralmente significa uma tag ausente. Verifique o endereço da imagem e a visibilidade do pacote para erros `denied` ou a conectividade do servidor com o GHCR para ver se há tempos limite.

### O console não abre

`127.0.0.1` refere-se ao computador que você está usando. Use o túnel SSH ou um domínio HTTPS para uma instalação remota. Verifique `docker compose ps` e `docker compose logs --tail=50 core` primeiro. Se 8080 estiver ocupado, altere o mapeamento para `127.0.0.1:18080:8080` e use a porta host 18080 no navegador e no proxy reverso.

### Redefinir uma senha de administrador

Execute no diretório Compose e insira a nova senha no prompt do terminal:

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

O comando de recuperação adquire o bloqueio do diretório de dados, portanto, pare o posto primeiro. A redefinição da senha revoga as sessões do navegador e preserva os tokens de API, as caixas de correio e a fila.

### Conecte o aplicativo oficial e o Pro

O console Web gratuito e a entrega Bark/Pushover/Webhook funcionam de forma independente. Para o aplicativo oficial, siga [Integração de aplicativos](connect-app.md) para HTTPS e emparelhamento.

As compilações de origem e o desenvolvimento local são abordados no [guia de desenvolvimento](https://github.com/mingzaily/mailwake/blob/main/docs/development.md) .

## Construções de origem e configurações de processo

Para compilações de desenvolvimento, siga [README do repositório de origem](https://github.com/mingzaily/mailwake#run-from-source) e [guia de criação de contribuidores](https://github.com/mingzaily/mailwake/blob/main/CONTRIBUTING.md) .

`MAILWAKE_LISTEN` é padronizado como `127.0.0.1:8080` fora do Docker; o contêiner usa `0.0.0.0:8080` . `MAILWAKE_DATA_DIR` é padronizado como `data` ; o contêiner usa `/data` . `MAILWAKE_RELAY_URL` é padronizado como `https://notify.mailwake.oritx.com` . Mantenha o diretório de dados completo, incluindo `secret.key` , durante reinicializações e atualizações.

## Alterar o ambiente de entrega push

Production e Sandbox usam identidades de emparelhamento separadas. Para alterar ambientes intencionalmente, pare o posto e execute a redefinição em seu diretório de dados existente e no endereço salvo do serviço de envio de notificações anterior:

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

Digite `reset-native-push` quando solicitado. O comando revoga os emparelhamentos no antigo serviço de envio de notificações. Se esse serviço estiver inacessível, mantenha a configuração antiga e tente novamente quando estiver acessível. Depois de confirmar zero alvos não resolvidos, defina o novo `MAILWAKE_RELAY_URL` , recrie o posto com `docker compose up -d` e [emparelhar novamente](connect-app.md) . O comando preserva a identidade de assinatura do posto e o histórico do canal comum.
