웹 개발
VPS 처음 세팅할 때 systemd 설정 실수
새 서버에서 서비스를 systemd로 관리할 때 자주 하는 실수들입니다.
새 VPS를 받으면 주요 서비스들을 systemd 서비스로 등록한다. 그런데 설정 한두 가지 빠뜨리면 서버를 재부팅했을 때 서비스가 자동으로 시작 안 된다.
서비스 파일의 필수 항목
systemd 서비스 파일은 보통 /etc/systemd/system/ 디렉토리에 놓인다. 기본 구조는 이렇다.
[Unit]
Description=My Service
After=network.target
[Service]
Type=simple
User=nobody
WorkingDirectory=/opt/myapp
ExecStart=/usr/bin/node app.js
Restart=always
RestartSec=5
[Install]
WantedBy=multi-user.target
가장 흔한 실수는 [Install] 섹션을 빼는 것이다. 이게 없으면 서비스가 등록되지 않는다.
enable과 start의 차이
서비스 파일을 만든 후 반드시 두 명령을 실행해야 한다.
sudo systemctl daemon-reload
sudo systemctl enable myservice
sudo systemctl start myservice
daemon-reload: 새로운 서비스 파일을 systemd에 인식시킨다.enable: 서버 재부팅 시 자동 시작하도록 등록한다.start: 지금 바로 서비스를 시작한다.
enable 없이 start만 하면, 서버를 재부팅했을 때 서비스가 죽어있다.
권한과 작업 디렉토리
서비스가 실행될 때 어떤 사용자로 실행될지, 어느 디렉토리에서 실행될지를 명확히 해야 한다.
[Service]
User=appuser
Group=appuser
WorkingDirectory=/opt/myapp
특히 User 항목을 빼거나 root로 설정하면 보안 문제가 생길 수 있다. 데이터베이스 연결 문제도 생길 수 있다. 파일 권한이 appuser라면, 서비스도 appuser로 실행해야 파일에 접근할 수 있다.
환경변수 설정
애플리케이션이 환경변수를 필요로 한다면, 서비스 파일에서 설정해야 한다.
[Service]
Environment="NODE_ENV=production"
Environment="PORT=3000"
EnvironmentFile=/opt/myapp/.env
.env 파일로 관리하거나, 직접 명시하거나, 두 가지 모두 할 수 있다.
자동 재시작 설정
서비스가 예기치 않게 죽었을 때 자동으로 재시작하도록 설정하는 게 좋다.
[Service]
Restart=always
RestartSec=5
StartLimitInterval=60s
StartLimitBurst=3
Restart=always: 언제나 재시작RestartSec=5: 5초 후 재시작StartLimitInterval: 해당 시간 내에StartLimitBurst: 이 횟수 이상 재시작 실패하면 멈춤
설정하지 않으면 무한 루프에 빠질 수도 있으니 주의.
배포 후 검증
- 서비스 상태 확인 (
systemctl status myservice) - 최근 로그 확인 (
journalctl -u myservice -n 50) - 권한 확인 (파일 소유자와 서비스 실행 사용자 일치)
- 재부팅 후에도 자동 시작되는지 테스트
VPS 세팅은 처음에 한 번 제대로 해두면, 다음 번에는 같은 실수를 하지 않는다.