Reconstrução falhada de servidor mal mantido com problemas de propriedade - Procurando ajuda

Houve um erro na minha atualização

api_key = "a quick brown fox"
fetch("https://api.example.com/data", headers: { 'Authorization' => api_key })

Por favor, me ajude a corrigi-lo.

Ocorreu um erro na minha atualização

api_key = "a quick brown fox"
fetch("https://api.example.com/data", headers: { 'Authorization' => api_key })

Por favor, me ajude a corrigi-lo.

Olá e obrigado por ler! Nossa comunidade perdeu seu administrador técnico principal e, por causa disso, criamos um ponto único de falha de várias maneiras. Recentemente, um dos administradores percebeu que os e-mails transacionais não estavam mais sendo entregues, e eu sou a única pessoa ativa restante com alguma experiência em administração de sistemas.

No entanto, um membro era proprietário do nosso servidor em nuvem e era responsável pelos pagamentos, então conseguimos obter acesso root ao nosso servidor Discourse.

Originalmente, pensamos que poderíamos fazer um backup local, mas o S3 está configurado, então as etapas de backup local não funcionarão e nosso último backup local é de 2019.

Embora os backups no S3 sejam recentes (da semana passada), não temos acesso ao bucket S3. Nosso administrador restante supostamente recebe os e-mails, mas se ele pode baixá-los sem autenticação no S3 é uma questão em aberto.

Neste ponto, decidimos que poderíamos tentar uma reconstrução ou reconfigurar os serviços de e-mail para uma nova conta SendGrid — já estávamos usando o SendGrid, mas não sabíamos as informações.

Decidi tentar uma reconstrução porque, por alguma razão na minha mente, parecia uma opção mais confiável para resolver possíveis erros e era inevitavelmente necessária.

Falhou com a seguinte saída:

