# yaml-language-server: $schema=https://schema.zeabur.app/template.json
apiVersion: zeabur.com/v1
kind: Template
metadata:
    name: Syncthing Node (P2P)
spec:
    description: |
        Syncthing is a continuous, peer-to-peer file synchronization program. It syncs files between devices in real time with no cloud dependency. This template enables direct P2P connection by exposing the BEP sync protocol on TCP/UDP 22000, so peers connect without going through Syncthing's relay servers. Deploy on Zeabur as an always-on sync node.
    coverImage: https://syncthing.net/img/screenshot.png
    icon: https://raw.githubusercontent.com/syncthing/syncthing/main/assets/logo-only.svg
    variables:
        - key: PUBLIC_DOMAIN
          type: DOMAIN
          name: Domain
          description: The domain to access the Syncthing Web UI
    tags:
        - Tool
        - File Sync
    readme: |
        # Syncthing Node (P2P)

        Continuous peer-to-peer file synchronization with **direct P2P connection support** — no reliance on Syncthing's relay servers.

        This template exposes the BEP sync protocol (TCP/UDP 22000) via Zeabur Port Forwarding, so other Syncthing peers can connect to your Zeabur instance directly. The Zeabur instance acts as an **always-on sync node**, keeping files in sync even when your other devices are offline.

        ## First Launch

        1. **Visit your domain** — the Syncthing Web UI opens directly
        2. **⚠ Set a GUI password within the first minute** — open Actions > Settings > GUI and set a username/password. The Web UI is exposed publicly with no auth by default; if you delay, anyone scanning your domain can take over the node
        3. **Add remote devices** — share Device IDs between your Syncthing instances
        4. **Add folders** — select which folders to sync and with which devices

        ## Enable Direct P2P Connection (No Relay)

        By default, Syncthing devices behind NAT can fall back to Syncthing's relay network, which throttles transfer speed. This template pre-exposes TCP/UDP 22000 so peers can connect directly.

        **Step 1 — Find the forwarded address.** In the Zeabur Dashboard, open this service's **Networking** tab. You will see two forwarded entries for ports `sync-tcp` (22000/TCP) and `sync-udp` (22000/UDP), each in the form `<host>:<port>`. On dedicated server projects this will be your server's public IP and an assigned port (the exact values shown in your dashboard differ per deployment). The TCP and UDP forwarded ports often share the **same number** (Zeabur uses one external port for both listeners on the same internal port).

        **Step 2 — Configure your peer device.** On your *other* Syncthing devices (laptop, phone, NAS, …), add this Zeabur instance as a remote device. Then click into the device entry, expand **Advanced**, and set the **Addresses** field to (comma-separated):

        ```
        tcp://FORWARDED_HOST:FORWARDED_TCP_PORT, quic://FORWARDED_HOST:FORWARDED_UDP_PORT
        ```

        Replace the placeholders with the values from Step 1. If you want to keep relay as fallback when the static addresses fail, append `, dynamic` at the end. Do not leave Addresses as just `dynamic` — global discovery cannot infer the forwarded random port and Syncthing will silently fall back to relay.

        **Step 3 — Verify.** In the Web UI's Remote Devices panel, the connection status should show `TCP` or `QUIC` (not `Relay`). The relay bandwidth bottleneck is avoided.

        ## Operational Notes

        - **Don't sync `/var/syncthing/config`** — it contains the device's private key and Device ID. Syncing it across machines creates Device ID conflicts.
        - **Data at rest is plaintext on the Zeabur volume.** If you treat the cloud as untrusted, use Syncthing's [Untrusted Devices / Encrypted Folders](https://docs.syncthing.net/users/untrusted.html) feature.
        - **Forwarded host/port may change** — Zeabur usually keeps them stable but doesn't guarantee permanence. If they change, update the Addresses on your peer devices.
        - **Don't sync directories managed by another cloud service** (iCloud Drive, OneDrive, Dropbox, Google Drive). They will fight Syncthing over file ownership and produce endless `sync-conflict` files. Keep Syncthing folders in paths outside other sync engines.

        ## Key Features

        - Direct peer-to-peer sync — no third-party relay required
        - End-to-end encryption in transit
        - Cross-platform (Linux, macOS, Windows, Android)
        - Versioning and conflict handling
        - Web UI for configuration and monitoring

        ## Persistent Data

        All config and synced data are stored under `/var/syncthing` (backed by a Zeabur volume).

        ## License

        MPL-2.0 — [GitHub](https://github.com/syncthing/syncthing) · [Official Site](https://syncthing.net/) · [Documentation](https://docs.syncthing.net/)
    services:
        - name: syncthing
          icon: https://raw.githubusercontent.com/syncthing/syncthing/main/assets/logo-only.svg
          template: PREBUILT_V2
          spec:
            id: syncthing
            source:
                image: syncthing/syncthing:2
            ports:
                - id: web
                  port: 8384
                  type: HTTP
                - id: sync-tcp
                  port: 22000
                  type: TCP
                - id: sync-udp
                  port: 22000
                  type: UDP
            volumes:
                - id: data
                  dir: /var/syncthing
            healthCheck:
                type: HTTP
                port: web
                http:
                    path: /rest/noauth/health
            portForwarding:
                enabled: true
          domainKey: PUBLIC_DOMAIN
localization:
    es-ES:
        description: |
            Syncthing es un programa de sincronización continua de archivos P2P. Sincroniza archivos entre dispositivos en tiempo real sin depender de la nube. Esta plantilla habilita la conexión P2P directa exponiendo el protocolo de sincronización BEP en TCP/UDP 22000, para que los peers se conecten sin pasar por los relays de Syncthing. Despliega en Zeabur como nodo de sincronización permanente.
        variables:
            - key: PUBLIC_DOMAIN
              type: DOMAIN
              name: Dominio
              description: El dominio para acceder a la Web UI de Syncthing
        readme: |
            # Syncthing Node (P2P)

            Sincronización continua de archivos P2P con **soporte de conexión P2P directa** — sin depender de los servidores relay de Syncthing.

            Esta plantilla expone el protocolo de sincronización BEP (TCP/UDP 22000) mediante Port Forwarding de Zeabur, para que otros peers de Syncthing se conecten directamente a tu instancia en Zeabur. La instancia actúa como **nodo de sincronización permanente**, manteniendo los archivos sincronizados incluso cuando tus otros dispositivos están desconectados.

            ## Primer inicio

            1. **Visita tu dominio** — se abre la Web UI de Syncthing
            2. **⚠ Establece contraseña GUI en el primer minuto** — abre Actions > Settings > GUI y configura usuario y contraseña. La Web UI está expuesta públicamente sin autenticación por defecto; si te demoras, cualquiera que escanee tu dominio puede tomar control del nodo
            3. **Añade dispositivos remotos** — comparte los IDs de dispositivo entre instancias
            4. **Añade carpetas** — selecciona qué carpetas sincronizar y con qué dispositivos

            ## Habilitar conexión P2P directa (sin relay)

            Por defecto, los dispositivos Syncthing tras NAT pueden recurrir a la red de relays de Syncthing, lo que limita la velocidad de transferencia. Esta plantilla expone TCP/UDP 22000 para conexión directa.

            **Paso 1 — Encuentra la dirección reenviada.** En el Dashboard de Zeabur, abre la pestaña **Networking** de este servicio. Verás dos entradas para los puertos `sync-tcp` (22000/TCP) y `sync-udp` (22000/UDP), cada una con el formato `<host>:<puerto>`. En proyectos con servidor dedicado, será la IP pública de tu servidor y un puerto asignado (los valores exactos en tu dashboard varían por despliegue). Los puertos reenviados de TCP y UDP suelen compartir el **mismo número** (Zeabur usa un único puerto externo para ambos listeners del mismo puerto interno).

            **Paso 2 — Configura tu dispositivo peer.** En tus *otros* dispositivos Syncthing (portátil, móvil, NAS, …), añade esta instancia de Zeabur como dispositivo remoto. Luego entra en la entrada del dispositivo, expande **Advanced** y establece el campo **Addresses** como (separado por comas):

            ```
            tcp://HOST_REENVIADO:PUERTO_TCP_REENVIADO, quic://HOST_REENVIADO:PUERTO_UDP_REENVIADO
            ```

            Sustituye los valores por los del Paso 1. Si quieres mantener el relay como fallback cuando las direcciones estáticas fallen, añade `, dynamic` al final. No dejes Addresses solo como `dynamic` — global discovery no puede inferir el puerto reenviado aleatorio y Syncthing recurrirá silenciosamente al relay.

            **Paso 3 — Verifica.** En el panel de dispositivos remotos de la Web UI, el estado de conexión debe mostrar `TCP` o `QUIC` (no `Relay`). Se evita el cuello de botella del ancho de banda del relay.

            ## Notas Operativas

            - **No sincronices `/var/syncthing/config`** — contiene la clave privada del dispositivo y el Device ID. Sincronizarlo entre máquinas crea conflictos de Device ID.
            - **Los datos en reposo están en texto plano en el volumen de Zeabur.** Si tratas la nube como no confiable, usa la función [Untrusted Devices / Encrypted Folders](https://docs.syncthing.net/users/untrusted.html) de Syncthing.
            - **Host/puerto reenviados pueden cambiar** — Zeabur normalmente los mantiene estables pero no garantiza permanencia. Si cambian, actualiza Addresses en tus dispositivos peer.
            - **No sincronices directorios gestionados por otro servicio en la nube** (iCloud Drive, OneDrive, Dropbox, Google Drive). Pelearán con Syncthing por la propiedad de los archivos y producirán archivos `sync-conflict` sin fin. Mantén las carpetas de Syncthing en rutas fuera de otros motores de sincronización.

            ## Datos persistentes

            Toda la configuración y datos sincronizados se almacenan en `/var/syncthing` (respaldado por un volumen de Zeabur).

            ## Licencia

            MPL-2.0 — [GitHub](https://github.com/syncthing/syncthing) · [Official Site](https://syncthing.net/) · [Documentation](https://docs.syncthing.net/)
    id-ID:
        description: |
            Syncthing adalah program sinkronisasi file P2P berkelanjutan. Sinkronkan file antar perangkat secara real time tanpa cloud. Template ini mengaktifkan koneksi P2P langsung dengan membuka protokol sinkronisasi BEP di TCP/UDP 22000, sehingga peer terhubung tanpa melalui server relay Syncthing. Deploy di Zeabur sebagai node sinkronisasi yang selalu online.
        variables:
            - key: PUBLIC_DOMAIN
              type: DOMAIN
              name: Domain
              description: Domain untuk mengakses Syncthing Web UI
        readme: |
            # Syncthing Node (P2P)

            Sinkronisasi file P2P berkelanjutan dengan **dukungan koneksi P2P langsung** — tanpa bergantung pada server relay Syncthing.

            Template ini membuka protokol sinkronisasi BEP (TCP/UDP 22000) melalui Port Forwarding Zeabur, sehingga peer Syncthing lain dapat terhubung langsung ke instance Zeabur Anda. Instance Zeabur berfungsi sebagai **node sinkronisasi yang selalu online**, memastikan file tetap tersinkronisasi meskipun perangkat lain offline.

            ## Peluncuran Pertama

            1. **Buka domain** — Syncthing Web UI langsung terbuka
            2. **⚠ Atur password GUI dalam menit pertama** — buka Actions > Settings > tab GUI, atur username dan password. Web UI terbuka publik tanpa autentikasi secara default; jika Anda menunda, siapa pun yang memindai domain Anda dapat mengambil alih node
            3. **Tambahkan perangkat remote** — bagikan Device ID antar instance Syncthing
            4. **Tambahkan folder** — pilih folder yang ingin disinkronkan dan dengan perangkat mana

            ## Aktifkan Koneksi P2P Langsung (Tanpa Relay)

            Secara default, perangkat Syncthing di belakang NAT dapat jatuh ke jaringan relay Syncthing yang membatasi kecepatan transfer. Template ini sudah membuka TCP/UDP 22000 untuk koneksi langsung.

            **Langkah 1 — Temukan alamat forwarded.** Di Zeabur Dashboard, buka tab **Networking** layanan ini. Anda akan melihat dua entri untuk port `sync-tcp` (22000/TCP) dan `sync-udp` (22000/UDP), masing-masing dalam format `<host>:<port>`. Pada proyek dengan dedicated server, ini akan menjadi IP publik server Anda dan port yang ditetapkan (nilai pastinya pada dashboard berbeda per deployment). Port forwarded TCP dan UDP sering berbagi **angka yang sama** (Zeabur menggunakan satu port eksternal untuk kedua listener pada port internal yang sama).

            **Langkah 2 — Konfigurasi perangkat peer.** Di perangkat Syncthing *lain* (laptop, ponsel, NAS, …), tambahkan instance Zeabur ini sebagai remote device. Lalu klik entri perangkat tersebut, perluas **Advanced**, dan atur kolom **Addresses** menjadi (dipisahkan koma):

            ```
            tcp://FORWARDED_HOST:FORWARDED_TCP_PORT, quic://FORWARDED_HOST:FORWARDED_UDP_PORT
            ```

            Ganti placeholder dengan nilai dari Langkah 1. Jika Anda ingin mempertahankan relay sebagai fallback ketika alamat statis gagal, tambahkan `, dynamic` di akhir. Jangan biarkan Addresses hanya `dynamic` — global discovery tidak dapat menyimpulkan port forwarded acak dan Syncthing akan diam-diam jatuh ke relay.

            **Langkah 3 — Verifikasi.** Di panel Remote Devices Web UI, status koneksi harus menunjukkan `TCP` atau `QUIC` (bukan `Relay`). Bottleneck bandwidth relay dihindari.

            ## Catatan Operasional

            - **Jangan sinkronkan `/var/syncthing/config`** — berisi private key perangkat dan Device ID. Mensinkronkannya antar mesin menciptakan konflik Device ID.
            - **Data at rest dalam plaintext di volume Zeabur.** Jika Anda menganggap cloud tidak tepercaya, gunakan fitur [Untrusted Devices / Encrypted Folders](https://docs.syncthing.net/users/untrusted.html) Syncthing.
            - **Host/port forwarded dapat berubah** — Zeabur biasanya menjaganya stabil tetapi tidak menjamin permanen. Jika berubah, perbarui Addresses di perangkat peer Anda.
            - **Jangan sinkronkan direktori yang dikelola layanan cloud lain** (iCloud Drive, OneDrive, Dropbox, Google Drive). Mereka akan bersaing dengan Syncthing memperebutkan kepemilikan file dan menghasilkan file `sync-conflict` tanpa henti. Letakkan folder Syncthing di jalur di luar engine sinkronisasi lain.

            ## Data Persisten

            Semua konfigurasi dan data sinkronisasi disimpan di `/var/syncthing` (didukung volume Zeabur).

            ## Lisensi

            MPL-2.0 — [GitHub](https://github.com/syncthing/syncthing) · [Official Site](https://syncthing.net/) · [Documentation](https://docs.syncthing.net/)
    ja-JP:
        description: |
            Syncthing はピアツーピアの継続的ファイル同期プログラムです。クラウド不要でデバイス間をリアルタイム同期。本テンプレートは BEP 同期プロトコル (TCP/UDP 22000) を公開し、Syncthing のリレーサーバを経由せずピア同士が直接接続できるようにします。Zeabur で常時オンの同期ノードとして稼働。
        variables:
            - key: PUBLIC_DOMAIN
              type: DOMAIN
              name: ドメイン
              description: Syncthing Web UI にアクセスするためのドメイン
        readme: |
            # Syncthing Node (P2P)

            **直接 P2P 接続対応**のピアツーピア継続的ファイル同期 — Syncthing のリレーサーバ不要。

            本テンプレートは Zeabur の Port Forwarding で BEP 同期プロトコル (TCP/UDP 22000) を公開し、他の Syncthing ピアが Zeabur インスタンスへ直接接続できるようにします。Zeabur インスタンスは**常時オンの同期ノード**として動作し、他のデバイスがオフラインでもファイルの同期を維持します。

            ## 初回起動

            1. **ドメインにアクセス** — Syncthing Web UI が開きます
            2. **⚠ 1 分以内に GUI パスワードを設定** — Actions > Settings > GUI タブを開き、ユーザー名とパスワードを設定。Web UI は既定で認証なしに公開されます。遅延すると、ドメインをスキャンした第三者がノードを乗っ取る可能性があります
            3. **リモートデバイスを追加** — Syncthing インスタンス間でデバイス ID を共有
            4. **フォルダを追加** — 同期するフォルダとデバイスを選択

            ## 直接 P2P 接続を有効化(リレー不使用)

            既定では NAT 配下の Syncthing は Syncthing リレー網にフォールバックする可能性があり、転送速度が制限されます。本テンプレートは TCP/UDP 22000 を事前に公開し、直接接続を可能にします。

            **手順 1 — フォワードされたアドレスを取得。** Zeabur ダッシュボードで本サービスの **Networking** タブを開きます。`sync-tcp` (22000/TCP) と `sync-udp` (22000/UDP) の 2 つのフォワードエントリが表示され、それぞれ `<host>:<port>` の形式です。dedicated server プロジェクトでは、サーバの公開 IP と割り当てられたポートになります (実際の値はダッシュボードに表示され、デプロイごとに異なります)。TCP と UDP のフォワードポートは多くの場合 **同じ番号** を共有します (Zeabur は同一内部ポートの両 listener に対して 1 つの外部ポートを使用)。

            **手順 2 — ピアデバイスを設定。** *他の* Syncthing デバイス (ラップトップ、スマホ、NAS など) で本 Zeabur インスタンスをリモートデバイスとして追加し、デバイスエントリをクリックして **Advanced** を展開、**Addresses** フィールドをカンマ区切りで以下に設定:

            ```
            tcp://FORWARDED_HOST:FORWARDED_TCP_PORT, quic://FORWARDED_HOST:FORWARDED_UDP_PORT
            ```

            プレースホルダを手順 1 の値に置き換えます。静的アドレスが失敗した時のためにリレーをフォールバックとして残したい場合は末尾に `, dynamic` を追加。Addresses を `dynamic` だけにしないでください — global discovery はフォワードされたランダムポートを推測できず、Syncthing は黙ってリレーへフォールバックします。

            **手順 3 — 確認。** Web UI のリモートデバイスパネルで接続状態が `TCP` または `QUIC` (`Relay` ではない) と表示されることを確認。リレー帯域幅のボトルネックが解消されます。

            ## 運用上の注意

            - **`/var/syncthing/config` を同期しない** — デバイスの秘密鍵と Device ID が含まれます。複数マシン間で同期すると Device ID 衝突が発生します。
            - **Zeabur ボリューム上のデータは平文です。** クラウドを信頼できないと見なす場合は、Syncthing の [Untrusted Devices / Encrypted Folders](https://docs.syncthing.net/users/untrusted.html) 機能を使用してください。
            - **フォワードされたホスト/ポートは変更される可能性があります** — Zeabur は通常安定して維持しますが永続性は保証されません。変更された場合はピアデバイスの Addresses を更新してください。
            - **他のクラウドサービスが管理するディレクトリを同期しないでください**(iCloud Drive、OneDrive、Dropbox、Google Drive)。Syncthing とファイル所有権を奪い合い、止まらない `sync-conflict` ファイルが大量発生します。Syncthing フォルダは他の同期エンジンの範囲外のパスに置いてください。

            ## 永続データ

            設定ファイルと同期データは `/var/syncthing` に保存(Zeabur ボリュームで永続化)。

            ## ライセンス

            MPL-2.0 — [GitHub](https://github.com/syncthing/syncthing) · [Official Site](https://syncthing.net/) · [Documentation](https://docs.syncthing.net/)
    ko-KR:
        description: |
            Syncthing은 지속적인 P2P 파일 동기화 프로그램입니다. 클라우드 없이 기기 간 실시간 파일 동기화. 이 템플릿은 BEP 동기화 프로토콜(TCP/UDP 22000)을 공개하여 Syncthing 릴레이 서버를 거치지 않고 피어가 직접 연결되도록 합니다. Zeabur에서 항상 온라인 동기화 노드로 배포.
        variables:
            - key: PUBLIC_DOMAIN
              type: DOMAIN
              name: 도메인
              description: Syncthing Web UI에 접속할 도메인
        readme: |
            # Syncthing Node (P2P)

            **직접 P2P 연결 지원**의 지속적인 P2P 파일 동기화 — Syncthing 릴레이 서버 불필요.

            이 템플릿은 Zeabur Port Forwarding을 통해 BEP 동기화 프로토콜(TCP/UDP 22000)을 공개하여 다른 Syncthing 피어가 Zeabur 인스턴스에 직접 연결할 수 있게 합니다. Zeabur 인스턴스는 **항상 온라인 동기화 노드**로 작동하여 다른 기기가 오프라인이어도 파일 동기화를 유지합니다.

            ## 첫 실행

            1. **도메인 접속** — Syncthing Web UI가 열립니다
            2. **⚠ 1분 이내에 GUI 비밀번호 설정** — Actions > Settings > GUI 탭에서 사용자명과 비밀번호 설정. Web UI는 기본적으로 인증 없이 공개 노출됩니다. 늦어지면 도메인을 스캔한 누구나 노드를 탈취할 수 있습니다
            3. **원격 기기 추가** — Syncthing 인스턴스 간 기기 ID 공유
            4. **폴더 추가** — 동기화할 폴더와 기기 선택

            ## 직접 P2P 연결 활성화(릴레이 미사용)

            기본적으로 NAT 뒤의 Syncthing은 Syncthing 릴레이 네트워크로 폴백될 수 있어 전송 속도가 제한됩니다. 이 템플릿은 TCP/UDP 22000을 미리 공개하여 직접 연결을 가능하게 합니다.

            **단계 1 — 포워딩된 주소 확인.** Zeabur 대시보드에서 이 서비스의 **Networking** 탭을 엽니다. `sync-tcp`(22000/TCP)와 `sync-udp`(22000/UDP) 두 개의 포워딩 항목이 `<host>:<port>` 형식으로 표시됩니다. dedicated server 프로젝트에서는 서버의 공개 IP와 할당된 포트가 됩니다(실제 값은 대시보드에 표시되며 배포마다 다릅니다). TCP와 UDP 포워딩 포트는 종종 **같은 번호**를 공유합니다(Zeabur는 동일 내부 포트의 두 listener에 하나의 외부 포트를 사용).

            **단계 2 — 피어 기기 설정.** *다른* Syncthing 기기(노트북, 휴대폰, NAS 등)에서 이 Zeabur 인스턴스를 원격 기기로 추가한 다음, 기기 항목을 클릭하여 **Advanced**를 펼치고 **Addresses** 필드를 쉼표로 구분하여 다음으로 설정:

            ```
            tcp://FORWARDED_HOST:FORWARDED_TCP_PORT, quic://FORWARDED_HOST:FORWARDED_UDP_PORT
            ```

            플레이스홀더를 단계 1의 값으로 교체합니다. 정적 주소 실패 시 릴레이를 폴백으로 유지하려면 끝에 `, dynamic`을 추가하세요. Addresses를 `dynamic`만으로 두지 마세요 — global discovery가 포워딩된 무작위 포트를 추론할 수 없어 Syncthing이 조용히 릴레이로 폴백합니다.

            **단계 3 — 확인.** Web UI의 원격 기기 패널에서 연결 상태가 `TCP` 또는 `QUIC`(`Relay`가 아님)로 표시되어야 합니다. 릴레이 대역폭 병목이 사라집니다.

            ## 운영 참고사항

            - **`/var/syncthing/config`를 동기화하지 마세요** — 기기의 개인키와 Device ID가 들어 있습니다. 머신 간 동기화 시 Device ID 충돌이 발생합니다.
            - **저장된 데이터는 Zeabur 볼륨에서 평문입니다.** 클라우드를 신뢰할 수 없다고 본다면 Syncthing의 [Untrusted Devices / Encrypted Folders](https://docs.syncthing.net/users/untrusted.html) 기능을 사용하세요.
            - **포워딩된 호스트/포트는 변경될 수 있습니다** — Zeabur는 보통 안정적으로 유지하지만 영구성을 보장하지 않습니다. 변경 시 피어 기기의 Addresses를 업데이트하세요.
            - **다른 클라우드 서비스가 관리하는 디렉토리를 동기화하지 마세요**(iCloud Drive, OneDrive, Dropbox, Google Drive). Syncthing과 파일 소유권을 두고 다투며 끝없는 `sync-conflict` 파일을 만들어냅니다. Syncthing 폴더는 다른 동기화 엔진 범위 밖의 경로에 두세요.

            ## 영구 데이터

            모든 설정 파일과 동기화 데이터는 `/var/syncthing`에 저장(Zeabur 볼륨으로 영구화).

            ## 라이선스

            MPL-2.0 — [GitHub](https://github.com/syncthing/syncthing) · [Official Site](https://syncthing.net/) · [Documentation](https://docs.syncthing.net/)
    th-TH:
        description: |
            Syncthing เป็นโปรแกรมซิงค์ไฟล์แบบ P2P อย่างต่อเนื่อง ซิงค์ไฟล์ระหว่างอุปกรณ์แบบเรียลไทม์โดยไม่ต้องพึ่งคลาวด์ เทมเพลตนี้เปิดใช้งานการเชื่อมต่อ P2P โดยตรงผ่านโปรโตคอลซิงค์ BEP (TCP/UDP 22000) เพื่อให้ peer เชื่อมต่อกันโดยไม่ต้องผ่านเซิร์ฟเวอร์ relay ของ Syncthing ติดตั้งบน Zeabur เป็นโหนดซิงค์ที่ออนไลน์ตลอดเวลา
        variables:
            - key: PUBLIC_DOMAIN
              type: DOMAIN
              name: โดเมน
              description: โดเมนสำหรับเข้าถึง Syncthing Web UI
        readme: |
            # Syncthing Node (P2P)

            ซิงค์ไฟล์แบบ P2P อย่างต่อเนื่องพร้อม**รองรับการเชื่อมต่อ P2P โดยตรง** — ไม่ต้องพึ่งเซิร์ฟเวอร์ relay ของ Syncthing

            เทมเพลตนี้เปิดโปรโตคอลซิงค์ BEP (TCP/UDP 22000) ผ่าน Port Forwarding ของ Zeabur เพื่อให้ Syncthing peer อื่นเชื่อมต่อกับอินสแตนซ์ Zeabur ได้โดยตรง อินสแตนซ์ Zeabur ทำหน้าที่เป็น**โหนดซิงค์ที่ออนไลน์ตลอดเวลา** ช่วยให้ไฟล์ซิงค์อยู่เสมอแม้อุปกรณ์อื่นออฟไลน์

            ## การเปิดใช้งานครั้งแรก

            1. **เข้าสู่โดเมน** — Syncthing Web UI จะเปิดขึ้น
            2. **⚠ ตั้งรหัสผ่าน GUI ภายในนาทีแรก** — เปิด Actions > Settings > แท็บ GUI ตั้งชื่อผู้ใช้และรหัสผ่าน Web UI เปิดสาธารณะโดยไม่มีการยืนยันตัวตนเป็นค่าเริ่มต้น หากล่าช้า ผู้ใดก็ตามที่สแกนโดเมนของคุณสามารถเข้าควบคุมโหนดได้
            3. **เพิ่มอุปกรณ์ระยะไกล** — แชร์ Device ID ระหว่างอินสแตนซ์ Syncthing
            4. **เพิ่มโฟลเดอร์** — เลือกโฟลเดอร์ที่จะซิงค์และอุปกรณ์เป้าหมาย

            ## เปิดใช้งานการเชื่อมต่อ P2P โดยตรง (ไม่ใช้ Relay)

            โดยปกติ Syncthing หลัง NAT อาจ fallback ไปใช้เครือข่าย relay ของ Syncthing ซึ่งจำกัดความเร็วการถ่ายโอน เทมเพลตนี้เปิด TCP/UDP 22000 ไว้ล่วงหน้าเพื่อการเชื่อมต่อโดยตรง

            **ขั้นตอนที่ 1 — ตรวจสอบที่อยู่การส่งต่อพอร์ต (Forwarded Address).** ใน Zeabur Dashboard เปิดแท็บ **Networking** ของบริการนี้ คุณจะเห็นรายการ forwarded สองรายการสำหรับพอร์ต `sync-tcp` (22000/TCP) และ `sync-udp` (22000/UDP) แต่ละรายการอยู่ในรูปแบบ `<host>:<port>` ในโปรเจกต์แบบ dedicated server จะเป็น IP สาธารณะของเซิร์ฟเวอร์และพอร์ตที่ถูกจัดสรร (ค่าที่แท้จริงจะแสดงใน dashboard และแตกต่างกันไปตามการ deploy แต่ละครั้ง) พอร์ตที่ถูกฟอร์เวิร์ดของ TCP และ UDP มักจะใช้ **หมายเลขเดียวกัน** (Zeabur ใช้พอร์ตภายนอกหนึ่งพอร์ตสำหรับ listener ทั้งสองของพอร์ตภายในเดียวกัน)

            **ขั้นตอนที่ 2 — ตั้งค่าอุปกรณ์ peer.** ในอุปกรณ์ Syncthing *อื่น* (แล็ปท็อป มือถือ NAS ฯลฯ) เพิ่มอินสแตนซ์ Zeabur นี้เป็นอุปกรณ์ระยะไกล จากนั้นคลิกเข้าไปในรายการอุปกรณ์ ขยาย **Advanced** และตั้งช่อง **Addresses** เป็น (คั่นด้วยเครื่องหมายจุลภาค):

            ```
            tcp://FORWARDED_HOST:FORWARDED_TCP_PORT, quic://FORWARDED_HOST:FORWARDED_UDP_PORT
            ```

            แทนที่ placeholder ด้วยค่าจากขั้นตอนที่ 1 หากต้องการคง relay ไว้เป็น fallback เมื่อที่อยู่คงที่ล้มเหลว ให้เพิ่ม `, dynamic` ที่ท้าย อย่าปล่อย Addresses เป็น `dynamic` อย่างเดียว — global discovery ไม่สามารถอนุมานพอร์ตที่ถูกฟอร์เวิร์ดแบบสุ่ม และ Syncthing จะ fallback ไป relay อย่างเงียบๆ

            **ขั้นตอนที่ 3 — ตรวจสอบ.** ในแผง Remote Devices ของ Web UI สถานะการเชื่อมต่อควรแสดง `TCP` หรือ `QUIC` (ไม่ใช่ `Relay`) คอขวดของแบนด์วิดท์ relay ถูกหลีกเลี่ยง

            ## หมายเหตุการใช้งาน

            - **อย่าซิงค์ `/var/syncthing/config`** — มันมี private key และ Device ID ของอุปกรณ์ การซิงค์ระหว่างเครื่องจะสร้างความขัดแย้งของ Device ID
            - **ข้อมูลที่จัดเก็บอยู่ในรูป plaintext บน Zeabur volume** หากคุณมองว่าคลาวด์ไม่น่าเชื่อถือ ให้ใช้ฟีเจอร์ [Untrusted Devices / Encrypted Folders](https://docs.syncthing.net/users/untrusted.html) ของ Syncthing
            - **โฮสต์/พอร์ตที่ฟอร์เวิร์ดอาจเปลี่ยนแปลงได้** — Zeabur มักจะรักษาให้เสถียรแต่ไม่รับประกันความถาวร หากเปลี่ยน ให้อัปเดต Addresses บนอุปกรณ์ peer ของคุณ
            - **อย่าซิงค์ไดเรกทอรีที่จัดการโดยบริการคลาวด์อื่น** (iCloud Drive, OneDrive, Dropbox, Google Drive) เพราะจะแย่งสิทธิ์ความเป็นเจ้าของไฟล์กับ Syncthing และสร้างไฟล์ `sync-conflict` ไม่รู้จบ ให้วางโฟลเดอร์ Syncthing ในเส้นทางนอกขอบเขตของเอนจินซิงค์อื่น

            ## ข้อมูลถาวร

            ไฟล์การตั้งค่าและข้อมูลซิงค์ทั้งหมดเก็บไว้ที่ `/var/syncthing` (สำรองด้วย Zeabur volume)

            ## สัญญาอนุญาต

            MPL-2.0 — [GitHub](https://github.com/syncthing/syncthing) · [Official Site](https://syncthing.net/) · [Documentation](https://docs.syncthing.net/)
    zh-CN:
        description: |
            Syncthing 是持续性的点对点文件同步工具。在设备之间实时同步文件，无需依赖云端。本模板通过暴露 BEP 同步协议(TCP/UDP 22000)启用 P2P 直连，让 peer 之间无需经过 Syncthing 的中继服务器即可连接。部署在 Zeabur 上作为永远在线的同步节点。
        variables:
            - key: PUBLIC_DOMAIN
              type: DOMAIN
              name: 域名
              description: 访问 Syncthing Web UI 的域名
        readme: |
            # Syncthing Node (P2P)

            支持**直接 P2P 连接**的持续性点对点文件同步工具 — 无需依赖 Syncthing 中继服务器。

            本模板通过 Zeabur Port Forwarding 暴露 BEP 同步协议(TCP/UDP 22000)，让其他 Syncthing peer 能直接连接到您的 Zeabur 实例。Zeabur 实例可作为**永远在线的同步节点**，确保即使其他设备离线，文件仍保持同步。

            ## 首次启动

            1. **打开域名** — Syncthing Web UI 直接打开
            2. **⚠ 在第一分钟内设置 GUI 密码** — 打开 Actions > Settings > GUI 选项卡，设置账号密码。Web UI 默认无认证公开暴露；若拖延，任何扫描到您域名的人都可接管节点
            3. **添加远程设备** — 在 Syncthing 实例之间分享设备 ID
            4. **添加文件夹** — 选择要同步的文件夹及目标设备

            ## 启用 P2P 直连(不走中继)

            默认情况下 NAT 后的 Syncthing 可能会回退到 Syncthing 中继网络，传输速度受限。本模板已预先暴露 TCP/UDP 22000 以支持直连。

            **步骤 1 — 找到转发地址。** 在 Zeabur 控制台打开本服务的 **Networking** 标签页。您会看到 `sync-tcp`(22000/TCP)和 `sync-udp`(22000/UDP)两个端口的转发条目，格式均为 `<host>:<port>`。在 dedicated server 项目下，这会是您 server 的公网 IP 与分配的端口（实际数值会显示在 dashboard 上，每次部署不同）。TCP 与 UDP 的转发端口通常共用 **同一个数字**（Zeabur 对同一内部端口的两个 listener 使用单一外部端口）。

            **步骤 2 — 配置 peer 设备。** 在您的*其他* Syncthing 设备(笔记本、手机、NAS 等)上，先添加此 Zeabur 实例为远程设备，然后点入设备项展开 **Advanced**，将 **Addresses** 字段设为(逗号分隔):

            ```
            tcp://转发主机:转发TCP端口, quic://转发主机:转发UDP端口
            ```

            将占位符替换为步骤 1 的值。若想在静态地址失败时保留中继作为 fallback，可在末尾追加 `, dynamic`。请勿仅保留 `dynamic` — global discovery 无法推断转发的随机端口，Syncthing 会静默回退到中继。

            **步骤 3 — 验证。** 在 Web UI 的 Remote Devices 面板中，连接状态应显示 `TCP` 或 `QUIC`(而非 `Relay`)。中继带宽瓶颈被避开。

            ## 运维注意事项

            - **不要同步 `/var/syncthing/config`** — 它包含设备的私钥和 Device ID。跨机器同步会造成 Device ID 冲突。
            - **静态数据在 Zeabur 磁盘卷上是明文。** 若将云端视为不可信，请使用 Syncthing 的 [Untrusted Devices / Encrypted Folders](https://docs.syncthing.net/users/untrusted.html) 功能。
            - **转发主机/端口可能变化** — Zeabur 通常保持稳定但不保证永久。若变化，请更新 peer 设备上的 Addresses。
            - **不要同步其他云端服务管理的目录**(iCloud Drive、OneDrive、Dropbox、Google Drive)。它们会与 Syncthing 争夺文件所有权,产生无止尽的 `sync-conflict` 冲突文件。Syncthing 文件夹请放在其他同步引擎范围之外的路径。

            ## 持久化数据

            所有配置文件和同步数据存储在 `/var/syncthing`(由 Zeabur 磁盘卷支持)。

            ## 授权

            MPL-2.0 — [GitHub](https://github.com/syncthing/syncthing) · [Official Site](https://syncthing.net/) · [Documentation](https://docs.syncthing.net/)
    zh-TW:
        description: |
            Syncthing 是持續性的點對點檔案同步工具。在裝置之間即時同步檔案，無需依賴雲端。本模板透過開放 BEP 同步協定(TCP/UDP 22000)啟用 P2P 直連，讓 peer 之間無需經過 Syncthing 中繼伺服器即可連線。部署在 Zeabur 上作為永遠在線的同步節點。
        variables:
            - key: PUBLIC_DOMAIN
              type: DOMAIN
              name: 網域
              description: 存取 Syncthing Web UI 的網域
        readme: |
            # Syncthing Node (P2P)

            支援**直接 P2P 連線**的持續性點對點檔案同步工具 — 無需依賴 Syncthing 中繼伺服器。

            本模板透過 Zeabur Port Forwarding 開放 BEP 同步協定(TCP/UDP 22000),讓其他 Syncthing peer 能直接連線到您的 Zeabur 執行個體。Zeabur 執行個體可作為**永遠在線的同步節點**,確保即使其他裝置離線,檔案仍保持同步。

            ## 首次啟動

            1. **開啟網域** — Syncthing Web UI 直接開啟
            2. **⚠ 在第一分鐘內設定 GUI 密碼** — 開啟 Actions > Settings > GUI 分頁,設定帳號密碼。Web UI 預設無認證公開暴露;若拖延,任何掃描到您網域的人都可接管節點
            3. **新增遠端裝置** — 在 Syncthing 實例之間分享裝置 ID
            4. **新增資料夾** — 選擇要同步的資料夾及目標裝置

            ## 啟用 P2P 直連(不走中繼)

            預設情況下 NAT 後的 Syncthing 可能會回退到 Syncthing 中繼網路,傳輸速度受限。本模板已預先開放 TCP/UDP 22000 以支援直連。

            **步驟 1 — 找到轉發位址。** 在 Zeabur 控制台開啟本服務的 **Networking** 分頁。您會看到 `sync-tcp`(22000/TCP)與 `sync-udp`(22000/UDP)兩個埠的轉發條目,格式皆為 `<host>:<port>`。在 dedicated server 專案下,這會是您 server 的公網 IP 與分配的埠(實際數值會顯示在 dashboard 上,每次部署不同)。TCP 與 UDP 的轉發埠通常共用 **同一個數字**(Zeabur 對同一內部埠的兩個 listener 使用單一外部埠)。

            **步驟 2 — 設定 peer 裝置。** 在您的*其他* Syncthing 裝置(筆電、手機、NAS 等)上,先新增此 Zeabur 執行個體為遠端裝置,然後點入裝置項展開 **Advanced**,將 **Addresses** 欄位設為(逗號分隔):

            ```
            tcp://轉發主機:轉發TCP埠, quic://轉發主機:轉發UDP埠
            ```

            將佔位符替換為步驟 1 的值。若想在靜態位址失敗時保留中繼作為 fallback,可在末尾追加 `, dynamic`。請勿僅保留 `dynamic` — global discovery 無法推斷轉發的隨機埠,Syncthing 會靜默回退到中繼。

            **步驟 3 — 驗證。** 在 Web UI 的 Remote Devices 面板中,連線狀態應顯示 `TCP` 或 `QUIC`(而非 `Relay`)。中繼頻寬瓶頸被避開。

            ## 維運注意事項

            - **不要同步 `/var/syncthing/config`** — 它包含裝置的私鑰和 Device ID。跨機器同步會造成 Device ID 衝突。
            - **靜態資料在 Zeabur 磁碟區上是明文。** 若將雲端視為不可信,請使用 Syncthing 的 [Untrusted Devices / Encrypted Folders](https://docs.syncthing.net/users/untrusted.html) 功能。
            - **轉發主機/埠可能變化** — Zeabur 通常保持穩定但不保證永久。若變化,請更新 peer 裝置上的 Addresses。
            - **不要同步其他雲端服務管理的目錄**(iCloud Drive、OneDrive、Dropbox、Google Drive)。它們會與 Syncthing 爭奪檔案所有權,產生無止盡的 `sync-conflict` 衝突檔。Syncthing 資料夾請放在其他同步引擎範圍之外的路徑。

            ## 持久化資料

            所有設定檔和同步資料儲存在 `/var/syncthing`(由 Zeabur 磁碟區支援)。

            ## 授權

            MPL-2.0 — [GitHub](https://github.com/syncthing/syncthing) · [Official Site](https://syncthing.net/) · [Documentation](https://docs.syncthing.net/)
