79 lines
2.7 KiB
Markdown
79 lines
2.7 KiB
Markdown
# Synology NAS 배포 가이드 (라이선스 관리 시스템)
|
|
|
|
이 문서는 `smart_ims-license-manager`를 Synology NAS 환경에 배포하고 운영하기 위한 절차를 설명합니다.
|
|
|
|
## 사전 준비 사항
|
|
|
|
- **Synology NAS 설정**:
|
|
- `SSH` 서비스 활성화 (제어판 > 터미널 및 SNMP)
|
|
- `Node.js` 패키지 설치 (패키지 센터)
|
|
- `MariaDB 10` 패키지 설치 및 사용자/DB 생성 (`smart_ims_license_db`)
|
|
- `Git Server` 패키지 설치 (또는 SSH를 통한 `git` 명령 사용)
|
|
|
|
## 주요 변경 사항 (서버 최적화)
|
|
|
|
Synology NAS 환경에서 통합 운영을 위해 Express 서버가 빌드된 클라이언트(React)를 직접 서빙하도록 수정되어 있습니다.
|
|
|
|
- `express.static`을 사용하여 `../client/dist` 폴더의 정적 파일을 서빙합니다.
|
|
- SPA(Single Page Application)를 위해 모든 경로를 `index.html`로 폴백(fallback) 시킵니다.
|
|
|
|
## 배포 단계 (설치 절차)
|
|
|
|
### 1. 소스 코드 배포
|
|
NAS에 SSH로 접속하여 프로젝트를 복제합니다.
|
|
```bash
|
|
git clone https://gitea.qideun.com/SOKUREE/smart_ims_license.git
|
|
cd smart_ims_license
|
|
```
|
|
|
|
### 2. 클라이언트 빌드
|
|
로컬 혹은 NAS에서 클라이언트를 빌드하여 `dist` 폴더를 생성합니다.
|
|
```bash
|
|
cd client
|
|
npm install
|
|
npm run build
|
|
```
|
|
|
|
### 3. 서버 환경 설정
|
|
`server/.env` 파일을 NAS 운영 환경에 맞게 수정합니다.
|
|
- `DB_HOST`, `DB_USER`, `DB_PASSWORD`, `DB_NAME` 설정
|
|
- 포트 번호 확인 (기본 `3006`)
|
|
|
|
### 4. 의존성 설치 및 실행
|
|
```bash
|
|
cd ../server
|
|
npm install
|
|
# 테스트 실행
|
|
node server.js
|
|
```
|
|
|
|
### 5. PM2를 이용한 무중단 운영
|
|
서버가 백그라운드에서 계속 실행되도록 `pm2`를 사용합니다.
|
|
```bash
|
|
# PM2 설치 및 실행
|
|
sudo npm install -g pm2
|
|
pm2 start server.js --name "license-manager"
|
|
pm2 save
|
|
```
|
|
|
|
### 6. Synology 작업 스케줄러 등록 (자동 실행)
|
|
NAS가 재부팅될 때 PM2가 자동으로 실행되도록 Synology '작업 스케줄러'에 등록합니다.
|
|
|
|
1. **제어판 > 작업 스케줄러**로 이동합니다.
|
|
2. **생성 > 트리거된 작업 > 사용자 정의 스크립트**를 선택합니다.
|
|
3. **일반** 탭:
|
|
- 작업: `Start PM2 License Manager`
|
|
- 사용자: `root` (또는 해당 관리자 계정)
|
|
- 이벤트: `부팅 시`
|
|
4. **작업 설정** 탭 (사용자 정의 스크립트 내용):
|
|
```bash
|
|
# PM2 경로 확인 및 실행 (계정 경로에 따라 다를 수 있음)
|
|
export PATH=$PATH:/usr/local/bin:/usr/bin
|
|
pm2 resurrect
|
|
```
|
|
5. **확인**을 눌러 저장합니다.
|
|
|
|
## 확인 사항
|
|
- Synology 역방향 프록시(Reverse Proxy)를 사용하여 도메인 또는 특정 포트를 연결합니다.
|
|
- 방화벽 설정에서 해당 포트(3006)가 열려 있는지 확인합니다.
|