154 lines
7.6 KiB
Markdown
154 lines
7.6 KiB
Markdown
# 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`).
|
|
|
|
```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,...}
|
|
```
|
|
|
|
### 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)
|
|
|
|
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)
|
|
|
|
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에서 직접 초기화하는 방법 안내).
|