Post

Pi-Server 구축기 5편: systemctl로 서비스 등록하기

Pi-Server 구축기 5편: systemctl로 서비스 등록하기

⚙️ Pi-Server 구축기 5편: systemctl로 서비스 등록하기

1. 서비스 등록을 하는 이유

현재는 하드웨어적으로 어느 정도 안정성은 확보된 상태다.
하지만 서버라는 건 언제든 죽을 수 있다.
특히 난 군대에 있어서, Pi가 다운되면 직접 손댈 방법이 없다.

그래서 만약 서버가 꺼지거나 문제로 멈추더라도,
재부팅 시 자동으로 서버가 다시 켜지도록 설정해야 했다.
즉, Pi가 스스로 “살아나게” 만들어야 했다.


2. bashrc의 한계

처음엔 Termux 쓸 때처럼 bashrc에 명령어를 넣어두면 알아서 실행될 줄 알았다.
하지만 실제로 테스트해보니 재부팅 시엔 bashrc가 작동하지 않았다.

조금 더 찾아보니 이유는 간단했다.
bashrcbash 인터랙티브 세션이 시작될 때만 트리거된다.
즉, 사용자가 직접 로그인해서 터미널을 여는 순간에만 실행되는 것이다.

“아, 그럼 로그인 없이 자동 실행은 불가능하겠네…”

이때 GPT와 대화하면서 systemctl을 이용한 서비스 등록 방식을 알게 됐고,
그쪽으로 방향을 틀었다.
지금 생각해 보면 당연한 선택이었다.


3. systemctl에서 서비스 등록

3-1. ttyd 서비스 등록

가장 먼저 ttyd를 서비스로 등록했다.
/etc/systemd/system/ttyd.service 경로에 아래 내용을 작성했다.

1
2
3
4
5
6
7
8
9
10
11
12
13
[Unit]
Description=ttyd Web Terminal
After=network.target

[Service]
ExecStart=/home/<REDACTED_USER>/ttyd -p 3000 --check-origin --writable --credential <REDACTED_USER>:<REDACTED_PASS> /usr/bin/bash
WorkingDirectory=/home/<REDACTED_USER>
User=<REDACTED_USER>
Restart=always
RestartSec=5

[Install]
WantedBy=multi-user.target

이 설정의 핵심은 다음과 같다:

  • 재부팅 후 5초 뒤 자동 실행
  • WorkingDirectory: /home/<REDACTED_USER>
  • User: <REDACTED_USER> (root 대신 일반 사용자로 실행)

ttyd 자체 설정은 2편에서 다뤘으니 생략한다.


3-2. Cloudflare Tunnel 서비스 등록

다음으로 Cloudflare Tunnel을 서비스로 등록했다.
/etc/systemd/system/cloudflared.service 파일을 만들어 아래 내용을 추가했다.

1
2
3
4
5
6
7
8
9
10
11
12
[Unit]
Description=Cloudflare Tunnel
After=network.target

[Service]
ExecStart=/usr/local/bin/cloudflared tunnel run <ENDPOINT>
User=<REDACTED_USER>
Restart=always
RestartSec=5

[Install]
WantedBy=multi-user.target

여기서 중요한 건 ExecStart에 지정된 터널 이름이다.
4편에서 설정했던 **** 을 그대로 사용했다.

마찬가지로 이 서비스도 재부팅 후 5초 뒤 자동 실행되도록 설정했다.


4. systemd 활성화 및 재부팅 설정

모든 서비스 파일을 만든 뒤에는 systemd에 변경사항을 반영해야 한다.

1
2
3
4
5
sudo systemctl daemon-reload
sudo systemctl enable cloudflared
sudo systemctl enable ttyd
sudo systemctl start cloudflared
sudo systemctl start ttyd

정상적으로 작동 중인지 확인하려면 다음 명령으로 상태를 보면 된다.

1
2
sudo systemctl status ttyd
sudo systemctl status cloudflared

이제 라즈베리가 재부팅돼도 두 서비스가 자동으로 실행된다.
군대에 있든, 전원 꺼졌다 켜지든 — Pi는 스스로 복구된다.


5. 마무리

이번 편에서는 systemctl을 활용한 서비스 자동 실행 설정을 다뤘다.
이제 내 Pi 서버는 진정한 의미의 “자율 서버”가 되었다.

다음 편에서는 Zero Trust 인증을 적용해 실제 접근 제어를 완성한다.
GitHub 계정 기반 로그인과 Access Policy 설정을 통해 완전한 보안을 구축할 예정이다.


← 이전 글: Pi-Server 구축기 4편: 도메인 구매와 DNS 설정
→ 다음 글: Pi-Server 구축기 6편: Zero Trust로 보안 설정하기

This post is licensed under CC BY 4.0 by the author.