# Portainer UI 전용 Order_web 배포 가이드 (No Terminal)

## 1. Goal Description (목표)
터미널(SSH) 접속이나 복잡한 이미지 빌드 과정 없이, 오직 **Portainer 웹 UI만 사용하여** Order_web 컨테이너를 구동하는 방법을 제안합니다.

## 2. 해결 전략: 볼륨 마운트 + On-the-fly 실행
Portainer의 Web Editor는 `build: .` 명령어(커스텀 이미지 빌드)를 지원하지 않습니다. 
이를 해결하기 위해, 커스텀 이미지를 만들지 않고 **공식 Python 이미지를 그대로 가져온 뒤, 컨테이너가 켜질 때마다 자동으로 폴더 안의 패키지를 설치하고 서버를 실행(`command`)하도록 설계**를 변경합니다.

## 3. Portainer UI 세팅 프로세스

### Step 1. NAS로 소스 파일 동기화 (WebDAV 활용)
1. 현재 작성된 `Order_web` 폴더가 WebDAV를 통해 NAS에 정상적으로 저장(동기화)되었는지 확인합니다.
2. NAS 내부에서 `Order_web` 폴더의 **실제 절대 경로**를 파악합니다.
   * 예: `/volume1/WebDAV/LUCKY/Order_web`

### Step 2. Portainer 접속 및 Stack 추가
1. Portainer 웹 UI에 로그인합니다.
2. 좌측 메뉴에서 **Stacks** -> 우측 상단의 **[+ Add stack]** 버튼을 클릭합니다.
3. Stack 이름을 지정합니다. (예: `order-web`)
4. Build method를 **Web editor**로 선택합니다.

### Step 3. Docker Compose 코드 작성 (복사/붙여넣기)
아래의 코드를 Web editor 창에 그대로 붙여넣습니다. 
*(주의: `volumes` 항목의 앞부분 경로는 사용자님의 실제 NAS 경로에 맞게 꼭 수정해주세요!)*

```yaml
version: '3.8'

services:
  order-web-api:
    image: python:3.11-slim
    container_name: order_web_api
    ports:
      - "8000:8000"
    environment:
      - DATA_DIR=/app/data
    volumes:
      # 1. 소스코드 폴더 마운트 (이 경로를 실제 NAS 경로로 수정)
      - /volume1/WebDAV/LUCKY/Order_web:/app
      
      # 2. 데이터(플러그인) 폴더 마운트 (이 경로를 실제 NAS 경로로 수정)
      - /volume1/WebDAV/LUCKY/.obsidian/plugins/order-manager:/app/data
    working_dir: /app
    # 컨테이너 시작 시 패키지를 설치하고 서버를 실행하도록 덮어씁니다.
    command: >
      bash -c "pip install --no-cache-dir -r requirements.txt && uvicorn main:app --host 0.0.0.0 --port 8000"
    restart: always
```

### Step 4. 배포 실행
1. 하단의 **[Deploy the stack]** 버튼을 클릭합니다.
2. 처음에는 Python 공식 이미지를 다운로드하고 패키지를 설치하느라 1~2분 정도 소요될 수 있습니다.
3. 완료되면 `http://[NAS_IP]:8000` 으로 접속하여 정상 작동을 확인합니다.

---

## 4. Open Questions
> [!IMPORTANT]
> 이 방식을 사용하면 터미널 없이 Portainer UI만으로 모든 작업이 가능합니다. 
> 
> NAS 내부의 정확한 **절대 경로(볼륨 매핑용)**를 혹시 알고 계신가요? 
> 경로만 맞춰서 위의 코드를 Portainer에 붙여넣고 배포를 진행해 보시겠어요?
