# Discord.js 봇 배포하기

> Daki Hosting에서 Discord.js(Node.js) 봇을 배포하는 단계별 가이드.

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

## 배울 내용

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

---

## 준비물

- Daki 계정(Free Tier 또는 유료) — [계정 만들기](https://daki.cc/ko/wiki/guides/account-create)를 참고하세요
- **봇 토큰**이 있는 Discord 봇 — [Discord Developer Portal](https://discord.com/developers/applications)에서 만들 수 있어요
- `discord.js`와 `dotenv`를 의존성으로 포함한 `package.json`이 있는 봇 소스 코드

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

---

## 배포 과정

**단계 1: Node.js 서버 만들기**

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

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

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

SSO로 Portal에 로그인하세요(대시보드의 Account 페이지 또는 Billing Panel 서비스 페이지에서 **Open 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)를 참고하세요.

> **정보:** 업로드에 `node_modules` 폴더는 **포함하지 마세요** — 설치 명령으로 자동 설치돼요. `package.json`과 `package-lock.json`은 꼭 포함하세요.

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

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

**1. Docker Image** — 봇에 필요한 Node.js 버전을 선택하세요(예: **Node.js 22** 또는 **Node.js 24**). 잘 모르겠다면 Node.js 24 LTS가 안전한 기본값이에요. **EOL**로 표시된 버전은 더 이상 보안 업데이트를 받지 못하므로 피하세요.

**2. Install Command** — 의존성을 자동으로 설치하도록 설정하세요:
```
npm install
```
**3. Startup Command** — 봇을 실행하는 명령으로 설정하세요:
- `node index.js` — 진입 파일이 `index.js`인 경우
- `node bot.js` — 진입 파일이 `bot.js`인 경우
- `npm start` — `package.json`에 `start` 스크립트가 있는 경우

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

자세한 설명은 [시작 설정](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**를 클릭하세요.

봇 코드에서는 `dotenv`로 불러오세요:
```js
require('dotenv').config();

const { Client, GatewayIntentBits } = require('discord.js');
const client = new Client({ intents: [GatewayIntentBits.Guilds] });

client.once('ready', () => {
    console.log(`Logged in as ${client.user.tag}`);
});

client.login(process.env.BOT_TOKEN);
```
설치 명령으로 설치되도록 `dotenv`가 `package.json`의 의존성에 있는지 확인하세요.

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

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

**Console** 탭에서 **Start**를 클릭하세요. 정상적으로 실행되면 봇의 로그인 확인 메시지가 출력돼요:

```

Logged in as MyBot#1234!

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

---

## 자주 발생하는 문제

**Error: Cannot find module 'discord.js'**

의존성이 설치되지 않은 상태예요. `package.json`에 `discord.js`가 의존성으로 있는지 확인하고, Startup 탭의 설치 명령이 `npm install`로 설정되어 있는지 확인하세요. 서버를 재시작하면 설치가 다시 실행돼요.

**Error: Cannot find module 'dotenv'**

`package.json`의 의존성에 `dotenv`를 추가하고 서버를 재시작해서 다시 설치하세요.

**Error: An invalid token was provided**

`.env` 파일의 봇 토큰이 잘못되었거나 없어요. Files 탭에서 `.env`를 열어 값을 확인하세요. 불필요한 공백, 따옴표, 줄바꿈이 없는지 확인하세요.

**봇이 시작되지만 곧 연결이 끊어져요**

보통 Gateway Intents가 빠져 있어서 생기는 문제예요. Discord Developer Portal에서 봇 애플리케이션에 필요한 특권 인텐트(예: Message Content Intent)를 활성화하고, 코드에서도 해당 인텐트를 요청하는지 확인하세요.

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

Console 탭을 열고 오류를 읽어 보세요. 흔한 원인은 잘못된 시작 명령(파일 이름 오타), 잘못된 Node.js 버전, 또는 `node_modules` 누락이에요. [문제 해결](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-discordjs
