1. 서버 개요
서버 주소
192.168.0.126
도메인
s1.byunc.com
웹서버
nginx 1.22.1 (HTTPS)
SSL
Let's Encrypt (Certbot)
컨테이너 엔진
Docker + Docker Compose
주요 서비스
SteVe OCPP / EV Dashboard
ℹ️
HTTP(80)로 접속하면 자동으로 HTTPS(443)로 리다이렉트됩니다. 루트(/)는
/steve/로 리다이렉트됩니다.2. nginx URL 라우팅 구조
설정 파일: /etc/nginx/conf.d/s1.byunc.com.conf
| 경로 | 프록시 대상 | 설명 |
|---|---|---|
| https://s1.byunc.com/ | → /steve/ (302 리다이렉트) |
루트 접속 시 자동 이동 |
| https://s1.byunc.com/steve/ | 192.168.0.126:8180 |
SteVe OCPP 관리 시스템 |
| https://s1.byunc.com/steve/websocket | 192.168.0.126:8180 (WS) |
OCPP 충전기 WebSocket 연결 전용 |
| https://s1.byunc.com/dashboard | 192.168.0.126:8000 |
EV 충전 대시보드 (FastAPI) |
| https://s1.byunc.com/api/ | 192.168.0.126:8000 |
EV 충전 REST API |
| https://s1.byunc.com/health | 192.168.0.126:8000 |
헬스체크 엔드포인트 |
3. SteVe — OCPP 중앙 관리 시스템
⚡
SteVe (SteckdosenVerwaltung)
오픈소스 OCPP 1.2 / 1.5 / 1.6 중앙 시스템 운영중
접속 정보
접속 URL
관리자 아이디
admin
관리자 비밀번호
1234
내부 포트
8180 (HTTP), 8443 (HTTPS)
컨텍스트 경로
/steve
Jetty 버전
12.1.7
주요 기능
- 충전기 관리 — ChargeBox 등록, 상태 조회, 원격 제어 (시작/중지)
- 사용자 관리 — OCPP 태그(RFID) 등록/관리, 사용 이력
- 거래 내역 — 충전 트랜잭션 로그, 미터값 기록
- OCPP 운영 — 1.2/1.5/1.6 SOAP · JSON-over-WebSocket 지원
- 예약 — 충전기 예약 관리
- Swagger UI —
/steve/manager/swagger-ui/index.html
컨테이너 구성
| 컨테이너 | 이미지 | 포트 | 역할 |
|---|---|---|---|
steve-app-1 | steve-app (빌드) | 8180, 8445 | Spring Boot + Jetty 앱 |
steve-db-1 | mariadb:10.11.16 | 3307→3306 | MariaDB 데이터베이스 |
소스 경로
/root/steve/steve/ # 프로젝트 루트 ├── src/main/java/... │ └── config/JettyConfiguration.java # HTTP compliance 설정 (중요!) ├── src/main/resources/ │ └── application-docker.properties # DB/포트/인증 설정 └── docker-compose.yml
⚠️
중요: 컨테이너 시작 시 Maven으로 소스를 직접 빌드합니다. 첫 시작에 3~5분 소요됩니다.
4. EV Dashboard — 충전 모니터링 대시보드
📊
EV Charging Dashboard (FastAPI)
EV 충전기 실시간 모니터링 및 REST API 운영중
접속 정보
대시보드 URL
API URL
s1.byunc.com/api/
내부 포트
8000 (FastAPI/uvicorn)
DB
PostgreSQL 16 (ev-postgres)
Cache
Redis (ev-redis:6375)
OCPP 프록시
ev-proxy (9002/9003)
주요 기능
- 실시간 충전 현황 — 충전기 상태, 충전량, 전력 모니터링
- 충전 이력 조회 — 날짜/충전기별 상세 로그
- REST API —
/api/경로로 외부 연동 가능 - OCPP 프록시 — ev-proxy 컨테이너로 충전기 통신 중계
- 시뮬레이터 —
/simulator.html(내부 접근)
컨테이너 구성
| 컨테이너 | 이미지 | 포트 | 역할 |
|---|---|---|---|
ev-api | ev-charging-backend-api | 8000 | FastAPI 메인 앱 |
ev-proxy | ev-charging-backend-proxy | 9002, 9003 | OCPP 프록시 서버 |
ev-postgres | postgres:16-alpine | 5432 | PostgreSQL DB |
ev-redis | redis:7-alpine | 6375→6379 | Redis 캐시 |
소스 경로
/root/steve/ev-charging-backend/ ├── app/ # FastAPI 소스 ├── docker-compose.yml ├── Dockerfile ├── Dockerfile.proxy └── .env # DB 접속정보 (비공개)
⚠️
주의: 서버 재부팅 후
ev-api가 DB 준비 전에 시작되면 uvicorn이 종료될 수 있습니다. 아래 재시작 방법 참고.5. 서비스 재시작 방법
⚡ SteVe 재시작
1
디렉토리 이동
cd /root/steve/steve
2
컨테이너 재시작 빌드 포함 3~5분 소요
docker compose restart app # 또는 완전 재빌드: docker compose up -d --build app
3
시작 확인
docker logs steve-app-1 -f # "Started SteveApplication" 로그 확인 시 정상
📊 EV Dashboard 재시작
1
디렉토리 이동
cd /root/steve/ev-charging-backend
2
API 서버 재시작
docker compose restart api
3
시작 확인
docker logs ev-api --tail 20 # "Application startup complete." 확인
🔧 nginx 재시작
# 설정 문법 검사 후 리로드 nginx -t && systemctl reload nginx # 완전 재시작 (필요 시) systemctl restart nginx # 설정 파일 위치 /etc/nginx/conf.d/s1.byunc.com.conf
🩺 상태 확인 명령어
# 전체 컨테이너 상태 docker ps --format "table {{.Names}}\t{{.Status}}\t{{.Ports}}" # nginx 상태 systemctl status nginx # SteVe 로그 실시간 docker logs steve-app-1 -f --tail 50 # EV API 로그 docker logs ev-api --tail 50 # 접속 테스트 curl -s -o /dev/null -w "%{http_code}" https://s1.byunc.com/steve/ curl -s -o /dev/null -w "%{http_code}" https://s1.byunc.com/dashboard
6. 트러블슈팅
🚨 /steve/ 접속 시 HTTP 400 Bad Request
Jetty 12의 strict HTTP compliance가 중복 Host 헤더를 거부하는 현상
✅
해결됨 (2026-05-26):
JettyConfiguration.java 추가로 HttpCompliance.RFC7230_LEGACY 적용 완료.
파일 위치: /root/steve/steve/src/main/java/de/rwth/idsg/steve/config/JettyConfiguration.java
# 재발 시 steve 컨테이너 재빌드 cd /root/steve/steve && docker compose up -d --build app
🚨 /dashboard 접속 불가 (ev-api 중단)
서버 재부팅 후 PostgreSQL 준비 전에 ev-api가 시작되면 uvicorn 프로세스가 종료됨
# 확인 docker logs ev-api --tail 20 # "CannotConnectNowError" 또는 "Application startup failed" 시 # 해결 cd /root/steve/ev-charging-backend && docker compose restart api
🚨 nginx SSL 인증서 갱신
# 인증서 갱신 (Certbot 자동 갱신) certbot renew --dry-run certbot renew systemctl reload nginx # 인증서 만료일 확인 certbot certificates
7. 서버 전체 컨테이너 목록
| 컨테이너명 | 용도 | 외부 포트 |
|---|---|---|
steve-app-1 | ⚡ SteVe OCPP 관리 시스템 | 8180, 8445 |
steve-db-1 | SteVe MariaDB | 3307 |
ev-api | 📊 EV 충전 대시보드 API | 8000 |
ev-proxy | OCPP 프록시 | 9002, 9003 |
ev-postgres | EV API PostgreSQL | 5432 |
ev-redis | EV API Redis | 6375 |
ev-dashboard | EV 대시보드 (별도) | 8001 |
gitea | 🐙 Git 서버 (gitea.byunc.com) | 8832, 2224 |
codium | 💻 VS Code Server | 8443 |
nextcloud | ☁️ 파일 클라우드 | 8081 |
open-webui | 🤖 OpenWebUI (AI) | 3233 |
n8n_n8n_1 | ⚙️ n8n 자동화 | 5678 |
immich_server | 📷 사진 관리 | 2283 |
jupyter-lab | 📓 Jupyter Lab | 8888 |
metabase | 📈 Metabase BI | 3000 |
vaultwarden | 🔑 비밀번호 관리 | 8055 |
homarr | 🏠 홈 대시보드 | 7575 |
portainer | 🐳 Docker 관리 UI | 9000, 9443 |
drawio | 📐 다이어그램 툴 | 8044, 8444 |
stirling-pdf | 📄 PDF 도구 | 8084 |
penpot-* | 🎨 UI 디자인 도구 | 9001 |
trilium-notes | 📝 노트 앱 | 8066 |
flowise_* | 🔀 AI 플로우 빌더 | 3001 |
comfyui-cpu | 🎨 ComfyUI (이미지 AI) | 8188 |
whisper_* | 🎙️ 음성인식 (Whisper) | 8800 |
perplexica_* | 🔍 AI 검색 | 3011 |