uVersion
Português
Baixar →

Wiki

Implantar com Docker

O servidor uVersion e o PostgreSQL em contêineres, prontos para uso: baixar a imagem, carregá-la, configurar o .env, iniciar. Local dos dados e do banco de dados configurável.

Uma alternativa ao pacote .deb: o servidor uVersion e seu banco de dados PostgreSQL rodam em contêineres, iniciados por um único docker compose up. Ideal se você prefere uma implantação em contêineres, ou para testar rapidamente.

Pré-requisitos: Docker Engine 20.10+ com o plugin Compose v2 (docker compose version) e uma chave de licença do uVersion. O servidor se recusa a iniciar sem uma chave válida e assinada: obtenha-a em sua conta (ou solicite uma na página de cadastro).

Podman também funciona Substitua docker por podman em todos os comandos desta página: podman compose pull, podman load -i, podman compose up -d. O docker-compose.yml fornecido já rotula suas montagens para o SELinux (o controle de acesso ativado por padrão no Red Hat, Rocky, Alma e Fedora), com o sufixo :z. Sem esse rótulo, o contêiner tem o acesso aos diretórios montados negado, e a mensagem se parece mais com um banco de dados corrompido do que com um problema de permissões.

Instalar

1. Obter o compose e o modelo de ambiente

Dois arquivos, em uma pasta nova que se tornará a da pilha: o docker-compose.yml e o modelo .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. Obter a imagem

On-line, o registro basta:

docker compose pull

Sem acesso à Internet (rede isolada), baixe em vez disso o arquivo compactado e carregue-o: ele leva o mesmo nome de imagem que o compose, então a inicialização o encontra sem baixar nada.

wget -N https://uversion.io/downloads/server/docker/uversion-server_latest_docker.tar.gz
docker load -i uversion-server_latest_docker.tar.gz

3. Preencher o .env

Dois valores são obrigatórios: UVERSION_LICENCE__KEY (sua chave de licença, a longa cadeia assinada recebida por e-mail) e POSTGRES_PASSWORD (uma senha forte para o banco de dados incluído).

nano .env

O segredo que assina as sessões é gerado na primeira inicialização e mantido no diretório de dados. Você não tem nada a digitar. Ele faz parte do backup: se sumir, cada um terá que entrar novamente uma vez, nada se perde. Se preferir definir o seu (32 caracteres no mínimo), preencha UVERSION_SECURITY__JWT_SECRET no .env: ele é de fato passado ao contêiner, que então o usa em vez de gerar um.

Escolha esta senha de uma vez por todas POSTGRES_PASSWORD só é aplicada na criação do banco de dados, quando seu diretório está vazio. Alterá-la depois no .env não muda nada do lado do PostgreSQL, que mantém a antiga, enquanto o servidor apresenta a nova: a conexão quebra sem que a mensagem explique. Para alterá-la de verdade, altere-a dos dois lados:
# 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
Faça backup do .env junto com seus dados Ele contém a chave de licença e a senha do banco de dados, e fica ao lado do docker-compose.yml, não nos volumes. Perder a máquina mantendo os discos de dados deixa um banco de dados que ninguém consegue endereçar e uma licença a pedir de novo: o código de ativação recebido no cadastro é de uso único e já foi consumido, apenas a chave de licença que ele produziu é reutilizável, e é ela que está aqui. Trate este arquivo como um segredo: chmod 600, e no mesmo backup que o banco de dados e os chunks (os pedaços de arquivos, o que ocupa o espaço).

4. Iniciar a pilha

docker compose up -d

O servidor fica então acessível em https://YOUR-HOST:8443. Nenhum domínio nem certificado Let’s Encrypt é necessário: o modelo TOFU cuida disso, ou seja, a confiança no primeiro contato, como o SSH quando faz você validar a impressão digital de uma máquina na primeira vez.

5. Ler a impressão digital do servidor

Ela é reescrita nos registros a cada inicialização:

# L'empreinte du serveur, reecrite dans les journaux a chaque demarrage
docker compose logs server | grep -i "TLS fingerprint"

É a impressão digital do servidor (SHA-256 do seu certificado): o servidor serve HTTPS autoassinado na porta 8443, e cada cliente a confirma na primeira conexão. Compartilhe-a com sua equipe (veja Impressão digital TLS). Não a confunda com uma soma de verificação, que serve para verificar um arquivo baixado: esta identifica o seu servidor.

6. Ler a senha de administrador inicial

Entre como admin com esta senha e depois altere-a. O arquivo é excluído assim que você a altera.

# Le mot de passe admin initial (le fichier disparait des que vous le changez)
docker compose exec server cat /data/initial-admin-password

