7.6 KiB
Synology NAS 설치 안내 (DS1515+, DSM 7.1.1, Docker 패키지)
중계 서버를 https://jjsm.joynala.com으로 띄우는 순서입니다. 처음 한 번만 하면 되고, 업데이트는 맨 아래 "업데이트"를 보세요.
0. 준비 (한 번만)
| 할 일 | 어디서 | 내용 |
|---|---|---|
| DNS | 도메인 관리 | jjsm.joynala.com → gitea와 같은 외부 IP (A 레코드) 또는 CNAME gitea.joynala.com |
| 포트 포워딩 | Synology Router | 443, 80 → NAS (gitea 때문에 이미 되어 있으면 그대로) |
| SSH | DSM 제어판 → 터미널 및 SNMP | SSH 서비스 활성화 |
| Docker | DSM 패키지 센터 | Docker 설치되어 있어야 함 |
| 방화벽 | DSM 제어판 → 보안 → 방화벽 | 방화벽을 켜 두었다면 Docker 대역 허용 규칙 필요 (아래 3번의 "DB 연결 대기 중이 계속될 때") |
1. 폴더 만들기 + 소스 받기
NAS에 SSH로 접속합니다 (Windows: ssh 관리자계정@NAS내부IP).
sudo mkdir -p /volume1/docker/jjsm
cd /volume1/docker/jjsm
sudo mkdir -p db server/logs backup
# 소스 받기 (Gitea 압축 파일)
sudo curl -fL -o src.tar.gz https://gitea.joynala.com/diadmin/JJServiceManagerRelay/archive/main.tar.gz
sudo tar xzf src.tar.gz # → jjservicemanagerrelay 폴더가 생김
sudo mv jjservicemanagerrelay src
sudo rm src.tar.gz
폴더 구성:
/volume1/docker/jjsm/
├─ src/ ← 소스 + docker-compose.yml + .env
├─ db/ ← PostgreSQL 데이터 (지우지 마세요)
├─ server/logs ← 서버 로그 (날짜별, 지우지 않음)
└─ backup/ ← 매일 DB 백업 (최근 30개)
2. 비밀번호 파일 (.env)
cd /volume1/docker/jjsm/src
sudo cp .env.example .env
sudo vi .env
| 항목 | 넣을 값 |
|---|---|
POSTGRES_PASSWORD |
DB 비밀번호 — 길고 무작위로. 처음 실행 뒤에는 바꾸지 마세요 (DB에 이미 저장됨) |
JJSM_ADMIN_USER |
첫 관리자 아이디 (기본 admin) |
JJSM_ADMIN_PASSWORD |
첫 관리자 비밀번호 (8자 이상). 첫 로그인 때 바꾸게 됩니다 |
| 나머지 | 기본값 그대로 (포트 21900, 등록 코드 7일, 백업 매일 3시 30개) |
sudo chmod 600 .env
3. 빌드 + 실행
cd /volume1/docker/jjsm/src
sudo docker-compose build # 처음엔 수 분~10분 (.NET SDK 이미지를 받아 빌드)
sudo docker-compose up -d
sudo docker-compose ps # jjsm-db, jjsm-server, jjsm-backup 모두 Up
sudo docker logs jjsm-server # "첫 관리자 계정을 만들었습니다: admin" 확인
curl -s http://127.0.0.1:21900/health
# {"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 방화벽이 컨테이너끼리의 통신을 막는 것입니다.
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)
DSM 제어판 → 보안 → 인증서 → 추가 → 새 인증서 추가 → Let's Encrypt에서 인증서 얻기
- 도메인 이름:
jjsm.joynala.com - 이메일: 관리자 이메일
- 주체 대체 이름: 자동으로 들어간 값의 철자를 꼭 확인 (예:
.comm오타)
Let's Encrypt는 발급 횟수를 제한합니다 (실패는 1시간에 5번, 같은 이름 조합은 1주에 5번). "최대 인증 요청 수에 도달" 메시지가 나오면 1시간 기다리거나, 주체 대체 이름에 NAS로 오는 다른 이름을 더해 조합을 바꿉니다 (예:
jjsm.joynala.com;gitea.joynala.com).
5. 리버스 프록시
DSM 제어판 → 로그인 포털 → 고급 → 역방향 프록시 → 생성
| 항목 | 값 |
|---|---|
| 설명 | jjsm |
| 소스 프로토콜 / 호스트 이름 / 포트 | HTTPS / jjsm.joynala.com / 443 (철자 확인 — 틀리면 Synology 404) |
| 대상 프로토콜 / 호스트 이름 / 포트 | HTTP / localhost / 21900 |
| 사용자 지정 머리글 | 생성 → WebSocket (Upgrade, Connection 두 줄이 자동으로 들어감) — 빠지면 연결 안 됨 |
| 고급 설정 | 프록시 연결 시간 초과 / 전송 / 읽기 시간 초과: 3600초 권장 |
그다음 제어판 → 보안 → 인증서 → 설정 → jjsm.joynala.com 항목에 4번 인증서를 지정합니다.
확인 (밖에서, 예: 휴대폰 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)
- 관리 PC (관리자): 설정 → 관리 대상 PC → 다른 PC 관리 켜기 → 중계 서버 로그인에
https://jjsm.joynala.com,.env의 첫 관리자 아이디·비밀번호 → [로그인] → 새 비밀번호 정하기 → 확인 - 설정을 다시 열면 [서버 관리] 탭이 보임 → 등록 코드 → [새 코드 발급]
- 대상 PC: 설정 → 원격 접속 허용 → 켜기·접속 비밀번호 → 중계 서버 접속 → [등록 코드로 등록] → 코드 입력 → 확인
- 관리 PC 초기화면에 대상 PC 묶음(초록색)이 나타남 → 제목 줄 **[비밀번호]**에 대상 PC 접속 비밀번호 입력
- 다른 사람이 쓸 계정: [서버 관리] → 계정에서 추가 → 권한에서 기기별로 보기 / 서비스 제어 / 화면 보기 / 화면 제어 지정
운영
| 할 일 | 명령 |
|---|---|
| 상태 | cd /volume1/docker/jjsm/src && sudo docker-compose ps |
| 서버 로그 | sudo docker logs --tail 100 jjsm-server 또는 /volume1/docker/jjsm/server/logs/날짜.log |
| 지금 바로 DB 백업 | sudo docker exec jjsm-backup /bin/sh /backup.sh now |
| 다시 시작 | sudo docker-compose restart server |
| 멈춤 | sudo docker-compose stop |
업데이트
cd /volume1/docker/jjsm
sudo docker exec jjsm-backup /bin/sh /backup.sh now # 먼저 백업
sudo mv src src.old
sudo curl -fL -o src.tar.gz https://gitea.joynala.com/diadmin/JJServiceManagerRelay/archive/main.tar.gz
sudo tar xzf src.tar.gz && sudo mv jjservicemanagerrelay src && sudo rm src.tar.gz
sudo cp src.old/.env src/.env
cd src && sudo docker-compose build && sudo docker-compose up -d
DB 구조가 바뀌면 서버가 시작할 때 자동으로 고칩니다 (기존 데이터 유지).
백업에서 되돌리기
cd /volume1/docker/jjsm/src
sudo docker-compose stop server
sudo docker exec jjsm-db createdb -U jjsm jjsm_restore_test
gunzip -c ../backup/jjsm-YYYYMMDD-HHMMSS.sql.gz | sudo docker exec -i jjsm-db psql -U jjsm -d jjsm_restore_test # 먼저 시험용 DB에
# 시험이 괜찮으면 원래 DB를 바꾸는 방법은 그때 따로 안내합니다.
관리자 비밀번호를 잊었을 때
다른 관리자 계정으로 [서버 관리] → 계정 → 비밀번호 초기화. 관리자가 한 명뿐이면 문의하세요 (DB에서 직접 초기화하는 방법 안내).