uVersion
한국어
다운로드 →

Wiki

Docker로 배포하기

uVersion 서버와 PostgreSQL을 컨테이너로, 턴키 방식: 이미지를 내려받아 로드하고 .env를 설정한 뒤 시작. 데이터와 데이터베이스 위치는 설정 가능.

.deb 패키지의 대안입니다: uVersion 서버와 그 PostgreSQL 데이터베이스가 컨테이너로 실행되며, 단 한 번의 docker compose up으로 기동됩니다. 컨테이너화된 배포를 선호하거나 빠르게 시험해 보고 싶을 때 이상적입니다.

사전 요구 사항: Compose v2 플러그인이 포함된 Docker Engine 20.10 이상 (docker compose version)과 uVersion 라이선스 키. 서버는 유효하고 서명된 키가 없으면 시작을 거부합니다: 계정에서 받으세요(또는 가입 페이지에서 발급받을 수 있습니다).

Podman도 동작합니다 이 페이지의 모든 명령에서 dockerpodman으로 바꾸세요: 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자) .envUVERSION_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할 필요가 없습니다.

SELinux가 켜져 있으면 첫 기동이 더 오래 걸립니다 그럴 때 엔진은 마운트된 디렉터리를 재귀적으로, 단 한 번 다시 라벨링합니다. 새 배포에서는 즉시지만, 이미 큰 저장소에서는 몇 분을 예상하세요. 이후의 기동은 이 비용을 다시 치르지 않습니다.

이미 자리 잡은 외부 PostgreSQL을 쓰려면 .envUVERSION_DATABASE__URL을 작성한 뒤 docker-compose.ymldb 서비스와 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가 가리키는 두 호스트 디렉터리에 있습니다. downdown -v도 그것들을 건드리지 않습니다. 정말로 처음부터 다시 하려면 이 디렉터리들을 직접 삭제해야 합니다. 이것은 알아 두는 것이 중요합니다: 인증 실패 뒤의 반사적인 행동은 down -v 다음에 up을 실행하는 것이지만, 그것은 같은 데이터베이스와 같은 비밀번호로 정확히 같은 오류로 되돌아옵니다.