> For the complete documentation index, see [llms.txt](https://help.directcloud.net/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://help.directcloud.net/admin_manual/dc-gateway/nas-directcloud-gateway.md).

# NAS에 DirectCloud Gateway를 설치하는 방법

### 개요 <a href="#a03" id="a03"></a>

DirectCloud Gateway는 기존 NAS나 파일 서버와 DirectCloud를 실시간으로 동기화하여 동일한 폴더 구조로 운용할 수 있는 하이브리드 스토리지 서비스입니다. 사내에서는 NAS를 통해 지금까지와 같은 조작성을 유지하고, 사외 이용자나 거래처는 DirectCloud 쪽에서 안전하게 접근할 수 있습니다.\
이 매뉴얼에서는 DirectCloud Gateway를 QNAP과 Synology에 설치하고 로그인하는 순서를 설명합니다.

***

### 제한·보충사항 <a href="#a04" id="a04"></a>

* 이 매뉴얼의 순서는 조직의 NAS 관리자를 대상으로 합니다.
* QNAP 주식회사가 제공하는 QNAP과 Synology Inc.가 제공하는 Synology의 UI(사용자 인터페이스) 등은 예고 없이 변경될 수 있습니다. 그에 따라 이 매뉴얼에서 사용하는 화면명 등도 바뀔 수 있습니다. 그럴 때는 실제 화면 표시를 확인하면서 이 매뉴얼의 순서를 바꿔 읽으며 동작합니다.
* 이 매뉴얼은 2026년 9월 29일 업데이트로 릴리스된 DirectCloud Gateway(Beta)의 개발판을 이용해 작성했습니다. 이 매뉴얼에서 사용하는 화면명이나 동작이 실제와 다를 수 있습니다.
* QNAP과 Synology의 동작 방법은 각 제조사가 제공하는 매뉴얼 등을 참조합니다.
* 계약 플랜이 '비즈니스' '프리미엄' '엔터프라이즈' 'Team Business'이면 기본으로 DirectCloud Gateway의 'SMB' 플랜을 이용할 수 있습니다. DirectCloud Gateway의 유료 옵션 'Enterprise' 플랜과의 차이는 다음과 같습니다.

  <table><thead><tr><th width="227">플랜</th><th>설명</th></tr></thead><tbody><tr><td>SMB</td><td><p>저장 용량: 20TB</p><p>컨테이너 수: 2</p></td></tr><tr><td>Enterprise</td><td><p>저장 용량: 100TB</p><p>컨테이너 수: 10</p><p>NOTE:</p><p>담당자에 의한 지원을 제공합니다.</p></td></tr></tbody></table>
* DirectCloud Gateway 계약 플랜의 컨테이너 수 상한 범위 안에서 같은 NAS 위에 여러 컨테이너를 동작시킬 수도 있습니다.
* DirectCloud Gateway에 로그인하려면 DirectCloud의 관리자 계정이 필요합니다.
* 이 매뉴얼의 순서를 실행하려면 Docker를 지원하는 NAS를 이용해야 합니다.
* 새 컨테이너 이미지의 유무는 애플리케이션을 시작할 때 한 번 확인합니다. 새 이미지가 있으면 가져와서 컨테이너를 자동으로 다시 생성합니다. 파일 전송이 진행 중이면 데이터 보호를 위해 업데이트를 곧바로 실행하지 않습니다. 정해진 시간 안에 전송이 완료되지 않으면 그 회차의 업데이트는 넘어가고, 다음 애플리케이션 시작 시에 다시 업데이트를 확인합니다.

***

### 절차 <a href="#a05" id="a05"></a>

{% hint style="warning" %}
**QNAP에 설치하기**
{% endhint %}

DirectCloud Gateway는 QNAP의 Docker 위에서 컨테이너로 동작합니다. 이 매뉴얼에서는 Docker에 이미지를 설치하고 컨테이너를 시작하는 순서를 설명합니다.

**\[데이터 폴더 생성하기]**

먼저 DirectCloud Gateway에서 사용할 데이터 폴더를 생성합니다.

{% hint style="info" %}
**NOTE**\
이 폴더는 동기화 이력이나 설정 정보 데이터가 영구적으로 저장되는 곳입니다. 컨테이너를 업데이트/재생성한 뒤에도 유지됩니다.
{% endhint %}

1. 'File Station 5'를 시작합니다.
2. 왼쪽 패널에서 'Container' 폴더를 선택합니다.
3. 상단의 '폴더 생성' 버튼을 클릭하고 '폴더'를 선택합니다.
4. 폴더명을 입력하고 확인 버튼을 클릭합니다.\
   예를 들어 'directcloud-gateway'라고 입력하면 경로에 '/share/Container/directcloud-gateway'가 설정됩니다.

<figure><img src="https://1610041171-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FFRc8hBWqHCHYh3E0AhFb%2Fuploads%2F6N9rVwjh8tJ6kKmC2wJg%2Fimage.png?alt=media&amp;token=c6b136a9-8c0d-4848-893e-d12883ee53f4" alt=""><figcaption></figcaption></figure>

**\[Container Station에서 애플리케이션 생성하기]**

이 매뉴얼에서는 'directcloud-gateway'라는 이름의 애플리케이션을 생성하는 방법을 설명합니다.

1. 'Container Station'을 시작합니다.

<figure><img src="https://1610041171-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FFRc8hBWqHCHYh3E0AhFb%2Fuploads%2Fav52paUI0W5F2WcZH1AM%2Fimage.png?alt=media&amp;token=0446eb2b-dfd6-4610-9466-be27b4a8d9f8" alt=""><figcaption></figcaption></figure>

{% hint style="info" %}
**NOTE** 설치되어 있지 않으면 'App Center'에서 'Container Station'을 검색해 설치합니다.
{% endhint %}

2. 왼쪽 메뉴에서 '애플리케이션'을 선택합니다.

<figure><img src="https://1610041171-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FFRc8hBWqHCHYh3E0AhFb%2Fuploads%2FjrY6I6zbqdVgu9I7aVcK%2Fimage.png?alt=media&amp;token=a29d7b27-b8fe-454d-abb9-0ce9f718874d" alt=""><figcaption></figcaption></figure>

3. 오른쪽 위의 '+만들기' 버튼을 클릭합니다. '애플리케이션 생성' 화면이 표시됩니다.

<figure><img src="https://1610041171-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FFRc8hBWqHCHYh3E0AhFb%2Fuploads%2FxxcAvrujTQrU4MWMVy45%2Fimage.png?alt=media&amp;token=3c47b531-d1e0-4bd4-bdc9-15e4d6669035" alt=""><figcaption></figcaption></figure>

4. '애플리케이션 이름'에 'directcloud-gateway'라고 입력합니다.

<figure><img src="https://1610041171-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FFRc8hBWqHCHYh3E0AhFb%2Fuploads%2FwTek0YHD88vduFz7i0cq%2Fimage.png?alt=media&amp;token=199c4821-d651-4d34-9f88-4164cf1cd68c" alt=""><figcaption></figcaption></figure>

{% hint style="info" %}
**NOTE**\
'애플리케이션 이름'은 컨테이너 이름으로 설정됩니다. 컨테이너 이름에는 반각 영소문자, 숫자, 하이픈(-)만 사용합니다. 일본어와 공백 문자는 사용할 수 없습니다.
{% endhint %}

5. 'YAML 코드'에 다음 코드를 복사해 입력합니다.

```
version: '3.8'

services:
  directcloud-gateway:
    image: docker.io/directcloudlab/directcloud-gateway:latest
    # missing: 설치할 때 한 번만 이미지를 내려받습니다. 재부팅·재기동 때마다
    # 레지스트리를 조회하지 않습니다(버전 갱신은 아래 업데이터가 맡습니다).
    pull_policy: missing
    container_name: directcloud-gateway
    labels:
      # 아래 업데이터가 이 컨테이너만 갱신 대상으로 삼도록 하는 표식입니다.
      com.centurylinklabs.watchtower.scope: "directcloud-gateway"
      # 파일 전송 중이면 갱신을 미룹니다. 전송이 끝나지 않으면 이번 갱신을
      # 건너뛰고, 다음 재시작 때 다시 시도합니다(4.4 참조).
      com.centurylinklabs.watchtower.lifecycle.pre-update: "for i in 1 2 3 4 5 6 7 8; do wget -q -O- http://localhost:8080/api/sync/in-flight | grep -qF '\"in_flight\":false' && exit 0; wget -q -O- http://localhost:8080/api/sync/in-flight | grep -qF '\"in_flight\":true' || exit 75; sleep 30; done; exit 75"
      # 위 확인에 주는 시간(분)입니다. 값을 바꾸지 마세요.
      com.centurylinklabs.watchtower.lifecycle.pre-update-timeout: "5"
    ports:
      - "8081:8080"
    volumes:
      # 동기화 기록이 저장되는 폴더 - 필요시 경로를 변경하세요
      - /share/Container/directcloud-gateway:/app/data
      # 장비 fingerprint: 호스트 /sys 읽기전용 마운트 → 컨테이너가 NIC MAC 취득
      # (로컬 보관, 서버 미전송)
      - /sys:/host/sys:ro
    environment:
      - APP_ENV=prod
      - TZ=UTC
      - HOST_SYSFS=/host/sys
      # 지원 문의 시 어떤 NAS 인지 구분하는 데 쓰입니다
      - NAS_VENDOR=qnap
    restart: unless-stopped

  # 앱을 껐다 켤 때 1회만 실행되는 이미지 업데이터입니다.
  # 새 이미지가 있으면 내려받아 위 컨테이너를 다시 만들고, 없으면 아무것도
  # 하지 않은 채 종료합니다. 설정·동기화 기록은 그대로 보존됩니다.
  watchtower-once:
    image: containrrr/watchtower:1.7.1
    container_name: directcloud-gateway-updater
    depends_on:
      - directcloud-gateway
    # 1회 실행 후 종료합니다(재시작하지 않습니다).
    restart: "no"
    command: --run-once --scope directcloud-gateway --include-stopped --revive-stopped --enable-lifecycle-hooks
    volumes:
      # 이미지를 교체하려면 호스트 Docker 제어 권한이 필요합니다.
      # 갱신에 쓰기가 필요해 읽기전용으로 낮출 수 없습니다.
      - /var/run/docker.sock:/var/run/docker.sock
    environment:
      - TZ=UTC

```

<figure><img src="https://1610041171-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FFRc8hBWqHCHYh3E0AhFb%2Fuploads%2Fq6ZGB1vGRQmP0VAHQNr7%2Fimage.png?alt=media&amp;token=f1986566-4939-4b72-8386-bf3dbb810c8c" alt=""><figcaption></figcaption></figure>

{% hint style="info" %}
**NOTE**

* /app/data로의 매핑은 필수입니다. 다음 줄이 없으면 컨테이너 업데이트 시 동기화 이력이 사라집니다.

\- /share/Container/directcloud-gateway:/app/data

* /sys 마운트는 멀티 인스턴스 식별을 위한 기기 지문(NIC MAC) 취득용 설정입니다. 값은 로컬에만 보관하며 서버로는 전송하지 않습니다.
* 'ports:'의 '- "8081:8080"'은 '호스트 포트:컨테이너 포트' 형식입니다. 외부 공개 포트를 변경하려면 왼쪽(호스트) 값만 변경합니다. 오른쪽(컨테이너 내부)의 '8080'은 고정이므로 변경하지 않습니다. \
  예: "8081:8080"으로 설정한 경우 **<http://NAS\\_IP:8081>** 에 접근합니다.
  {% endhint %}

6. '유효성 확인' 버튼을 클릭합니다. YAML 문법을 확인하고, 완료되면 체크 마크가 붙습니다.

<figure><img src="https://1610041171-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FFRc8hBWqHCHYh3E0AhFb%2Fuploads%2FbLam6wn8t0R8yaGMwdrW%2Fimage.png?alt=media&amp;token=adeeb7f4-3e1c-4920-a5cc-4a7aa355da89" alt=""><figcaption></figcaption></figure>

7. '만들기' 버튼을 클릭합니다. 자동으로 Docker 이미지가 다운로드되고 컨테이너가 시작됩니다.

{% hint style="warning" %}
**Synology에 설치하기**
{% endhint %}

**\[데이터 폴더 생성하기]**

먼저 DirectCloud Gateway에서 사용할 데이터 폴더를 생성합니다.

{% hint style="info" %}
**NOTE**\
이 폴더는 동기화 이력이나 설정 정보 데이터가 영구적으로 저장되는 곳입니다. 컨테이너를 업데이트/재생성한 뒤에도 유지됩니다.
{% endhint %}

1. 'File Station'을 시작합니다.
2. 왼쪽 패널에서 'docker' 폴더를 선택합니다.
3. 상단 메뉴에서 '생성' > '폴더 생성'을 클릭합니다.
4. 폴더명을 입력하고 확인 버튼을 클릭합니다.\
   예를 들어 'directcloud-gateway'라고 입력하면 경로에 '/volume1/docker/directcloud-gateway'가 설정됩니다.

<figure><img src="https://1610041171-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FFRc8hBWqHCHYh3E0AhFb%2Fuploads%2FMLOzn2bwNvbe4gXP5Mif%2Fimage.png?alt=media&amp;token=778da874-872c-4e66-a84f-55726e7ca5e4" alt=""><figcaption></figcaption></figure>

**\[Container Manager에서 프로젝트 생성하기]**

이 매뉴얼에서는 'directcloud-gateway'라는 이름의 프로젝트를 생성하는 방법을 설명합니다.

1. 'Container Manager'를 시작합니다.

{% hint style="info" %}
**NOTE** 설치되어 있지 않으면 '패키지 센터'에서 'Container Manager'를 검색해 설치합니다.
{% endhint %}

2. 왼쪽 메뉴에서 '프로젝트'를 선택합니다.
3. '생성'을 클릭합니다. '프로젝트 생성' 화면이 표시됩니다.
4. 다음 정보를 설정합니다.
   * 프로젝트 이름: directcloud-gateway 입력
   * 경로: 데이터 폴더 생성하기에서 만든 'docker/directcloud-gateway' 폴더를 지정
   * 원본: 'docker-compose.yml 만들기' 선택

<figure><img src="https://1610041171-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FFRc8hBWqHCHYh3E0AhFb%2Fuploads%2FDvclvf83TXL8aRBes9bB%2Fimage.png?alt=media&amp;token=e0624143-65fe-4034-84cd-60046a1d1aff" alt=""><figcaption></figcaption></figure>

{% hint style="info" %}
**NOTE**

* '프로젝트 이름'은 컨테이너 이름으로 설정됩니다. 컨테이너 이름에는 반각 영소문자, 숫자, 하이픈(-)만 사용합니다. 일본어와 공백 문자는 사용할 수 없습니다.
* '소스'에서 'docker-compose.yml 업로드'를 선택한 경우에는 YAML 파일을 만들고 순서 5의 코드를 입력해 저장합니다.
  {% endhint %}

5. YAML 코드 란에 다음 코드를 복사해 입력합니다.

```
version: '3.8'

services:
  directcloud-gateway:
    image: docker.io/directcloudlab/directcloud-gateway:latest
    # missing: 설치할 때 한 번만 이미지를 내려받습니다. 재부팅·재기동 때마다
    # 레지스트리를 조회하지 않습니다(버전 갱신은 아래 업데이터가 맡습니다).
    pull_policy: missing
    container_name: directcloud-gateway
    labels:
      # 아래 업데이터가 이 컨테이너만 갱신 대상으로 삼도록 하는 표식입니다.
      com.centurylinklabs.watchtower.scope: "directcloud-gateway"
      # 파일 전송 중이면 갱신을 미룹니다. 전송이 끝나지 않으면 이번 갱신을
      # 건너뛰고, 다음 재시작 때 다시 시도합니다(4.4 참조).
      com.centurylinklabs.watchtower.lifecycle.pre-update: "for i in 1 2 3 4 5 6 7 8; do wget -q -O- http://localhost:8080/api/sync/in-flight | grep -qF '\"in_flight\":false' && exit 0; wget -q -O- http://localhost:8080/api/sync/in-flight | grep -qF '\"in_flight\":true' || exit 75; sleep 30; done; exit 75"
      # 위 확인에 주는 시간(분)입니다. 값을 바꾸지 마세요.
      com.centurylinklabs.watchtower.lifecycle.pre-update-timeout: "5"
    ports:
      - "8081:8080"
    volumes:
      # 동기화 기록이 저장되는 폴더 - 필요시 경로를 변경하세요
      - /volume1/docker/directcloud-gateway:/app/data
      # 장비 fingerprint: 호스트 /sys 읽기전용 마운트 → 컨테이너가 NIC MAC 취득
      # (로컬 보관, 서버 미전송)
      - /sys:/host/sys:ro
    environment:
      - APP_ENV=prod
      - TZ=UTC
      - HOST_SYSFS=/host/sys
      # 지원 문의 시 어떤 NAS 인지 구분하는 데 쓰입니다
      - NAS_VENDOR=synology
    restart: unless-stopped

  # 앱을 껐다 켤 때 1회만 실행되는 이미지 업데이터입니다.
  # 새 이미지가 있으면 내려받아 위 컨테이너를 다시 만들고, 없으면 아무것도
  # 하지 않은 채 종료합니다. 설정·동기화 기록은 그대로 보존됩니다.
  watchtower-once:
    image: containrrr/watchtower:1.7.1
    container_name: directcloud-gateway-updater
    depends_on:
      - directcloud-gateway
    # 1회 실행 후 종료합니다(재시작하지 않습니다).
    restart: "no"
    command: --run-once --scope directcloud-gateway --include-stopped --revive-stopped --enable-lifecycle-hooks
    volumes:
      # 이미지를 교체하려면 호스트 Docker 제어 권한이 필요합니다.
      # 갱신에 쓰기가 필요해 읽기전용으로 낮출 수 없습니다.
      - /var/run/docker.sock:/var/run/docker.sock
    environment:
      - TZ=UTC

```

{% hint style="info" %}
**NOTE**

* /app/data로의 매핑은 필수입니다. 다음 줄이 없으면 컨테이너 업데이트 시 동기화 이력이 사라집니다.

\- /volume1/docker/directcloud-gateway:/app/data

* /sys 마운트는 멀티 인스턴스 식별을 위한 기기 지문(NIC MAC) 취득용 설정입니다. 값은 로컬에만 보관하며 서버로는 전송하지 않습니다.
* 'ports:'의 '- "8081:8080"'은 '호스트 포트:컨테이너 포트' 형식입니다. 외부 공개 포트를 변경하려면 왼쪽(호스트) 값만 변경합니다. 오른쪽(컨테이너 내부)의 '8080'은 고정이므로 변경하지 않습니다. \
  예: "8081:8080"으로 설정한 경우 **http\://\<NAS\_IP>:8081** 에 접근합니다.
  {% endhint %}

6. '다음' 버튼을 클릭합니다. 'Web 포털 설정' 화면이 표시됩니다.
7. '웹 포털을 Web Station 경유로 설정' 설정에는 체크하지 않고 '다음' 버튼을 클릭합니다.\
   '요약' 화면이 표시됩니다.

<figure><img src="https://1610041171-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FFRc8hBWqHCHYh3E0AhFb%2Fuploads%2FRRheyzwRcYPCQFRTCU9h%2Fimage.png?alt=media&amp;token=749a2c15-23c4-4dd7-9890-2de76dea2100" alt=""><figcaption></figcaption></figure>

8. '완료' 버튼을 클릭합니다. 자동으로 Docker 이미지가 다운로드되고 컨테이너가 시작됩니다.

<figure><img src="https://1610041171-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FFRc8hBWqHCHYh3E0AhFb%2Fuploads%2F0aIUa6fLL1RybvOVM4lL%2Fimage.png?alt=media&amp;token=5de39d62-0b2c-4f6b-a62c-8599f0ef1679" alt=""><figcaption></figcaption></figure>

{% hint style="warning" %}
**DirectCloud Gateway 에 로그인하기**
{% endhint %}

1. 웹 브라우저에서 다음 형식의 주소에 접근합니다.\
   \
   http\://\<NAS\_IP>:<포트 번호>/setup<br>
2. 회사 코드, 아이디, 비밀번호를 입력하고 '로그인'을 클릭합니다.

{% hint style="info" %}
**NOTE**

* '아이디'에는 DirectCloud의 관리자 권한을 가진 아이디를 입력해야 합니다.
* 관리자 비밀번호가 전송되므로 신뢰할 수 있는 내부 네트워크에서 연결합니다. 외부 네트워크에서 접근할 때는 미리 HTTPS 리버스 프록시를 구성합니다.
* '연결 테스트' 버튼을 클릭하면 DirectCloud 서버와 Amazon S3로의 연결 상태를 확인할 수 있습니다.
  {% endhint %}

<figure><img src="https://1610041171-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FFRc8hBWqHCHYh3E0AhFb%2Fuploads%2Ftdruklm9soqViPnIQ1a9%2Fimage.png?alt=media&amp;token=57ad8cc4-f859-4b20-8b3a-13f22b53964f" alt=""><figcaption></figcaption></figure>

{% hint style="warning" %}
**같은 NAS에서 여러 컨테이너를 동작시키는 경우**
{% endhint %}

한 대의 NAS에서 게이트웨이를 **최대 2개**까지 운영할 수 있습니다(예: A 공유폴더 →DC 계정 1, B 공유폴더 → DC 계정 2). 기존 설치는 그대로 두고, 아래 항목만 바꾼 YAML 로 두 번째 프로젝트를 새로 만듭니다.

**\[주의 사항]**

두 번째 이후 컨테이너를 설정할 때는 다음에 주의해야 합니다.

* **데이터 폴더는 반드시 분리합니다.** 두 컨테이너가 같은 폴더를 사용하면 나중에 시작한 쪽이 차단하기(blocked) 모드로 들어가, 로그인·설정·동기화가 모두 멈춥니다. 이는 다른 쪽 폴더를 덮어쓰지 않기 위한 안전 장치입니다.
* **데이터 폴더의 경로는 NAS 벤더마다 다릅니다.**
  * QNAP: /share/Container/…
  * Synology: /volume1/docker/…
  * QNAP에서 Synology의 경로를 그대로 사용하면, Docker가 그 경로를 QNAP의 루트 파일 시스템 위에 새로 생성합니다. 컨테이너는 정상적으로 시작되지만 'File Station'의 폴더는 비어 있는 채로 남고, 로그·DB·기기 식별 파일이 재시작 시에 사라질 우려가 있습니다.
* 두 번째 컨테이너에는 **기존과 다른 이름을 설정**해야 합니다. 기존과 같은 이름을 사용하면 충돌이 발생합니다.\
  컨테이너 이름에는 반각 영소문자, 숫자, 하이픈(-)만 사용합니다. 일본어와 공백 문자는 사용할 수 없습니다.

**\[변경이 필요한 항목]**

두 번째 이후 컨테이너를 생성할 때는 다음 항목을 수정합니다.

데이터 폴더와 컨테이너의 이름을 일치시킬 필요는 없지만, 기존과는 다른 경로로 지정합니다.

다음은 directcloud-gateway-b라는 이름으로 두 번째 컨테이너를 생성하는 경우의 설정 예입니다.

<table data-search="false"><thead><tr><th>항목</th><th>설정 위치</th><th>기존 예</th><th>추가 예</th></tr></thead><tbody><tr><td>데이터 폴더(Synology)</td><td>－</td><td>/volume1/docker/directcloud-gateway</td><td>/volume1/docker/ directcloud-gateway-b</td></tr><tr><td>데이터 폴더(QNAP)</td><td>－</td><td>/share/Container/directcloud-gateway</td><td>/share/Container/ directcloud-gateway-b</td></tr><tr><td>프로젝트 이름</td><td><p>YAML 첫머리에 있는 서비스 이름</p><p>services:</p></td><td>directcloud-gateway</td><td>directcloud-gateway-b</td></tr><tr><td>호스트 포트</td><td>YAML의 ports:</td><td>8080</td><td>8082</td></tr><tr><td>컨테이너 이름</td><td>YAML의 services: 아래에 있는 container_name:</td><td>directcloud-gateway</td><td>directcloud-gateway-b</td></tr><tr><td>업데이터 이름</td><td>YAML의 watchtower-once: 아래에 있는 container_name:</td><td>directcloud-gateway-updater</td><td>directcloud-gateway-b -updater</td></tr><tr><td>업데이터 표식(scope)</td><td>YAML의 com.centurylinklabs.watchtower.scope, --scope</td><td>directcloud-gateway</td><td>directcloud-gateway-b</td></tr><tr><td>시작·중지 순서 제어</td><td>YAML의 depends_on:</td><td>directcloud-gateway</td><td>directcloud-gateway-b</td></tr><tr><td>GATEWAY_INSTANCE_KEY</td><td>YAML</td><td>설정 없음</td><td>GATEWAY_INSTANCE_KEY=secondary</td></tr></tbody></table>

**\[두 번째 프로젝트용 YAML (QNAP 기준)]**

{% hint style="info" %}
**NOTE**\
Synology 와 다른 곳은 **데이터 폴더 경로**(`/share/Container/…`)와 `NAS_VENDOR=qnap`\
두 곳뿐입니다. File Station 5 에서 `Container` 공유 폴더 아래에 `directcloud-gateway-b`\
폴더를 먼저 만드세요(기존 A 폴더와 반드시 다른 폴더).
{% endhint %}

```
version: '3.8'

services:
  directcloud-gateway-b:
    image: docker.io/directcloudlab/directcloud-gateway:latest
    pull_policy: missing
    container_name: directcloud-gateway-b
    labels:
      # 표식도 함께 바꿔야 합니다. 그대로 두면 두 업데이터가 서로의 컨테이너까지
      # 갱신 대상으로 보게 됩니다.
      com.centurylinklabs.watchtower.scope: "directcloud-gateway-b"
      # 아래 localhost:8080 은 컨테이너 내부 주소입니다. 호스트 포트를 8082 로
      # 바꿔도 이 값은 8080 그대로 두세요.
      com.centurylinklabs.watchtower.lifecycle.pre-update: "for i in 1 2 3 4 5 6 7 8; do wget -q -O- http://localhost:8080/api/sync/in-flight | grep -qF '\"in_flight\":false' && exit 0; wget -q -O- http://localhost:8080/api/sync/in-flight | grep -qF '\"in_flight\":true' || exit 75; sleep 30; done; exit 75"
      com.centurylinklabs.watchtower.lifecycle.pre-update-timeout: "5"
    ports:
      # 왼쪽(호스트)만 8082 로 바꿉니다. 오른쪽은 8080 고정입니다.
      - "8082:8080"
    volumes:
      # 위 비교표의 기존(A) 와 반드시 다른 폴더여야 합니다
      - /share/Container/directcloud-gateway-b:/app/data
      - /sys:/host/sys:ro
    environment:
      - APP_ENV=prod
      - TZ=UTC
      - HOST_SYSFS=/host/sys
      - NAS_VENDOR=qnap
      # 두 번째 인스턴스임을 표시합니다(기존 설치에는 넣지 않습니다)
      - GATEWAY_INSTANCE_KEY=secondary
    restart: unless-stopped

  watchtower-once:
    image: containrrr/watchtower:1.7.1
    container_name: directcloud-gateway-b-updater
    depends_on:
      - directcloud-gateway-b
    restart: "no"
    # --scope 값이 위 라벨과 같아야 합니다
    command: --run-once --scope directcloud-gateway-b --include-stopped --revive-stopped --enable-lifecycle-hooks
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
    environment:
      - TZ=UTC

```

**\[두 번째 프로젝트용 YAML (Synology 기준)]**

```
version: '3.8'

services:
  directcloud-gateway-b:
    image: docker.io/directcloudlab/directcloud-gateway:latest
    pull_policy: missing
    container_name: directcloud-gateway-b
    labels:
      # 표식도 함께 바꿔야 합니다. 그대로 두면 두 업데이터가 서로의 컨테이너까지
      # 갱신 대상으로 보게 됩니다.
      com.centurylinklabs.watchtower.scope: "directcloud-gateway-b"
      # 아래 localhost:8080 은 컨테이너 내부 주소입니다. 호스트 포트를 8082 로
      # 바꿔도 이 값은 8080 그대로 두세요.
      com.centurylinklabs.watchtower.lifecycle.pre-update: "for i in 1 2 3 4 5 6 7 8; do wget -q -O- http://localhost:8080/api/sync/in-flight | grep -qF '\"in_flight\":false' && exit 0; wget -q -O- http://localhost:8080/api/sync/in-flight | grep -qF '\"in_flight\":true' || exit 75; sleep 30; done; exit 75"
      com.centurylinklabs.watchtower.lifecycle.pre-update-timeout: "5"
    ports:
      # 왼쪽(호스트)만 8082 로 바꿉니다. 오른쪽은 8080 고정입니다.
      - "8082:8080"
    volumes:
      # 위 비교표의 기존(A) 와 반드시 다른 폴더여야 합니다
      - /volume1/docker/directcloud-gateway-b:/app/data
      - /sys:/host/sys:ro
    environment:
      - APP_ENV=prod
      - TZ=UTC
      - HOST_SYSFS=/host/sys
      - NAS_VENDOR=synology
      # 두 번째 인스턴스임을 표시합니다(기존 설치에는 넣지 않습니다)
      - GATEWAY_INSTANCE_KEY=secondary
    restart: unless-stopped

  watchtower-once:
    image: containrrr/watchtower:1.7.1
    container_name: directcloud-gateway-b-updater
    depends_on:
      - directcloud-gateway-b
    restart: "no"
    # --scope 값이 위 라벨과 같아야 합니다
    command: --run-once --scope directcloud-gateway-b --include-stopped --revive-stopped --enable-lifecycle-hooks
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
    environment:
      - TZ=UTC

```

**\[설치 후]**

* 접속 주소가 다릅니다: 기존 `http://NAS_IP:8081` / 추가 `http://NAS_IP:8082`
* 각 인스턴스는 **별도 장비로 등록**되므로 DirectCloud 로그인·동기화 설정을\
  각각 진행해야 합니다
* 3개 이상은 지원하지 않습니다
