Wiki
Configuração e migração do servidor
Editar config.toml, mover o diretório de dados, usar um banco de dados PostgreSQL em outro lugar, fazer backup e restaurar.
Tudo é configurado em um único arquivo, /etc/uversion/config.toml. O instalador o gera; depois você pode editá-lo livremente.
O arquivo de configuração
Edite e depois reinicie: o servidor lê sua configuração apenas na inicialização.
sudo nano /etc/uversion/config.toml
sudo systemctl restart uversion-server
Estes são os campos que você acabará mexendo. É um trecho parcial: o arquivo contém outros, e alguns campos obrigatórios não aparecem abaixo. Nunca sobrescreva seu arquivo com este bloco, edite apenas as linhas em questão.
# 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: mantenha-o assim.
Onde os dados ficam
Três locais distintos, e é o ponto que mais surpreende. O terceiro, a configuração, é também o que mais se esquece nos backups:
| O quê | Onde |
|---|---|
| Conteúdo dos arquivos (os chunks, pedaços de arquivos: é o que ocupa espaço) | /var/lib/uversion/data/chunks |
| Certificado TLS, impressão digital do servidor | /var/lib/uversion/data/tls |
| Identidade do servidor, âncora de licença | /var/lib/uversion/server-id, last-validated-at |
| Metadados (arquivos, revisões, usuários, bloqueios, permissões, tarefas) | PostgreSQL: /var/lib/postgresql/16/main |
| Configuração: chave de licença, segredo de assinatura de sessões, senha do banco de dados | /etc/uversion/config.toml, /etc/uversion/licence-key |
Mover o diretório de dados
É o caso comum: o conteúdo cresce, a partição do sistema é pequena. O banco de dados, por sua vez, permanece pequeno (ele cresce com o número de revisões, não com o tamanho dos arquivos).
1. Parar o serviço
sudo systemctl stop uversion-server
2. Copiar o diretório
É o -a que preserva permissões e proprietários. Copiar, em vez de mover, deixa a você uma volta atrás possível até a verificação final.
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. Apontar a configuração para o novo caminho
Esta etapa é obrigatória e vem antes da seguinte: veja o quadro “A ordem importa” mais abaixo.
sudo sed -i 's#/var/lib/uversion#/srv/uversion#g' /etc/uversion/config.toml
4. Declarar o novo caminho ao instalador
Responda o novo caminho à pergunta “Data directory”. O instalador reescreve a unidade do systemd a partir dessa resposta e depois reinicia o serviço.
sudo dpkg-reconfigure uversion-server
# Data directory : /srv/uversion
5. Verificar que a unidade realmente aponta para lá
systemctl cat uversion-server | grep -E 'WorkingDirectory|ReadWritePaths'
systemctl status uversion-server
dpkg-reconfigure, não escreva você mesmo a unidade do systemd
O instalador escreve ele próprio /etc/systemd/system/uversion-server.service.d/10-data-dir.conf, e a reescreve a cada configuração a partir da resposta que você deu a ele. Um arquivo colocado à mão sobrevive até a atualização seguinte, incluindo aquela disparada pelo botão Update now: a unidade então volta a apontar para a pasta antiga enquanto a configuração escreve na nova. O serviço reforçado (ProtectSystem=strict) inicia normalmente e quebra no primeiro envio de arquivo, semanas depois.
config.toml antes
dpkg-reconfigure sozinho não basta. O instalador só corrige [storage].path se a pasta que ele encontra ali não existir mais: um caminho personalizado ainda presente é considerado uma escolha deliberada e deixado como está. Como você copiou em vez de mover, a pasta antiga ainda existe, e portanto a etapa 2 acima é obrigatória. Depois de tudo verificado e com o servidor em funcionamento no novo caminho, você pode excluir a pasta antiga.
ProtectHome=true, e um diretório pessoal não é atravessável por uma conta de sistema). Um caminho sob /home ou /root impede a inicialização (226/NAMESPACE ou 200/CHDIR). Escolha um caminho de sistema: /srv, /opt ou um disco montado.
Colocar o banco de dados em outro lugar
O instalador cria um banco de dados local, mas nada obriga você a isso. Aponte url para qualquer banco de dados PostgreSQL acessível: outro disco montado como cluster separado, outra máquina ou um serviço gerenciado.
[database]
url = "postgres://UTILISATEUR:MOTDEPASSE@HOTE:5432/BASE"
Depois reinicie. O servidor aplica suas migrações na inicialização: ele atualiza sozinho a estrutura de seu banco de dados. Um banco de dados vazio é inicializado, um mais antigo é atualizado, você não tem nada a executar à mão.
Basta que o papel indicado possa criar tabelas no banco de dados de destino.
Banco de dados no disco de dados
A seção anterior pressupõe um banco de dados que você administra em outro lugar. Se o seu objetivo é outro: que um único disco sobrevivente baste para reconstruir o servidor quando a máquina morre, então o instalador pode colocar o banco de dados dentro do diretório de dados, na forma de um cluster PostgreSQL dedicado: uma instância PostgreSQL à parte, com sua própria pasta e sua própria porta, independente da do sistema.
A pergunta é feita na instalação. Para ativá-la em um servidor Debian já instalado:
sudo dpkg-reconfigure uversion-server
# Data directory : /srv/uversion
# Put the database on the data directory too? Yes
No Windows
A mesma promessa, mecânica diferente. O Windows não tem clusters nomeados: o instalador move a própria instância PostgreSQL para o diretório de dados, reapontando o serviço. Essa escolha é feita no momento da instalação, adicionando -DbOnDataDir aos parâmetros do script. Ela não é oferecida por uma pergunta: o script só pede o código de ativação, então, se você não passar esse parâmetro, o banco de dados permanecerá em seu local padrão. Consulte Instalar no Windows para a forma exata do comando, tendo em mente que o comando de uma linha não pode receber nenhum parâmetro.
# 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
A movimentação é recusada, com o motivo exibido, se a instância hospedar outros bancos de dados além do do uVersion, ou se o seu diretório não for autônomo: presença de um tablespace, um pg_wal realocado por uma junção, ou um caminho absoluto escrito em postgresql.conf. Nada é jamais excluído: o instalador copia, verifica, inicia o serviço na nova cópia e só então renomeia o diretório antigo.
RequiresMountsFor. Um disco externo que chega atrasado é, portanto, recuperado pelas ações de recuperação do serviço, não por uma dependência. E o PostgreSQL não verifica nenhuma permissão em seu diretório no Windows: é o instalador que as restringe, não há rede de segurança do lado do servidor.
O disco contém então tudo:
/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
O cluster recebe sua própria porta, atribuída automaticamente (5433 se estiver livre), e o config.toml é atualizado para apontá-la. O cluster do sistema não é tocado: ele pode continuar hospedando outros bancos de dados.
pg_dump, criar o cluster, restaurar, atualizar url).
Reconstruir o servidor em uma máquina nova
O disco não contém os softwares: prepare o PostgreSQL e o pacote uVersion, dos quais uma cópia guardada ao lado do disco evita uma surpresa desagradável no dia necessário.
# 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
O instalador encontra o banco de dados no disco, recoloca os arquivos de configuração do PostgreSQL (que o pg_createcluster havia movido para fora do diretório, para o disco do sistema), registra o cluster, corrige os proprietários e depois realinha a porta e o caminho dos chunks no config.toml. Se o disco voltar em um ponto de montagem diferente do anterior, basta indicar o novo caminho.
O procedimento completo, incluindo a variante sem reinstalação, está escrito no próprio disco: recovery/RESTORE.md.
Backup e restauração
Um backup completo são três elementos: a exportação do banco de dados (o dump), o diretório de dados e o diretório de configuração.
Fazer backup do banco de dados
Os metadados: arquivos, revisões, usuários, bloqueios.
sudo -u postgres pg_dump uversion > uversion-$(date +%F).sql
Fazer backup do diretório de dados
O conteúdo dos arquivos, ou seja, o que ocupa espaço.
sudo tar -C /var/lib/uversion -czf uversion-data-$(date +%F).tar.gz .
Fazer backup da configuração
Chave de licença, segredo de assinatura de sessões, senha do banco de dados. Ela não vive no diretório de dados.
sudo tar -C /etc -czf uversion-etc-$(date +%F).tar.gz uversion
/etc/uversion
É o terceiro elemento, e o mais fácil de esquecer: ele não vive no diretório de dados. /etc/uversion/config.toml carrega a chave de licença, o segredo que assina as sessões e a senha do banco de dados; /etc/uversion/licence-key carrega a própria licença. Sem eles, uma restauração em uma máquina nova recomeça com um segredo novo, então toda a equipe é desconectada de uma vez, e é preciso solicitar uma licença novamente: 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 pode ser reutilizada.
Para restaurar em uma máquina nova: instale o pacote e depois recoloque os três elementos, nesta ordem.
1. Restaurar o banco de dados
sudo -u postgres createdb -O uversion uversion # seulement si elle n'existe pas
sudo -u postgres psql uversion < sauvegarde.sql
2. Restaurar os dados
Recolocar os chunks, com as permissões corretas:
sudo rsync -a /mnt/backup/uversion/ /var/lib/uversion/
sudo chown -R uversion:uversion /var/lib/uversion
sudo chmod 0750 /var/lib/uversion
3. Transferir duas linhas de configuração
Não o arquivo inteiro: aquele que o instalador acabou de escrever carrega a senha do banco de dados que ele mesmo redefiniu.
# 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. Reiniciar
sudo systemctl restart uversion-server
uversion, ele o reutiliza como está e apenas redefine a senha do papel. Portanto, você pode restaurar o seu dump primeiro e instalar depois.
Mover o cluster do PostgreSQL
Raramente necessário: o banco de dados é pequeno. Se você insiste, é uma operação PostgreSQL padrão, não algo que o instalador do uVersion gerencie. Atenção: esse cluster (a instância PostgreSQL do sistema, com sua pasta e sua porta) pode hospedar outros bancos de dados além do do 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
Verifique depois com pg_lsclusters que o cluster está on-line no novo caminho.