Para acompanhar a inicialização ao vivo, docker compose logs -f server serve, mas não o coloque no meio de uma sequência de comandos: o -f segue os registros indefinidamente e nunca devolve o controle (Ctrl + C para sair).

Dados e banco de dados

Todo o estado do servidor (armazenamento de chunks, certificado TLS e portanto a impressão digital, identidade do servidor) vive em um diretório do host, e o banco de dados PostgreSQL em outro. Ambos se ajustam no .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

Para uma implantação de verdade, aponte UVERSION_DATA_DIR para um disco amplo e com backup: os chunks binários de um projeto Unreal podem ser volumosos. O contêiner ajusta sozinho as permissões do diretório montado (ele inicia como root apenas o tempo de corrigir a propriedade, e depois desce para um usuário sem privilégios), então você não tem nada a fazer com chown de antemão.

Primeira inicialização mais longa se o SELinux estiver ativo O mecanismo reetiqueta então recursivamente os diretórios montados, uma única vez. É instantâneo em uma implantação nova, mas conte com vários minutos em um repositório já volumoso. As inicializações seguintes não pagam esse custo de novo.

Para usar um PostgreSQL externo já existente, preencha UVERSION_DATABASE__URL no .env, e depois remova o serviço db e o bloco depends_on no docker-compose.yml.

# Dans .env : brancher un PostgreSQL existant
UVERSION_DATABASE__URL=postgres://user:motdepasse@db.interne:5432/uversion

Mover os dados e o banco de dados

O caso mais simples é definir as duas variáveis antes do primeiro up: nada existe ainda, não há nada a copiar. Se a pilha já está rodando, é preciso pará-la e copiar os diretórios à mão, preservando os proprietários.

1. Parar a pilha

Nada deve escrever durante a cópia:

docker compose down

2. Copiar os dois diretórios

É o -a que preserva proprietários e permissões:

sudo rsync -a ./data/server/ /srv/uversion/data/
sudo rsync -a ./data/db/     /srv/uversion/db/

3. Apontar o .env para o novo local

# Dans .env, LES DEUX lignes, pas une seule
UVERSION_DATA_DIR=/srv/uversion/data
UVERSION_DB_DIR=/srv/uversion/db

4. Reiniciar

docker compose up -d
Mova os dois, ou nenhum O banco de dados não contém seus arquivos: contém os metadados que designam os chunks (os pedaços de arquivos) pela sua impressão digital. Mover os dados sem o banco de dados, ou o contrário, deixa um banco de dados que referencia chunks impossíveis de encontrar. E um UVERSION_DB_DIR que aponta para um diretório vazio dá um banco de dados em branco: o PostgreSQL o inicializa sem pestanejar, e você fica com um armazenamento de chunks cheio associado a um banco de dados sem metadado algum.

Três armadilhas de caminho, todas encontradas:

  • Um caminho relativo é resolvido em relação ao arquivo compose, não em relação ao diretório de onde você executa o comando. ./data/server designa sempre o vizinho do docker-compose.yml.
  • Um compartilhamento de rede (NFS, CIFS, um compartilhamento do Windows) recusa em geral o chown que o contêiner efetua ao iniciar. O contêiner então sai imediatamente, com um erro de permissões que não menciona nem o uVersion nem o armazenamento. Use um disco local ou um volume de bloco.
  • rsync -a é o que preserva proprietários e permissões. Uma cópia feita com cp sem opções, ou por um explorador de arquivos, redefine tudo para a conta atual, e o PostgreSQL se recusa então a iniciar sobre o seu próprio diretório.

Operação

Fazer backup: o banco de dados

Ele carrega os metadados: arquivos, revisões, usuários, bloqueios.

docker compose exec db pg_dump -U uversion uversion > uversion-db.sql

Fazer backup: os dados do servidor

É o diretório do host designado por UVERSION_DATA_DIR. Ambos os backups contam: um sem o outro não restaura nada.

# .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" .

Atualizar

Os dados e o banco de dados não são tocados, as migrações são aplicadas na inicialização.

docker compose pull
docker compose up -d   # les migrations s'appliquent au demarrage

Em uma rede isolada, carregue em vez disso um arquivo mais recente:

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

Parar

docker compose stop para os contêineres, docker compose down os remove. Nos dois casos seus dados permanecem no lugar.

down -v não apaga nada aqui O compose publicado não usa nenhum volume nomeado: seus dados e seu banco de dados estão nos dois diretórios do host designados pelo .env. Nem down nem down -v os toca. Para recomeçar realmente do zero, é preciso excluir esses diretórios você mesmo. Isso é importante saber: o reflexo, após uma falha de autenticação, é executar down -v e depois up, e isso volta exatamente ao mesmo erro, com o mesmo banco de dados e a mesma senha.