대시보드 상세 기능
포트 포워딩 및 도메인 연동
봇 컨테이너 내부에 Express나 FastAPI 웹 서버를 구동하고 외부 포트 바인딩 및 서브도메인 역프록시를 연동하는 방법을 다룹니다.
디스호스트 컨테이너는 백그라운드 봇 구동뿐만 아니라, 외부 HTTP 웹 요청을 수신하는 포트 바인딩 및 서브도메인 역프록시(Reverse Proxy) 시스템을 지원합니다. 이를 통해 웹 대시보드를 띄우거나 외부 결제/알림 웹훅을 수신할 수 있습니다.
경고
무료 플랜 미지원 기본 무료 슬롯에서는 외부 접속(포트 포워딩 및 도메인 연동) 기능을 지원하지 않습니다. 외부 웹 서버 연결이나 웹훅 수신을 위해 본 기능을 사용하려면 플랜 업그레이드가 필요합니다.
1. 포트 포워딩 동작 원리
컨테이너 환경은 내부 사설 네트워크를 사용하므로 외부 인터넷에서 컨테이너 내부 포트로 직접 접근할 수 없습니다. 대신 디스호스트 프록시 라우터가 외부 포트와 컨테이너 내부 포트를 연결해 줍니다.
- 할당 포트 확인: 봇 관리 대시보드의 네트워크/포트 메뉴에서 외부 포트(External Port)와 내부 매핑 포트(Internal Port) 번호를 확인할 수 있습니다.
- HTTPS 자동 적용: 외부에서 서브도메인 주소로 접근할 때 프록시 서버 단에서 SSL 인증서가 자동으로 처리되므로, 코드 안에 별도로 인증서를 설정할 필요 없이
https://보안 통신을 사용할 수 있습니다.
2. Node.js (Express) 웹 서버 예제
Node.js 환경에서 Express를 사용해 내부 포트(환경 변수 SERVER_PORT)로 요청을 수신하는 기본 예제입니다.
const express = require('express');
const app = express();
// 디스호스트 컨테이너가 제공하는 내부 포트 환경 변수를 우선 사용합니다.
const PORT = process.env.SERVER_PORT || 8080;
app.use(express.json());
app.get('/', (req, res) => {
res.send('DisHost Web Server is Running!');
});
// 외부 웹훅 수신 경로
app.post('/webhook', (req, res) => {
console.log('Log: 웹훅 수신 데이터:', req.body);
res.status(200).json({ status: 'success' });
});
app.listen(PORT, '0.0.0.0', () => {
console.log(`Log: 웹 서버가 포트 ${PORT}에서 시작되었습니다.`);
});3. Python (FastAPI) 웹 서버 예제
Python 환경에서 uvicorn과 FastAPI를 연동하는 예제입니다.
import os
from fastapi import FastAPI
import uvicorn
app = FastAPI()
@app.get("/")
def read_root():
return {"message": "DisHost FastAPI Server is Running!"}
if __name__ == "__main__":
# 시스템 환경 변수 SERVER_PORT를 불러오고 없으면 8000을 사용합니다.
port = int(os.getenv("SERVER_PORT", 8000))
# 외부 프록시 라우터 접속을 허용하려면 반드시 '0.0.0.0'으로 바인딩해야 합니다.
uvicorn.run(app, host="0.0.0.0", port=port)4. 접속 문제 해결 체크리스트
- Host 바인딩 주소 (
0.0.0.0): 웹 서버를 띄울 때 호스트 주소를localhost나127.0.0.1로 지정하면 컨테이너 외부 프록시 라우터가 요청을 전달하지 못해 502 Bad Gateway 에러가 발생합니다. 반드시0.0.0.0으로 바인딩해야 합니다. - 포트 번호 일치: 코드에서 수신 대기 중인 포트 번호가 대시보드 네트워크 메뉴에 지정된 내부 포트(Internal Port)와 정확히 일치하는지 확인해 주세요.