ERP code 수정: 두 판 사이의 차이
172.27.0.1 (토론) 편집 요약 없음 |
172.27.0.1 (토론) 편집 요약 없음 |
||
| 401번째 줄: | 401번째 줄: | ||
이 스크립트는 기본적인 틀을 제공하며, 사용자의 특정 환경과 요구 사항에 맞게 커스터마이징하여 사용해야 합니다. 특히 Docker 볼륨 사용 여부와 그에 따른 백업 대상 경로 지정이 중요합니다. | 이 스크립트는 기본적인 틀을 제공하며, 사용자의 특정 환경과 요구 사항에 맞게 커스터마이징하여 사용해야 합니다. 특히 Docker 볼륨 사용 여부와 그에 따른 백업 대상 경로 지정이 중요합니다. | ||
===Synology 이용=== | |||
* Synology Drive ShareSync 사용 | |||
Synology NAS 공유 폴더 동기화는 크게 두 가지 방법으로 설정할 수 있습니다. | |||
1. **공유 폴더 동기화 (Rsync 기반)**: 두 대의 Synology NAS 간에 공유 폴더를 단방향 또는 양방향으로 동기화하는 기능입니다. 주로 백업 또는 데이터 미러링 목적으로 사용됩니다. | |||
2. **Synology Drive ShareSync**: Synology Drive 패키지를 이용하여 여러 대의 Synology NAS 간에 파일을 실시간 또는 예약 동기화하는 기능입니다. 좀 더 유연하고 다양한 동기화 옵션을 제공하며, 협업 환경에 적합합니다. | |||
두 가지 방법 모두 장단점이 있으므로, 사용자의 환경과 목적에 맞는 방법을 선택하는 것이 중요합니다. | |||
**1. 공유 폴더 동기화 (Rsync 기반) 사용법** | |||
이 방법은 주로 두 대의 Synology NAS (원본 NAS와 대상 NAS) 간에 데이터를 동기화할 때 사용됩니다. | |||
**사전 준비 사항:** | |||
* **대상 NAS에서 Rsync 서비스 활성화:** | |||
1. 대상 Synology NAS에 로그인합니다. | |||
2. `제어판` > `파일 서비스` > `rsync` 탭으로 이동합니다. | |||
3. `rsync 서비스 활성화`를 선택하고 `적용`을 클릭합니다. | |||
* **포트 확인:** 방화벽이나 라우터에서 rsync 포트 (기본값: 873) 및 SSH 포트 (암호화된 전송 시, 기본값: 22)가 열려 있는지 확인합니다. | |||
* **서버 이름 확인:** 원본 NAS와 대상 NAS의 서버 이름이 서로 달라야 합니다. | |||
**동기화 작업 생성 (원본 NAS에서 수행):** | |||
1. 원본 Synology NAS에 로그인합니다. | |||
2. `제어판` > `파일 서비스` > `고급` 탭 > `공유 폴더 동기화`로 이동합니다. (DSM 버전에 따라 메뉴 위치가 약간 다를 수 있습니다. 예를 들어 DSM 6.2 이전 버전에서는 `제어판` > `공유 폴더 동기화`로 바로 이동할 수 있습니다.) | |||
3. `작업 목록`을 클릭하고 `생성`을 클릭합니다. | |||
4. **작업 이름 설정:** 동기화 작업의 이름을 입력합니다. | |||
5. **동기화할 공유 폴더 선택:** 원본 NAS에서 동기화할 공유 폴더를 하나 이상 선택합니다. | |||
6. **대상 NAS 정보 입력:** | |||
* 대상 Synology NAS의 IP 주소 또는 서버 이름을 입력합니다. | |||
* 대상 NAS의 관리자 그룹에 속하는 사용자 계정 정보를 입력합니다. | |||
7. **동기화 모드 선택:** | |||
* **수정 시 동기화 실행:** 원본 폴더에 변경 사항이 생기면 즉시 동기화합니다 (실시간 동기화). | |||
* **수동으로 동기화 실행:** 사용자가 직접 실행할 때만 동기화합니다. | |||
* **고급 스케줄:** 특정 시간에 주기적으로 동기화하도록 예약합니다. | |||
8. **기타 설정:** | |||
* **SSH 전송 암호화 활성화:** 데이터 전송 중 보안을 강화하려면 이 옵션을 선택하고 SSH 포트를 지정합니다. | |||
* **전송 압축 활성화:** 전송 속도를 높일 수 있지만, NAS의 CPU 사용량이 증가합니다. | |||
* **블록 레벨 동기화 사용:** 변경된 블록만 동기화하여 효율성을 높입니다. | |||
9. 설정을 완료하고 마법사를 따릅니다. | |||
**동기화 작업 관리:** | |||
* `제어판` > `공유 폴더 동기화` > `작업 목록`에서 생성된 작업을 편집, 삭제, 즉시 동기화 또는 전체 동기화를 수행할 수 있습니다. | |||
**참고 사항:** | |||
* 암호화된 공유 폴더를 Btrfs (Peta Volume) 파일 시스템에서 동기화하는 것은 지원되지 않을 수 있습니다. | |||
* 여러 원본 NAS에서 동일한 공유 폴더를 하나의 대상 NAS로 동시에 동기화하면 충돌이 발생할 수 있습니다. | |||
**2. Synology Drive ShareSync 사용법** | |||
Synology Drive ShareSync는 좀 더 유연하고 사용자 친화적인 인터페이스를 제공하며, 양방향 동기화 및 버전 관리 기능을 지원합니다. | |||
**사전 준비 사항:** | |||
* **Synology Drive Server 패키지 설치:** 동기화에 참여하는 모든 Synology NAS에 `패키지 센터`에서 `Synology Drive Server`를 설치하고 실행합니다. | |||
* **팀 폴더 활성화:** | |||
1. Synology Drive 관리 콘솔을 실행합니다. | |||
2. `팀 폴더` 섹션으로 이동합니다. | |||
3. 동기화하려는 공유 폴더를 선택하고 `활성화`를 클릭합니다. 필요에 따라 버전 관리 설정을 구성합니다. | |||
* **사용자 권한 확인:** `제어판` > `공유 폴더`에서 해당 폴더에 대한 사용자 권한이 올바르게 설정되었는지 확인합니다. | |||
* **포트 전달 (필요시):** 외부 네트워크에서 NAS에 접속하여 동기화하려면 라우터에서 Synology Drive ShareSync가 사용하는 포트 (기본값: 6690)를 포트 포워딩해야 할 수 있습니다. | |||
**Synology Drive ShareSync 설정 (로컬 NAS에서 수행):** | |||
1. 동기화를 설정할 로컬 Synology NAS에 로그인합니다. | |||
2. `Synology Drive ShareSync` 패키지를 실행합니다. (처음 실행 시 설정 마법사가 나타날 수 있습니다.) | |||
3. `지금 시작` 또는 `+` 버튼을 클릭하여 새 연결을 만듭니다. | |||
4. **원격 NAS 정보 입력:** | |||
* 동기화할 원격 Synology NAS의 IP 주소, QuickConnect ID 또는 DDNS 호스트 이름을 입력합니다. | |||
* 원격 NAS의 사용자 이름과 암호를 입력합니다. (관리자 그룹 권한 필요) | |||
5. **동기화할 공유 폴더 선택:** | |||
* 원격 NAS의 팀 폴더로 활성화된 공유 폴더 목록이 나타납니다. | |||
* 동기화할 원격 공유 폴더를 선택하고, 로컬 NAS에 동기화될 폴더를 지정합니다. | |||
6. **동기화 옵션 설정:** | |||
* **동기화 방향:** | |||
* 양방향 동기화 | |||
* 원격 NAS에서만 데이터 다운로드 (단방향) | |||
* 로컬 NAS로만 데이터 업로드 (단방향) | |||
* **고급 설정:** 파일 필터 (특정 파일 크기, 확장명 제외 등), 동기화 모드 (필요시 동기화 - 공간 절약) 등을 설정할 수 있습니다. | |||
7. 설정을 완료하고 저장합니다. | |||
**동기화 작업 관리:** | |||
* Synology Drive ShareSync 인터페이스에서 연결된 NAS 목록, 동기화된 폴더, 로그 등을 확인할 수 있습니다. | |||
* 각 연결 또는 폴더별로 동기화 일시 중지/다시 시작, 편집, 연결 해제 등의 작업을 수행할 수 있습니다. | |||
**참고 사항:** | |||
* "homes" 사용자 홈 폴더를 동기화하는 경우, `공유 폴더 동기화`는 단방향이며 대상 NAS에서 사용자 홈 서비스가 비활성화될 수 있습니다. 반면 `Synology Drive ShareSync`는 양방향 동기화를 지원하며 사용자 홈 서비스를 유지할 수 있습니다. | |||
* 파일 충돌이 발생할 경우 해결 정책을 설정할 수 있습니다. | |||
**어떤 방법을 선택해야 할까요?** | |||
* **단순 백업 또는 두 NAS 간의 일방/양방향 동기화가 주 목적이라면:** `공유 폴더 동기화 (Rsync 기반)`가 좋은 선택일 수 있습니다. | |||
* **여러 NAS 간의 유연한 동기화, 실시간 협업, 버전 관리, 사용자 친화적인 인터페이스가 필요하다면:** `Synology Drive ShareSync`를 사용하는 것이 좋습니다. | |||
[[분류:ERP]] | [[분류:ERP]] | ||
2025년 5월 31일 (토) 03:29 판
ERP 코드 임의 수정 부분 기록
Project Overview
- 파일
project\elements.php
- project overview
프로젝트 오버뷰는 프로젝트와 관련된 모든 것이 display된다. (느림)
프로젝트 생성이후 모든 history display.
급여 정보도 나옴
프로젝트 overview에서 급여(Salaries)가 표시되는 문제
코드에서 Salaries 부분 제거
The "salaries" section has been successfully removed from element.php. The code blocks related to the salaries module, including the require_once line, the salaries entry in the $listofreferent array, and the langs->load call, have been removed.
- 수정 부분
86번 라인 - 삭제
if (isModEnabled('salaries')) {
require_once DOL_DOCUMENT_ROOT.'/salaries/class/salary.class.php';
}
142번 라인 - 삭제
if (isModEnabled('salaries')) {
$langs->load("salaries");
}
655번 라인 - 삭제
'salaries' => array(
'name' => "Salaries",
'title' => "ListSalariesAssociatedProject",
'class' => 'Salary',
'table' => 'salary',
'datefieldname' => 'datesp',
'margin' => 'minus',
'disableamount' => 0,
'urlnew' => DOL_URL_ROOT.'/salaries/card.php?action=create&projectid='.$id.'&backtopage='.urlencode($_SERVER['PHP_SELF'].'?id='.$id),
'lang' => 'salaries',
'buttonnew' => 'AddSalary',
'testnew' => $user->hasRight('salaries', 'write'),
'test' => isModEnabled('salaries') && $user->hasRight('salaries', 'read')
),
참고 이전 형식 유지의 경우 사용
projet/element2.php?id=10 #프로젝트 ID
- 주의사항
업데이트의 경우 해당 파일을 바꿔 줄 것!
- Dolibarr 전체 업데이트 경우 수정해야 하는 것
- lang
- element 파일 수정
백업방법
여러가지 백업 방법에 대해 생각한다.
Dolibarr 백업
Dolibarr이 백업은 크게 두 가지 이다.
- DB sql 백업
- Document 파일 백업
Dolibarr 백업은 비즈니스 데이터의 안전을 위해 매우 중요한 작업입니다. 백업은 크게 **데이터베이스 백업**과 **파일 백업** 두 부분으로 나뉩니다. 이 두 가지 요소를 모두 백업해야 완전한 복구가 가능합니다.
- 백업해야 할 주요 구성 요소:**
1. **Dolibarr 데이터베이스:** 모든 거래 정보, 고객 데이터, 제품 정보 등 핵심 데이터가 저장됩니다. 일반적으로 MySQL 또는 MariaDB 데이터베이스를 사용합니다. 2. **`documents` 디렉토리:** 생성된 문서(견적서, 송장, 주문서 등), 첨부 파일, 이미지 등 Dolibarr 애플리케이션이 생성하고 사용하는 모든 파일이 저장되는 중요한 디렉토리입니다. 이 디렉토리의 정확한 위치는 Dolibarr 설치 시 설정에 따라 다를 수 있지만, 일반적으로 Dolibarr 설치 디렉토리 내에 있거나 별도로 지정된 경로에 있습니다. (예: `/var/lib/dolibarr/documents` 또는 Dolibarr 웹 루트 아래의 `documents`) 3. **`conf` 디렉토리 (설정 파일):** Dolibarr의 주요 설정 파일(`conf.php`)이 포함된 디렉토리입니다. 이 파일에는 데이터베이스 연결 정보 등 중요한 설정이 들어있습니다. 일반적으로 Dolibarr 설치 디렉토리 내의 `htdocs/conf/` 에 위치합니다.
- Dolibarr 백업 방법:**
Dolibarr 백업은 다음과 같은 방법으로 수행할 수 있습니다.
- 1. Dolibarr 내장 백업 도구 사용 (주로 데이터베이스 백업)**
Dolibarr는 관리자 인터페이스 내에 데이터베이스 백업 기능을 제공합니다.
- **위치:** 관리자 계정으로 로그인 후 `관리자 도구` (Admin Tools) > `백업` (Backup) 메뉴로 이동합니다.
- **기능:**
* 데이터베이스 백업 파일을 생성할 수 있습니다 (주로 SQL 형식). * 백업 파일의 압축 여부, 백업 내용(구조, 데이터) 등을 선택할 수 있습니다. * 생성된 백업 파일은 서버에 저장되며, 사용자가 직접 다운로드해야 합니다.
- **장점:** 사용하기 쉽고 Dolibarr 환경에 최적화되어 있습니다.
- **단점:** 주로 데이터베이스 백업에 중점을 두며, `documents` 디렉토리의 파일들은 별도로 백업해야 합니다. 백업 파일이 서버 내에만 저장되므로, 서버 장애 시 유실될 수 있어 반드시 외부 저장소로 옮겨야 합니다.
- 2. 수동 백업 (데이터베이스 및 파일)**
서버에 직접 접근하여 데이터베이스와 파일을 백업하는 방법입니다.
- **데이터베이스 백업 (명령줄 사용 - 예: `mysqldump`):**
* MySQL/MariaDB 서버에 접속 가능한 환경에서 `mysqldump` 유틸리티를 사용합니다.
* **명령어 예시:**
```bash
mysqldump -u [데이터베이스사용자] -p[데이터베이스비밀번호] [데이터베이스이름] > backup_db_$(date +%Y%m%d_%H%M%S).sql
```
(예: `mysqldump -u dolibarruser -ppassword dolibarrdb > backup_db_20230530_100000.sql`)
* 생성된 `.sql` 파일을 안전한 곳에 보관합니다.
* **주의:** `-p` 옵션과 비밀번호 사이에 공백이 없어야 합니다. 보안상 비밀번호를 직접 입력하는 것보다 프롬프트를 통해 입력하거나 설정 파일을 이용하는 것이 좋습니다.
- **데이터베이스 백업 (phpMyAdmin 사용):**
* 웹 호스팅 환경 등에서 phpMyAdmin을 제공하는 경우, 이를 통해 데이터베이스를 백업할 수 있습니다. * Dolibarr 데이터베이스를 선택하고 `내보내기(Export)` 기능을 사용하여 SQL 파일로 저장합니다.
- **`documents` 디렉토리 및 `conf` 디렉토리 백업:**
* FTP 클라이언트 (FileZilla 등) 또는 SSH를 통해 서버에 접속합니다.
* Dolibarr 설치 경로에서 `documents` 디렉토리 전체와 `htdocs/conf/` 디렉토리를 로컬 PC 또는 다른 안전한 저장소로 복사합니다.
* 파일이 많거나 용량이 클 경우, 압축하여 백업하는 것이 효율적입니다 (예: `tar`, `zip`).
* **명령어 예시 (tar 사용):**
```bash
tar -czvf backup_documents_$(date +%Y%m%d_%H%M%S).tar.gz /path/to/your/dolibarr/documents
tar -czvf backup_conf_$(date +%Y%m%d_%H%M%S).tar.gz /path/to/your/dolibarr/htdocs/conf
```
- 3. 자동 백업 설정**
정기적인 백업을 위해 자동화하는 것이 매우 중요합니다.
- **Cron 작업 (Linux 서버):**
* Linux 서버 환경에서는 `cron`을 사용하여 `mysqldump` 명령과 파일 복사/압축 명령을 주기적으로 실행하도록 스크립트를 작성하고 등록할 수 있습니다.
* 백업 스크립트 예시 (`backup_dolibarr.sh`):
```bash
#!/bin/bash
DB_USER="[데이터베이스사용자]"
DB_PASS="[데이터베이스비밀번호]"
DB_NAME="[데이터베이스이름]"
BACKUP_DIR="/path/to/your/backup_location" # 백업 파일을 저장할 디렉토리
DOLI_DOCS_DIR="/path/to/your/dolibarr/documents"
DOLI_CONF_DIR="/path/to/your/dolibarr/htdocs/conf"
DATE=$(date +%Y%m%d_%H%M%S)
# 데이터베이스 백업
mysqldump -u $DB_USER -p$DB_PASS $DB_NAME > $BACKUP_DIR/db_backup_$DATE.sql
# Documents 디렉토리 백업
tar -czvf $BACKUP_DIR/documents_backup_$DATE.tar.gz $DOLI_DOCS_DIR
# Conf 디렉토리 백업
tar -czvf $BACKUP_DIR/conf_backup_$DATE.tar.gz $DOLI_CONF_DIR
# 오래된 백업 파일 삭제 (예: 30일 이상된 파일 삭제)
find $BACKUP_DIR -type f -mtime +30 -name '*.sql' -delete
find $BACKUP_DIR -type f -mtime +30 -name '*.tar.gz' -delete
echo "Dolibarr backup completed on $DATE" >> $BACKUP_DIR/backup.log
```
* 위 스크립트를 실행 가능하도록 권한을 주고 (`chmod +x backup_dolibarr.sh`), `crontab -e`를 통해 cron 작업을 등록합니다 (예: 매일 새벽 2시에 실행 `0 2 * * * /path/to/backup_dolibarr.sh`).
- **Dolibarr 모듈/플러그인:**
* Dolibarr 마켓플레이스(DoliStore) 등에서 자동 백업 기능을 제공하는 유료 또는 무료 모듈을 찾아볼 수 있습니다. `Dolibackup`과 같은 모듈이 원격 FTP 서버 등으로 자동 백업하는 기능을 제공하기도 합니다.
- **호스팅 제공업체의 백업 서비스:**
* 웹 호스팅이나 클라우드 서버를 사용하는 경우, 제공업체에서 자동 백업 서비스를 제공하는지 확인하고 활용할 수 있습니다. 다만, 이 경우에도 자체적으로 중요한 데이터는 별도로 백업해두는 것이 안전합니다.
- 백업 시 고려 사항 및 권장 사항:**
- **3-2-1 백업 규칙:** 최소 3개의 데이터 복사본을 만들고, 2개의 서로 다른 저장 매체에 보관하며, 1개는 오프사이트(물리적으로 다른 장소)에 보관하는 것이 좋습니다.
- **정기적인 테스트:** 백업 파일이 정상적으로 생성되고, 실제로 복구가 가능한지 정기적으로 테스트해야 합니다. 백업만 하고 복구 테스트를 하지 않으면 실제 장애 발생 시 큰 문제가 될 수 있습니다.
- **백업 저장소 보안:** 백업 파일에는 중요한 데이터가 포함되어 있으므로, 접근 권한을 제한하고 암호화하는 등의 보안 조치를 취해야 합니다.
- **백업 위치:** 서버와 동일한 물리적 위치에만 백업을 저장하는 것은 위험합니다. 로컬 서버, 외부 하드 드라이브, NAS, 클라우드 스토리지 등 다양한 위치에 분산하여 저장하는 것이 좋습니다.
- **문서화:** 백업 및 복구 절차를 문서화하여 누구나 쉽게 따라 할 수 있도록 합니다.
어떤 방법을 선택하든, 정기적이고 안정적인 백업 체계를 구축하는 것이 Dolibarr 시스템과 비즈니스 연속성을 유지하는 데 매우 중요합니다. 사용 환경과 기술적 숙련도에 맞는 방법을 선택하고, 꾸준히 관리하십시오.
전통적인 방법
- Cron, ssh이용
Docker 환경에서 Dolibarr 서버의 데이터베이스와 디렉토리를 매일 한 번 원격으로 백업하여 로컬로 가져오는 자동화된 프로세스를 구축하는 방법을 안내해 드리겠습니다.
이 과정은 로컬 머신에서 실행되는 스크립트를 통해 원격 Docker 호스트에 접속하고, Docker 컨테이너 내의 데이터를 백업한 후, 그 파일을 로컬 머신으로 가져오는 방식으로 진행됩니다.
- 사전 준비 사항:**
1. **SSH 접속 설정 (로컬 → 원격 서버):**
* 로컬 머신에서 원격 Docker 호스트로 비밀번호 입력 없이 SSH 접속이 가능하도록 SSH 키 기반 인증을 설정합니다.
* 로컬 머신에 SSH 키 쌍이 없다면 생성합니다: `ssh-keygen -t rsa -b 4096`
* 생성된 공개키 (`~/.ssh/id_rsa.pub`)의 내용을 원격 서버의 `~/.ssh/authorized_keys` 파일에 추가합니다.
* 원격 서버의 SSH 포트가 기본 포트(22)가 아니라면 해당 포트 번호를 기억해 둡니다.
2. **원격 서버 정보 확인:**
* 원격 Docker 호스트의 IP 주소 또는 도메인 이름 * 원격 서버 접속을 위한 SSH 사용자 이름 * Dolibarr 데이터베이스 컨테이너 이름 또는 ID * Dolibarr 애플리케이션 컨테이너 이름 또는 ID * Dolibarr `documents` 디렉토리 경로 (컨테이너 내부) * Dolibarr `conf` 디렉토리 경로 (컨테이너 내부, 보통 `htdocs/conf`) * 데이터베이스 이름, 사용자, 비밀번호 (Dolibarr 설정 파일 `htdocs/conf/conf.php` 또는 Docker 환경 변수에서 확인)
3. **로컬 머신 준비:**
* `ssh`, `scp` (또는 `rsync`) 명령어가 설치되어 있어야 합니다. (대부분의 Linux, macOS에는 기본 설치) * 백업 파일을 저장할 로컬 디렉토리 생성.
- 자동 백업 스크립트 (Bash 셸 스크립트 예시)**
아래는 로컬 머신에서 실행할 셸 스크립트 예시입니다. 필요에 따라 수정하여 사용하세요.
```bash
- !/bin/bash
- --- 설정 변수 ---
- 원격 서버 정보
REMOTE_USER="your_remote_ssh_user" REMOTE_HOST="your_remote_server_ip_or_domain" REMOTE_SSH_PORT="22" # 원격 SSH 포트 (기본값이 아니라면 변경)
- SSH 키 경로 (비밀번호 없는 접속을 위해 특정 키를 사용한다면 지정, 예: ~/.ssh/my_remote_key)
- SSH_KEY_PATH="~/.ssh/id_rsa" # 기본 키를 사용한다면 주석 처리하거나 비워둘 수 있음
- Docker 컨테이너 정보 (원격 서버 기준)
DB_CONTAINER_NAME="dolibarr_mariadb_container_name" # 실제 MariaDB/MySQL 컨테이너 이름 APP_CONTAINER_NAME="dolibarr_app_container_name" # 실제 Dolibarr 앱 컨테이너 이름
- Dolibarr 데이터베이스 정보
DB_NAME="dolibarr_db_name" DB_USER="dolibarr_db_user" DB_PASSWORD="dolibarr_db_password"
- 백업 대상 디렉토리 경로 (Dolibarr 앱 컨테이너 내부)
- 중요: 이 경로는 Dolibarr 설치 및 Docker 설정에 따라 다를 수 있습니다.
- 일반적으로 documents 디렉토리는 /var/www/documents 또는 /var/lib/dolibarr/documents 등일 수 있습니다.
- conf 디렉토리는 /var/www/html/conf 또는 Dolibarr 웹 루트 아래의 htdocs/conf 입니다.
DOCUMENTS_DIR_PATH_IN_CONTAINER="/var/www/documents" CONF_DIR_PATH_IN_CONTAINER="/var/www/html/conf" # 예시 경로, 실제 경로로 수정
- 로컬 백업 저장 경로
LOCAL_BACKUP_DIR="/path/to/your/local/backup_folder" # 로컬 머신에 백업 파일을 저장할 경로
- 백업 파일 이름 설정
DATE_FORMAT=$(date +%Y%m%d_%H%M%S) DB_BACKUP_FILENAME="dolibarr_db_backup_${DATE_FORMAT}.sql.gz" FILES_BACKUP_FILENAME="dolibarr_files_backup_${DATE_FORMAT}.tar.gz"
- 원격 서버에 임시로 백업 파일을 저장할 경로
REMOTE_TEMP_BACKUP_DIR="/tmp/dolibarr_backups" # 원격 서버의 임시 저장 경로
- SSH 옵션
SSH_OPTS="" if [ ! -z "$SSH_KEY_PATH" ]; then
SSH_OPTS="-i $SSH_KEY_PATH"
fi
- --- 스크립트 시작 ---
echo "Dolibarr 백업 스크립트 시작: $(date)"
- 1. 원격 서버에 임시 백업 디렉토리 생성
ssh $SSH_OPTS -p $REMOTE_SSH_PORT $REMOTE_USER@$REMOTE_HOST "mkdir -p $REMOTE_TEMP_BACKUP_DIR" if [ $? -ne 0 ]; then
echo "오류: 원격 서버에 임시 백업 디렉토리($REMOTE_TEMP_BACKUP_DIR) 생성 실패." exit 1
fi
- 2. 데이터베이스 백업 (원격 Docker 컨테이너 내에서 실행 후 원격 호스트로 복사)
echo "데이터베이스 백업 중..."
- mysqldump 실행 및 압축. Docker 컨테이너 내에서 직접 압축하는 것이 효율적일 수 있음.
- DB_PASSWORD를 환경 변수로 전달하여 보안 강화
ssh $SSH_OPTS -p $REMOTE_SSH_PORT $REMOTE_USER@$REMOTE_HOST \
"docker exec -e MYSQL_PWD='$DB_PASSWORD' $DB_CONTAINER_NAME sh -c 'mysqldump -u $DB_USER -h localhost $DB_NAME | gzip' > $REMOTE_TEMP_BACKUP_DIR/$DB_BACKUP_FILENAME"
if [ $? -ne 0 ]; then
echo "오류: 데이터베이스 백업 실패." ssh $SSH_OPTS -p $REMOTE_SSH_PORT $REMOTE_USER@$REMOTE_HOST "rm -rf $REMOTE_TEMP_BACKUP_DIR" # 임시 디렉토리 정리 exit 1
fi echo "데이터베이스 백업 완료: $DB_BACKUP_FILENAME"
- 3. 디렉토리 백업 (documents, conf 디렉토리 - 원격 Docker 컨테이너 내에서 실행 후 원격 호스트로 복사)
echo "디렉토리 백업 중 (documents, conf)..."
- 컨테이너 내에서 직접 tar로 묶어서 압축 후 호스트로 전달
- 중요: DOCUMENTS_DIR_PATH_IN_CONTAINER와 CONF_DIR_PATH_IN_CONTAINER가 실제 컨테이너 내 경로인지 확인 필요
- 두 디렉토리가 동일한 상위 디렉토리에 있다면, 한 번의 tar 명령으로 처리 가능. 여기서는 개별적으로 처리하거나,
- docker exec 명령 내에서 cd 명령과 함께 상대 경로를 사용할 수 있습니다.
- 여기서는 두 디렉토리를 포함하는 상위 디렉토리가 있다면 그 기준으로 하는 것이 좋으나,
- 명확하지 않으므로 각각의 절대 경로를 tar에 전달하는 방식으로 구성 (만약 tar가 컨테이너 내에서 이 경로들을 올바르게 인지한다면)
- 또는, 각 디렉토리를 개별 파일로 압축할 수도 있습니다.
- 좀 더 안정적인 방법은 docker cp를 사용하여 호스트로 먼저 복사 후 압축하거나, 볼륨을 직접 압축하는 것입니다.
- 여기서는 docker exec를 이용해 컨테이너 내에서 압축하는 예를 보입니다.
- /app/documents, /app/htdocs/conf 와 같이 공통 부모가 있다면 /app 을 대상으로 할 수도 있습니다.
- 여기서는 두 경로를 함께 압축하는 예시를 보여줍니다. (두 경로가 동일한 파일 시스템에 있어야 함)
- 만약 별도의 볼륨이라면 각각 백업해야 합니다.
- documents와 conf 디렉토리의 부모 디렉토리를 알아야 효율적으로 tar 가능
- 여기서는 예시로 /var/www/ 가 두 디렉토리의 공통 부모라고 가정하고,
- documents는 html/documents (상대경로), conf는 html/conf (상대경로) 라고 가정합니다.
- 실제로는 `docker inspect APP_CONTAINER_NAME`을 통해 마운트된 볼륨이나 경로를 확인해야 합니다.
- 가장 확실한 방법은 각 디렉토리를 개별적으로 압축하거나, 볼륨을 호스트에서 직접 백업하는 것입니다.
- 여기서는 두 디렉토리를 하나의 아카이브로 묶는다고 가정하고,
- 컨테이너 내의 작업 디렉토리를 설정한 후 상대 경로로 지정합니다.
- 예: Dolibarr 파일들이 /var/www/html 에 있다면
ssh $SSH_OPTS -p $REMOTE_SSH_PORT $REMOTE_USER@$REMOTE_HOST \
"docker exec $APP_CONTAINER_NAME sh -c 'tar -czf - -C $(dirname $DOCUMENTS_DIR_PATH_IN_CONTAINER) $(basename $DOCUMENTS_DIR_PATH_IN_CONTAINER) -C $(dirname $CONF_DIR_PATH_IN_CONTAINER) $(basename $CONF_DIR_PATH_IN_CONTAINER)' > $REMOTE_TEMP_BACKUP_DIR/$FILES_BACKUP_FILENAME"
- 위 명령은 DOCUMENTS_DIR_PATH_IN_CONTAINER 와 CONF_DIR_PATH_IN_CONTAINER 의 부모 디렉토리가 다를 경우 문제가 될 수 있습니다.
- 더 안전한 방법은 다음과 같이 각 디렉토리를 명시적으로 지정하는 것입니다 (만약 이 경로들이 컨테이너 루트 기준이라면).
- ssh $SSH_OPTS -p $REMOTE_SSH_PORT $REMOTE_USER@$REMOTE_HOST \
- "docker exec $APP_CONTAINER_NAME tar -czf - $DOCUMENTS_DIR_PATH_IN_CONTAINER $CONF_DIR_PATH_IN_CONTAINER" > $REMOTE_TEMP_BACKUP_DIR/$FILES_BACKUP_FILENAME
- 만약 documents 디렉토리가 볼륨으로 마운트되어 있다면 (예: /host/path/to/documents -> /var/www/documents)
- 호스트에서 직접 해당 /host/path/to/documents를 압축하는 것이 더 간단할 수 있습니다.
if [ $? -ne 0 ]; then
echo "오류: 디렉토리 백업 실패." ssh $SSH_OPTS -p $REMOTE_SSH_PORT $REMOTE_USER@$REMOTE_HOST "rm -rf $REMOTE_TEMP_BACKUP_DIR" # 임시 디렉토리 정리 exit 1
fi echo "디렉토리 백업 완료: $FILES_BACKUP_FILENAME"
- 4. 백업 파일들을 로컬 머신으로 복사
echo "백업 파일들을 로컬 머신으로 복사 중..." mkdir -p $LOCAL_BACKUP_DIR # 로컬 백업 디렉토리 생성 (없을 경우)
scp $SSH_OPTS -P $REMOTE_SSH_PORT $REMOTE_USER@$REMOTE_HOST:$REMOTE_TEMP_BACKUP_DIR/$DB_BACKUP_FILENAME $LOCAL_BACKUP_DIR/ if [ $? -ne 0 ]; then
echo "오류: 데이터베이스 백업 파일 로컬 복사 실패." ssh $SSH_OPTS -p $REMOTE_SSH_PORT $REMOTE_USER@$REMOTE_HOST "rm -rf $REMOTE_TEMP_BACKUP_DIR" exit 1
fi
scp $SSH_OPTS -P $REMOTE_SSH_PORT $REMOTE_USER@$REMOTE_HOST:$REMOTE_TEMP_BACKUP_DIR/$FILES_BACKUP_FILENAME $LOCAL_BACKUP_DIR/ if [ $? -ne 0 ]; then
echo "오류: 디렉토리 백업 파일 로컬 복사 실패." ssh $SSH_OPTS -p $REMOTE_SSH_PORT $REMOTE_USER@$REMOTE_HOST "rm -rf $REMOTE_TEMP_BACKUP_DIR" exit 1
fi
echo "백업 파일 로컬 복사 완료."
- 5. 원격 서버의 임시 백업 파일 삭제
echo "원격 서버의 임시 백업 파일 삭제 중..." ssh $SSH_OPTS -p $REMOTE_SSH_PORT $REMOTE_USER@$REMOTE_HOST "rm -rf $REMOTE_TEMP_BACKUP_DIR" echo "원격 서버 임시 파일 삭제 완료."
- 6. (선택 사항) 로컬에 오래된 백업 파일 삭제 (예: 30일 이상된 파일 삭제)
- DAYS_TO_KEEP=30
- find $LOCAL_BACKUP_DIR -type f -name "dolibarr_db_backup_*.sql.gz" -mtime +$DAYS_TO_KEEP -exec rm -f {} \;
- find $LOCAL_BACKUP_DIR -type f -name "dolibarr_files_backup_*.tar.gz" -mtime +$DAYS_TO_KEEP -exec rm -f {} \;
- echo "오래된 로컬 백업 파일 정리 완료 (보관 기간: ${DAYS_TO_KEEP}일)."
echo "Dolibarr 백업 스크립트 완료: $(date)" exit 0 ```
- 스크립트 사용 방법 및 주의사항:**
1. **스크립트 수정:**
* `--- 설정 변수 ---` 섹션의 모든 변수들을 실제 사용자의 환경에 맞게 정확히 수정해야 합니다.
* 특히 `DOCUMENTS_DIR_PATH_IN_CONTAINER`와 `CONF_DIR_PATH_IN_CONTAINER`는 Dolibarr Docker 설정에 따라 매우 다를 수 있으므로, `docker inspect APP_CONTAINER_NAME` 명령 등을 통해 정확한 경로를 확인하거나, Docker 볼륨을 사용한다면 호스트 경로를 직접 압축하는 방식을 고려하세요.
* 만약 `documents` 디렉토리와 `conf` 디렉토리가 Docker 볼륨으로 호스트 머신에 마운트되어 있다면, `docker exec`를 사용하는 대신 SSH로 원격 호스트에 접속하여 해당 호스트 경로를 직접 `tar`로 압축하는 것이 더 간단하고 효율적일 수 있습니다. 이 경우 스크립트의 디렉토리 백업 부분을 수정해야 합니다.
* 예시 (호스트에서 직접 볼륨 백업):
```bash
# REMOTE_HOST_DOCUMENTS_PATH="/path/on/host/to/documents_volume"
# REMOTE_HOST_CONF_PATH="/path/on/host/to/conf_volume"
# ssh $SSH_OPTS -p $REMOTE_SSH_PORT $REMOTE_USER@$REMOTE_HOST \
# "tar -czf $REMOTE_TEMP_BACKUP_DIR/$FILES_BACKUP_FILENAME -C $(dirname $REMOTE_HOST_DOCUMENTS_PATH) $(basename $REMOTE_HOST_DOCUMENTS_PATH) -C $(dirname $REMOTE_HOST_CONF_PATH) $(basename $REMOTE_HOST_CONF_PATH)"
```
2. **실행 권한 부여:**
* 스크립트를 저장한 후 실행 권한을 부여합니다: `chmod +x your_backup_script_name.sh`
3. **테스트 실행:**
* 스크립트를 수동으로 실행하여 모든 과정이 정상적으로 작동하는지, 오류는 없는지 꼼꼼히 확인합니다. * 특히 파일 경로, 컨테이너 이름, 데이터베이스 정보 등이 정확한지 확인합니다. * 백업된 파일이 로컬에 정상적으로 생성되고, 압축 해제 시 내용이 올바른지 확인합니다.
4. **자동 실행 등록 (Cron 작업):**
* 로컬 머신에서 `crontab -e` 명령을 사용하여 cron 작업을 등록합니다.
* 예시 (매일 새벽 3시에 스크립트 실행):
```cron
0 3 * * * /path/to/your/your_backup_script_name.sh >> /path/to/your/backup_log_file.log 2>&1
```
* 스크립트의 절대 경로를 사용해야 합니다.
* 로그 파일 경로를 지정하여 실행 결과 및 오류를 기록하는 것이 좋습니다.
* **주의:** cron 환경에서는 사용자의 일반적인 셸 환경 변수가 모두 설정되어 있지 않을 수 있습니다. 스크립트 내에서 필요한 모든 경로를 절대 경로로 지정하거나, 스크립트 상단에서 필요한 환경 변수(예: `PATH`)를 명시적으로 설정하는 것이 안전합니다. SSH 키 경로도 마찬가지입니다.
- 보안 고려 사항:**
- **데이터베이스 비밀번호:** 스크립트에 데이터베이스 비밀번호를 직접 작성하는 것은 보안상 좋지 않습니다.
* **대안 1 (권장):** `docker exec` 시 `-e MYSQL_PWD='$DB_PASSWORD'` 와 같이 환경 변수로 전달하면 그나마 덜 노출됩니다. * **대안 2:** 원격 서버의 Docker 컨테이너가 `.my.cnf` 파일과 같은 MySQL/MariaDB 설정 파일을 읽을 수 있도록 설정하고, 해당 파일에 인증 정보를 저장합니다. (Docker 볼륨 매핑 필요) * **대안 3:** HashiCorp Vault 같은 시크릿 관리 도구를 사용하는 것도 고려할 수 있지만, 설정이 복잡해질 수 있습니다.
- **SSH 키 보안:** SSH 개인키는 안전하게 보관되어야 하며, 불필요한 권한을 가지지 않도록 설정합니다.
- **백업 파일 암호화:** 로컬로 가져온 백업 파일에 민감한 정보가 있다면, 추가적으로 GPG 등을 사용하여 암호화하는 것을 고려할 수 있습니다.
이 스크립트는 기본적인 틀을 제공하며, 사용자의 특정 환경과 요구 사항에 맞게 커스터마이징하여 사용해야 합니다. 특히 Docker 볼륨 사용 여부와 그에 따른 백업 대상 경로 지정이 중요합니다.
Synology 이용
- Synology Drive ShareSync 사용
Synology NAS 공유 폴더 동기화는 크게 두 가지 방법으로 설정할 수 있습니다.
1. **공유 폴더 동기화 (Rsync 기반)**: 두 대의 Synology NAS 간에 공유 폴더를 단방향 또는 양방향으로 동기화하는 기능입니다. 주로 백업 또는 데이터 미러링 목적으로 사용됩니다. 2. **Synology Drive ShareSync**: Synology Drive 패키지를 이용하여 여러 대의 Synology NAS 간에 파일을 실시간 또는 예약 동기화하는 기능입니다. 좀 더 유연하고 다양한 동기화 옵션을 제공하며, 협업 환경에 적합합니다.
두 가지 방법 모두 장단점이 있으므로, 사용자의 환경과 목적에 맞는 방법을 선택하는 것이 중요합니다.
- 1. 공유 폴더 동기화 (Rsync 기반) 사용법**
이 방법은 주로 두 대의 Synology NAS (원본 NAS와 대상 NAS) 간에 데이터를 동기화할 때 사용됩니다.
- 사전 준비 사항:**
- **대상 NAS에서 Rsync 서비스 활성화:**
1. 대상 Synology NAS에 로그인합니다. 2. `제어판` > `파일 서비스` > `rsync` 탭으로 이동합니다. 3. `rsync 서비스 활성화`를 선택하고 `적용`을 클릭합니다.
- **포트 확인:** 방화벽이나 라우터에서 rsync 포트 (기본값: 873) 및 SSH 포트 (암호화된 전송 시, 기본값: 22)가 열려 있는지 확인합니다.
- **서버 이름 확인:** 원본 NAS와 대상 NAS의 서버 이름이 서로 달라야 합니다.
- 동기화 작업 생성 (원본 NAS에서 수행):**
1. 원본 Synology NAS에 로그인합니다. 2. `제어판` > `파일 서비스` > `고급` 탭 > `공유 폴더 동기화`로 이동합니다. (DSM 버전에 따라 메뉴 위치가 약간 다를 수 있습니다. 예를 들어 DSM 6.2 이전 버전에서는 `제어판` > `공유 폴더 동기화`로 바로 이동할 수 있습니다.) 3. `작업 목록`을 클릭하고 `생성`을 클릭합니다. 4. **작업 이름 설정:** 동기화 작업의 이름을 입력합니다. 5. **동기화할 공유 폴더 선택:** 원본 NAS에서 동기화할 공유 폴더를 하나 이상 선택합니다. 6. **대상 NAS 정보 입력:**
* 대상 Synology NAS의 IP 주소 또는 서버 이름을 입력합니다. * 대상 NAS의 관리자 그룹에 속하는 사용자 계정 정보를 입력합니다.
7. **동기화 모드 선택:**
* **수정 시 동기화 실행:** 원본 폴더에 변경 사항이 생기면 즉시 동기화합니다 (실시간 동기화). * **수동으로 동기화 실행:** 사용자가 직접 실행할 때만 동기화합니다. * **고급 스케줄:** 특정 시간에 주기적으로 동기화하도록 예약합니다.
8. **기타 설정:**
* **SSH 전송 암호화 활성화:** 데이터 전송 중 보안을 강화하려면 이 옵션을 선택하고 SSH 포트를 지정합니다. * **전송 압축 활성화:** 전송 속도를 높일 수 있지만, NAS의 CPU 사용량이 증가합니다. * **블록 레벨 동기화 사용:** 변경된 블록만 동기화하여 효율성을 높입니다.
9. 설정을 완료하고 마법사를 따릅니다.
- 동기화 작업 관리:**
- `제어판` > `공유 폴더 동기화` > `작업 목록`에서 생성된 작업을 편집, 삭제, 즉시 동기화 또는 전체 동기화를 수행할 수 있습니다.
- 참고 사항:**
- 암호화된 공유 폴더를 Btrfs (Peta Volume) 파일 시스템에서 동기화하는 것은 지원되지 않을 수 있습니다.
- 여러 원본 NAS에서 동일한 공유 폴더를 하나의 대상 NAS로 동시에 동기화하면 충돌이 발생할 수 있습니다.
- 2. Synology Drive ShareSync 사용법**
Synology Drive ShareSync는 좀 더 유연하고 사용자 친화적인 인터페이스를 제공하며, 양방향 동기화 및 버전 관리 기능을 지원합니다.
- 사전 준비 사항:**
- **Synology Drive Server 패키지 설치:** 동기화에 참여하는 모든 Synology NAS에 `패키지 센터`에서 `Synology Drive Server`를 설치하고 실행합니다.
- **팀 폴더 활성화:**
1. Synology Drive 관리 콘솔을 실행합니다. 2. `팀 폴더` 섹션으로 이동합니다. 3. 동기화하려는 공유 폴더를 선택하고 `활성화`를 클릭합니다. 필요에 따라 버전 관리 설정을 구성합니다.
- **사용자 권한 확인:** `제어판` > `공유 폴더`에서 해당 폴더에 대한 사용자 권한이 올바르게 설정되었는지 확인합니다.
- **포트 전달 (필요시):** 외부 네트워크에서 NAS에 접속하여 동기화하려면 라우터에서 Synology Drive ShareSync가 사용하는 포트 (기본값: 6690)를 포트 포워딩해야 할 수 있습니다.
- Synology Drive ShareSync 설정 (로컬 NAS에서 수행):**
1. 동기화를 설정할 로컬 Synology NAS에 로그인합니다. 2. `Synology Drive ShareSync` 패키지를 실행합니다. (처음 실행 시 설정 마법사가 나타날 수 있습니다.) 3. `지금 시작` 또는 `+` 버튼을 클릭하여 새 연결을 만듭니다. 4. **원격 NAS 정보 입력:**
* 동기화할 원격 Synology NAS의 IP 주소, QuickConnect ID 또는 DDNS 호스트 이름을 입력합니다. * 원격 NAS의 사용자 이름과 암호를 입력합니다. (관리자 그룹 권한 필요)
5. **동기화할 공유 폴더 선택:**
* 원격 NAS의 팀 폴더로 활성화된 공유 폴더 목록이 나타납니다. * 동기화할 원격 공유 폴더를 선택하고, 로컬 NAS에 동기화될 폴더를 지정합니다.
6. **동기화 옵션 설정:**
* **동기화 방향:**
* 양방향 동기화
* 원격 NAS에서만 데이터 다운로드 (단방향)
* 로컬 NAS로만 데이터 업로드 (단방향)
* **고급 설정:** 파일 필터 (특정 파일 크기, 확장명 제외 등), 동기화 모드 (필요시 동기화 - 공간 절약) 등을 설정할 수 있습니다.
7. 설정을 완료하고 저장합니다.
- 동기화 작업 관리:**
- Synology Drive ShareSync 인터페이스에서 연결된 NAS 목록, 동기화된 폴더, 로그 등을 확인할 수 있습니다.
- 각 연결 또는 폴더별로 동기화 일시 중지/다시 시작, 편집, 연결 해제 등의 작업을 수행할 수 있습니다.
- 참고 사항:**
- "homes" 사용자 홈 폴더를 동기화하는 경우, `공유 폴더 동기화`는 단방향이며 대상 NAS에서 사용자 홈 서비스가 비활성화될 수 있습니다. 반면 `Synology Drive ShareSync`는 양방향 동기화를 지원하며 사용자 홈 서비스를 유지할 수 있습니다.
- 파일 충돌이 발생할 경우 해결 정책을 설정할 수 있습니다.
- 어떤 방법을 선택해야 할까요?**
- **단순 백업 또는 두 NAS 간의 일방/양방향 동기화가 주 목적이라면:** `공유 폴더 동기화 (Rsync 기반)`가 좋은 선택일 수 있습니다.
- **여러 NAS 간의 유연한 동기화, 실시간 협업, 버전 관리, 사용자 친화적인 인터페이스가 필요하다면:** `Synology Drive ShareSync`를 사용하는 것이 좋습니다.