CodeName의 잡다한 블로그
article thumbnail

인사말

Node.js로 개발된 디스코드 봇을 Docker로 운영하는 강좌입니다.

이 강좌를 통해 누구나 쉽게 디스코드 봇을 운영하면 좋겠습니다.

 

 

 

강좌

1. 먼저 Dockefile를 작성해주세요.

FROM node:16.15.1

RUN mkdir -p /node
WORKDIR /node

COPY package.json package-lock.json ./

RUN npm install -g npm@8.12.2
RUN npm install
RUN npm install ytdl-core@latest

WORKDIR /node/app

ENV NODE_ENV development

CMD [ "npm", "run", "musco" ]

1-1. node 이미지와 맞는 버전을 입력합니다.

전 해당 버전이 가장 문제없이 작동했습니다.

가벼운 버전을 원할 경우 alpine 버전을 이용해주시면 됩니다.

FROM node:16.15.1

1-2. node라는 폴더를 생성하고 작업폴더를 생성한 폴더로 지정합니다.

RUN mkdir -p /node
WORKDIR /node

1-3. 'package.json'와 'package-lock.json'를 복사해줍니다.

COPY package.json package-lock.json ./

1-4. 필요한 npm을 설치해줍니다.

원래는 package 파일을 복사해줬기 때문에 'RUN npm install'만 있어도 되지만 제 봇은 다른 부가가 필요하기 때문에 아래 코드로 작성되었습니다.

RUN npm install -g npm@8.12.2
RUN npm install
RUN npm install ytdl-core@latest

1-5. 작업 폴더를 '/node/app'으로 이동 후 파일을 복사해줍니다.

WORKDIR /node/app

1-6. 환경 변수를 'development'로 지정해줍니다.

ENV NODE_ENV development

1-7. 컨테이너 실행시 작동될 커맨드를 입력합니다.

대부분은 'npm run'만으로도 실행됩니다.

CMD [ "npm", "run", "musco" ]

 

2. 이 파일을 서버 내 봇 파일이 있는 폴더로 이동해주세요.

저같은 경우는 '/Server/Bot/Musco'라는 폴더에 있으니 이 폴더에 Dockerfile를 붙여넣기 해주시면 됩니다.

 

3. SSH를 실행 후 Dockerfile이 있는 폴더로 이동합니다.

 

4. SSH에서 다음 커맨드를 실행합니다.

'musco:1.0'은 이미지 이름과 버전을 지정해준거고 '.'은 경로를 지정해준겁니다.

docker build -t musco:1.0 .

5. 이미지 빌드가 끝났으면 docker-compose.yml도 작성해줍니다.

---
version: "2.1"
services:
  Discord-Musco:
    image: musco:1.0
    container_name: 'Discord-MuscoBot'
    hostname: 'Discord MuscoBot'
    network_mode: bridge
    volumes:
      - /Server/Bot/Musco:/node/app
    restart: unless-stopped

6. 이제 컨테이너 생성 후 실행해줍니다.

로그가 정상적으로 보인다면 봇 실행 성공입니다.

> musco@1.0 musco
> node musco.js


  ███╗   ███╗██╗   ██╗███████╗ ██████╗ ██████╗                               
  ████╗ ████║██║   ██║██╔════╝██╔════╝██╔═══██╗                              
  ██╔████╔██║██║   ██║███████╗██║     ██║   ██║                              
  ██║╚██╔╝██║██║   ██║╚════██║██║     ██║   ██║                              
  ██║ ╚═╝ ██║╚██████╔╝███████║╚██████╗╚██████╔╝                              
  ╚═╝     ╚═╝ ╚═════╝ ╚══════╝ ╚═════╝ ╚═════╝                               
                                                                                
  
[Musco] | Logged in as Musco!

 

 

 

마무리

사실 강좌보단 그냥 제가 기억하는 용도로 적은거지만

댓글에 질문해주시면 친절하게 답변해드리겠습니다!

 

 

도움이 되셨다면 공감, 팔로우, 댓글 부탁드려요.^^
다른 곳에 공유시 출처를 꼭 남겨주세요!

profile

CodeName의 잡다한 블로그

@코네 (CodeName)

소프트웨어 개발, 컴퓨터 조립 등을 좋아합니다. 최근에는 애니메이션에도 입덕했습니다!