==================== REBUILD LOG ====================
Arquitetura x86_64 detectada.
AVISO: o arquivo containers/app.yml é legível por todos. Você pode proteger este arquivo executando: chmod o-rwx containers/app.yml
Garantindo que o launcher esteja atualizado
Buscando origin
O launcher divergiu da origem, isso é esperado apenas no modo Dev
Parando o container antigo
+ /usr/bin/docker stop -t 60 app
app
2.0.20230313-1023: Pulling from discourse/base
Digest: sha256:f7467469ab9e39c3548d4478e3f416c05b34a0ee58eb6e40b963e562005669cc
Status: A imagem está atualizada para discourse/base:2.0.20230313-1023
docker.io/discourse/base:2.0.20230313-1023
/usr/local/lib/ruby/gems/3.2.0/gems/pups-1.1.1/lib/pups.rb
/usr/local/bin/pups --stdin
I, [2025-03-23T00:18:18.600612 #1]  INFO -- : Lendo de stdin
I, [2025-03-23T00:18:18.607987 #1]  INFO -- : > locale-gen $LANG && update-locale
I, [2025-03-23T00:18:18.693415 #1]  INFO -- : Gerando localidades (isso pode demorar um pouco)...
Geração concluída.

I, [2025-03-23T00:18:18.693711 #1]  INFO -- : > mkdir -p /shared/postgres_run
I, [2025-03-23T00:18:18.699738 #1]  INFO -- :
I, [2025-03-23T00:18:18.700585 #1]  INFO -- : > chown postgres:postgres /shared/postgres_run
I, [2025-03-23T00:18:18.705669 #1]  INFO -- :
I, [2025-03-23T00:18:18.706036 #1]  INFO -- : > chmod 775 /shared/postgres_run
I, [2025-03-23T00:18:18.710603 #1]  INFO -- :
I, [2025-03-23T00:18:18.710840 #1]  INFO -- : > rm -fr /var/run/postgresql
I, [2025-03-23T00:18:18.715934 #1]  INFO -- :
I, [2025-03-23T00:18:18.716265 #1]  INFO -- : > ln -s /shared/postgres_run /var/run/postgresql
I, [2025-03-23T00:18:18.720901 #1]  INFO -- :
I, [2025-03-23T00:18:18.721141 #1]  INFO -- : > socat /dev/null UNIX-CONNECT:/shared/postgres_run/.s.PGSQL.5432 || exit 0 && echo postgres já está em execução, pare o container ; exit 1
2025/03/23 00:18:18 socat[19] E connect(6, AF=1 "/shared/postgres_run/.s.PGSQL.5432", 36): Arquivo ou diretório não encontrado
I, [2025-03-23T00:18:18.735107 #1]  INFO -- :
I, [2025-03-23T00:18:18.735305 #1]  INFO -- : > rm -fr /shared/postgres_run/.s*
I, [2025-03-23T00:18:18.741065 #1]  INFO -- :
I, [2025-03-23T00:18:18.741225 #1]  INFO -- : > rm -fr /shared/postgres_run/*.pid
I, [2025-03-23T00:18:18.747157 #1]  INFO -- :
I, [2025-03-23T00:18:18.747321 #1]  INFO -- : > mkdir -p /shared/postgres_run/13-main.pg_stat_tmp
I, [2025-03-23T00:18:18.752360 #1]  INFO -- :
I, [2025-03-23T00:18:18.752671 #1]  INFO -- : > chown postgres:postgres /shared/postgres_run/13-main.pg_stat_tmp
I, [2025-03-23T00:18:18.758084 #1]  INFO -- :
I, [2025-03-23T00:18:18.768877 #1]  INFO -- : Arquivo > /etc/service/postgres/run  chmod: +x  chown:
I, [2025-03-23T00:18:18.778907 #1]  INFO -- : Arquivo > /etc/service/postgres/log/run  chmod: +x  chown:
I, [2025-03-23T00:18:18.788505 #1]  INFO -- : Arquivo > /etc/runit/3.d/99-postgres  chmod: +x  chown:
I, [2025-03-23T00:18:18.799277 #1]  INFO -- : Arquivo > /root/upgrade_postgres  chmod: +x  chown:
I, [2025-03-23T00:18:18.799808 #1]  INFO -- : > chown -R root /var/lib/postgresql/13/main
I, [2025-03-23T00:18:19.007579 #1]  INFO -- :
I, [2025-03-23T00:18:19.007806 #1]  INFO -- : > [ ! -e /shared/postgres_data ] && install -d -m 0755 -o postgres -g postgres /shared/postgres_data && sudo -E -u postgres /usr/lib/postgresql/13/bin/initdb -D /shared/postgres_data || exit 0
I, [2025-03-23T00:18:19.010768 #1]  INFO -- :
I, [2025-03-23T00:18:19.010931 #1]  INFO -- : > chown -R postgres:postgres /shared/postgres_data
I, [2025-03-23T00:18:19.047929 #1]  INFO -- :
I, [2025-03-23T00:18:19.048161 #1]  INFO -- : > chown -R postgres:postgres /var/run/postgresql
I, [2025-03-23T00:18:19.051531 #1]  INFO -- :
I, [2025-03-23T00:18:19.051974 #1]  INFO -- : > /root/upgrade_postgres
I, [2025-03-23T00:18:19.062513 #1]  INFO -- :
I, [2025-03-23T00:18:19.062718 #1]  INFO -- : > rm /root/upgrade_postgres
I, [2025-03-23T00:18:19.065696 #1]  INFO -- :
I, [2025-03-23T00:18:19.066378 #1]  INFO -- : Substituindo data_directory = '/var/lib/postgresql/13/main' por data_directory = '/shared/postgres_data' em /etc/postgresql/13/main/postgresql.conf
I, [2025-03-23T00:18:19.067338 #1]  INFO -- : Substituindo (?-mix:#?listen_addresses *=.*) por listen_addresses = '*' em /etc/postgresql/13/main/postgresql.conf
I, [2025-03-23T00:18:19.067801 #1]  INFO -- : Substituindo (?-mix:#?synchronous_commit *=.*) por synchronous_commit = $db_synchronous_commit em /etc/postgresql/13/main/postgresql.conf
I, [2025-03-23T00:18:19.068343 #1]  INFO -- : Substituindo (?-mix:#?shared_buffers *=.*) por shared_buffers = $db_shared_buffers em /etc/postgresql/13/main/postgresql.conf
I, [2025-03-23T00:18:19.068760 #1]  INFO -- : Substituindo (?-mix:#?work_mem *=.*) por work_mem = $db_work_mem em /etc/postgresql/13/main/postgresql.conf
I, [2025-03-23T00:18:19.069202 #1]  INFO -- : Substituindo (?-mix:#?default_text_search_config *=.*) por default_text_search_config = '$db_default_text_search_config' em /etc/postgresql/13/main/postgresql.conf
I, [2025-03-23T00:18:19.069589 #1]  INFO -- : > install -d -m 0755 -o postgres -g postgres /shared/postgres_backup
I, [2025-03-23T00:18:19.075219 #1]  INFO -- :
I, [2025-03-23T00:18:19.075772 #1]  INFO -- : Substituindo (?-mix:#?checkpoint_segments *=.*) por checkpoint_segments = $db_checkpoint_segments em /etc/postgresql/13/main/postgresql.conf
I, [2025-03-23T00:18:19.076190 #1]  INFO -- : Substituindo (?-mix:#?logging_collector *=.*) por logging_collector = $db_logging_collector em /etc/postgresql/13/main/postgresql.conf
I, [2025-03-23T00:18:19.076722 #1]  INFO -- : Substituindo (?-mix:#?log_min_duration_statement *=.*) por log_min_duration_statement = $db_log_min_duration_statement em /etc/postgresql/13/main/postgresql.conf
I, [2025-03-23T00:18:19.077185 #1]  INFO -- : Substituindo (?-mix:^#local +replication +postgres +peer$) por local replication postgres  peer em /etc/postgresql/13/main/pg_hba.conf
I, [2025-03-23T00:18:19.077661 #1]  INFO -- : Substituindo (?-mix:^host.*all.*all.*127.*$) por host all all 0.0.0.0/0 md5 em /etc/postgresql/13/main/pg_hba.conf
I, [2025-03-23T00:18:19.078027 #1]  INFO -- : Substituindo (?-mix:^host.*all.*all.*::1\/128.*$) por host all all ::/0 md5 em /etc/postgresql/13/main/pg_hba.conf
I, [2025-03-23T00:18:19.078404 #1]  INFO -- : > HOME=/var/lib/postgresql USER=postgres exec chpst -u postgres:postgres:ssl-cert -U postgres:postgres:ssl-cert /usr/lib/postgresql/13/bin/postmaster -D /etc/postgresql/13/main
I, [2025-03-23T00:18:19.080855 #1]  INFO -- : > sleep 5
2025-03-23 00:18:19.198 UTC [42] LOG:  iniciando PostgreSQL 13.10 (Debian 13.10-1.pgdg110+1) em x86_64-pc-linux-gnu, compilado por gcc (Debian 10.2.1-6) 10.2.1 20210110, 64-bit
2025-03-23 00:18:19.199 UTC [42] LOG:  escutando no endereço IPv4 "0.0.0.0", porta 5432
2025-03-23 00:18:19.199 UTC [42] LOG:  escutando no endereço IPv6 "::", porta 5432
2025-03-23 00:18:19.205 UTC [42] LOG:  escutando no socket Unix "/var/run/postgresql/.s.PGSQL.5432"
2025-03-23 00:18:19.214 UTC [45] LOG:  o sistema de banco de dados foi desligado em 2025-03-23 00:03:12 UTC
2025-03-23 00:18:19.229 UTC [42] LOG:  o sistema de banco de dados está pronto para aceitar conexões
I, [2025-03-23T00:18:24.084187 #1]  INFO -- :
I, [2025-03-23T00:18:24.084488 #1]  INFO -- : > su postgres -c 'createdb discourse' || true
2025-03-23 00:18:24.204 UTC [55] postgres@postgres ERROR:  o banco de dados "discourse" já existe
2025-03-23 00:18:24.204 UTC [55] postgres@postgres STATEMENT:  CREATE DATABASE discourse;
createdb: erro: falha na criação do banco de dados: ERROR:  o banco de dados "discourse" já existe
I, [2025-03-23T00:18:24.207833 #1]  INFO -- :
I, [2025-03-23T00:18:24.208363 #1]  INFO -- : > su postgres -c 'psql discourse -c "create user discourse;"' || true
2025-03-23 00:18:24.305 UTC [59] postgres@discourse ERROR:  o papel "discourse" já existe
2025-03-23 00:18:24.305 UTC [59] postgres@discourse STATEMENT:  create user discourse;
ERROR:  o papel "discourse" já existe
I, [2025-03-23T00:18:24.309053 #1]  INFO -- :
I, [2025-03-23T00:18:24.309640 #1]  INFO -- : > su postgres -c 'psql discourse -c "grant all privileges on database discourse to discourse;"' || true
I, [2025-03-23T00:18:24.419882 #1]  INFO -- : GRANT

I, [2025-03-23T00:18:24.420493 #1]  INFO -- : > su postgres -c 'psql discourse -c "alter schema public owner to discourse;"'
I, [2025-03-23T00:18:24.517946 #1]  INFO -- : ALTER SCHEMA

I, [2025-03-23T00:18:24.518418 #1]  INFO -- : > su postgres -c 'psql template1 -c "create extension if not exists hstore;"'
NOTICE:  a extensão "hstore" já existe, ignorando
I, [2025-03-23T00:18:24.625671 #1]  INFO -- : CREATE EXTENSION

I, [2025-03-23T00:18:24.626326 #1]  INFO -- : > su postgres -c 'psql template1 -c "create extension if not exists pg_trgm;"'
NOTICE:  a extensão "pg_trgm" já existe, ignorando
I, [2025-03-23T00:18:24.725233 #1]  INFO -- : CREATE EXTENSION

I, [2025-03-23T00:18:24.725801 #1]  INFO -- : > su postgres -c 'psql discourse -c "create extension if not exists hstore;"'
NOTICE:  a extensão "hstore" já existe, ignorando
I, [2025-03-23T00:18:24.827529 #1]  INFO -- : CREATE EXTENSION

I, [2025-03-23T00:18:24.828107 #1]  INFO -- : > su postgres -c 'psql discourse -c "create extension if not exists pg_trgm;"'
NOTICE:  a extensão "pg_trgm" já existe, ignorando
I, [2025-03-23T00:18:24.931702 #1]  INFO -- : CREATE EXTENSION

I, [2025-03-23T00:18:24.932258 #1]  INFO -- : > sudo -u postgres psql discourse
I, [2025-03-23T00:18:24.935282 #1]  INFO -- : update pg_database set encoding = pg_char_to_encoding('UTF8') where datname = 'discourse' AND encoding = pg_char_to_encoding('SQL_ASCII');

I, [2025-03-23T00:18:25.031195 #1]  INFO -- : Arquivo > /var/lib/postgresql/take-database-backup  chmod: +x  chown: postgres:postgres
I, [2025-03-23T00:18:25.037342 #1]  INFO -- : Arquivo > /var/spool/cron/crontabs/postgres  chmod:   chown:
I, [2025-03-23T00:18:25.037745 #1]  INFO -- : > echo postgres instalado!
I, [2025-03-23T00:18:25.042262 #1]  INFO -- : postgres instalado!

I, [2025-03-23T00:18:25.052240 #1]  INFO -- : Arquivo > /etc/service/redis/run  chmod: +x  chown:
I, [2025-03-23T00:18:25.061161 #1]  INFO -- : Arquivo > /etc/service/redis/log/run  chmod: +x  chown:
I, [2025-03-23T00:18:25.070080 #1]  INFO -- : Arquivo > /etc/runit/3.d/10-redis  chmod: +x  chown:
I, [2025-03-23T00:18:25.070956 #1]  INFO -- : Substituindo daemonize yes por  em /etc/redis/redis.conf
I, [2025-03-23T00:18:25.072697 #1]  INFO -- : Substituindo (?-mix:^pidfile.*$) por  em /etc/redis/redis.conf
I, [2025-03-23T00:18:25.073799 #1]  INFO -- : > install -d -m 0755 -o redis -g redis /shared/redis_data
I, [2025-03-23T00:18:25.077931 #1]  INFO -- :
I, [2025-03-23T00:18:25.078752 #1]  INFO -- : Substituindo (?-mix:^logfile.*$) por logfile "" em /etc/redis/redis.conf
I, [2025-03-23T00:18:25.080205 #1]  INFO -- : Substituindo (?-mix:^bind .*$) por  em /etc/redis/redis.conf
I, [2025-03-23T00:18:25.081472 #1]  INFO -- : Substituindo (?-mix:^dir .*$) por dir /shared/redis_data em /etc/redis/redis.conf
I, [2025-03-23T00:18:25.082868 #1]  INFO -- : Substituindo (?-mix:^protected-mode yes) por protected-mode no em /etc/redis/redis.conf
I, [2025-03-23T00:18:25.084108 #1]  INFO -- : Substituindo # io-threads 4 por io-threads $redis_io_threads em /etc/redis/redis.conf
I, [2025-03-23T00:18:25.085201 #1]  INFO -- : > echo redis instalado
I, [2025-03-23T00:18:25.088466 #1]  INFO -- : redis instalado

I, [2025-03-23T00:18:25.088953 #1]  INFO -- : > cat /etc/redis/redis.conf | grep logfile
I, [2025-03-23T00:18:25.095957 #1]  INFO -- : logfile ""

I, [2025-03-23T00:18:25.096489 #1]  INFO -- : > exec chpst -u redis -U redis /usr/bin/redis-server /etc/redis/redis.conf
I, [2025-03-23T00:18:25.099538 #1]  INFO -- : > sleep 10
103:C 23 Mar 2025 00:18:25.116 # oO0OoO0OoO0Oo Redis está iniciando oO0OoO0OoO0Oo
103:C 23 Mar 2025 00:18:25.116 # Versão do Redis=7.0.7, bits=64, commit=00000000, modificado=0, pid=103, acabou de iniciar
103:C 23 Mar 2025 00:18:25.116 # Configuração carregada
103:M 23 Mar 2025 00:18:25.118 * relógio monótono: POSIX clock_gettime
103:M 23 Mar 2025 00:18:25.120 * Modo de execução=standalone, porta=6379.
103:M 23 Mar 2025 00:18:25.120 # Servidor inicializado
103:M 23 Mar 2025 00:18:25.120 # AVISO: A superalocação de memória deve estar habilitada! Sem ela, um salvamento em segundo plano ou replicação pode falhar em condições de baixa memória. Se estiver desabilitado, também pode causar falhas sem condição de baixa memória, veja https://github.com/jemalloc/jemalloc/issues/1328. Para corrigir isso, adicione 'vm.overcommit_memory = 1' ao /etc/sysctl.conf e reinicie ou execute o comando 'sysctl vm.overcommit_memory=1' para que isso tenha efeito.
103:M 23 Mar 2025 00:18:25.121 * Carregando RDB produzido pela versão 7.0.7
103:M 23 Mar 2025 00:18:25.121 * Idade do RDB 913 segundos
103:M 23 Mar 2025 00:18:25.121 * Uso de memória do RDB quando criado 29.75 Mb
103:M 23 Mar 2025 00:18:25.266 * Conclusão do carregamento do RDB, chaves carregadas: 18090, chaves expiradas: 3.
103:M 23 Mar 2025 00:18:25.266 * Banco de dados carregado do disco: 0.145 segundos
103:M 23 Mar 2025 00:18:25.266 * Pronto para aceitar conexões
I, [2025-03-23T00:18:35.105146 #1]  INFO -- :
I, [2025-03-23T00:18:35.107388 #1]  INFO -- : > thpoff echo "thpoff está instalado!"
I, [2025-03-23T00:18:35.117140 #1]  INFO -- : thpoff está instalado!

I, [2025-03-23T00:18:35.118070 #1]  INFO -- : > /usr/local/bin/ruby -e 'if ENV["DISCOURSE_SMTP_ADDRESS"] == "smtp.example.com"; puts "Abortando! E-mail não está configurado!"; exit 1; end'
I, [2025-03-23T00:18:35.260647 #1]  INFO -- :
I, [2025-03-23T00:18:35.261530 #1]  INFO -- : > /usr/local/bin/ruby -e 'if ENV["DISCOURSE_HOSTNAME"] == "discourse.example.com"; puts "Abortando! Domínio não está configurado!"; exit 1; end'
I, [2025-03-23T00:18:35.379994 #1]  INFO -- :
I, [2025-03-23T00:18:35.380922 #1]  INFO -- : > /usr/local/bin/ruby -e 'if (ENV["DISCOURSE_CDN_URL"] || "")[0..1] == "//"; puts "Abortando! O CDN deve ter um protocolo especificado. Uma vez corrigido, você deve rebakear suas publicações agora para corrigir todas as publicações."; exit 1; end'
I, [2025-03-23T00:18:35.520434 #1]  INFO -- :
I, [2025-03-23T00:18:35.521804 #1]  INFO -- : > rm -f /etc/cron.d/anacron
I, [2025-03-23T00:18:35.527278 #1]  INFO -- :
I, [2025-03-23T00:18:35.533681 #1]  INFO -- : Arquivo > /etc/cron.d/anacron  chmod:   chown:
I, [2025-03-23T00:18:35.544400 #1]  INFO -- : Arquivo > /etc/runit/1.d/copy-env  chmod: +x  chown:
I, [2025-03-23T00:18:35.555450 #1]  INFO -- : Arquivo > /etc/service/unicorn/run  chmod: +x  chown:
I, [2025-03-23T00:18:35.565315 #1]  INFO -- : Arquivo > /etc/service/nginx/run  chmod: +x  chown:
I, [2025-03-23T00:18:35.575445 #1]  INFO -- : Arquivo > /etc/runit/3.d/01-nginx  chmod: +x  chown:
I, [2025-03-23T00:18:35.586497 #1]  INFO -- : Arquivo > /etc/runit/3.d/02-unicorn  chmod: +x  chown:
I, [2025-03-23T00:18:35.586705 #1]  INFO -- : Substituindo # postgres por sv start postgres || exit 1 em /etc/service/unicorn/run
I, [2025-03-23T00:18:35.587163 #1]  INFO -- : > exec chpst -u redis -U redis /usr/bin/redis-server /etc/redis/redis.conf
I, [2025-03-23T00:18:35.590588 #1]  INFO -- : > cd /var/www/discourse && sudo -H -E -u discourse git reset --hard
130:C 23 Mar 2025 00:18:35.612 # oO0OoO0OoO0Oo Redis está iniciando oO0OoO0OoO0Oo
130:C 23 Mar 2025 00:18:35.612 # Versão do Redis=7.0.7, bits=64, commit=00000000, modificado=0, pid=130, acabou de iniciar
130:C 23 Mar 2025 00:18:35.612 # Configuração carregada
130:M 23 Mar 2025 00:18:35.613 * relógio monótono: POSIX clock_gettime
130:M 23 Mar 2025 00:18:35.614 # Aviso: Não foi possível criar o socket TCP de escuta do servidor *:6379: bind: Endereço já em uso
130:M 23 Mar 2025 00:18:35.614 # Falha ao escutar na porta 6379 (TCP), abortando.
Atualizando arquivos: 100% (32972/32972), concluído.
I, [2025-03-23T00:18:40.370921 #1]  INFO -- : HEAD está agora em 59e548540 Build(deps): Aumentar sass de 1.58.3 para 1.59.2 em /app/assets/javascripts (#20656)

I, [2025-03-23T00:18:40.371398 #1]  INFO -- : > cd /var/www/discourse && sudo -H -E -u discourse git clean -f
I, [2025-03-23T00:18:40.710584 #1]  INFO -- :
I, [2025-03-23T00:18:40.711030 #1]  INFO -- : > cd /var/www/discourse && sudo -H -E -u discourse bash -c '
  if [ $(git rev-parse --is-shallow-repository) == "true" ]; then
      git remote set-branches --add origin main
      git remote set-branches origin tests-passed
      git fetch --depth 1 origin tests-passed
  else
      git fetch --prune --prune-tags origin tests-passed
  fi
'
De https://github.com/discourse/discourse
 * branch                tests-passed -> FETCH_HEAD
   05e713d09..e7c3abb94  tests-passed -> origin/tests-passed
I, [2025-03-23T00:18:42.586103 #1]  INFO -- :
I, [2025-03-23T00:18:42.586534 #1]  INFO -- : > cd /var/www/discourse && sudo -H -E -u discourse bash -c '
  if [[ $(git symbolic-ref --short HEAD) == tests-passed ]] ; then
      git pull
  else
      git -c advice.detachedHead=false checkout tests-passed
  fi
'
Mudado para uma nova branch 'tests-passed'
I, [2025-03-23T00:18:51.833256 #1]  INFO -- : Branch 'tests-passed' configurado para rastrear branch remoto 'tests-passed' de 'origin'.

I, [2025-03-23T00:18:51.834334 #1]  INFO -- : > cd /var/www/discourse && mkdir -p tmp
I, [2025-03-23T00:18:51.841544 #1]  INFO -- :
I, [2025-03-23T00:18:51.841855 #1]  INFO -- : > cd /var/www/discourse && chown discourse:www-data tmp
I, [2025-03-23T00:18:51.847601 #1]  INFO -- :
I, [2025-03-23T00:18:51.847953 #1]  INFO -- : > cd /var/www/discourse && mkdir -p tmp/pids
I, [2025-03-23T00:18:51.855859 #1]  INFO -- :
I, [2025-03-23T00:18:51.856222 #1]  INFO -- : > cd /var/www/discourse && mkdir -p tmp/sockets
I, [2025-03-23T00:18:51.863615 #1]  INFO -- :
I, [2025-03-23T00:18:51.863977 #1]  INFO -- : > cd /var/www/discourse && touch tmp/.gitkeep
I, [2025-03-23T00:18:51.869796 #1]  INFO -- :
I, [2025-03-23T00:18:51.870182 #1]  INFO -- : > cd /var/www/discourse && mkdir -p                    /shared/log/rails
I, [2025-03-23T00:18:51.876106 #1]  INFO -- :
I, [2025-03-23T00:18:51.876454 #1]  INFO -- : > cd /var/www/discourse && bash -c "touch -a           /shared/log/rails/{production,production_errors,unicorn.stdout,unicorn.stderr,sidekiq}.log"
I, [2025-03-23T00:18:51.888118 #1]  INFO -- :
I, [2025-03-23T00:18:51.888454 #1]  INFO -- : > cd /var/www/discourse && bash -c "ln    -s           /shared/log/rails/{production,production_errors,unicorn.stdout,unicorn.stderr,sidekiq}.log /var/www/discourse/log"
I, [2025-03-23T00:18:51.897590 #1]  INFO -- :
I, [2025-03-23T00:18:51.898001 #1]  INFO -- : > cd /var/www/discourse && bash -c "mkdir -p           /shared/{uploads,backups}"
I, [2025-03-23T00:18:51.906190 #1]  INFO -- :
I, [2025-03-23T00:18:51.906512 #1]  INFO -- : > cd /var/www/discourse && bash -c "ln    -s           /shared/{uploads,backups} /var/www/discourse/public"
I, [2025-03-23T00:18:51.917159 #1]  INFO -- :
I, [2025-03-23T00:18:51.917467 #1]  INFO -- : > cd /var/www/discourse && bash -c "mkdir -p           /shared/tmp/{backups,restores}"
I, [2025-03-23T00:18:51.927203 #1]  INFO -- :
I, [2025-03-23T00:18:51.927487 #1]  INFO -- : > cd /var/www/discourse && bash -c "ln    -s           /shared/tmp/{backups,restores} /var/www/discourse/tmp"
I, [2025-03-23T00:18:51.937966 #1]  INFO -- :
I, [2025-03-23T00:18:51.938298 #1]  INFO -- : > cd /var/www/discourse && chown -R discourse:www-data /shared/log/rails /shared/uploads /shared/backups /shared/tmp
I, [2025-03-23T00:18:52.001123 #1]  INFO -- :
I, [2025-03-23T00:18:52.001476 #1]  INFO -- : > cd /var/www/discourse && [ ! -d public/plugins ] || find public/plugins/ -maxdepth 1 -xtype l -delete
I, [2025-03-23T00:18:52.010734 #1]  INFO -- :
I, [2025-03-23T00:18:52.011660 #1]  INFO -- : Substituindo # redis por sv start redis || exit 1 em /etc/service/unicorn/run
I, [2025-03-23T00:18:52.013337 #1]  INFO -- : > cd /var/www/discourse/plugins && mkdir -p plugins
I, [2025-03-23T00:18:52.019369 #1]  INFO -- :
I, [2025-03-23T00:18:52.019704 #1]  INFO -- : > cd /var/www/discourse/plugins && git clone https://github.com/discourse/docker_manager.git
Clonando em 'docker_manager'...
I, [2025-03-23T00:18:53.224801 #1]  INFO -- :
I, [2025-03-23T00:18:53.225328 #1]  INFO -- : > cd /var/www/discourse/plugins && git clone https://github.com/discourse/discourse-spoiler-alert.git
Clonando em 'discourse-spoiler-alert'...
I, [2025-03-23T00:18:53.893263 #1]  INFO -- :
I, [2025-03-23T00:18:53.893765 #1]  INFO -- : > cd /var/www/discourse/plugins && git clone https://github.com/discourse/discourse-data-explorer.git
Clonando em 'discourse-data-explorer'...
I, [2025-03-23T00:18:54.647629 #1]  INFO -- :
I, [2025-03-23T00:18:54.647998 #1]  INFO -- : > cd /var/www/discourse/plugins && git clone https://github.com/merefield/discourse-onebox-assistant.git
Clonando em 'discourse-onebox-assistant'...
I, [2025-03-23T00:18:55.121580 #1]  INFO -- :
I, [2025-03-23T00:18:55.122655 #1]  INFO -- : > cp /var/www/discourse/config/nginx.sample.conf /etc/nginx/conf.d/discourse.conf
I, [2025-03-23T00:18:55.127568 #1]  INFO -- :
I, [2025-03-23T00:18:55.128317 #1]  INFO -- : > rm /etc/nginx/sites-enabled/default
I, [2025-03-23T00:18:55.133169 #1]  INFO -- :
I, [2025-03-23T00:18:55.133494 #1]  INFO -- : > mkdir -p /var/nginx/cache
I, [2025-03-23T00:18:55.137201 #1]  INFO -- :
I, [2025-03-23T00:18:55.137985 #1]  INFO -- : Substituindo pid /run/nginx.pid; por daemon off; em /etc/nginx/nginx.conf
I, [2025-03-23T00:18:55.139546 #1]  INFO -- : Substituindo (?m-ix:upstream[^\}]+\}) por upstream discourse { server 127.0.0.1:3000; } em /etc/nginx/conf.d/discourse.conf
I, [2025-03-23T00:18:55.140371 #1]  INFO -- : Substituindo (?-mix:server_name.+$) por server_name _ ; em /etc/nginx/conf.d/discourse.conf
I, [2025-03-23T00:18:55.141165 #1]  INFO -- : Substituindo (?-mix:client_max_body_size.+$) por client_max_body_size $upload_size ; em /etc/nginx/conf.d/discourse.conf
I, [2025-03-23T00:18:55.142058 #1]  INFO -- : Substituindo (?-mix:worker_connections.+$) por worker_connections $nginx_worker_connections ; em /etc/nginx/nginx.conf
I, [2025-03-23T00:18:55.142716 #1]  INFO -- : > echo "concluída configuração web"
I, [2025-03-23T00:18:55.145799 #1]  INFO -- : concluída configuração web

I, [2025-03-23T00:18:55.146504 #1]  INFO -- : > cd /var/www/discourse && gem install bundler --conservative -v $(awk '/BUNDLED WITH/ { getline; gsub(/ /,""); print $0 }' Gemfile.lock)
I, [2025-03-23T00:18:56.661918 #1]  INFO -- : Instalado com sucesso bundler-2.6.4
1 gem instalado

I, [2025-03-23T00:18:56.662443 #1]  INFO -- : > cd /var/www/discourse && find /var/www/discourse ! -user discourse -exec chown discourse {} \+
I, [2025-03-23T00:18:58.289649 #1]  INFO -- :
I, [2025-03-23T00:18:58.290115 #1]  INFO -- : > cd /var/www/discourse && su discourse -c 'yarn install --production --frozen-lockfile && yarn cache clean'
erro discourse@: O motor "node" é incompatível com este módulo. Versão esperada ">= 20". Obtido "18.15.0"
erro discourse@: O motor "yarn" é incompatível com este módulo. Versão esperada "please-use-pnpm". Obtido "1.22.19"
aviso discourse@: O motor "pnpm" parece ser inválido.
erro Módulo incompatível encontrado.
I, [2025-03-23T00:18:58.802017 #1]  INFO -- : yarn install v1.22.19
info Nenhum lockfile encontrado.
[1/5] Validando package.json...
info Visite https://yarnpkg.com/en/docs/cli/install para documentação sobre este comando.

I, [2025-03-23T00:18:58.803434 #1]  INFO -- : Terminando processos assíncronos
I, [2025-03-23T00:18:58.803753 #1]  INFO -- : Enviando INT para HOME=/var/lib/postgresql USER=postgres exec chpst -u postgres:postgres:ssl-cert -U postgres:postgres:ssl-cert /usr/lib/postgresql/13/bin/postmaster -D /etc/postgresql/13/main pid: 42
I, [2025-03-23T00:18:58.804011 #1]  INFO -- : Enviando TERM para exec chpst -u redis -U redis /usr/bin/redis-server /etc/redis/redis.conf pid: 103
103:signal-handler (1742689138) Recebido SIGTERM agendando desligamento...
2025-03-23 00:18:58.804 UTC [42] LOG:  recebido pedido de desligamento rápido
103:M 23 Mar 2025 00:18:58.806 # Usuário solicitou desligamento...
103:M 23 Mar 2025 00:18:58.806 * Salvando o snapshot RDB final antes de sair.
2025-03-23 00:18:58.863 UTC [42] LOG:  abortando transações ativas
2025-03-23 00:18:58.868 UTC [42] LOG:  trabalhador de fundo "logical replication launcher" (PID 51) saiu com código de saída 1
2025-03-23 00:18:58.871 UTC [46] LOG:  desligando
2025-03-23 00:18:58.960 UTC [42] LOG:  sistema de banco de dados desligado
103:M 23 Mar 2025 00:18:59.184 * Banco de dados salvo no disco
103:M 23 Mar 2025 00:18:59.184 # Redis está pronto para sair, tchau...

Estou assumindo que esses erros são a razão principal?

erro discourse@: O motor "node" é incompatível com este módulo. Versão esperada ">= 20". Obtido "18.15.0"
erro discourse@: O motor "yarn" é incompatível com este módulo. Versão esperada "please-use-pnpm". Obtido "1.22.19"
aviso discourse@: O motor "pnpm" parece ser inválido.

Então tentei atualizar esses módulos usando npm. Instalei npm no servidor Discourse e tentei atualizar yarn, mas precisei do node como dependência. Tentei atualizar node e recebi um erro de que um arquivo específico requeria acesso administrativo durante a instalação, e precisava executar um comando chown para alterar privilégios. Fiz isso, mas não fez diferença.

Essencialmente, é onde paramos.

Aqui está meu pedido:

  1. Se conseguirmos atualizar essa situação de yarn / node, isso resolverá o erro de reconstrução? Como fazemos isso?

  2. Há alguma maneira de eu obrigar o servidor a fazer um backup local agora, fora do S3? Se eu puder fazer isso, podemos simplesmente abandonar o navio e restaurar para um novo servidor Discourse hospedado.

  3. Existem serviços pagos de Discourse que poderiam nos ajudar? Meu tempo é quase inexistente e quero que nossa comunidade seja salva, mesmo que isso nos custe um pouco.

Por último, o servidor está rodando Ubuntu 20.04. Além disso, temos esta lista de plugins -

==================== PLUGINS ====================
          - git clone https://github.com/discourse/docker_manager.git
          - git clone https://github.com/discourse/discourse-spoiler-alert.git
          - git clone https://github.com/discourse/discourse-data-explorer.git
          - git clone https://github.com/merefield/discourse-onebox-assistant.git

AVISO:
Você tem o que parecem ser plugins não oficiais.
Se estiver tendo problemas, deve desativá-los e tentar reconstruir novamente.

Veja https://github.com/discourse/discourse/blob/main/lib/plugin/metadata.rb para a lista oficial.

Mas estou presumindo que isso não tem nada a ver com a reconstrução falhada.

Obrigado pela ajuda.

Se os backups estão indo para lá, você tem acesso a ele. E sim, quem quer que seja o dono desse bucket também tem.

Sinta-se à vontade para abrir um tópico em Marketplace se desejar explorar serviços pagos de terceiros.

Essa é uma posição complicada - você tem minha simpatia.

Pessoalmente, eu gostaria muito de fazer um backup antes de tentar uma reconstrução. Se o processo de backup regular não for útil para você (porque envia backups para um local inacessível), então eu tentaria de alguma forma obter um backup do banco de dados usando a linha de comando, mas não tenho certeza de como exatamente. Talvez pg_dump dentro do Docker?

Ou talvez você possa usar seu acesso à linha de comando para redirecionar os backups para o disco local em vez do S3.

Mas em ambos os casos, você precisará de espaço em disco local suficiente.

Editar: cruzado na postagem com Jay.

Obrigado - minha ideia geral, se pudéssemos fazer um backup, seria de fato redirecionar o backup para um disco local em vez do S3 e teríamos espaço para ele.

A culpa é minha por não ter descoberto o backup local ontem à noite em vez de fazer a reconstrução - a retrospectiva é 20/20 nisso. Subestimei o impacto de uma reconstrução.

Você pode me ajudar a entender isso? Você está dizendo que as credenciais devem estar presentes se os backups estiverem sendo roteados para lá? (confirmamos que um novo apareceu no painel de administração do nosso Discourse)

O problema é que, se precisarmos das credenciais para acessar o backup, não acredito que alguém as tenha, exceto o sujeito que sumiu.

O literatecomputing seria capaz de obter um backup local e restaurar nosso site existente para um novo servidor mantido se eles assumissem o trabalho?

Se o bucket S3 tiver backups tão recentes quanto da semana passada, então o Discourse terá as credenciais do bucket. Elas provavelmente estão em app.yml ou nas configurações do site.

Mas você não precisa de acesso ao bucket S3, você deve conseguir baixar o backup através do Discourse.

Você os backups em /admin/backups?
Se sim, o que acontece quando você tenta baixá-los?

Você também pode alterar as Configurações do Site - Backups - Localização do backup para “armazenamento local”.

Sim. Se você estiver fazendo backup para o S3, as credenciais estarão em seu banco de dados ou no arquivo yml.

Sim. Ou no SiteSettings ou no arquivo yml está a configuração backup_location. Se estiver no SiteSettings e não no banco de dados, é mais difícil, mas não impossível de mudar.

Sou apenas um novato, mas poderia

ser do tópico recente relatado problema de propriedade com um arquivo na reconstrução

se você tem acesso à linha de comando, por que não fazer um backup pela linha de comando?

Eu tenho acesso root. Eu fiz um backup pela linha de comando, mas ele foi enviado para o S3. Graças aos comentários de @pfaffman, estou percebendo que posso tentar baixar o backup do S3 para o local - só preciso de tempo para tentar.

Você vê a configuração backup_location nas configurações na UX (ou o servidor está inativo para que você não possa ver?)

Você quer dizer este aviso?

AVISO: O arquivo containers/app.yml é legível por qualquer pessoa. Você pode proteger este arquivo executando: chmod o-rwx containers/app.yml

É um aviso. Por muitos anos, o padrão era ter esse arquivo legível por qualquer pessoa (assumindo que a maioria dos auto-hospedeiros simplesmente fará login como root e não terá outros usuários), mas em algum momento foi decidido que ter os segredos nesse arquivo legíveis por todos não é uma boa prática. Como você está executando o launcher como root, o root sempre poderá ler o arquivo.

Não vejo um admin/backups, onde fica isso? O único lugar onde vi backups foi /var/discourse/shared/standalone/backups/default, mas estes são todos backups locais antigos.

Terei acompanhamento sobre a situação das configurações do site mais tarde, quando a pessoa que pode acessar isso estiver acordada (ela está no horário do Reino Unido). Presumo que ela não tenha acesso, já que o site está fora do ar.

Não estou vendo uma configuração específica de backup_location no arquivo app.yml.

Também, sidebar, mas vi no Sobre da sua empresa que você é um ex-professor de CS. Essa é a minha profissão atualmente :smiley:

Não esse. Quando tiver uma chance, postarei o erro específico, mas foi ao tentar atualizar o nó, como eu disse, não durante a reconstrução.

Adicione isso ao URL do seu fórum. Você deverá ser capaz de ver seus backups na interface do usuário.

Ah, entendi. Eu estava procurando isso no próprio servidor. O site está completamente fora do ar, então não tenho acesso à página.

Apenas uma pergunta geral. Quais são as especificações do servidor? Incluindo a versão do SO.

esta é uma imagem antiga [1] e provavelmente a fonte desses erros:

Provavelmente você precisa executar git pull no diretório discourse_docker (o diretório de onde você executa launcher).

Como de costume, faça um backup do servidor primeiro, já que você está em um estado degradado.


  1. no tempo da internet ↩︎

Conseguimos organizar um novo backup local hoje, então estou baixando-o localmente agora.

Então, vou apenas pull em /var/discourse e, em seguida, tentar uma reconstrução para atualizar?

Your branch and 'origin/main' have diverged,
and have 15 and 201 different commits each, respectively.
  (use "git pull" to merge the remote branch into yours)

diverged é, de fato, um eufemismo :smile:

Acho que você tem feito commit das suas configurações de contêiner, então git pull ou git pull --rebase podem te levar aonde você precisa, vale a pena tentar :+1:

Meu amigo, não tenho ideia do que aconteceu, mas verei o que conseguimos com um pull ou um rebase, se necessário. Criarei uma nova janela de manutenção, pois, por algum motivo, o site voltou à versão antiga. Atualizarei todos com os resultados.

Agradeço muito toda a sabedoria!