Atualmente, o armazenamento primário para posts do fórum, contas de usuários etc. é o banco de dados PostgreSQL.
Posso sugerir, por favor, que o formato de armazenamento principal para o conteúdo do fórum seja arquivos de texto simples?
Devido a problemas de banco de dados difíceis de corrigir (difíceis para mim, como usuário), acho que o risco de perder todos os dados do fórum é alto devido ao formato binário aparentemente/efetivamente opaco dos bancos de dados SQL. Parece que ninguém consegue corrigir um banco de dados seriamente corrompido (o que não será um problema visível como no caso acima) ou é muito caro para leigos.
Tenho certeza de que existem razões muito boas para usar bancos de dados como o PostgreSQL, como desempenho. No entanto, proponho um formato de texto legível por humanos para backups como último recurso de emergência, caso a funcionalidade de backup e restauração do banco de dados esteja corrompida ou quebrada.
Você provavelmente não precisa ser convencido sobre o quão incrível o Git é; você já o utiliza. O conteúdo do fórum poderia ser armazenado como subpastas e muitos arquivos de texto. Assim, toda a pasta poderia ser colocada sob controle de versão do Git. Se qualquer bug for introduzido, será muito mais fácil rastrear qual commit o causou.
Como os bancos de dados (inconfiáveis, complexos) provavelmente ainda serão necessários, esses arquivos de texto (simples, confiáveis) poderiam servir como modelo para recriar o banco de dados “a partir do código fonte”. Se o armazenamento de novos posts em arquivos de texto for muito lento em tempo real, você pode ativar a opção de backup em arquivo de texto sob demanda ou quando o sistema estiver ocioso. (Gravação atrasada / cache de gravação.)
Dados públicos (posts públicos do fórum) estariam em uma pasta diferente dos dados privados de usuários, senhas hashadas. Uma vantagem adicional seria que a parte pública (posts) poderia até ser publicada em um repositório remoto do Git para aqueles que acharem isso útil (arquivamento). Os dados dos usuários permaneceriam em um repositório Git apenas local (ou personalizado, remoto, privado, criptografado).