파이썬 VPS 배포 입문 - 디스코드 봇·자동화 스크립트 24시간 돌리기 (Ubuntu + systemd) 🚀
목차11개 항목
안녕하세요! Mojangcam입니다 😎
"내 컴퓨터를 껐더니 디스코드 봇도 같이 죽었어요…" 혹시 이런 경험 있으신가요? 봇이나 자동화 스크립트는 24시간 켜져 있어야 제 역할을 하는데, 내 PC로는 아무래도 한계가 있죠.
그래서 이번 편에서는 파이썬 프로그램을 VPS(가상 서버)에 올려 24시간 자동으로 돌리는 방법을 처음부터 끝까지 정리했어요. Ubuntu 서버 접속 → 파이썬 설치 → 코드 올리기 → systemd로 자동 실행·자동 재시작까지, 복붙만 하면 되도록 준비했습니다.
예전에 디스코드 봇 24시간 무료 호스팅 총정리 글에서 무료 호스팅을 다뤘는데요, 무료 서비스는 잠들거나(sleep) 리소스 제한이 있어서 봇이 자꾸 끊기곤 해요. "제대로, 안정적으로 24시간" 돌리고 싶다면 결국 VPS가 정답입니다.
🧠 VPS가 뭐예요? (개념부터)
- VPS(Virtual Private Server) : 클라우드에 있는 "내 전용 리눅스 컴퓨터"예요. 한 번 켜두면 내 PC를 꺼도 계속 돌아갑니다.
- 왜 필요? : 디스코드 봇, 크롤링·자동화 스크립트처럼 항상 켜져 있어야 하는 프로그램에 딱이에요.
- 비용 : 봇 1~2개나 가벼운 자동화라면 보통 월 3~7달러대 저사양으로 충분해요.
- 대표 서비스 : Vultr, DigitalOcean, AWS Lightsail, 오라클 클라우드(무료 티어) 등.

