# アウトポストのデプロイ

サーバーまたは NAS で アウトポスト を実行して、選択した電子メール フォルダーから通知を受信します。推奨される Compose インストールには Docker に加えて Docker Compose v2 が必要です。

**利用可能なイメージ**: 利用可能なバージョンは [GitHub リリース](https://github.com/mingzaily/mailwake/releases) および [GHCR](https://github.com/mingzaily/mailwake/pkgs/container/mailwake) にリストされています。

## 1. インストール方法を選択します

**Docker Compose をお勧めします**: インストール、更新、バックアップでは同じ構成が使用されます。イメージは `ghcr.io/mingzaily/mailwake:latest` 、Linux amd64 / arm64 用です。 `latest` は安定版リリースに続きます。バージョンを固定するには、`latest` をリリースから公開されたタグに置き換えます。

サーバー端末で:

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

この完全な構成を使用して、そのディレクトリに `compose.yaml` を作成します。

```
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:
```

イメージをプルして アウトポスト を開始します。

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

**結果を確認してください**: `core` は `Up` / `running` を示し、ログには初期セットアップ コードが含まれています。次のステップのために端末を使用できるようにしてください。今後の Compose コマンドは `~/mailwake` から実行します。

`core-data` Docker ボリュームには `/data` が格納されます。このディレクトリ名を使用すると、デフォルトの Docker 名は `mailwake_core-data` になります。コンテナを再作成すると、コンテナが保持されます。 `docker compose down -v` はボリュームとその内容を削除します。

### ドッカーラン

単一のコマンドを使用したい場合は、この同等のインストールを選択してください。インスタンスに対して 1 つのインストール方法を使用してください。

```
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
```

このインストールでは、`mailwake-data` ボリュームを使用します。次の管理コマンドは Compose を使用します。代替案については、[Docker Run のバックアップ手順](backup.md#docker-run-インストールをバックアップする) を参照してください。

## 2. コンソールを開きます

**Docker ホスト上**: <http://127.0.0.1:8080> を開きます。

**リモート サーバーまたは NAS の場合**: 自分のコンピュータで次のコマンドを実行します。`user@server` をサーバーの SSH ユーザーとアドレスに置き換えます。

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

接続を開いたままにして、コンピューター上で <http://127.0.0.1:18080> にアクセスします。これだけで初期設定は完了します。ドメイン経由で継続的にアクセスしたい場合は、以下で HTTPS を設定します。

**結果を確認してください**: Mailwake 設定画面が開きます。ログからセットアップ コードを入力し、12 文字以上の管理者パスワードを作成します。セットアップ前に アウトポスト を再起動すると、新しいセットアップ コードが生成されます。

[最初の通知](first-notification.md) に進み、メールボックスと通知チャネルを接続します。

## 3.HTTPSの設定

ドメインをサーバーにポイントし、 `http://127.0.0.1:8080` に転送するようにリバース プロキシを構成します。同じホストにインストールされている Caddy の場合、ドメインを `Caddyfile` に追加します。

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

DNS を確認し、受信ポート 80 / 443 を許可してから、検証してリロードします。

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

`https://mail.example.org` を開き、証明書が有効であることを確認し、サインインしてメールボックスを開くことができることを確認します。 Caddy をインストールするには、[公式 Caddy インストールガイド](https://caddyserver.com/docs/install) を参照してください。 Nginx Proxy Manager などのプロキシ パネルで、ドメインと転送アドレスを入力し、パネルで証明書を要求します。

別のコンテナ内のプロキシの場合は、それを アウトポスト の Docker ネットワークに参加させ、 `http://core:8080` に転送します。その `127.0.0.1` はそれ自体を指します。元のホストを保持し、 `X-Forwarded-For` を設定します。 アウトポスト は、ループバック ネットワークとプライベート ネットワークからのプロキシ情報を受け入れます。ポート 8080 をプロキシと信頼できるローカル クライアントにのみ公開します。

## 4.アウトポストを更新する

[バックアップ](backup.md) を完了し、Compose ディレクトリで実行します。

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

固定バージョンの場合は、最初に `compose.yaml` のイメージ タグを変更します。コンソールを開き、メールボックスの監視を確認し、新しい電子メールを送信して配信を確認します。アップデート前のバックアップを保管しておいてください。ロールバックするには、復元チュートリアルを使用して、そのデータとそれに一致するイメージの両方を復元します。

## 5. トラブルシューティング

### コンテナイメージを取得できない

GHCR に要求されたバージョンが含まれているかどうかを確認します。 `manifest unknown` は通常、タグが欠落していることを意味します。イメージ アドレスとパッケージの可視性で `denied` エラーがないか、サーバーの GHCR への接続でタイムアウトがないか確認してください。

### コンソールが開かない

`127.0.0.1` は、使用しているコンピューターを指します。リモート インストールには SSH トンネルまたは HTTPS ドメインを使用します。まず `docker compose ps` と `docker compose logs --tail=50 core` を確認してください。 8080 が占有されている場合は、マッピングを `127.0.0.1:18080:8080` に変更し、ブラウザーとリバース プロキシでホスト ポート 18080 を使用します。

### 管理者パスワードをリセットする

Compose ディレクトリで実行し、ターミナル プロンプトで新しいパスワードを入力します。

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

回復コマンドはデータ ディレクトリ ロックを取得するため、最初にアウトポストを停止します。パスワードをリセットすると、ブラウザ セッションが取り消され、API トークン、メールボックス、キューが保存されます。

### 公式アプリとProを接続します

Free Web コンソールと Bark / Pushover / Webhook 配信は独立して動作します。公式アプリの場合、HTTPS とペアリングについては [アプリの統合](connect-app.md) に従ってください。

ソース ビルドとローカル開発については、 [開発ガイド](https://github.com/mingzaily/mailwake/blob/main/docs/development.md) で説明されています。

## ソースのビルドとプロセス設定

開発ビルドの場合は、 [ソースリポジトリの README](https://github.com/mingzaily/mailwake#run-from-source) および [コントリビューター ビルド ガイド](https://github.com/mingzaily/mailwake/blob/main/CONTRIBUTING.md) に従ってください。

`MAILWAKE_LISTEN` は、Docker の外部ではデフォルトで `127.0.0.1:8080` になります。コンテナーは `0.0.0.0:8080` を使用します。 `MAILWAKE_DATA_DIR` のデフォルトは `data` です。コンテナは `/data` を使用します。 `MAILWAKE_RELAY_URL` のデフォルトは `https://notify.mailwake.oritx.com` です。再起動およびアップグレード後も、 `secret.key` を含む完全なデータ ディレクトリを保持します。

## プッシュ配信環境を変える

実稼働環境とサンドボックスでは、別個のペアリング ID が使用されます。意図的に環境を変更するには、アウトポスト を停止し、既存のデータ ディレクトリと以前のプッシュ配信サービスの保存されたアドレスに対してリセットを実行します。

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

プロンプトが表示されたら、「`reset-native-push`」と入力します。このコマンドは、古いプッシュ配信サービスでのペアリングを取り消します。そのサービスに到達できない場合は、古い構成を保持し、到達可能になったときに再試行します。未解決のターゲットがゼロであることを確認したら、新しい `MAILWAKE_RELAY_URL` を設定し、 `docker compose up -d` および [再度ペアリングします](connect-app.md) を使用してアウトポストを再作成します。このコマンドは、アウトポストの署名 ID と通常のチャネルの履歴を保存します。
