# VPS에 Telegram 봇 빠르게 배포하기: 로컬 실행에서 24/7 가동까지
Telegram 봇 개발을 마쳤지만, 로컬에서 실행하면 상시 가용성을 보장할 수 없습니다. 대부분의 개발자들이 Docker와 Kubernetes에 대한 끝없는 정보에 압도되어 프로덕션 배포에 어려움을 겪습니다. 실제로는 최소 자원으로 단 8분 만에 배포할 수 있습니다. 이 가이드는 복잡한 설정 없이 저렴한 VPS에 aiogram 봇을 기본 Linux 도구만 사용해 배포하는 방법을 보여줍니다.
인프라 준비
클라우드 제공자 선택은 안정적인 봇 운영에 핵심입니다. Timeweb Cloud는 러시아 외 12개 지리적 지역의 서버에 접근할 수 있습니다. 이는 RF(러시아)에서 차단된 API(Groq, ChatGPT 등 AI 서비스)를 사용하기 위해 필수적입니다. 외부 종속성이 없는 봇이라면 러시아 데이터 센터도 충분합니다.
주요 서버 사양:
- OS: Ubuntu 24.04 LTS
- 구성: 최소 (1 vCPU, 1 GB RAM, 25 GB SSD)
- 비용: 290₽/월부터
- 백업: 활성화 권장
인스턴스 생성 시 백업 섹션을 확인하세요. 백업은 다음을 보호합니다:
- 서버 충돌
- SQLite 데이터베이스 손상
- 코드 업데이트 오류
- 실수로 파일 삭제
Timeweb의 백업 시스템은 지난 7일간 24시간 간격으로 프로젝트 상태를 복원할 수 있게 해줍니다. 이는 새 기능을 테스트할 때 데이터 손실을 막는 데 중요합니다.
서버 환경 설정
서버 활성화 후 SSH로 연결하세요:
ssh root@your_IP_address
시스템 패키지 업데이트와 필수 구성 요소 설치:
sudo apt update && sudo apt upgrade -y
sudo apt install python3 python3-pip git -y
npm install pm2 -g
중요: 종속성 설치 전 Python 버전 확인:
python3 --version
가상 환경을 사용하는 프로젝트라면:
python3 -m venv venv
source venv/bin/activate
pip install -r requirements.txt
프로젝트 전송 및 실행
SFTP로 파일 전송. FileZilla에서 입력:
- Host: 서버 IP 주소
- Login: root
- Password: 제어판에서
- Port: 22
프로젝트를 서버에 복사한 후:
- 프로젝트 디렉터리로 이동
- 가상 환경 활성화
- 종속성 설치
- PM2로 봇 실행
cd /root/your_project
source venv/bin/activate
pm2 start main.py --name "telegram-bot"
PM2는 재부팅 후 자동 재시작을 보장하고 충돌을 모니터링합니다. 프로세스 상태 확인:
pm2 status
유지보수 및 업데이트
코드 변경 시 다음 엄격한 체크리스트를 따르세요:
- SFTP(FileZilla → 보기/편집)로 파일 수정
- 변경 저장(Ctrl+S)
- FileZilla에서 동기화 확인
- PM2에서 프로세스 재시작
pm2 restart telegram-bot
문제 해결 시:
pm2 logs— 실시간 로그 보기pm2 monit— 자원 모니터링pm2 resurrect— 충돌 후 복구
주요 포인트
- 토큰은 항상 .env에 저장
- 24시간마다 자동 백업 설정
- 업데이트는 격리된 브랜치에서 테스트
- htop으로 메모리 사용량 모니터링
- 시스템 패키지 정기 업데이트
성능 최적화
고부하 봇(활성 사용자 1000명 초과)에 권장 단계:
- 스왑 파일 설정
sudo fallocate -l 2G /swapfile
sudo chmod 600 /swapfile
sudo mkswap /swapfile
sudo swapon /swapfile
- PM2 자원 제한
ecosystem.config.js에서:
module.exports = {
apps: [{
name: 'telegram-bot',
script: 'main.py',
instances: 1,
autorestart: true,
max_memory_restart: '300M'
}]
}
- 방화벽 설정
sudo ufw allow OpenSSH
sudo ufw allow 22/tcp
sudo ufw enable
초보자 실수: 데몬화 없이 봇 실행. SSH 세션 종료 시 프로세스 종료. PM2가 해결하지만 올바른 자동 시작 설정 필요:
pm2 startup
sudo env PATH=$PATH:/usr/bin pm2 startup systemd -u root --hp /root
가용성 모니터링을 위해 봇 코드에 간단한 헬스체크 엔드포인트 추가:
from aiogram import Router
router = Router()
@router.message(Command('health'))
async def health_check(message: Message):
await message.answer('Bot is running')
Telegram API 연결 오류 로그를 정기 확인. 일반 문제:
- .env의 잘못된 토큰
- IP 주소 차단
- 속도 제한 초과
- 웹훅 처리 오류
웹훅 사용 시 Nginx를 리버스 프록시로 설정하고 SSL 인증서 적용. 저부하 봇은 폴링 모드로 충분하며 추가 인프라 불필요.
— Editorial Team
아직 댓글이 없습니다.