팀 내 신규 프로젝트 관련 기술의 Demo 시연을 위해 오픈소스 애플리케이션을 받아와서 docker로 배포하려고 하는데, 볼륨이 좀 크다보니 로컬에서 그대로 올리긴 좀 부담이 됐다.
그래서 개인 사이드 프로젝트용으로 쓰던 홈서버에 올리고 임시로 팀원 계정을 등록해서 ssh 접속을 열어주려고 하는데, 나는 private key를 활용한 접속을 구현해놨고 그럼 팀원에게 private key를 공유해서 접속을 열어줘야 한다. 지금 데탑, 맥북 다 쓰는데 매번 private key로 접속하기도 귀찮고, 사이드플젝 같이 하는 팀원도 있고 해서 그냥 cloudflare로 무료 도메인 쓰기로 했다.
cloudflare 설치
•
cloudflare 설치
curl -L https://github.com/cloudflare/cloudflared/releases/latest/download/cloudflared-linux-amd64.deb -o cloudflared.deb
sudo dpkg -i cloudflared.deb
Shell
복사
•
임시 tunnel 실행
cloudflared tunnel --url http://localhost:3000
Shell
복사
이때 Your quick Tunnel has been created! Visit it at... 하위에 나오는 url로 접속하면 된다.
그런데, 해당 url로 접속하니까 이런 오류가 떴다.
Blocked request. This host ("monroe-sally-eagles-houston.trycloudflare.com") is not allowed. To allow this host, add "monroe-sally-eagles-houston.trycloudflare.com" to server.allowedHosts in vite.config.js.
긍까 vite로 빌드된 파일인데, vite.config.js에서 allowedHosts가 막힌다는거라, "all"로 바꿔주면 된다.
sed -i 's/server: {/server: {\n allowedHosts: "all",/' frontend/vite.config.js
근데 그러려면 docker-compose.yml에서 기존 이미지를 불러오는게 아니라 빌드까지 따로 실행해야 하니까,
sed -i 's|image: ghcr.io/666ghj/mirofish:latest|build: .|' docker-compose.yml 이 코드도 추가해준다. (좀 무거운거 같으면 해당파일만 마운트 해서 덮어씌워도 됨)
그러고 빌드 했는데, 또 똑같은 오류 떠서 이번엔 --host 옵션을 바꿔서 보내보기로 했다.
cloudflared tunnel --url http://localhost:3000 --http-host-header localhost
이렇게 설정해주면 기존에는 터널 도메인을 host에 그대로 담아서 전달했지만, localhost로 지정해서 보내면 Vite 입장에서는 그냥 로컬 요청처럼 인식해서 오류 없이 통과된다. 원래 allowdHosts all 설정하면 되는게 맞는데, 버전 관련 오류인거 같다.
그리고 기존에 도메인을 하나 사둔게 있는데, cloudflare로 네임스페이스를 바꾸고 고정 url을 등록할 수도 있다. 매번 터널을 열기는 귀찮기도 하고, 혹여나 프로세스가 종료되면 또 바뀐 url을 전달해줘야 하는 불편함이 생기기 때문.
우선 도메인을 구입한 gabia에서 namespace 정보를 cloudflared에서 받은걸로 수정해줘야한다.
포 아둔
# 1. cloudflare 로그인
cloudflared tunnel login
# 2. 터널 생성
cloudflared tunnel create {터널 이름}
Shell
복사
터널을 생성하고, cloudflared tunnel route dns {터널 이름} {서브 도메인}.{루트 도메인} 이렇게 DNS를 라우팅해주면 된다.
다음은 cloudflare config 파일을 생성한다. ~/.cloudflared/config.yml
tunnel: {터널 ID}
credentials-file: /home/ooni/.cloudflared/{터널 ID}.json
ingress:
- hostname: {서브 도메인}.protoss.site
service: http://localhost:3000
originRequest:
httpHostHeader: localhost
- service: http_status:404
Shell
복사
이후 시스템 서비스 등록 + 실행을 해준다.
sudo cloudflaredserviceinstall
sudo systemctl start cloudflared
Bash
복사
근데 이렇게 sudo를 쓰면, root 경로에 config를 생성한게 아니라서 Cannot determine default configuration path. 가 뜬다. 때문에 cp 명령어로 /etc/cloudflared/ 하위에 ~/.cloudflared/ 하위의 파일을 모두 복사해준다.
config에서 credentials-file 경로도 맞춰야한다.
sudo sed -i 's|/home/ooni/.cloudflared/|/etc/cloudflared/|' /etc/cloudflared/config.yml
Shell
복사
이후 재실행.





