uVersion
한국어
다운로드 →

Wiki

서버 설정 및 마이그레이션

config.toml 편집, 데이터 디렉터리 이동, 다른 곳의 PostgreSQL 데이터베이스 사용, 백업 및 복원.

모든 것은 하나의 파일 /etc/uversion/config.toml에서 설정합니다. 설치 프로그램이 이 파일을 생성하며, 이후에는 자유롭게 편집할 수 있습니다.

설정 파일

편집한 다음 재시작하세요: 서버는 시작할 때만 설정을 읽습니다.

sudo nano /etc/uversion/config.toml
sudo systemctl restart uversion-server

여러분이 손대게 될 필드는 다음과 같습니다. 일부 발췌입니다: 파일에는 다른 섹션도 있으며, 일부 필수 필드는 아래에 나타나지 않습니다. 이 블록으로 파일을 덮어쓰지 말고, 해당 줄만 편집하세요.

# EXTRAIT PARTIEL : le fichier contient d'autres sections.
# N'ecrasez jamais votre fichier avec ce bloc, editez les lignes concernees.

[server]
bind_address = "0.0.0.0"
port = 8080

[database]
# Ou toute base PostgreSQL accessible : autre disque, autre machine, service manage.
url = "postgres://uversion:MOTDEPASSE@127.0.0.1:5432/uversion"

[security]
# Le secret qui signe les sessions. Obligatoire et SANS valeur par defaut :
# absent ou plus court que 32 caracteres, le serveur refuse de demarrer.
# L'installateur en genere un. Le remplacer deconnecte tout le monde une fois.
jwt_secret = "..."

[storage]
# Le contenu des fichiers (les chunks, morceaux de fichiers). C'est ce qui grossit.
path = "/var/lib/uversion/data/chunks"

[tls]
disabled = false
https_port = 8443

[licence]
key = "..."
파일 권한 이 파일에는 라이선스 키, 세션에 서명하는 시크릿, 데이터베이스 비밀번호가 들어 있습니다. 0640 root:uversion 상태입니다: 그대로 유지하세요.

데이터가 있는 곳

서로 다른 세 곳이 있으며, 이것이 가장 놀라운 점입니다. 세 번째인 설정은 백업에서 가장 자주 잊히는 곳이기도 합니다:

무엇을어디에
파일 내용(청크, 파일 조각: 용량을 차지하는 것)/var/lib/uversion/data/chunks
TLS 인증서, 서버 지문/var/lib/uversion/data/tls
서버 신원, 라이선스 앵커/var/lib/uversion/server-id, last-validated-at
메타데이터(파일, 리비전, 사용자, 잠금, 권한, 작업)PostgreSQL: /var/lib/postgresql/16/main
설정: 라이선스 키, 세션 서명 시크릿, 데이터베이스 비밀번호/etc/uversion/config.toml, /etc/uversion/licence-key
데이터베이스는 데이터 디렉터리를 따라가지 않습니다 데이터 디렉터리를 변경하면 청크와 인증서는 이동하지만 데이터베이스는 이동하지 않습니다. 그리고 데이터베이스는 청크를 지문으로 참조합니다: 하나만 옮기면 서버는 찾을 수 없는 청크를 찾게 됩니다. 둘 다 옮기거나, 아무것도 옮기지 마세요.

데이터 디렉터리 이동

흔한 경우입니다: 내용이 커지고 시스템 파티션은 작습니다. 데이터베이스 자체는 작게 유지됩니다(파일 크기가 아니라 리비전 수에 따라 커집니다).

1. 서비스 중지

sudo systemctl stop uversion-server

2. 디렉터리 복사

권한과 소유자를 보존하는 것은 -a입니다. 이동이 아니라 복사하면 최종 확인까지 되돌릴 여지가 남습니다.

sudo mkdir -p /srv/uversion
sudo rsync -a /var/lib/uversion/ /srv/uversion/
sudo chown -R uversion:uversion /srv/uversion
sudo chmod 0750 /srv/uversion

3. 설정을 새 경로로 지정

이 단계는 필수이며 다음 단계보다 먼저 옵니다: 아래의 "순서가 중요합니다" 상자를 참조하세요.

sudo sed -i 's#/var/lib/uversion#/srv/uversion#g' /etc/uversion/config.toml

4. 설치 프로그램에 새 경로 알리기

"Data directory" 질문에 새 경로를 답하세요. 설치 프로그램은 이 답변을 바탕으로 systemd 유닛을 다시 쓰고, 그런 다음 서비스를 재시작합니다.

