대시보드 상세 기능

포트 포워딩 및 도메인 연동

봇 컨테이너 내부에 Express, FastAPI 웹 서버를 구동하고 외부 포트 바인딩 및 SSL 적용 서브도메인을 할당받아 웹훅을 처리하는 기법을 다룹니다.

디스호스트 컨테이너는 단순히 백그라운드 디스코드 봇 프로세스 가동에 머무르지 않고, 외부로부터 HTTP 웹 요청을 수신하는 포트 바인딩 및 서브도메인 역프록시(Reverse Proxy) 시스템을 지원합니다. 이를 통해 웹 대시보드 구축이나 외부 서비스 결제 웹훅(Webhook) 수신 채널을 가동할 수 있습니다.

경고

무료 플랜 미지원 기본 무료 슬롯에서는 외부 접속(포트 포워딩 및 도메인 연동) 기능을 지원하지 않습니다. 외부 웹 서버 연결이나 웹훅 수신을 위해 본 기능을 사용하려면 업그레이드가 필요합니다.


1. 포트 포워딩 동작 아키텍처

컨테이너 환경은 고유한 내부 사설 IP만을 가집니다. 따라서 외부 인터넷에서 직접 컨테이너의 특정 포트로 접근할 수 없으므로 디스호스트 라우터 프록시가 포트를 연동해 줍니다.

  • 할당 포트 확인: 봇 관리 대시보드의 네트워크/포트 설정을 확인하면 외부 포트(External Port)와 내부 매핑 포트(Internal Port) 주소가 지정되어 있습니다.
  • 역프록시 SSL (HTTPS) 지원: 외부에서 접속할 때는 안전한 암호화 채널인 https:// 프로토콜로 주소가 자동 연결되며, 포트 프록시 서버 단에서 SSL 인증서를 자동 파싱해 주므로 코드 내에 별도로 SSL 인증서를 심을 필요가 없습니다.

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) 웹 서버 소스 구현

파이썬의 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))
    # 외부 접속 허용을 위해 host 주소는 반드시 '0.0.0.0'이어야 작동합니다.
    uvicorn.run(app, host="0.0.0.0", port=port)

4. 접속 문제 해결 체크리스트

  • Host 바인딩 주소 누락: 웹 서버를 띄울 때 호스트 주소를 localhost127.0.0.1로 묶어두면, 컨테이너 외부 프록시 라우터가 접속 신호를 밀어 넣지 못해 통신 차단 에러(502 Bad Gateway)가 납니다. 반드시 0.0.0.0으로 호스트 지정을 고정해야 외부 접속 바인딩이 체결됩니다.
  • 포트 일치: 웹 엔진에 적은 포트 번호가 대시보드 시작 설정 또는 네트워크에 부여된 내부 포트와 한 자리도 틀리지 않고 정확히 일치하는지 두 번 검수하시기 바랍니다.