📌 준비물
- VPS 1대 : Ubuntu 24.04 LTS 추천 (대부분의 VPS가 기본 제공 / 최신은 26.04 LTS도 가능)
- SSH 접속 정보 : 서버 IP, 계정(root 또는 ubuntu), 비밀번호 또는 SSH 키
- 배포할 파이썬 코드 : 예제는 디스코드 봇이지만, 크롤러·자동화 스크립트도 방법은 똑같아요
- 로컬 터미널 : 윈도우는 PowerShell·Windows Terminal, macOS·리눅스는 기본 터미널
- 버전 기준 : Ubuntu 24.04 LTS(파이썬 3.12 기본 내장) / discord.py 2.x / Python 3.8+
📌 1단계 - SSH로 서버 접속하기 🛠️
# 내 PC 터미널에서 실행 (ubuntu 계정 예시)
ssh ubuntu@서버IP주소하나씩 뜯어볼게요 💡
- ssh : 원격 서버에 안전하게 접속하는 명령어예요.
- ubuntu : 서버 계정 이름. 서비스에 따라 root일 수도 있어요.
- 서버IP주소 : VPS 발급 시 받은 공인 IP (예: 123.45.67.89).
처음 접속하면 "정말 접속할래?"라고 묻는데, yes를 입력하면 돼요.
📌 2단계 - 파이썬·가상환경 준비하기 🛠️
Ubuntu 24.04에는 파이썬 3.12가 기본 내장돼 있어요. 다만 시스템 파이썬에 pip를 바로 설치하면 막혀요(externally-managed-environment 에러). 그래서 가상환경(venv)을 꼭 씁니다.
# 패키지 목록 최신화 + venv/pip 설치
sudo apt update
sudo apt install -y python3-venv python3-pip git
# 파이썬 버전 확인
python3 --version # Python 3.12.x📌 3단계 - 코드 올리고 실행 준비하기 🛠️
코드를 서버로 옮기는 방법은 두 가지예요.
방법 A) 깃허브에서 clone (추천)
git clone https://github.com/내계정/my-bot.git
cd my-bot방법 B) 내 PC에서 직접 업로드 (scp)
# 내 PC 터미널에서 실행
scp -r ./my-bot ubuntu@서버IP:/home/ubuntu/이제 서버 안에서 가상환경을 만들고 라이브러리를 설치해요.
cd /home/ubuntu/my-bot
python3 -m venv venv # venv 폴더 생성
source venv/bin/activate # 가상환경 켜기 (프롬프트 앞에 (venv) 표시)
pip install -r requirements.txt # 필요한 라이브러리 설치
# requirements.txt가 없다면: pip install discord.py하나씩 뜯어볼게요 💡
- python3 -m venv venv : 프로젝트 전용 파이썬 공간을 만들어요. 시스템과 분리돼서 충돌이 없어요.
- source venv/bin/activate : 그 공간을 활성화해요. 끌 때는 deactivate.
- requirements.txt : 필요한 라이브러리 목록 파일.
pip freeze > requirements.txt로 만들 수 있어요.
여기서 한 번 직접 실행해 잘 되는지 확인해요.
python bot.py # Ctrl+C로 멈춤📌 4단계 - systemd로 24시간 자동 실행 🧩
터미널을 닫으면 프로그램도 꺼져버려요. 그래서 systemd 서비스로 등록해 백그라운드에서 계속 돌게 만듭니다. 서버가 재부팅돼도 자동으로 다시 켜지고, 프로그램이 죽으면 자동 재시작까지 해줘요.
서비스 파일을 만들어요.
sudo nano /etc/systemd/system/mybot.service아래 내용을 붙여넣어요.
[Unit]
Description=My Python Bot
After=network.target
[Service]
Type=simple
User=ubuntu
WorkingDirectory=/home/ubuntu/my-bot
ExecStart=/home/ubuntu/my-bot/venv/bin/python /home/ubuntu/my-bot/bot.py
Restart=always
RestartSec=5
[Install]
WantedBy=multi-user.target하나씩 뜯어볼게요 💡
- After=network.target : 네트워크가 준비된 뒤 실행해요 (봇은 인터넷이 필요하니까요).
- User : 실행 계정. root 대신 일반 계정을 권장해요.
- WorkingDirectory : 코드가 있는 폴더. 상대경로 파일 접근에 필요해요.
- ExecStart : ⭐가장 중요! 가상환경 안 파이썬(
venv/bin/python)으로 실행해야 라이브러리를 찾아요. 반드시 절대경로로 적어요. - Restart=always : 프로그램이 꺼지면 자동으로 다시 켜줘요.
- RestartSec=5 : 5초 뒤 재시작.
등록하고 켜볼게요.
sudo systemctl daemon-reload # 서비스 파일 반영
sudo systemctl enable --now mybot # 부팅 시 자동시작 + 지금 바로 시작
sudo systemctl status mybot # 상태 확인 (active (running) 이면 성공!)📌 전체 설정 (복붙 OK)
# ── Ubuntu 24.04 LTS 기준 / Python 3.12 / discord.py 2.x ──
# 1) 서버 접속 (내 PC에서)
ssh ubuntu@서버IP
# 2) 파이썬 도구 설치
sudo apt update
sudo apt install -y python3-venv python3-pip git
# 3) 코드 가져오기
git clone https://github.com/내계정/my-bot.git
cd my-bot
# 4) 가상환경 + 라이브러리
python3 -m venv venv
source venv/bin/activate
pip install -r requirements.txt # 없으면: pip install discord.py
# 5) systemd 서비스 등록
sudo nano /etc/systemd/system/mybot.service # 아래 유닛 내용 붙여넣기
sudo systemctl daemon-reload
sudo systemctl enable --now mybot
sudo systemctl status mybot유닛 파일 (/etc/systemd/system/mybot.service)
[Unit]
Description=My Python Bot
After=network.target
[Service]
Type=simple
User=ubuntu
WorkingDirectory=/home/ubuntu/my-bot
ExecStart=/home/ubuntu/my-bot/venv/bin/python /home/ubuntu/my-bot/bot.py
Restart=always
RestartSec=5
[Install]
WantedBy=multi-user.target배포 테스트용 최소 예제 (bot.py) — 봇 토큰만 넣으면 돌아가요.
# bot.py (discord.py 2.x / Python 3.8+)
import discord
intents = discord.Intents.default()
intents.message_content = True
client = discord.Client(intents=intents)
@client.event
async def on_ready():
print(f"{client.user} 접속 완료! 24시간 대기 중...")
@client.event
async def on_message(message):
if message.author == client.user:
return
if message.content == "!핑":
await message.channel.send("퐁! 🏓 (VPS에서 응답 중)")
client.run("여기에_봇_토큰")📌 실행 결과
sudo systemctl status mybot을 치면 초록색 active (running) 글자가 보여요. 이제 내 PC를 꺼도, SSH를 종료해도 봇은 서버에서 계속 돌아갑니다! 디스코드에서 !핑을 쳤을 때 퐁!이 오면 성공이에요.
로그(print 출력·에러)는 이렇게 실시간으로 볼 수 있어요.
journalctl -u mybot -f # 실시간 로그 (Ctrl+C로 종료)
📌 자주 나는 에러
- error: externally-managed-environment
- 원인 : 시스템 파이썬에 pip로 바로 설치하려 해서 (Ubuntu 24.04부터 기본 차단).
- 해결 : 위처럼 venv 가상환경을 만들고 그 안에서 pip 설치하세요. (급하면
pip install --break-system-packages도 있지만 권장하지 않아요.)
- ModuleNotFoundError: No module named 'discord' (서비스로 돌릴 때만 발생)
- 원인 : systemd가 시스템 파이썬으로 실행해서 가상환경 라이브러리를 못 찾음.
- 해결 : 유닛의 ExecStart를
venv/bin/python절대경로로 지정했는지 확인하세요.
- status는 active인데 봇이 응답이 없음
- 원인 : 디스코드 인텐트(intents) 미설정 또는 토큰 오류.
- 해결 : 개발자 포털에서 Message Content Intent를 켜고 토큰을 다시 확인하세요.
- Job for mybot.service failed
- 원인 : 유닛 파일의 경로·오타.
- 해결 :
journalctl -u mybot -n 30으로 마지막 로그를 보고 경로/파일명을 점검하세요.
💡 보너스 팁
- 토큰 같은 비밀값은 코드에 직접 쓰지 말고 환경변수나 .env 파일로 빼세요 (보안).
- 서비스 수정 후에는 항상
sudo systemctl daemon-reload→sudo systemctl restart mybot순서로 반영해요. - 봇만 돌린다면 방화벽(ufw) 포트를 따로 열 필요 없어요 (봇은 아웃바운드 연결이라서요).
📌 마무리
오늘은 파이썬 프로그램을 VPS에 올려 24시간 돌리는 법을 배웠어요. 핵심은 딱 세 가지! ① venv로 라이브러리 격리, ② systemd로 자동 실행·재시작, ③ journalctl로 로그 확인이에요. 이제 내 봇과 자동화 스크립트를 진짜 "서버급"으로 운영할 수 있어요 🙌
다음 편에서는 환경변수(.env)로 토큰 안전하게 관리하기와 깃(Git)으로 서버에 업데이트 배포하기를 다뤄볼게요. 기대해주세요!
관련 글도 함께 보면 좋아요 👇
- 디스코드 봇 24시간 무료 호스팅 총정리 (2026)
- 디스코드 봇 오류 해결 총정리 (intents·token 에러)
- 파이썬 가상환경(venv) 완벽 정리
