x4gKing/3x-ui
Dockerfile0 / 0
nginx 프록시로 Railway 단일 포트에서 3x-ui 패널과 WebSocket Inbound를 함께 노출
TL;DR
Railway가 하나의 포트만 공개하는 제약을 해결하기 위해 3x-ui와 nginx를 함께 컨테이너로 묶어 단일 포트로 웹 패널과 VLESS/WebSocket inbound를 동시에 서비스합니다. 배포 방법은 GitHub 리포지토리에 Dockerfile, nginx.conf.template, start.sh 세 파일을 넣고 Railway에서 Deploy from GitHub을 선택하면 되며 nginx는 환경변수 $PORT에서 직접 수신합니다. Inbound는 Listen Port를 8080으로 맞추고 Network을 ws로 설정하며, 포트를 변경할 때는 nginx.conf.template의 내부 주소를 함께 수정해야 연결이 유지됩니다. /etc/x-ui 경로는 컨테이너 내 임시 저장소이므로 설정 보존이 필요하면 Railway Volume을 /etc/x-ui에 연결해야 합니다.
핵심 포인트
- 이 레포지토리는 Railway 호스팅 환경을 겨냥한 Docker 배포 템플릿으로, 3x-ui와 nginx reverse proxy를 결합해 단일 공개 포트로 웹 패널과 VLESS/WebSocket inbound를 동시에 노출하도록 구성되어 있습니다. 구현 방식은 레포지토리 루트의 세 파일(Dockerfile, nginx.conf.template, start.sh)이 컨테이너 이미지를 만들고 nginx가 Railway가 제공한 환경변수 $PORT에서 수신한 요청을 내부의 3x-ui/Xray 서비스로 프록시하는 방식입니다. Railway가 Public Domain에서 하나의 내부 포트만 라우팅하는 제약을 해결하려는 목적이므로 Railway에 배포하려는 개발자에게 바로 적용할 수 있는 구조를 제공합니다.
- 배포 절차는 간단히 GitHub에 빈 리포지토리를 만들고 세 파일을 넣은 뒤 Railway에서 Deploy from GitHub으로 연결하면 됩니다. Railway는 Dockerfile을 자동으로 감지해 이미지를 빌드하고, 배포 후 Settings → Networking에서 Generate Domain을 눌러 도메인을 발급하면 nginx가 해당 $PORT에서 직접 수신하므로 별도 Target Port 설정이 필요하지 않습니다. 패널 접속 경로는 /managepanel/이며 초기 계정은 admin/admin이기 때문에 첫 접속 후 즉시 비밀번호를 변경해야 합니다.
- Inbound 설정은 정확한 값들이 중요하며, 레포지토리 지침에 따르면 Protocol은 VLESS, Listen Port는 반드시 8080으로 설정하고 Network은 ws, Security는 none, Path는 예시로 /cdn을 사용합니다. 내부에서 Listen Port를 8080이 아닌 다른 값으로 바꿀 경우 nginx.conf.template의 프록시 대상 127.0.0.1:8080을 동일하게 수정한 뒤 다시 푸시/재배포해야 통신 경로가 일치합니다. 여러 Inbound를 운영할 때는 모두 내부 포트 8080(또는 nginx에 맞춘 동일 포트)을 사용하고 서로 다른 WS path로 구분하면 작동합니다.
- 컨테이너 파일시스템의 /etc/x-ui 경로가 임시 저장소이므로 Redeploy 시 설정이 사라질 수 있습니다. 지속성을 원하면 Railway의 Volumes 기능으로 호스트 볼륨을 /etc/x-ui에 연결해 사용자와 Inbound 설정을 보존해야 합니다. 동작 확인은 브라우저에서 /cdn을 열어 "Bad Request" 응답이 나오면 Xray로 요청이 전달된 것이고, /managepanel/이 정상 응답하면 nginx 프록시 경로가 올바르게 구성된 것으로 판단할 수 있습니다.
2.4k
Stars
4.9k
Forks
+240
Trending
0
조회수
2.4k watchers26 open issues
관련 토론
아직 관련 토론이 없습니다.
댓글
댓글을 작성하려면 로그인이 필요합니다.