uVersion
Português
Baixar →

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 = "..."
Permissões do arquivo Ele contém a chave de licença, o segredo que assina as sessões e a senha do banco de dados. Está em 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
O banco de dados não acompanha o diretório de dados Mudar o diretório de dados move os chunks e os certificados, não o banco de dados. E o banco de dados referencia os chunks pela impressão digital: se você mover um sem o outro, o servidor procurará chunks que não encontrará. Mova os dois, ou nenhum.

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
Passe por 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.
A ordem importa: edite 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.
Nunca sob /home nem /root O serviço roda como usuário de sistema reforçado (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.

Duas diferenças em relação ao Linux O Windows não sabe fazer um serviço esperar por um disco: não existe nenhum equivalente de 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.

Duas contrapartidas, a conhecer antes de dizer sim Um diretório de dados do PostgreSQL só abre com a versão maior que o criou: uma recuperação daqui a três anos pode exigir a instalação explícita do PostgreSQL 16. E o disco agora carrega a chave de licença, o segredo que assina as sessões e a senha do banco de dados, em um diretório acessível apenas ao root: trate esse disco como uma credencial.
Banco de dados já preenchido: o instalador se recusa a movê-lo Se o seu servidor já está em funcionamento com dados, ativar a opção não move nada: uma mudança interrompida no meio de uma atualização de pacote seria pior do que nenhuma mudança. O instalador deixa você como está e imprime o procedimento manual (parar, 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
Não se esqueça de /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
Instalar sobre um banco de dados existente O instalador não destrói nada: se ele já encontra o banco de dados 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.