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단계는 필수입니다. 모든 것을 확인하고 서버가 새 경로에서 가동되면 예전 폴더를 삭제할 수 있습니다.
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에 적힌 절대 경로. 아무것도 삭제되지 않습니다: 설치 프로그램은 복사하고 검증하며 새 복사본에서 서비스를 시작하고, 그런 다음에야 예전 디렉터리의 이름을 바꿉니다.
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은 그것을 가리키도록 업데이트됩니다. 시스템 클러스터는 건드리지 않습니다: 계속 다른 데이터베이스를 호스팅할 수 있습니다.
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로 클러스터가 새 경로에서 온라인 상태인지 확인하세요.