← 전체 글로 돌아가기

서버 운영

서버 배포 전 점검 체크리스트

배포 환경이 로컬과 다르다는 것을 알고 있어도, 그냥 push 버튼을 누르고 나면 문제가 생긴다. 배포 직전에 확인해야 할 것들을 정리했다.

배포는 순간의 실수로 서비스를 중단시킬 수 있다. 특히 혼자 운영하는 서버라면 더욱 조심스럽다.

환경 변수 확인

# 배포 환경의 .env 파일 확인
cat .env.production

# 필수 변수가 모두 있는지
echo $DATABASE_URL
echo $API_KEY
echo $SECRET_TOKEN

환경 변수가 하나라도 빠지면, 애플리케이션이 시작조차 하지 못한다.

포트와 네트워크 설정

# 리버스 프록시(nginx, Traefik)가 올바른 백엔드 포트를 가리키는지
grep -r "upstream\|backend\|target" /etc/nginx/

# 또는 Dokploy를 사용한다면
docker inspect dokploy-traefik

포트 번호가 하나 틀려도 서비스가 닿지 않는다.

데이터베이스 연결

# 배포 환경에서 DB에 접속할 수 있는지
# PostgreSQL
psql $DATABASE_URL -c "SELECT 1;"

# MySQL
mysql -u$DB_USER -p$DB_PASS -h$DB_HOST -e "SELECT 1;"

타임아웃이 나거나 "permission denied"가 나면, DB 권한이나 네트워크 설정을 확인해야 한다.

디스크 공간 확인

df -h

# 특히 /home이나 /var 파티션이 꽉 찼는지
du -sh /var/lib/docker/*

디스크가 꽉 차면, 로그도 쓸 수 없고 앱도 시작 못한다.

메모리와 CPU

free -h
top -bn1 | head -20

메모리가 부족하거나 CPU가 이미 높다면, 배포 중 서비스가 중단될 수 있다.

백업 확인

# 최근 백업이 성공했는지
ls -lh /backup/
date

배포 중 문제가 생겨서 롤백해야 할 때, 백업이 없으면 복구가 불가능하다.

현재 실행 중인 서비스 상태

# Docker Swarm이라면
docker service ls
docker service ps <service_name>

# 또는 systemd라면
sudo systemctl status <service>

# 또는 process 직접 확인
ps aux | grep node

이미 떠 있는 서비스가 있는 상태에서 새로 배포하면, 충돌이 날 수 있다.

배포 스크립트 검증

# 배포 명령이 정말 원하는 대로 동작하는지 dry-run
# Dokploy를 사용한다면
# 웹 UI에서 "Deploy" 전에 "Redeploy" 버튼으로 기존 버전 재배포

# Docker Compose라면
docker-compose -f docker-compose.prod.yml config

배포 설정 파일의 문법 오류가 없는지 미리 검증한다.

로그 출력 설정

# 배포 후 로그를 볼 수 있도록
sudo journalctl -u docker -f
# 또는
docker logs -f <container_id>

배포 직후 로그를 모니터링하면, 문제를 빠르게 발견할 수 있다.

롤백 계획

배포 전에 이전 버전으로 돌아가는 방법을 알아둔다.

# Docker 이미지 태그
docker tag myapp:latest myapp:backup-$(date +%Y%m%d)
docker push myapp:backup-$(date +%Y%m%d)

# 문제가 생기면
docker service update --image myapp:backup-20260601 myapp-prod

또는 git에서:

# 현재 커밋 기록
git log -1 --oneline

# 문제가 생기면
git checkout <이전_커밋>