# 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 설치되어 있어야 함 | ## 1. 폴더 만들기 + 소스 받기 NAS에 SSH로 접속합니다 (Windows: `ssh 관리자계정@NAS내부IP`). ```sh 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) ```sh 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개) | ```sh sudo chmod 600 .env ``` ## 3. 빌드 + 실행 ```sh 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,...} ``` ## 4. 인증서 (Let's Encrypt) DSM 제어판 → 보안 → 인증서 → 추가 → 새 인증서 추가 → Let's Encrypt에서 인증서 얻기 - 도메인 이름: `jjsm.joynala.com` - 이메일: 관리자 이메일 ## 5. 리버스 프록시 DSM 제어판 → 로그인 포털 → 고급 → 역방향 프록시 → 생성 | 항목 | 값 | |---|---| | 설명 | jjsm | | 소스 프로토콜 / 호스트 이름 / 포트 | HTTPS / `jjsm.joynala.com` / 443 | | 대상 프로토콜 / 호스트 이름 / 포트 | HTTP / `localhost` / 21900 | | **사용자 지정 머리글** | **생성 → WebSocket** (Upgrade, Connection 두 줄이 자동으로 들어감) — 빠지면 연결 안 됨 | | 고급 설정 | 프록시 연결 시간 초과 / 전송 / 읽기 시간 초과: **3600**초 권장 | 그다음 제어판 → 보안 → 인증서 → 설정 → `jjsm.joynala.com` 항목에 4번 인증서를 지정합니다. 확인 (밖에서, 예: 휴대폰 LTE): 브라우저로 `https://jjsm.joynala.com/health` → `{"status":"ok",...}` ## 6. 프로그램에서 연결 (JJServiceManagerEnt) 1. **관리 PC (관리자)**: 설정 → 관리 대상 PC → 다른 PC 관리 켜기 → **중계 서버 로그인**에 `https://jjsm.joynala.com`, `.env`의 첫 관리자 아이디·비밀번호 → [로그인] → 새 비밀번호 정하기 → 확인 2. 설정을 다시 열면 **[서버 관리]** 탭이 보임 → **등록 코드** → [새 코드 발급] 3. **대상 PC**: 설정 → 원격 접속 허용 → 켜기·접속 비밀번호 → **중계 서버 접속** → [등록 코드로 등록] → 코드 입력 → 확인 4. 관리 PC 초기화면에 대상 PC 묶음(초록색)이 나타남 → 제목 줄 **[비밀번호]**에 대상 PC 접속 비밀번호 입력 5. 다른 사람이 쓸 계정: [서버 관리] → 계정에서 추가 → 권한에서 기기별로 보기 / 서비스 제어 / 화면 보기 / 화면 제어 지정 ## 운영 | 할 일 | 명령 | |---|---| | 상태 | `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` | ### 업데이트 ```sh 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 구조가 바뀌면 서버가 시작할 때 자동으로 고칩니다 (기존 데이터 유지). ### 백업에서 되돌리기 ```sh 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에서 직접 초기화하는 방법 안내).