← 전체 글로 돌아가기

웹 개발

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: 이 횟수 이상 재시작 실패하면 멈춤

설정하지 않으면 무한 루프에 빠질 수도 있으니 주의.

배포 후 검증

  1. 서비스 상태 확인 (systemctl status myservice)
  2. 최근 로그 확인 (journalctl -u myservice -n 50)
  3. 권한 확인 (파일 소유자와 서비스 실행 사용자 일치)
  4. 재부팅 후에도 자동 시작되는지 테스트

VPS 세팅은 처음에 한 번 제대로 해두면, 다음 번에는 같은 실수를 하지 않는다.