# Python 봇 배포하기

> Daki Hosting에서 Python Discord 봇(discord.py 또는 py-cord)을 배포하는 단계별 가이드.

이 가이드에서는 Daki Hosting에 Python Discord 봇을 배포하는 과정을 안내해 드려요 — 서버를 만드는 것부터 봇 토큰을 안전하게 읽고 온라인으로 올리기까지요.

## 배울 내용

- 봇을 위한 Python 서버를 만드는 방법
- 코드를 업로드하는 방법
- 설치 명령, 시작 명령, Python 버전을 설정하는 방법
- `.env` 파일로 봇 토큰을 안전하게 설정하는 방법
- 봇을 시작하고 정상 작동하는지 확인하는 방법

---

## 준비물

- Daki 계정(Free Tier 또는 유료) — [계정 만들기](https://daki.cc/ko/wiki/guides/account-create)를 참고하세요
- **봇 토큰**이 있는 Discord 봇 — [Discord Developer Portal](https://discord.com/developers/applications)에서 만들 수 있어요
- 모든 의존성을 나열한 `requirements.txt`가 있는 봇 소스 코드(예: `discord.py` 또는 `py-cord`, 그리고 `python-dotenv`)

> **정보:** Discord 봇은 Discord 서버로 **아웃바운드** 연결을 하며, 인바운드 포트가 필요하지 않아요. 그래서 Discord 봇은 Free Tier와 유료 플랜 모두에서 작동해요. 봇이 HTTP 서버도 실행한다면(예: 웹훅이나 웹 대시보드), 공개 포트는 유료 플랜에서만 사용할 수 있으므로 유료 플랜이 필요해요. [네트워크 & 할당](https://daki.cc/ko/wiki/guides/network-allocations)을 참고하세요.

---

## 배포 과정

**단계 1: Python 서버 만들기**

1. [free.daki.cc](https://free.daki.cc)에서 Free Tier Dashboard에 로그인하거나, [billing.daki.cc](https://billing.daki.cc)에서 Billing Panel에 로그인하세요.
2. 새 서버를 만들고 **Python** egg를 선택하세요.
3. 서버에 이름을 붙이세요(예: `MyPythonBot`).

전체 과정은 [첫 무료 서버 만들기](https://daki.cc/ko/wiki/guides/create-server)를 참고하세요.

**단계 2: Portal 접속하기**

SSO로 Portal에 로그인하거나 [portal.daki.cc](https://portal.daki.cc)에 직접 접속하세요. [Portal 개요](https://daki.cc/ko/wiki/guides/portal)를 참고하세요.

**단계 3: 봇 코드 업로드하기**

**방법 A — ZIP으로 업로드 (가장 간단함):**
1. 프로젝트 폴더를 `.zip` 파일로 압축하세요.
2. Portal에서 **Files** 탭으로 이동한 뒤 **Upload**를 클릭하세요.
3. `.zip` 파일을 마우스 오른쪽 버튼으로 클릭하고 **Extract**를 클릭하세요.

**방법 B — SFTP 사용 (파일 크기 제한 없음):**
**Settings** 탭에 있는 SFTP 자격 증명으로 폴더를 직접 업로드하세요. [파일 관리자](https://daki.cc/ko/wiki/guides/file-manager)를 참고하세요.

> **정보:** 프로젝트 루트에 `requirements.txt`를 포함하세요. 설치 명령이 이 파일을 사용해 의존성을 설치해요.

**단계 4: Startup 탭 설정하기**

**Startup** 탭을 열고 세 가지 항목을 모두 설정하세요:

**1. Docker Image** — 봇에 필요한 Python 버전을 선택하세요(예: **Python 3.13**). 잘 모르겠다면 Python 3.13이 안전한 기본값이에요. 모든 라이브러리가 지원한다면 더 최신 버전도 작동해요. **EOL**로 표시된 버전은 더 이상 보안 업데이트를 받지 못하므로 피하세요.

**2. Install Command** — 의존성을 자동으로 설치하도록 설정하세요:
```
pip install -r requirements.txt
```
**3. Startup Command** — 봇을 실행하는 명령으로 설정하세요:
- `python main.py` — 진입 파일이 `main.py`인 경우
- `python bot.py` — 진입 파일이 `bot.py`인 경우
- `python -m mypackage` — 프로젝트가 패키지 구조인 경우

프로젝트 구조와 요구 사항에 맞게 이 명령들을 자유롭게 바꿔도 돼요.

자세한 설명은 [시작 설정](https://daki.cc/ko/wiki/guides/startup-settings)을 참고하세요.

**단계 5: .env 파일로 봇 토큰 추가하기**

Discord 봇 토큰은 소스 코드에 나타나지 않도록 서버의 `.env` 파일에 저장하세요.

1. **Files** 탭에서 **New File**을 클릭하고 이름을 `.env`로 지정하세요.
2. 토큰을 추가하세요:
   ```
   BOT_TOKEN=your_discord_bot_token_here
   ```
3. **Save**를 클릭하세요.

`requirements.txt`에 `python-dotenv`가 있는지 확인한 다음, 코드에서 파일을 불러오세요:

```python

from dotenv import load_dotenv

import os

import discord



load_dotenv()

TOKEN = os.environ.get("BOT_TOKEN")



intents = discord.Intents.default()

client = discord.Client(intents=intents)



@client.event

async def on_ready():

    print(f"Logged in as {client.user}")



client.run(TOKEN)

```
`.env` 파일 사용에 대한 자세한 내용은 [환경 변수](https://daki.cc/ko/wiki/guides/environment-variables)를 참고하세요.

**단계 6: 봇 시작하기**

**Console** 탭에서 **Start**를 클릭하세요. 정상적으로 실행되면 다음이 출력돼요:

```

Logged in as MyBot#1234

```
오류가 보이면 [문제 해결](https://daki.cc/ko/wiki/guides/troubleshooting) 가이드를 확인하세요.

---

## 자주 발생하는 문제

**ModuleNotFoundError: No module named 'discord'**

의존성이 설치되지 않은 상태예요. `requirements.txt`에 `discord.py` 또는 `py-cord`가 있는지 확인하고, Startup 탭의 설치 명령이 `pip install -r requirements.txt`로 설정되어 있는지 확인하세요. 서버를 재시작하면 설치가 다시 실행돼요.

**ModuleNotFoundError: No module named 'dotenv'**

`requirements.txt`에 `python-dotenv`를 추가하고 서버를 재시작하세요.

**discord.errors.LoginFailure: Improper token has been passed**

`.env` 파일의 토큰이 잘못되었거나 없어요. Files 탭에서 `.env` 파일을 열고 값을 주의해서 확인하세요. 불필요한 공백이나 따옴표를 지우세요.

**PrivilegedIntentsRequired 오류**

봇이 Discord Developer Portal에서 활성화되지 않은 인텐트를 요청하고 있어요. 봇 애플리케이션 설정에서 필요한 특권 인텐트(예: Message Content Intent)를 활성화하고, 코드에서도 같은 인텐트를 요청하는지 확인하세요.

**시작하자마자 서버가 충돌해요**

Console의 출력에서 오류를 확인하세요. 흔한 원인은 잘못된 시작 명령(파일 이름 오타나 잘못된 경로), `requirements.txt` 누락, 또는 패키지 누락이에요. [문제 해결](https://daki.cc/ko/wiki/guides/troubleshooting)을 참고하세요.

---

## 다음 단계

- [환경 변수](https://daki.cc/ko/wiki/guides/environment-variables) — `.env` 파일과 코드에서 변수를 읽는 방법에 대한 전체 가이드예요.
- [무료 서버 계속 실행하기](https://daki.cc/ko/wiki/guides/save-free-server-from-purge) — 광고를 정기적으로 보고 Free Tier 서버를 계속 실행하세요.
- [파일 관리자](https://daki.cc/ko/wiki/guides/file-manager) — 변경한 뒤 코드를 업데이트하세요.

---
Source: https://daki.cc/ko/wiki/guides/deploy-python
