Deploy
계정이 준비되었으면 이제 디플로이를 해봅시다. 디플로이의 방법으로는 GUI 하고 CLI 두 종류가 있습니다. Railway의 UI가 아주 심플해서 GUI로 디플로이 하는 편이 편할겁니다. 또 CLI는 커맨드가 시원찮은 이미지가 있어서 쓰기 불편할 수 있습니다. (굳이 CLI 쓸 필요가 없다고 개인적으로는 생각합니다)
GUI 에서 디플로이 하는 방법
필요한 파일을 Github 의 레포지토리에 추가합니다. 필요한 파일은 main.py, requirements.txt, Dockerfile 입니다. 이번에 사용한 main,py 파일에 관해서는 다운타임검증에서 설명할테니 일단 생략하겠습니다. 각각 구동시키고 싶은 Bot의 소스코드를 작성합니다.
requirements.txt 파일은 pip freeze 커맨드를 사용하여 필요한 라이브러리를 기재합니다.
discord.py==2.1.1
마지막으로 Dockerfile 입니다. 다음과 같이 작성해주세요. Dockerfile 이 아니라 Procfile 과 runtime.txt 파일을 사용하는 방법도 있는데, 어느 쪽이든 상관없습니다. (이건 편한대로)
FROM python:3.11
WORKDIR /bot
COPY requirements.txt /bot/
RUN pip install -r requirements.txt
COPY . /bot
CMD python main.py
worker: python main.py
python-3.11.0
필요한 파일을 GitHub에 푸쉬하는 방법은 다른 포스팅에 올려두었으니 참고해주세요.
GitHub에 레포지토리가 준비되었다면 Railway Dashboard 에 접속해서, 우상단의 [New Project] 를 선택합니다. 다음으로[Deploy from GitHub repo] 를 선택하여 디플로이 하고싶은 레포지토리를 선택합니다. 저는 Downtimetest 를 선택했습니다.
이때 GitHub 계정과 연동되어있지 않은 경우에는 아무것도 표시되어있지 않을텐데요.[Deploy from GitHub repo] 를 선택한 후에 [Configure GitHub App]를 선택합니다. 새 윈도우가 생성되고 Install & Authorize Railway App 라고 표시되면 [Install & Authorize] 를 선택합니다. 이걸로 준비가 끝났습니다. 윈도우창은 닫아도 상관없습니다.
레포지토리를 선택하면 다음과 같이 당장 디플로이 할건지, 환경변수를 추가할건지 선택할 수 있습니다. 그런데 [Add variables]를 선택해도 제멋대로 디플로이가 개시됩니다. 뭘 위한 선택지인거지. 환경변수를 설정하지 않았기 때문에 당연히 에러가 발생합니다. 이건 일단 그대로 두고 환경변수를 설정해줍시다.
[Add variables]를 선택하면 다음과 같은 화면이 표시되므로 필요한 환경번수를 적당히 추가합니다. 환경변수를 추가할때마다 자동적으로 디플로이가 이루어집니다. 이전 환경은 자동적으로 해제되므로 중복 적용되는지 걱정할 필요는 없습니다.
.env 파일 등을 준비해두고 1개씩 등록하는게 귀찮다 하시는 분들은 일단 [Variables] 을 다시 선택하면([Deployments] 를 선택하고 [Variables] 을 선택하는 것을 말합니다)다음과 같이 [RAW Editor] 를 선택할 수 있게 됩니다. 여기서 env 파일의 내용물을 페이스트하고 [Update Variables] 를 선택합니다.
제 환경에서는 디플로이가 대략 20초정도 걸렸습니다. 이걸로 디스코드 봇의 운용이 가능하게 되었습니다. 또 Railway 에서는 GitHub 의 레포지토ㄹ에 변경이 있을 때 자동적으로 다시 디플로이해주는 기능이 있습니다. 해당 기능을 끄고 싶은 분은 [Settings] 에서 [Disable trigger] 를 눌러주세요.
Automatic Deployments
Changes made to this GitHub branch will be automatically pushed to this environment.
CLI 에서 디플로이 하는 방법
Railway CLI 에는 Version 2 와 Version 3 두 가지 종류 버전이 있습니다. V2 와 V3 의 차이가 꽤 커서 개인적으로 V2 쪽이 더 쓰기 편하다고 생각합니다. V2 와 V3 의 사용법에 관해 서술하겠습니다.
CLI V2 를 사용한 디플로이 방법
자신의 OS, CPU 아키텍쳐에 있는 CLI V2 의 실행파일을 여기서 다운로드 받아 압축을 풀어줍니다. 7-Zip 이 필요할 것 같습니다.(저는 WinRAR 을 사용하고 있습니다.) 하여튼 적당한 압축해체 파일을 설치해서 풀어줍니다. 그러면 railway(Windows 인경우에는railway.exe)파일이 있을 겁니다. 이걸 다음의 디플로이에 사용합니다.
railwayapp/cli 에서 v2.sh 를 실행해도 인스톨 가능합니다. Linux 환경이든가 Cygwin 인 경우에는 이렇게 해도 상관없습니다. 이후에는 Linux 환경에서 디플로이하는 방법에 관해 서술하겠습니다. (Windows 등 다른 데서도 할 일은 대체로 똑같습니다. )일단 적당한 디렉토리를 생성하고 그 안에 main.py, Dockerfile, requirements.txt, .env, railway 파일을 넣어둡니다.(Linux 의 경우에는 railway 의 경로가 있다면 넣지 않아도 문제 없습니다.) .env 파일에는 main.py 에서 사용할 환경변수를 기재합니다.
DISCORD_TOKEN=YourAccessToken
CHANNEL_ID=1075739
MESSAGE_ID=1075740
MEMBER_ID=10659062
준비가 되었으면 다음의 커맨드를 실행합니다. 명령어를 실행하면 URL에 접속하여 인증해달라고 하므로 URL에 접속하여 [Verify] 을 선택해 주세요. 인증 후 Logged in as 사용자 이름(메일 주소)이 표시되어 있으면 문제 없습니다.
[web@localhost work]$ railway login --browserless
Your pairing code is: sticky-whimsical-lame-produce
To authenticate with Railway, please go to
https://railway.app/cli-login?d=d29yZENvZGU9c3RpY2t5LXdoaW1zaWNhbC1sYW1lLXByb2R1Y2UmaG9zdG5hbWU9bG9jYWxob3N0LmxvY2FsZG9tYWlu
🎉 Logged in as Pumila (hogehoge@gmail.com)
로그인 되었으면 다음과 같이 커맨드를 입력해줍니다. Select Starting Point: 는 Empty Project 를, Enter project name: 에는 적당한 이름을 입력합니다. .env 파일을 자동 탐색하므로 yes 를 선택합니다. 그 후 브라우저가 열리고 대쉬보드가 표시됩니다.(ssh 경유로 콘솔을 사용하는 경우에는 Ctrl+C로 빠져 주십시오.
[web@localhost work]$ railway init
A newer version of the Railway CLI is available, please update to: v3.0.12
✔ Starting Point: Empty Project
✔ Enter project name: hoge█
✔ Environment: production
.env detected!
Import your variables into Railway? (y/N): y
🎉 Created project hoge
^C
마지막으로 railway up 명령어를 실행하여 디플로이합니다.이 때 failed to fetch deployments 라고 뜨기도 하는데 디플로이 되어 있으니 무시하셔도 됩니다.디플로이가 되면 Railway Dashboard 에 접속하여 작성한 프로젝트의 서비스를 선택합니다.이어서 [Variables] 에서 [Shared Variable] 을 선택해 주세요.그러면 railway init 시 추가한 환경 변수가 나올 텐데 그러고 [Add All] 을 선택해 주세요.추가하면 자동으로 다시 디플로이가 시작됩니다.
환경 변수 설정은 다음와 같이 명령어를 실행해도 추가할 수 있습니다.
[web@localhost work]$ railway variables set hoge=hoge fuga=fuga