Wiki
Docker로 배포하기
uVersion 서버와 PostgreSQL을 컨테이너로, 턴키 방식: 이미지를 내려받아 로드하고 .env를 설정한 뒤 시작. 데이터와 데이터베이스 위치는 설정 가능.
.deb 패키지의 대안입니다: uVersion 서버와 그 PostgreSQL 데이터베이스가
컨테이너로 실행되며, 단 한 번의 docker compose up으로 기동됩니다.
컨테이너화된 배포를 선호하거나 빠르게 시험해 보고 싶을 때 이상적입니다.
사전 요구 사항: Compose v2 플러그인이 포함된 Docker Engine 20.10 이상
(docker compose version)과 uVersion 라이선스 키. 서버는 유효하고 서명된 키가
없으면 시작을 거부합니다: 계정에서 받으세요(또는
가입 페이지에서 발급받을 수 있습니다).
docker를 podman으로 바꾸세요:
podman compose pull, podman load -i,
podman compose up -d. 제공되는 docker-compose.yml은 마운트에 대해
이미 SELinux(Red Hat, Rocky, Alma, Fedora에서 기본으로 켜져 있는 접근 제어)용 라벨을
:z 접미사로 붙여 둡니다. 이 라벨이 없으면 컨테이너는 마운트된 디렉터리에 대한
접근을 거부당하고, 그 메시지는 권한 문제라기보다 데이터베이스 손상처럼 보입니다.
설치
1. compose 파일과 환경 템플릿 가져오기
두 개의 파일을, 스택의 디렉터리가 될 새 폴더에 둡니다: docker-compose.yml과
템플릿 .env입니다.
mkdir uversion && cd uversion
wget -N -O docker-compose.yml https://uversion.io/downloads/server/docker/docker-compose.yml
wget -N -O .env https://uversion.io/downloads/server/docker/env.example
2. 이미지 가져오기
온라인이라면 레지스트리로 충분합니다:
docker compose pull
인터넷에 접속할 수 없는 경우(격리된 네트워크)에는 대신 아카이브를 내려받아 로드하세요: 그것은 compose와 같은 이미지 이름을 지니므로, 기동 시 아무것도 내려받지 않고 찾아냅니다.
wget -N https://uversion.io/downloads/server/docker/uversion-server_latest_docker.tar.gz
docker load -i uversion-server_latest_docker.tar.gz
3. .env 작성하기
두 값이 필수입니다: UVERSION_LICENCE__KEY(당신의 라이선스 키, 이메일로 받은
긴 서명된 문자열)와 POSTGRES_PASSWORD(제공되는 데이터베이스용 강력한 비밀번호).
nano .env
세션에 서명하는 비밀 키는 첫 기동 시 생성되어 데이터 디렉터리에
보관됩니다. 입력할 것은 없습니다. 그것은 백업의 일부입니다: 사라지면 모두가 한 번씩 다시
로그인해야 하지만, 잃는 것은 없습니다. 직접 정하고 싶다면(최소 32자) .env에
UVERSION_SECURITY__JWT_SECRET을 작성하세요: 그것은 컨테이너에 제대로 전달되며,
컨테이너는 생성하는 대신 그것을 사용합니다.
POSTGRES_PASSWORD는 데이터베이스를 만들 때, 그 디렉터리가 비어 있을 때만
적용됩니다. 이후에 .env에서 바꿔도 PostgreSQL 쪽은 아무것도 변하지 않고 옛것을
유지합니다. 그동안 서버는 새것을 제시합니다: 연결이 끊기지만 메시지는 그 이유를 설명하지
않습니다. 실제로 바꾸려면 양쪽에서 바꾸세요:
# Changer reellement le mot de passe de la base
docker compose exec db psql -U uversion -c "ALTER USER uversion PASSWORD 'nouveau-mot-de-passe'"
# Puis reporter la MEME valeur dans POSTGRES_PASSWORD (.env) et relancer
docker compose up -d
.env를 데이터와 함께 백업하세요
여기에는 라이선스 키와 데이터베이스 비밀번호가 담겨 있고, 볼륨이 아니라
docker-compose.yml 옆에 있습니다. 데이터 디스크는 지킨 채 머신을 잃으면 아무도
접근할 수 없는 데이터베이스와 다시 신청해야 하는 라이선스가 남습니다: 가입 시 받은
활성화 코드는 한 번만 쓸 수 있고 이미 소비되었습니다. 재사용할 수 있는 것은 그것이
만들어 낸 라이선스 키뿐이며, 여기 있는 것이 바로 그것입니다. 이 파일을 비밀로
다루세요: chmod 600, 그리고 데이터베이스와 청크(파일 조각, 용량을 차지하는 것)와
같은 백업에 포함하세요.
4. 스택 시작하기
docker compose up -d
그러면 서버는 https://YOUR-HOST:8443에서 접근할 수 있습니다. 도메인이나
Let’s Encrypt 인증서는 필요하지 않습니다: TOFU 모델이 처리합니다. 즉 첫 접촉에서의 신뢰이며,
SSH가 처음에 머신의 지문 확인을 요청하는 것과 같습니다.
5. 서버 지문 확인하기
그것은 기동할 때마다 로그에 다시 기록됩니다:
# L'empreinte du serveur, reecrite dans les journaux a chaque demarrage
docker compose logs server | grep -i "TLS fingerprint"
이것이 서버 지문(인증서의 SHA-256)입니다: 서버는 8443 포트에서 자체 서명 HTTPS를 제공하고, 각 클라이언트는 첫 연결 시 그것을 확인합니다. 팀과 공유하세요 (TLS 지문 참조). 내려받은 파일을 검증하는 데 쓰는 체크섬과 혼동하지 마세요: 이것은 당신의 서버를 식별합니다.
6. 초기 관리자 비밀번호 확인하기
이 비밀번호로 admin으로 로그인한 뒤 바꾸세요. 바꾸는 즉시 파일은 삭제됩니다.
# Le mot de passe admin initial (le fichier disparait des que vous le changez)
docker compose exec server cat /data/initial-admin-password
기동을 실시간으로 따라가려면 docker compose logs -f server가 알맞지만, 일련의
명령 중간에 두지는 마세요: -f는 로그를 무한정 따라가며 제어를 결코 돌려주지
않습니다(빠져나오려면 Ctrl + C).
데이터와 데이터베이스
서버의 모든 상태(청크 저장소, TLS 인증서 따라서 지문, 서버 정체성)는 하나의 호스트
디렉터리에, PostgreSQL 데이터베이스는 다른 디렉터리에 존재합니다. 둘 다 .env에서
설정합니다:
# Dans .env : placer les donnees et la base sur un disque large et sauvegarde
UVERSION_DATA_DIR=/srv/uversion/data # chunks, cert TLS, identite serveur
UVERSION_DB_DIR=/srv/uversion/db # PostgreSQL fourni
실제 배포에서는 UVERSION_DATA_DIR를 크고 백업되는 디스크로 향하게 하세요:
Unreal 프로젝트의 바이너리 청크는 커질 수 있습니다. 컨테이너는 마운트된 디렉터리의 권한을
스스로 조정합니다(소유권을 고치는 동안만 root로 시작한 뒤 비특권 사용자로 내려갑니다).
그러므로 미리 chown할 필요가 없습니다.
이미 자리 잡은 외부 PostgreSQL을 쓰려면 .env에
UVERSION_DATABASE__URL을 작성한 뒤 docker-compose.yml의
db 서비스와 depends_on 블록을 삭제하세요.
# Dans .env : brancher un PostgreSQL existant
UVERSION_DATABASE__URL=postgres://user:motdepasse@db.interne:5432/uversion
데이터와 데이터베이스 옮기기
가장 간단한 경우는 첫 up 전에 두 변수를 설정하는 것입니다:
아직 아무것도 없으니 복사할 것이 없습니다. 스택이 이미 돌아가고 있다면 멈춘 뒤 소유권을
보존하면서 디렉터리를 손으로 복사해야 합니다.
1. 스택 멈추기
복사 중에는 아무것도 써서는 안 됩니다:
docker compose down
2. 두 디렉터리 복사하기
소유권과 권한을 보존하는 것은 -a입니다:
sudo rsync -a ./data/server/ /srv/uversion/data/
sudo rsync -a ./data/db/ /srv/uversion/db/
3. .env를 새 위치로 향하게 하기
# Dans .env, LES DEUX lignes, pas une seule
UVERSION_DATA_DIR=/srv/uversion/data
UVERSION_DB_DIR=/srv/uversion/db
4. 다시 시작하기
docker compose up -d
UVERSION_DB_DIR는 백지 데이터베이스가 됩니다: PostgreSQL은 아랑곳없이 그것을
초기화하고, 가득 찬 청크 저장소가 메타데이터가 전혀 없는 데이터베이스와 짝지어집니다.
경로와 관련된 세 가지 함정, 모두 실제로 겪은 것입니다:
- 상대 경로는 compose 파일을 기준으로 해석됩니다, 명령을 실행하는
디렉터리를 기준으로가 아닙니다.
./data/server는 언제나docker-compose.yml의 이웃을 가리킵니다. - 네트워크 공유(NFS, CIFS, Windows 공유)는 컨테이너가 기동 시 수행하는
chown을 대개 거부합니다. 그러면 컨테이너는 즉시 종료되며, uVersion도 스토리지도 언급하지 않는 권한 오류를 냅니다. 로컬 디스크나 블록 볼륨을 쓰세요. rsync -a가 바로 소유권과 권한을 보존합니다. 옵션 없는cp나 파일 탐색기로 만든 복사본은 모든 것을 현재 계정으로 되돌리고, 그러면 PostgreSQL은 자기 디렉터리에서 시작을 거부합니다.
운영
백업하기: 데이터베이스
그것은 메타데이터를 지닙니다: 파일, 리비전, 사용자, 잠금.
docker compose exec db pg_dump -U uversion uversion > uversion-db.sql
백업하기: 서버 데이터
이것은 UVERSION_DATA_DIR가 가리키는 호스트 디렉터리입니다. 두 백업 모두
중요합니다: 하나만으로는 아무것도 복원하지 못합니다.
# .env n'est pas charge dans votre shell, chargez-le pour reutiliser la variable
set -a; . ./.env; set +a
DATA_DIR="$UVERSION_DATA_DIR"
[ -n "$DATA_DIR" ] || DATA_DIR=./data/server # valeur par defaut
tar czf uversion-data.tar.gz -C "$DATA_DIR" .
업데이트하기
데이터와 데이터베이스는 건드리지 않으며, 마이그레이션은 기동 시 적용됩니다.
docker compose pull
docker compose up -d # les migrations s'appliquent au demarrage
격리된 네트워크에서는 대신 더 새로운 아카이브를 로드하세요:
wget -N https://uversion.io/downloads/server/docker/uversion-server_latest_docker.tar.gz
docker load -i uversion-server_latest_docker.tar.gz
docker compose up -d
멈추기
docker compose stop은 컨테이너를 멈추고, docker compose down은
그것들을 제거합니다. 두 경우 모두 당신의 데이터는 제자리에 남습니다.
down -v는 여기서 아무것도 지우지 않습니다
공개된 compose는 이름 있는 볼륨을 전혀 쓰지 않습니다: 당신의 데이터와 데이터베이스는
.env가 가리키는 두 호스트 디렉터리에 있습니다. down도
down -v도 그것들을 건드리지 않습니다. 정말로 처음부터 다시 하려면 이 디렉터리들을
직접 삭제해야 합니다. 이것은 알아 두는 것이 중요합니다: 인증 실패 뒤의 반사적인 행동은
down -v 다음에 up을 실행하는 것이지만, 그것은 같은 데이터베이스와
같은 비밀번호로 정확히 같은 오류로 되돌아옵니다.