sudo dpkg-reconfigure uversion-server
#   Data directory : /srv/uversion

5. 유닛이 실제로 그곳을 가리키는지 확인

systemctl cat uversion-server | grep -E 'WorkingDirectory|ReadWritePaths'
systemctl status uversion-server
dpkg-reconfigure를 거치고, systemd 유닛을 직접 쓰지 마세요 설치 프로그램은 /etc/systemd/system/uversion-server.service.d/10-data-dir.conf를 스스로 작성하며, 여러분이 준 답변을 바탕으로 구성할 때마다 다시 씁니다. 손으로 놓아둔 파일은 다음 업데이트까지 남아 있습니다(Update now 버튼으로 트리거되는 것 포함): 그때 유닛은 다시 예전 폴더를 가리키고, 설정은 새 폴더에 씁니다. 강화된 서비스(ProtectSystem=strict)는 정상적으로 시작되고, 몇 주 뒤 첫 파일 전송에서 깨집니다.
순서가 중요합니다: 먼저 config.toml을 편집하세요 dpkg-reconfigure만으로는 충분하지 않습니다. 설치 프로그램은 거기서 찾은 폴더가 더 이상 존재하지 않을 때만 [storage].path를 수정합니다: 여전히 존재하는 사용자 지정 경로는 의도적인 선택으로 간주되어 그대로 남습니다. 이동이 아니라 복사했으므로 예전 폴더는 아직 존재하며, 따라서 위의 2단계는 필수입니다. 모든 것을 확인하고 서버가 새 경로에서 가동되면 예전 폴더를 삭제할 수 있습니다.
절대 /home이나 /root 아래에 두지 마세요 서비스는 강화된 시스템 사용자로 동작합니다(ProtectHome=true, 그리고 개인 디렉터리는 시스템 계정이 통과할 수 없습니다). /home이나 /root 아래 경로는 시작을 막습니다(226/NAMESPACE 또는 200/CHDIR). 시스템 경로를 선택하세요: /srv, /opt, 또는 마운트된 디스크.

데이터베이스를 다른 곳에 두기

설치 프로그램은 로컬 데이터베이스를 만들지만, 거기에 얽매일 필요는 없습니다. url을 도달 가능한 임의의 PostgreSQL 데이터베이스로 지정하세요: 별도 클러스터로 마운트된 다른 디스크, 다른 머신, 또는 관리형 서비스.

[database]
url = "postgres://UTILISATEUR:MOTDEPASSE@HOTE:5432/BASE"

그런 다음 재시작하세요. 서버는 시작할 때 마이그레이션을 적용합니다: 데이터베이스 구조를 스스로 업데이트합니다. 빈 데이터베이스는 초기화되고, 더 오래된 데이터베이스는 업그레이드되며, 손으로 실행할 것은 없습니다.

지정한 역할이 대상 데이터베이스에서 테이블을 만들 수 있기만 하면 됩니다.

데이터 디스크의 데이터베이스

이전 섹션은 다른 곳에서 관리하는 데이터베이스를 가정합니다. 목적이 다르다면: 머신이 죽었을 때 살아남은 디스크 하나만으로 서버를 되살릴 수 있게 하는 것이 목표라면, 설치 프로그램은 데이터베이스를 데이터 디렉터리 안에 전용 PostgreSQL 클러스터 형태로 둘 수 있습니다: 자체 폴더와 자체 포트를 가진, 시스템의 것과 독립된 별도의 PostgreSQL 인스턴스입니다.

이 질문은 설치 시 물어봅니다. 이미 가동 중인 Debian 서버에서 활성화하려면:

sudo dpkg-reconfigure uversion-server
#   Data directory                     : /srv/uversion
#   Put the database on the data directory too?  Yes

Windows에서

약속은 같지만 방식은 다릅니다. Windows에는 이름이 지정된 클러스터가 없습니다: 설치 프로그램은 PostgreSQL 인스턴스 자체를 데이터 디렉터리로 옮기고 서비스를 다시 가리킵니다. 이 선택은 설치 시 스크립트 매개변수에 -DbOnDataDir를 추가하여 이루어집니다. 질문으로 제공되지 않습니다: 스크립트는 활성화 코드만 물어보므로, 이 매개변수를 전달하지 않으면 데이터베이스는 기본 위치에 남습니다. 명령의 정확한 형식은 Windows에 설치를 참조하세요. 원라이너는 어떤 매개변수도 받을 수 없다는 점에 유의하세요.

