NAS 설치 안내: DSM 방화벽(Docker 대역), 인증서 발급 제한·철자, 404 확인 방법 / Dockerfile: HTTP_PORTS 경고 제거

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_013U497kUNL8ArhV7jkzCpKa
main
diadmin 2026-10-27 08:15:02 +00:00
parent 819e8e7c48
commit 7e5ba5cae5
No known key found for this signature in database
2 changed files with 23 additions and 1 deletions

View File

@ -12,6 +12,7 @@ FROM mcr.microsoft.com/dotnet/aspnet:8.0
ENV TZ=Asia/Seoul \ ENV TZ=Asia/Seoul \
DOTNET_gcServer=0 \ DOTNET_gcServer=0 \
JJSM_PORT=21900 \ JJSM_PORT=21900 \
ASPNETCORE_HTTP_PORTS= \
JJSM_LOG_DIR=/app/logs JJSM_LOG_DIR=/app/logs
RUN apt-get update \ RUN apt-get update \
&& apt-get install -y --no-install-recommends tzdata curl \ && apt-get install -y --no-install-recommends tzdata curl \

View File

@ -10,6 +10,7 @@
| 포트 포워딩 | Synology Router | 443, 80 → NAS (gitea 때문에 이미 되어 있으면 그대로) | | 포트 포워딩 | Synology Router | 443, 80 → NAS (gitea 때문에 이미 되어 있으면 그대로) |
| SSH | DSM 제어판 → 터미널 및 SNMP | SSH 서비스 활성화 | | SSH | DSM 제어판 → 터미널 및 SNMP | SSH 서비스 활성화 |
| Docker | DSM 패키지 센터 | Docker 설치되어 있어야 함 | | Docker | DSM 패키지 센터 | Docker 설치되어 있어야 함 |
| 방화벽 | DSM 제어판 → 보안 → 방화벽 | 방화벽을 켜 두었다면 **Docker 대역 허용 규칙** 필요 (아래 3번의 "DB 연결 대기 중이 계속될 때") |
## 1. 폴더 만들기 + 소스 받기 ## 1. 폴더 만들기 + 소스 받기
@ -67,11 +68,27 @@ curl -s http://127.0.0.1:21900/health
# {"status":"ok","version":"1.0.0","db":true,...} # {"status":"ok","version":"1.0.0","db":true,...}
``` ```
### DB 연결 대기 중이 계속될 때 (DSM 방화벽)
`docker logs jjsm-server`에 `DB 연결 대기 중 (N/60): Failed to connect to 172.x.x.x:5432`가 계속 나오면
DSM 방화벽이 컨테이너끼리의 통신을 막는 것입니다.
```sh
docker exec jjsm-server bash -c "timeout 3 bash -c '</dev/tcp/db/5432' && echo 연결됨 || echo 막힘"
```
`막힘`이면: 제어판 → 보안 → 방화벽 → [규칙 편집] → [생성]
- 포트: 모두 / 소스 IP: 서브넷 `172.16.0.0` / `255.240.0.0` / 작업: 허용 → **맨 위로** 올리고 [적용]
- 그다음 `docker-compose restart server`
## 4. 인증서 (Let's Encrypt) ## 4. 인증서 (Let's Encrypt)
DSM 제어판 → 보안 → 인증서 → 추가 → 새 인증서 추가 → Let's Encrypt에서 인증서 얻기 DSM 제어판 → 보안 → 인증서 → 추가 → 새 인증서 추가 → Let's Encrypt에서 인증서 얻기
- 도메인 이름: `jjsm.joynala.com` - 도메인 이름: `jjsm.joynala.com`
- 이메일: 관리자 이메일 - 이메일: 관리자 이메일
- 주체 대체 이름: 자동으로 들어간 값의 **철자를 꼭 확인** (예: `.comm` 오타)
> Let's Encrypt는 발급 횟수를 제한합니다 (실패는 1시간에 5번, 같은 이름 조합은 1주에 5번).
> "최대 인증 요청 수에 도달" 메시지가 나오면 1시간 기다리거나, 주체 대체 이름에 NAS로 오는 다른 이름을 더해 조합을 바꿉니다
> (예: `jjsm.joynala.com;gitea.joynala.com`).
## 5. 리버스 프록시 ## 5. 리버스 프록시
@ -80,7 +97,7 @@ DSM 제어판 → 로그인 포털 → 고급 → 역방향 프록시 → 생성
| 항목 | 값 | | 항목 | 값 |
|---|---| |---|---|
| 설명 | jjsm | | 설명 | jjsm |
| 소스 프로토콜 / 호스트 이름 / 포트 | HTTPS / `jjsm.joynala.com` / 443 | | 소스 프로토콜 / 호스트 이름 / 포트 | HTTPS / `jjsm.joynala.com` / 443 (철자 확인 — 틀리면 Synology 404) |
| 대상 프로토콜 / 호스트 이름 / 포트 | HTTP / `localhost` / 21900 | | 대상 프로토콜 / 호스트 이름 / 포트 | HTTP / `localhost` / 21900 |
| **사용자 지정 머리글** | **생성 → WebSocket** (Upgrade, Connection 두 줄이 자동으로 들어감) — 빠지면 연결 안 됨 | | **사용자 지정 머리글** | **생성 → WebSocket** (Upgrade, Connection 두 줄이 자동으로 들어감) — 빠지면 연결 안 됨 |
| 고급 설정 | 프록시 연결 시간 초과 / 전송 / 읽기 시간 초과: **3600**초 권장 | | 고급 설정 | 프록시 연결 시간 초과 / 전송 / 읽기 시간 초과: **3600**초 권장 |
@ -89,6 +106,10 @@ DSM 제어판 → 로그인 포털 → 고급 → 역방향 프록시 → 생성
확인 (밖에서, 예: 휴대폰 LTE): 브라우저로 `https://jjsm.joynala.com/health` → `{"status":"ok",...}` 확인 (밖에서, 예: 휴대폰 LTE): 브라우저로 `https://jjsm.joynala.com/health` → `{"status":"ok",...}`
- Synology 404 페이지가 나오면: 규칙의 호스트 이름이 다른 것 → NAS에서 `grep -rn "server_name jjsm" /usr/local/etc/nginx/sites-available/`로 확인
- 인증서 경고(`ERR_CERT_COMMON_NAME_INVALID`)가 나오면: 인증서 [설정]에서 `jjsm.joynala.com` 항목에 인증서가 지정되지 않은 것
- NAS 안에서 공유기 없이 시험: `curl -sk --resolve jjsm.joynala.com:443:127.0.0.1 https://jjsm.joynala.com/health`
## 6. 프로그램에서 연결 (JJServiceManagerEnt) ## 6. 프로그램에서 연결 (JJServiceManagerEnt)
1. **관리 PC (관리자)**: 설정 → 관리 대상 PC → 다른 PC 관리 켜기 → **중계 서버 로그인**에 `https://jjsm.joynala.com`, `.env`의 첫 관리자 아이디·비밀번호 → [로그인] → 새 비밀번호 정하기 → 확인 1. **관리 PC (관리자)**: 설정 → 관리 대상 PC → 다른 PC 관리 켜기 → **중계 서버 로그인**에 `https://jjsm.joynala.com`, `.env`의 첫 관리자 아이디·비밀번호 → [로그인] → 새 비밀번호 정하기 → 확인