Estou executando o Discourse em um contêiner Docker standalone em /var/discourse.
Tentei atualizar o banco de dados PostgreSQL embutido da versão 15 para a 18. A atualização pareceu ter sido concluída, e o diretório de dados ativo agora relata:
/shared/postgres_data/PG_VERSION
18
No entanto, o contêiner Discourse reconstruído ainda contém apenas os binários do PostgreSQL 15:
/usr/lib/postgresql/15/bin/postgres
postgres (PostgreSQL) 15.18
O serviço PostgreSQL está configurado para executar:
/usr/lib/postgresql/15/bin/postmaster -D /etc/postgresql/15/main
enquanto o diretório de dados real do Discourse está montado em:
/shared/postgres_data
Consequentemente, o PostgreSQL falha com:
FATAL: database files are incompatible with server
DETAIL: The data directory was initialized by PostgreSQL version 18,
which is not compatible with this version 15.18
(Debian 15.18-1.pgdg12+1).
Entendo que as imagens Docker recentes do Discourse deveriam incluir os binários do PostgreSQL 18. Alterei o app.yml para usar o modelo do PostgreSQL 18 e reconstruí o aplicativo, mas o contêiner resultante ainda possui os binários do PostgreSQL 15 e o script de serviço ainda aponta para /etc/postgresql/15/main.
A parte relevante da minha configuração atual de serviço é:
HOME=/var/lib/postgresql USER=postgres exec thpoff \
chpst -u postgres:postgres:ssl-cert -U postgres:postgres:ssl-cert \
/usr/lib/postgresql/15/bin/postmaster -D /etc/postgresql/15/main
Minhas perguntas são:
-
Qual é a maneira correta de reconstruir ou atualizar o contêiner Discourse para que ele realmente contenha os binários do PostgreSQL 18?
-
Existe algum modelo ou tag de imagem específico que deva ser usado no
app.yml? -
Uma vez que o PostgreSQL 18 esteja disponível, qual é o procedimento suportado para iniciá-lo contra o diretório
/shared/postgres_dataexistente?
Não excluí nem reinicializei o diretório de dados do PostgreSQL 18. Prefiro recuperar o cluster atualizado em vez de restaurar os dados antigos do PostgreSQL 15.