Debian 12에서 WireGuard Point-to-Site VPN을 구성하는 방법
원격 클라이언트 한 명을 위해 Debian 12 기반 WireGuard VPN 서버를 설정합니다. 키, IPv4 포워딩, nftables NAT, 방화벽 액세스 및 연결 확인을 구성합니다.
안정적인 Nextcloud 백업을 위해서는 사용자 활동을 일시 중지하고 데이터베이스를 내보낸 다음, Restic을 사용하여 내보낸 데이터베이스와 애플리케이션 및 데이터 디렉터리를 함께 캡처하십시오. 이 작업을 루트 권한으로 실행되는 스크립트에 추가하고 cron을 사용하여 예약 실행하십시오. 예약된 작업을 완전히 실행하기 전에 스냅샷을 확인하고 테스트 복원을 수행하십시오.
이 예제는 Debian 또는 Ubuntu 서버, Nextcloud 직접 설치( /var/www/nextcloud경로: `/ /srv/nextcloud-datanextcloud ...

Nextcloud의 백업 지침에서는 구성, 데이터, 데이터베이스, 테마 및 사용자 지정 앱을 보존해야 할 중요한 부분으로 나열합니다. 전체 애플리케이션 디렉터리 백업에는 일반적으로 구성 및 기본 제공 앱이 포함되지만, 사용자 지정 앱, 테마 또는 데이터 디렉터리가 서버의 다른 위치에 있는지 확인해야 합니다. Restic 명령에 모든 경로를 개별적으로 포함시키세요.
유지 관리 모드는 백업이 실행되는 동안 기존 세션을 잠그고 새 로그인을 차단합니다. 이렇게 하면 데이터베이스와 파일이 여러 시점에 걸쳐 변경될 가능성이 줄어들지만, 백업이 진행되는 동안 Nextcloud를 사용할 수 없게 됩니다. 대용량 데이터의 경우, 작업이 비교적 한가한 시간대에 작업을 예약하십시오. 서버에 데이터 디렉터리에 직접 쓰는 외부 워커 또는 스크립트가 있는 경우, 해당 프로세스도 일시 중지해야 합니다.
Nextcloud의 공식 백업 지침에는 구성 요소 및 데이터베이스 내보내기 옵션이 설명되어 있습니다. 이 절차는 MariaDB를 사용하며, PostgreSQL, MySQL 또는 SQLite의 경우 해당 설명서의 데이터베이스 섹션 에 있는 덤프 및 복원 명령을 사용하십시오 .
배포판의 신뢰할 수 있는 패키지 소스를 사용하여 Restic과 MariaDB 클라이언트를 설치하십시오. 다른 디스크 또는 원격 백업 대상에 저장소를 선택하십시오. Nextcloud 서버에만 저장된 저장소는 해당 서버 또는 스토리지 손실로부터 보호하지 못합니다. 백업 대상 디렉터리 내에 저장소를 배치하지 마십시오.
Restic은 저장소 데이터를 암호화하지만, 복원하려면 저장소 암호가 필요합니다. 암호 파일을 생성하고 승인된 암호 관리자와 같은 안전한 서버에 사본을 보관하십시오. 암호를 분실하면 암호화된 저장소를 읽을 수 없습니다. 명령줄, crontab 또는 스크립트에 암호를 직접 입력하지 마십시오.
sudo install -d -m 700 /root/.config/restic
sudo install -m 600 /dev/null /root/.config/restic/nextcloud-password
sudo install -m 600 /dev/null /root/.config/restic/nextcloud.env
선택한 Restic 암호를 암호 파일에 안전하게 저장하십시오. 저장소 위치와 암호 파일 경로를 환경 변수에 추가하십시오.
RESTIC_REPOSITORY=/mnt/backup/nextcloud
RESTIC_PASSWORD_FILE=/root/.config/restic/nextcloud-password
원격 백엔드를 사용하는 경우, 해당 백엔드의 공식 저장소 URL과 제한된 권한으로 저장된 자격 증명을 사용하십시오. Restic은 저장소 준비 가이드 에서 저장소 설정 및 지원되는 암호 파일 환경 변수에 대한 정보를 제공합니다 . 새 저장소는 실행할 때마다 초기화할 필요 없이 한 번만 초기화하십시오.
set -a
. /root/.config/restic/nextcloud.env
set +a
restic init

/root/.my.cnfMariaDB 자격 증명도 보호해야 합니다. 데이터베이스 사용자, 암호 및 호스트를 포함하는 루트 사용자가 읽을 수 있는 클라이언트 옵션 파일을 구성한 다음 권한을 설정하십시오 600. 아래 스크립트는 해당 파일을 전달하므로 mariadb-dump데이터베이스 암호가 프로세스 인수에 나타나지 않습니다.
다음 내용을 로 저장하세요 /usr/local/sbin/nextcloud-restic-backup. NC_DATA_DIR및 DB_NAME를 에 맞게 조정하세요 config/config.php. 이 스크립트는 유지 관리 모드를 활성화하고, MariaDB를 내보내고, 애플리케이션, 데이터 및 임시 SQL 덤프를 백업한 다음, 이후 명령이 실패하더라도 유지 관리 모드를 비활성화합니다.
#!/usr/bin/env bash
set -Eeuo pipefail
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
NC_DIR=/var/www/nextcloud
NC_DATA_DIR=/srv/nextcloud-data
DB_NAME=nextcloud
RESTIC_ENV=/root/.config/restic/nextcloud.env
DB_CNF=/root/.my.cnf
set -a
source "$RESTIC_ENV"
set +a
exec 9>/run/lock/nextcloud-restic.lock
flock -n 9 || exit 0
mountpoint -q /mnt/backup || {
echo "Backup target is not mounted" >&2
exit 1
}
install -d -m 700 /var/backups/nextcloud
STAGE_DIR=$(mktemp -d /var/backups/nextcloud/db.XXXXXX)
maintenance_on=0
cleanup() {
if [[ "$maintenance_on" -eq 1 ]]; then
sudo -u www-data php "$NC_DIR/occ" maintenance:mode --off ||
logger -t nextcloud-restic "Could not disable maintenance mode"
fi
rm -rf "$STAGE_DIR"
}
trap cleanup EXIT
trap 'exit 130' INT
trap 'exit 143' TERM
sudo -u www-data php "$NC_DIR/occ" maintenance:mode --on
maintenance_on=1
mariadb-dump --defaults-extra-file="$DB_CNF" --single-transaction --default-character-set=utf8mb4 "$DB_NAME" > "$STAGE_DIR/nextcloud.sql"
test -s "$STAGE_DIR/nextcloud.sql"
restic backup "$NC_DIR" "$NC_DATA_DIR" "$STAGE_DIR" --tag nextcloud
루트 사용자만 스크립트를 편집하거나 실행할 수 있도록 소유권과 권한을 설정한 다음, 유지 관리 시간 동안 수동으로 테스트하십시오. 이 mountpoint검사는 백업 디스크가 누락된 경우 대용량 저장소가 서버의 로컬 파일 시스템으로 조용히 전송되는 것을 방지합니다. 저장소가 로컬에 마운트된 것이 아니라 원격에 있는 경우, 이 검사를 백엔드에 대한 신뢰할 수 있는 검사로 대체하십시오.
처음 실행하기 전에 경로를 검토하십시오. 데이터 폴더가 이미 안에 있는 경우 /var/www/nextcloud예제 경로가 올바르다고 가정하지 말고 Nextcloud 구성에서 실제 데이터 디렉터리를 사용하십시오. 또한 애플리케이션 디렉터리 외부에 저장된 사용자 지정 앱이나 테마가 명시적으로 포함되었는지 확인하십시오.

수동 실행이 성공적으로 완료되면 루트 crontab 항목을 추가합니다 sudo crontab -e. 이 예제는 스크립트의 전체 경로를 사용하여 매일 오전 2시 30분에 작업을 시작하고 문제 해결을 위해 출력을 기록합니다.
30 2 * * * /usr/local/sbin/nextcloud-restic-backup >> /var/log/nextcloud-restic.log 2>&1
cron은 제한적인 환경을 제공하므로 스크립트는 명시적으로 시간을 설정 PATH하고 Restic 설정을 직접 로드합니다. 사용하는 배포판에서 cron이 활성화되어 있는지, 그리고 이 시간이 Nextcloud의 백그라운드 작업 실행기 또는 다른 유지 관리 작업과 겹치지 않는지 확인하십시오. Linux crontab 설명서에서 스케줄 형식과 cron이 제공하는 환경에 대한 자세한 내용을 확인할 수 있습니다.
작업이 /var/log/nextcloud-restic.log성공적으로 완료되었는지 확인하려면 종료 상태와 최근 스냅샷 목록을 확인하세요.
sudo bash -lc 'set -a; source /root/.config/restic/nextcloud.env; set +a; restic snapshots'
sudo bash -lc 'set -a; source /root/.config/restic/nextcloud.env; set +a; restic check'
Restic의 일반적인 check검사는 저장소 구조를 검증합니다. 전체 데이터 읽기는 시간이 오래 걸리고 원격 저장소의 경우 상당한 대역폭을 사용할 수 있습니다. 따라서 restic check --read-data주기적으로 검사하거나, --read-data-subset시간을 두고 부분적으로 검사하는 방식을 사용하는 것이 좋습니다. 자세한 내용은 Restic의 저장소 무결성 문서를 참조하십시오 .
스냅샷 목록은 복원 테스트가 아닙니다. 최근 스냅샷을 별도의 임시 디렉터리에 복원한 restic restore latest --target /tmp/nextcloud-restore-test다음, 애플리케이션 파일, 데이터 디렉터리 및 SQL 덤프가 있는지 확인하십시오. 테스트 목적으로 운영 중인 설치 환경에 복원하지 마십시오. 실제 복구를 위해서는 파일과 데이터베이스를 하나의 일치하는 세트로 복원해야 합니다. Nextcloud의 복원 지침에는 데이터베이스 재구성 및 클라이언트 동기화 관련 내용이 포함되어 있습니다.
이 설정은 반복 가능한 암호화 스냅샷을 제공하지만, cron은 자체 오류를 모니터링하지 않으며 Restic은 보존 정책을 결정하지 않습니다. 로그를 검토하거나 실행 실패에 대한 알림을 구성하고, 저장소 자격 증명 사본을 별도로 보관하고, 정기적으로 복구를 테스트하십시오. 유지 관리 기간이 너무 긴 경우, 변경되는 파일을 실시간으로 백업하는 대신 스토리지 플랫폼에 맞게 설계된 통합 파일 시스템 스냅샷과 데이터베이스 일관성 내보내기를 사용하십시오.

원격 클라이언트 한 명을 위해 Debian 12 기반 WireGuard VPN 서버를 설정합니다. 키, IPv4 포워딩, nftables NAT, 방화벽 액세스 및 연결 확인을 구성합니다.
Nextcloud 파일과 MariaDB를 함께 백업하고, cron을 사용하여 암호화된 Restic 스냅샷을 예약하고, 운영 서버에 위험을 초래하지 않고 복구를 검증하세요.
데비안에서 SSH 키, fstab, systemd 자동 마운트를 사용하여 SSHFS 부팅 마운트를 구성하는 방법입니다. 재부팅 확인, 권한 설정, 타임아웃 및 문제 해결 기능도 포함되어 있습니다.
Zimbra Community Edition 개별 사서함을 내보내고, TGZ 백업의 유효성을 검사하고, 기존 메일을 덮어쓰지 않고 누락된 항목을 복원할 수 있습니다.
Keycloak 및 토큰 인증을 사용하여 승인된 계정만 Jitsi Meet 회의실을 시작할 수 있도록 허용하고, 필요한 경우 게스트 참여도 허용합니다.
ONLYOFFICE DocSpace를 Active Directory 또는 OpenLDAP에 연결하고, 사용자 및 그룹을 안전하게 가져오고, 계정 필드를 매핑하고, 안정적인 동기화를 예약하세요.
ONLYOFFICE Document Server에 사용자 지정 글꼴을 설치하고, Docker 마운트된 글꼴과 직접 복사된 글꼴을 비교하고, 글꼴 목록을 다시 빌드하고, 결과를 확인합니다.
ONLYOFFICE Docs에 대해 HAProxy HTTPS, 전달 헤더, WebSocket 시간 초과 및 상태 확인을 구성한 다음 편집 및 저장이 제대로 되는지 확인합니다.
보안 부팅을 비활성화하지 않고 사용자 지정 SLES 15 커널 모듈을 로드합니다. 실행 중인 커널과 일치시키고, .ko 파일에 서명하고, MOK 키를 등록하고, 로드 여부를 확인합니다.
SLES 시스템 로그를 인증된 TLS를 통해 원격 rsyslog 수집기로 전송하고, 인증서 확인, 장애 버퍼링 및 전송 테스트를 수행합니다.