본문으로 건너뛰기

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

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

배울 내용

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

준비물

  • Daki 계정(Free Tier 또는 유료) — 계정 만들기를 참고하세요
  • 봇 토큰이 있는 Discord 봇 — Discord Developer Portal에서 만들 수 있어요
  • discord.js와 dotenv를 의존성으로 포함한 package.json이 있는 봇 소스 코드

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


배포 과정

  1. Node.js 서버 만들기

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

    전체 과정은 첫 무료 서버 만들기를 참고하세요.

  2. Portal 접속하기

    SSO로 Portal에 로그인하세요(대시보드의 Account 페이지 또는 Billing Panel 서비스 페이지에서 Open Portal). 또는 portal.daki.cc에 직접 접속하세요. Portal 개요를 참고하세요.

  3. 봇 코드 업로드하기

    방법 A — ZIP으로 업로드 (가장 간단함):

    1. 프로젝트 폴더를 로컬에서 .zip 파일로 압축하세요.
    2. Portal에서 Files 탭으로 이동한 뒤 Upload를 클릭하세요.
    3. .zip 파일을 마우스 오른쪽 버튼으로 클릭하고 Extract를 클릭하세요.

    방법 B — SFTP 사용 (파일 크기 제한 없음): Settings 탭에 있는 SFTP 자격 증명으로 연결한 뒤 폴더를 직접 업로드하세요. 파일 관리자를 참고하세요.

    업로드에 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 — 의존성을 자동으로 설치하도록 설정하세요:

    Shell
    npm install

    3. Startup Command — 봇을 실행하는 명령으로 설정하세요:

    • node index.js — 진입 파일이 index.js인 경우
    • node bot.js — 진입 파일이 bot.js인 경우
    • npm start — package.json에 start 스크립트가 있는 경우

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

    자세한 설명은 시작 설정을 참고하세요.

  5. .env 파일로 봇 토큰 추가하기

    봇이 연결하려면 Discord 토큰이 필요해요. 소스 코드에 노출되지 않도록 서버의 .env 파일에 저장하세요.

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

    봇 코드에서는 dotenv로 불러오세요:

    JavaScript
    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 파일 사용에 대한 자세한 내용은 환경 변수를 참고하세요.

  6. 봇 시작하기

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

    Text
    Logged in as MyBot#1234!

    대신 오류가 보이면 문제 해결 가이드를 확인하세요.


자주 발생하는 문제

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 누락이에요. 문제 해결을 참고하세요.


다음 단계