환경

해당 블로그는 cloudflared에 로그인을 이미 했으며, config.yml파일을 통해서 환경 설정까지 다 끝난 상태를 즉 cloudflared start <tunnel name>이 아닌 systemctl로 백그라운드 모드에서 실행할 수 있는 상태를 만들고 싶은 분들을 위한 글입니다.

cloudflared systemctl 설정 방법

1. cloudflared systemctl 설치

sudo cloudflared service install

위 명령어를 쳐서 cloudflared service install을 진행하면 됩니다.

오류 상황 2. sudo cloudflared service install 실행 시 config.yml을 찾지 못하는 경우

위와 같이 config.yml 파일을 찾지 못하는 문제가 있었습니다.

Cannot determine default configuration path. No file [config.yml config.yaml] in 
[~/.cloudflared ~/.cloudflare-warp ~/cloudflare-warp /etc/cloudflared /usr/local/etc/cloudflared]

원인

sudo로 실행하면 root 계정 기준으로 ~를 해석하기 때문에 /root/.cloudflared를 탐색합니다. 일반 유저 홈(/home/username/.cloudflared)에 config.yml이 있어도 찾지 못합니다.

해결 방법

config.yml과 credentials 파일을 /etc/cloudflared/로 복사하고, credentials-file 경로를 절대경로로 수정합니다.

sudo mkdir -p /etc/cloudflared
sudo cp ~/.cloudflared/config.yml /etc/cloudflared/config.yml
sudo cp ~/.cloudflared/<터널ID>.json /etc/cloudflared/

/etc/cloudflared/config.yml을 열어 credentials-file 경로를 절대경로로 변경합니다:

tunnel: <터널ID>
credentials-file: /etc/cloudflared/<터널ID>.json
 
ingress:
  - hostname: example.haeyul.cloud
    service: http://localhost:8080
  - service: http_status:404

이후 다시 서비스를 설치하면 정상적으로 동작합니다:

sudo cloudflared service install
sudo systemctl enable cloudflared
sudo systemctl start cloudflared
sudo systemctl status cloudflared