# PowerShell en administrateur, installation en ligne de commande
& ([scriptblock]::Create((iwr https://uversion.io/downloads/server/install.ps1 -UseBasicParsing).Content)) `
    -LicenceKey "UV-XXXX-XXXX-XXXX" -DataDir "D:\uVersion" -DbOnDataDir

# verifier ensuite ou pointe le service PostgreSQL
(Get-CimInstance Win32_Service -Filter "Name='postgresql-x64-16'").PathName

인스턴스가 uVersion의 것 외의 데이터베이스를 호스팅하거나, 그 디렉터리가 자체 완결적이지 않으면 이동은 이유가 표시된 채 거부됩니다: 테이블스페이스의 존재, 정션으로 옮겨진 pg_wal, 또는 postgresql.conf에 적힌 절대 경로. 아무것도 삭제되지 않습니다: 설치 프로그램은 복사하고 검증하며 새 복사본에서 서비스를 시작하고, 그런 다음에야 예전 디렉터리의 이름을 바꿉니다.

Linux와의 두 가지 차이 Windows는 서비스를 디스크 뒤로 기다리게 할 수 없습니다: RequiresMountsFor에 해당하는 것이 없습니다. 늦게 도착한 외장 디스크는 의존성이 아니라 서비스의 복구 동작으로 처리됩니다. 그리고 PostgreSQL은 Windows에서 디렉터리 권한을 전혀 확인하지 않습니다: 이를 제한하는 것은 설치 프로그램이며, 서버 쪽에는 안전망이 없습니다.

그러면 디스크에 모든 것이 담깁니다:

/srv/uversion/
├── data/chunks       contenu des fichiers
├── data/tls          certificat, empreinte
├── pgdata/16         LA BASE (cluster PostgreSQL dedie)
└── recovery/         procedure + fichiers necessaires a la reprise
    ├── RESTORE.md
    ├── pgconf/       postgresql.conf, pg_hba.conf, pg_ident.conf
    ├── etc/          copie de config.toml et du mot de passe
    └── cluster.env

클러스터는 자동으로 할당된 자체 포트를 받고(비어 있으면 5433), config.toml은 그것을 가리키도록 업데이트됩니다. 시스템 클러스터는 건드리지 않습니다: 계속 다른 데이터베이스를 호스팅할 수 있습니다.

"예"라고 하기 전에 알아야 할 두 가지 대가 PostgreSQL 데이터 디렉터리는 그것을 만든 메이저 버전으로만 열립니다: 3년 뒤의 복구에는 PostgreSQL 16을 명시적으로 설치해야 할 수 있습니다. 그리고 이제 디스크는 라이선스 키, 세션에 서명하는 시크릿, 데이터베이스 비밀번호를 root만 접근할 수 있는 디렉터리에 담습니다: 이 디스크를 자격 증명처럼 다루세요.
이미 채워진 데이터베이스: 설치 프로그램은 이동을 거부합니다 서버가 이미 데이터를 가지고 가동 중이라면, 옵션을 활성화해도 아무것도 옮기지 않습니다: 패키지 업데이트 도중에 중단된 이사는 이사를 하지 않는 것보다 나쁩니다. 설치 프로그램은 현재 상태 그대로 두고 수동 절차를 인쇄합니다(중지, pg_dump, 클러스터 생성, 복원, url 업데이트).

새 머신에서 서버 되살리기

디스크에는 소프트웨어가 들어 있지 않습니다: PostgreSQL과 uVersion 패키지를 준비하세요. 둘의 사본을 디스크 옆에 보관해 두면 막상 필요할 때 불쾌한 놀라움을 피할 수 있습니다.

# sur la machine neuve
sudo apt install postgresql-16
# montez le disque, par exemple sur /srv/uversion
sudo apt install ./uversion-server_*.deb
#   dossier de donnees : le point de montage du disque
#   base sur le dossier de donnees : oui

설치 프로그램은 디스크에서 데이터베이스를 찾고, PostgreSQL 설정 파일을 제자리에 되돌리며(pg_createcluster가 그것들을 디렉터리 밖, 시스템 디스크로 옮겨 두었습니다), 클러스터를 등록하고, 소유자를 바로잡은 다음, config.toml의 포트와 청크 경로를 다시 맞춥니다. 디스크가 이전과 다른 마운트 지점으로 돌아오면 새 경로를 답하기만 하면 됩니다.

재설치 없는 변형을 포함한 전체 절차는 디스크 자체에 적혀 있습니다: recovery/RESTORE.md.

백업 및 복원

완전한 백업은 가지 요소입니다: 데이터베이스 내보내기(dump), 데이터 디렉터리, 그리고 설정 디렉터리.

데이터베이스 백업

메타데이터: 파일, 리비전, 사용자, 잠금.

sudo -u postgres pg_dump uversion > uversion-$(date +%F).sql

데이터 디렉터리 백업

파일의 내용, 즉 용량을 차지하는 것입니다.

sudo tar -C /var/lib/uversion -czf uversion-data-$(date +%F).tar.gz .

설정 백업

라이선스 키, 세션 서명 시크릿, 데이터베이스 비밀번호. 이것은 데이터 디렉터리 안에 있지 않습니다.

sudo tar -C /etc -czf uversion-etc-$(date +%F).tar.gz uversion
/etc/uversion을 잊지 마세요 이것은 세 번째 요소이자 가장 잊기 쉬운 것입니다: 데이터 디렉터리 안에 있지 않습니다. /etc/uversion/config.toml은 라이선스 키, 세션에 서명하는 시크릿, 데이터베이스 비밀번호를 담고 있습니다; /etc/uversion/licence-key는 라이선스 자체를 담고 있습니다. 이것들이 없으면 새 머신에서의 복원은 새 시크릿으로 다시 시작하므로 팀 전원이 한꺼번에 로그아웃되고, 라이선스를 다시 요청해야 합니다: 가입 시 받은 활성화 코드는 일회용이며 이미 소비되었습니다. 재사용할 수 있는 것은 그것이 만들어낸 라이선스 키뿐입니다.

새 머신에서 복원하려면: 패키지를 설치한 다음, 세 가지 요소를 이 순서대로 되돌리세요.

1. 데이터베이스 복원

sudo -u postgres createdb -O uversion uversion      # seulement si elle n'existe pas
sudo -u postgres psql uversion < sauvegarde.sql

2. 데이터 복원

청크를 올바른 권한으로 되돌립니다:

sudo rsync -a /mnt/backup/uversion/ /var/lib/uversion/
sudo chown -R uversion:uversion /var/lib/uversion
sudo chmod 0750 /var/lib/uversion

3. 설정 두 줄 옮겨 적기

파일 전체가 아닙니다: 설치 프로그램이 방금 쓴 파일에는 그 자신이 재정의한 데이터베이스 비밀번호가 들어 있습니다.

# N'ECRASEZ PAS le fichier neuf : ouvrez l'ancien a cote et recopiez-en
# deux lignes, et deux seulement.
#   [security] jwt_secret  -> sinon toute l'equipe est deconnectee
#   [licence]  key         -> sinon il faut redemander une licence
# Gardez le [database] url que l'installateur vient d'ecrire : il porte le
# mot de passe qu'il a lui-meme redefini.
sudo nano /etc/uversion/config.toml

4. 재시작

sudo systemctl restart uversion-server
기존 데이터베이스 위에 설치하기 설치 프로그램은 아무것도 파괴하지 않습니다: uversion 데이터베이스가 이미 있으면 그대로 재사용하고 역할 비밀번호만 재설정합니다. 따라서 먼저 dump를 복원한 다음 설치할 수 있습니다.

PostgreSQL 클러스터 이동

거의 필요하지 않습니다: 데이터베이스가 작기 때문입니다. 굳이 하겠다면, 이는 표준 PostgreSQL 작업이며 uVersion 설치 프로그램이 처리하는 것이 아닙니다. 이 클러스터(시스템의 PostgreSQL 인스턴스, 그 폴더와 포트를 가진)는 uVersion의 것 외의 데이터베이스를 호스팅할 수 있다는 점에 유의하세요.

sudo systemctl stop uversion-server
sudo pg_ctlcluster 16 main stop

sudo mkdir -p /srv/pgdata
sudo rsync -a /var/lib/postgresql/16/main/ /srv/pgdata/16/main/
sudo chown -R postgres:postgres /srv/pgdata

sudo sed -i "s#^data_directory =.*#data_directory = '/srv/pgdata/16/main'#" \
  /etc/postgresql/16/main/postgresql.conf

sudo pg_ctlcluster 16 main start
sudo systemctl start uversion-server

그런 다음 pg_lsclusters로 클러스터가 새 경로에서 온라인 상태인지 확인하세요.