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).
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.
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
.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.
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
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/serverdesigna sempre o vizinho dodocker-compose.yml. - Um compartilhamento de rede (NFS, CIFS, um compartilhamento do Windows) recusa
em geral o
chownque 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 comcpsem 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.