Configure um provedor de armazenamento de objetos compatível com S3 para uploads

:information_source: Este tópico aborda como configurar alguns provedores comuns de Armazenamento de Objetos compatíveis com S3 (clones S3). Consulte Set up file and image uploads to S3 para mais detalhes sobre a configuração do Amazon AWS S3, que é oficialmente suportada e usada internamente pelo Discourse para nossos serviços de hospedagem.

Provedor Nome do Serviço Funciona com o Discourse?
Amazon AWS S3 Sim
Digital Ocean Spaces Sim
Linode Object Storage Sim
Google Cloud Storage Sim
Scaleway Object Storage Sim
Vultr Object Storage Sim
BackBlaze Cloud Storage Sim*
Auto-hospedado MinIO Sim
Azure Blob Storage Flexify.IO Sim
Oracle Cloud Object Storage Não [1]
Wasabi Object Storage Talvez
Cloudflare R2 Não
Contabo Object Storage Não

Se você conseguiu fazer outro serviço funcionar, por favor, adicione-o a esta wiki.

Configuração

Para armazenar os ativos estáticos do Discourse no seu Armazenamento de Objetos, adicione esta configuração ao seu arquivo app.yml na seção hooks:

  after_assets_precompile:
    - exec:
        cd: $home
        cmd:
          - sudo -E -u discourse bundle exec rake s3:upload_assets
          - sudo -E -u discourse bundle exec rake s3:expire_missing_assets

Ao usar armazenamento de objetos, você também precisará de uma CDN para servir o que é armazenado no bucket. Usei a CDN StackPath em meus testes e, além de precisar definir Dynamic Caching By Header: Accept-Encoding na configuração deles, funciona bem.

DISCOURSE_CDN_URL é uma CDN que aponta para seu hostname do Discourse e armazena em cache as solicitações. Será usada principalmente para ativos recuperáveis: CSS e outros ativos de tema.

DISCOURSE_S3_CDN_URL é uma CDN que aponta para seu bucket de armazenamento de objetos e armazena em cache as solicitações. Será usada principalmente para ativos enviáveis: JS, imagens e uploads de usuários.

Recomendamos que sejam diferentes e que os administradores configurem ambos.

Não usar uma CDN (ou inserir a URL do bucket como a URL da CDN) provavelmente causará problemas e não é suportado.

Nos exemplos a seguir, https://falcoland-files-cdn.falco.dev é uma CDN configurada para servir os arquivos sob o bucket. O nome do bucket foi definido como falcoland-files em meus exemplos.

Recomenda-se configurar essas definições em variáveis de ambiente no seu app.yml, pois é assim que a CDCK faz em sua infraestrutura, o que significa que é bem testado. Além disso, a tarefa de upload de ativos ocorre após a compilação dos ativos, o que acontece em uma reconstrução. Se você quiser iniciar um Discourse que funcione corretamente com Armazenamento de Objetos desde o início, precisa definir as variáveis de ambiente para que os ativos sejam carregados antes que o site inicie.

Escolha seu provedor na lista abaixo e adicione essas configurações à seção env do seu arquivo app.yml, ajustando os valores conforme necessário:

AWS S3

O que suportamos oficialmente e usamos internamente. Sua oferta de CDN, a Cloudfront, também funciona para servir os arquivos do bucket. Consulte Set up file and image uploads to S3 para saber como configurar as permissões corretamente.

  DISCOURSE_USE_S3: true
  DISCOURSE_S3_REGION: us-west-1
  DISCOURSE_S3_ACCESS_KEY_ID: myaccesskey
  DISCOURSE_S3_SECRET_ACCESS_KEY: mysecretkey
  DISCOURSE_S3_CDN_URL: https://falcoland-files-cdn.falco.dev
  DISCOURSE_S3_BUCKET: falcoland-files
  DISCOURSE_S3_BACKUP_BUCKET: falcoland-files/backups
  DISCOURSE_BACKUP_LOCATION: s3

Digital Ocean Spaces

A oferta da DO é boa e funciona prontamente. É seguro ativar a Restrição de Listagem de Arquivos. O único problema é que sua oferta de CDN está terrivelmente quebrada, então você precisa usar uma CDN diferente para os arquivos. Além disso, não instale a regra CORS, pois ela é reinstalada a cada reconstrução.

Exemplo de configuração:

  DISCOURSE_USE_S3: true
  DISCOURSE_S3_REGION: whatever
  DISCOURSE_S3_ENDPOINT: https://nyc3.digitaloceanspaces.com
  DISCOURSE_S3_ACCESS_KEY_ID: myaccesskey
  DISCOURSE_S3_SECRET_ACCESS_KEY: mysecretkey
  DISCOURSE_S3_CDN_URL: https://falcoland-files-cdn.falco.dev
  DISCOURSE_S3_BUCKET: falcoland-files
  DISCOURSE_S3_BACKUP_BUCKET: falcoland-files/backups
  DISCOURSE_BACKUP_LOCATION: s3
  DISCOURSE_S3_INSTALL_CORS_RULE: false 

Linode Object Storage

Um parâmetro de configuração extra, HTTP_CONTINUE_TIMEOUT, é necessário para o Linode.

Exemplo de configuração:

  DISCOURSE_USE_S3: true
  DISCOURSE_S3_REGION: us-east-1
  DISCOURSE_S3_HTTP_CONTINUE_TIMEOUT: 0
  DISCOURSE_S3_ENDPOINT: https://us-east-1.linodeobjects.com
  DISCOURSE_S3_ACCESS_KEY_ID: myaccesskey
  DISCOURSE_S3_SECRET_ACCESS_KEY: mysecretkey
  DISCOURSE_S3_CDN_URL: https://falcoland-files-cdn.falco.dev
  DISCOURSE_S3_BUCKET: falcoland-files
  DISCOURSE_S3_BACKUP_BUCKET: falcoland-files/backup
  DISCOURSE_BACKUP_LOCATION: s3

Google Cloud Platform Storage

A listagem de arquivos está quebrada, então você precisa de uma variável de ambiente extra para ignorar isso para que os ativos funcionem. Também ignore o CORS e configure-o manualmente.

:warning: Como você não pode listar arquivos, não conseguirá listar backups e os backups automáticos falharão. Não recomendamos seu uso para backups. No entanto, alguns sugerem que, se você alterar a função de Storage Legacy Object Owner para Storage Legacy Bucket Owner, os backups funcionarão corretamente. Consulte este tópico para discussão específica do Google Cloud.

Existe um plugin de terceiros para melhorar a integração em Discourse GCS Helper.

Exemplo de configuração:

  DISCOURSE_USE_S3: true
  DISCOURSE_S3_REGION: us-east1
  DISCOURSE_S3_INSTALL_CORS_RULE: false
  FORCE_S3_UPLOADS: 1
  DISCOURSE_S3_ENDPOINT: https://storage.googleapis.com
  DISCOURSE_S3_ACCESS_KEY_ID: myaccesskey
  DISCOURSE_S3_SECRET_ACCESS_KEY: mysecretkey
  DISCOURSE_S3_CDN_URL: https://falcoland-files-cdn.falco.dev
  DISCOURSE_S3_BUCKET: falcoland-files
  #DISCOURSE_S3_BACKUP_BUCKET: falcoland-files/backup
  #DISCOURSE_BACKUP_LOCATION: s3

Scaleway Object Storage

A oferta da Scaleway também é muito boa e, na maior parte, tudo funciona bem.

:warning: Os uploads multipart da Scaleway suportam apenas um máximo de 1.000 partes. Isso não corresponde ao Amazon S3, que suporta um máximo de 10.000 partes. Para instâncias maiores, isso fará com que os backups do Discourse falhem e o upload incompleto pode precisar ser excluído manualmente antes de novas tentativas. Para instâncias pequenas, isso não é um problema. A Scaleway parece bastante aberta a feedback, então, se você quiser que esse limite seja alterado, deve entrar em contato com eles.

Note que para o parâmetro DISCOURSE_S3_ENDPOINT, o Discourse usa o endpoint de toda a região: https://s3.{region}.scw.cloud. O “Bucket endpoint” encontrado no painel da Scaleway vem no formato https://{bucketName}.s3.{region}.scw.cloud. Omita o subdomínio do nome do bucket para evitar erros de conexão.

Exemplo de configuração:

  DISCOURSE_USE_S3: true
  DISCOURSE_S3_REGION: fr-par
  DISCOURSE_S3_ENDPOINT: https://s3.fr-par.scw.cloud
  DISCOURSE_S3_ACCESS_KEY_ID: myaccesskey
  DISCOURSE_S3_SECRET_ACCESS_KEY: mysecretkey
  DISCOURSE_S3_CDN_URL: https://falcoland-files-cdn.falco.dev
  DISCOURSE_S3_BUCKET: falcoland-files
  DISCOURSE_S3_BACKUP_BUCKET: falcoland-files/backups
  DISCOURSE_BACKUP_LOCATION: s3

Vultr Object Storage

Um parâmetro de configuração extra, HTTP_CONTINUE_TIMEOUT, é necessário para o Vultr.

Exemplo de configuração:

  DISCOURSE_USE_S3: true
  DISCOURSE_S3_REGION: whatever
  DISCOURSE_S3_HTTP_CONTINUE_TIMEOUT: 0
  DISCOURSE_S3_ENDPOINT: https://ewr1.vultrobjects.com
  DISCOURSE_S3_ACCESS_KEY_ID: myaccesskey
  DISCOURSE_S3_SECRET_ACCESS_KEY: mysecretkey
  DISCOURSE_S3_CDN_URL: https://falcoland-files-cdn.falco.dev
  DISCOURSE_S3_BUCKET: falcoland-files
  DISCOURSE_S3_BACKUP_BUCKET: falcoland-files/backup
  DISCOURSE_BACKUP_LOCATION: s3

Backblaze B2 Cloud Storage

Você precisa ignorar o CORS e configurá-lo manualmente.

relatos de que a limpeza de uploads órfãos (clean up orphan uploads) não funciona corretamente com o BackBlaze. Você deve alterar as regras de ciclo de vida do seu bucket para que a limpeza de órfãos funcione.

Exemplo de configuração:

  DISCOURSE_USE_S3: true
  DISCOURSE_S3_REGION: "us-west-002"
  DISCOURSE_S3_INSTALL_CORS_RULE: false
  DISCOURSE_S3_CONFIGURE_TOMBSTONE_POLICY: false
  DISCOURSE_S3_ENDPOINT: https://s3.us-west-002.backblazeb2.com
  DISCOURSE_S3_ACCESS_KEY_ID: myaccesskey
  DISCOURSE_S3_SECRET_ACCESS_KEY: mysecretkey
  DISCOURSE_S3_CDN_URL: https://falcoland-files-cdn.falco.dev
  DISCOURSE_S3_BUCKET: falcoland-files
  DISCOURSE_S3_BACKUP_BUCKET: falcoland-files/backup
  DISCOURSE_BACKUP_LOCATION: s3

Nota: Durante a migração inicial para o B2, você pode atingir o limite diário gratuito de 2500 transações da classe C. Você precisará adicionar um método de pagamento para remover os limites.

MinIO Storage Server

Existem algumas ressalvas e requisitos que você precisa garantir antes de poder usar o servidor de armazenamento MinIO como alternativa ao S3:

  1. Você tem uma instância do servidor MinIO totalmente configurada
  2. Você tem o suporte a Domínio ativado na configuração do MinIO, para URLs de bucket orientados a domínio. Esta é uma configuração obrigatória para MinIO e Discourse, pois o MinIO ainda suporta os estilos de “caminho” S3 legados que não são mais suportados no Discourse.
  3. Você tem a configuração de DNS configurada corretamente para o MinIO, de modo que os subdomínios dos buckets resolvam corretamente para o servidor MinIO e o servidor MinIO esteja configurado com um domínio base (neste caso, minio.example.com)
  4. O bucket discourse-data existe no servidor MinIO e tem uma política “pública” definida nele
  5. Sua URL de CDN S3 aponta para uma CDN configurada corretamente que aponta para o bucket e armazena em cache as solicitações, conforme mencionado anteriormente neste documento.
  6. Suas CDNs estão configuradas para realmente usar um cabeçalho “Host” da URL S3 principal — por exemplo, discourse-data.minio.example.com ao buscar dados — caso contrário, pode causar problemas de CORB.

Assumindo que as ressalvas e pré-requisitos acima foram atendidos, um exemplo de configuração seria algo assim:

  DISCOURSE_USE_S3: true
  DISCOURSE_S3_REGION: anything
  DISCOURSE_S3_ENDPOINT: https://minio.example.com
  DISCOURSE_S3_ACCESS_KEY_ID: myaccesskey
  DISCOURSE_S3_SECRET_ACCESS_KEY: mysecretkey
  DISCOURSE_S3_CDN_URL: https://discourse-data-cdn.example.com
  DISCOURSE_S3_BUCKET: discourse-data
  DISCOURSE_S3_BACKUP_BUCKET: discourse-backups
  DISCOURSE_BACKUP_LOCATION: s3
  DISCOURSE_S3_INSTALL_CORS_RULE: false

O CORS ainda será ativado no MinIO, mesmo que a regra não seja instalada pelo reconstrutor do app — por padrão, parece, o CORS está ativado em todos os verbos HTTP no MinIO, e o MinIO não suporta BucketCORS (API S3) como resultado.

Azure Blob Storage com Flexify.IO

O Azure Blob Storage não é um serviço compatível com S3, portanto, não pode ser usado com o Discourse. Existe um plugin, mas está quebrado.

A maneira mais fácil de expor uma interface compatível com S3 para Azure Blob Storage é adicionar um servidor Flexify.IO que traduz o protocolo de armazenamento do Azure para S3.

Até o momento desta escrita, o serviço é gratuito no Azure, e você só precisa de uma tier de VM muito básica (barata) para começar a executá-lo. No entanto, requer um pouco de configuração.

  1. No portal do Azure, crie um novo recurso de Flexify.IO - Amazon S3 API for Azure Blob Storage.
  2. Para uso leve, a configuração mínima de VM parece funcionar bem. Você pode aceitar a maioria das configurações padrão. Lembre-se de salvar o arquivo de chave PEM ao criar a VM.
  3. Navegue até o link da VM Flexify.IO e entre no sistema. Siga as instruções configurando o provedor de dados Azure Blob Storage e o endpoint S3 gerado. Certifique-se de que a configuração do endpoint Public read access to all objects in virtual buckets esteja definida como verdadeira. Copie a URL do endpoint S3 e as chaves.
  4. Pressione New Virtual Bucket e crie um bucket virtual. Pode ter o mesmo nome do seu container Azure Blob Storage ou um nome diferente. Vincule qualquer container(s) para mesclar neste bucket virtual. Este bucket virtual é usado para expor um bucket publicamente legível via S3.
  5. Por padrão, o Flexify.IO instala um certificado SSL autoassinado, enquanto um endpoint S3 requer HTTPS. SSH na VM usando o arquivo de chave (o nome de usuário é, por padrão, azureuser) e substitua os seguintes arquivos pelos arquivos corretos:
  • /etc/flexify/ssl/cert.pem - substitua pelo arquivo de certificado (codificação PEM)

  • /etc/flexify/ssl/key.pem - substitua pelo arquivo de chave privada (codificação PKCS#8 PEM, que é o que começa com BEGIN PRIVATE KEY e não BEGIN RSA PRIVATE KEY, que é PKCS#1)

    Esses arquivos são do root, então você precisará usar sudo para substituí-los. É melhor garantir que os arquivos de substituição tenham a mesma propriedade e permissões que os originais, ou seja, root:root e permissão 600.

  1. Por padrão, o Flexify.IO cria um serviço S3 de nível raiz com vários buckets. O Discourse requer suporte a subdomínio para buckets. Vá para: <your Flexify.IO VM IP>/flexify-io/manage/admin/engines/configs/1, o que abrirá uma página de configuração oculta!
  2. Especifique o domínio base S3 (digamos que seja s3.mydomain.com) no campo Endpoint hostname, que deve estar em branco por padrão. Pressione Save para salvar a configuração.
  3. Reinicie a VM Flexify.IO no portal do Azure.
  4. No seu DNS, mapeie s3.mydomain.com e *.s3.mydomain.com para o IP da VM Flexify.IO.
  5. No Discourse, defina o seguinte na página de administração (sim, não há necessidade de as configurações estarem no app.yml):
use s3: true
s3 region: anything
s3 endpoint: https://s3.mydomain.com
s3 access key: myaccesskey
s3 secret assess key: mysecret key
s3 cdn url: https://<azure-blob-account>.blob.core.windows.net/<container>
s3 bucket: <virtual bucket>
s3 backup bucket: <backup bucket>  (qualquer container serve, pois não requer leitura pública e o Flexify.IO os exporá automaticamente)
backup location: s3

Não é recomendado usar o mesmo bucket para produção e staging. Se você fizer isso mesmo assim, tome medidas para garantir que seu site de staging não exclua seus ativos de produção (defina s3 disable cleanup como mínimo e fique atento à exclusão de backups de produção).

Wasabi

@pfaffman tentou usar o Wasabi para backups, mas parecia falhar intermitentemente e silenciosamente, deixando backups no disco rígido e eventualmente preenchendo o disco. Nem o Wasabi nem o meta tinham pistas, então não recomendo, embora seus resultados possam variar. @pfaffman agora tem certeza de que esse problema foi devido a backups e reinicializações automáticas sendo agendados de alguma forma ao mesmo tempo; era usado apenas para backups, mas parecia funcionar bem. Se alguém quiser tentar e relatar aqui, deve funcionar, pelo menos para backups.

Oracle Cloud

O Oracle Cloud não oferece suporte ao acesso de estilo de host virtual para buckets e não funcionará

Cloudflare

A oferta da Cloudflare é incompatível. Nos testes, @fearlessfrog abriu um ticket com a Cloudflare e, em dezembro de 2022, eles disseram:

Contabo

@tuxed tentou fazer o Contabo Object Storage funcionar para uploads compatíveis com S3. Parece que, ao fazer o upload, ele adiciona um prefixo ao nome do repositório na URL e ele não conseguiu fazê-lo funcionar.

Uploads Seguros

Uploads seguros são suportados apenas para AWS S3. Se o seu rake uploads:migrate_to_s3 falhar, você deve inserir esses comandos para primeiro contar e depois marcar como não seguros aqueles uploads, dado que você sabe que eles não precisam ser seguros, caso em que você precisará usar AWS S3.

./launcher enter app
rails c
Upload.where(secure: true).count
Upload.where(secure: true).update_all(secure:false)

  1. O Oracle Cloud não oferece suporte ao acesso de estilo de host virtual para buckets e não funcionará ↩︎

69 curtidas
Defining DISCOURSE_S3_CDN_URL links to assets in S3 CDN URL
Backblaze S3 issue: duplicated uploads after delete
Migrate from AWS to Digital Ocean with 2 containers, spaces and 2 CDNs
Using Scaleway s3-compatible object storage
Extend S3 configuration for other s3 API compatible cloud storage solutions
Set up BackBlaze S3 with BunnyCDN
Can not access backup page and related error when restoring using GCP Object Storage
Setting up backup and image uploads to Backblaze B2
Upload assets to S3 after in-browser upgrade
What are the right settings to use S3 bucket (with non-Amazon URL)?
Use WebTorrent to load media objects
Issues with changing File/Image upload location to S3 Server from local storage
Hosting Optimization with Digital Ocean
Hosting Optimization with Digital Ocean
Theme modifiers: A brief introduction
Configure automatic backups for Discourse
Problem with Backblaze for backup- Failed to list backups from S3: Signature validation failed
Move from BackBlaze B2 to Digital Ocean Spaces
Which free storage for many images? also to be used for thumbnails etc
Migrate from AWS to Digital Ocean with 2 containers, spaces and 2 CDNs
Restore Failure - S3 (compatible) backup
Restore Failure - S3 (compatible) backup
Digitalocean block storage VS amazon S3
Digitalocean block storage VS amazon S3
Custom emoji don't use CDN for S3 stored assets in a few pages
Admin upgrade page doesn't load with a CDN
Install Discourse for Production Environment on Windows Server
Running Discourse on Azure Web Sites vs. Azure VM?
How to turn off S3 storage?
Access Denied error message when trying to upload images
What are the right settings to use S3 bucket (with non-Amazon URL)?
REQ: Support S3 backup to a service like Backblaze
REQ: Support S3 backup to a service like Backblaze
Using Scaleway s3-compatible object storage
Overwrite meta og:image image source to use externally public loaded images on topics?
How to store uploads with multiple web_only servers?
Can not edit topics with picture with S3 backend
Finding UI generated backup and restoring site
Looking for doc to connect discourse with digital ocean spaces
Looking for doc to connect discourse with digital ocean spaces
Looking for doc to connect discourse with digital ocean spaces
403 Error with digital ocean cdn
Link to headers (anchor links)
NoMethodError downcase s3_bucket_name absolute_base_url
What should I enter in the S3 CDN settings if I don't have a CDN?
Backing up files in Object Storage
Minio: A header you provided implies S3 functionality that is not implemented
Configure automatic backups for Discourse
S3 OVH Object Storage
File directory system
Unable to backup or navigate to backups
Uploads to AWS S3 and Configured CDN
Migration to a Self-Hosted solution from Kubernetes
How to develop discourse in a team?
Images didn't load after configuring S3 uploads
Need Azure blob storage
Use Google Cloud Storage Instead of S3
Run Discourse as docker swarm service
Move discourse uploads to free space on server
Strange behavior with Digital Ocean Spaces/S3 and lots of duplicated CORS rules for `example.com`
Can't upload PDF to S3
"canned acl" error when uploading images
AWS S3 Object Ownership
What’s your server configurations?
How to debug S3 uploads
Problems with Patreon Login, Force HTTPS, and S3 CDN (three) Issues
Cron task to sync local backups to DigitalOcean Spaces
Cron task to sync local backups to DigitalOcean Spaces
Problems with Patreon Login, Force HTTPS, and S3 CDN (three) Issues
Help restoring - system hung at midnight
Help restoring - system hung at midnight
Image upload error: The bucket does not allow ACL's
Make s3_region a string value
How can I set s3_force_path to true?
Install Discourse on a residential internet with Cloudflare Tunnel
S3 assets folder, is a cleanup needed?
BunnyCDN storage for automatic backups
BunnyCDN storage for automatic backups
Move Uploads and Backups to DigitalOcean Block Storage
Required local storage for URL referenced images vs. uploaded images?
Is DO Spaces CDN still broken? Any workarounds?
Is DO Spaces CDN still broken? Any workarounds?
Is DO Spaces CDN still broken? Any workarounds?
Basic How-To for Using MinIO storage server run by you for your Discourse Instance
Minio instead of S3?
Configure automatic backups for Discourse
S3 image bandwidth costs are getting annoying
S3 image bandwidth costs are getting annoying
Support for ImgBB image upload service
Install Discourse on Amazon Web Services (AWS)
Account creation not working with discourse_encrypt
Cannot load any images “Uncaught (in promise) no-response: no-response”
Tips on Google Cloud S3
Enable a CDN for your Discourse
Invalid URL for markdown-it-bundle
Not using volumes (or automatically using S3) when hosting with Docker
Configuring automatic backups
I have a problem with my proxy status
Inline PDF Previews
My images are not working
Getting error 422 invalid argument when configure S3 upload with GCS
SSL_connect returned=1 errno=0 peeraddr=162.243.189.2:443 state=error: certificate verify failed (Hostname mismatch)
SSL_connect returned=1 errno=0 peeraddr=162.243.189.2:443 state=error: certificate verify failed (Hostname mismatch)
Strange behavior with Digital Ocean Spaces/S3 and lots of duplicated CORS rules for `example.com`
My install broke after updating, how can I fix it?
Uploads Subdomain For Cloudflare
[PAID] Configure an S3 compatible object storage provider for uploads
Hetzner deleted my account, my server and I was left with nothing. What to do?
SSL_connect returned=1 errno=0 peeraddr=162.243.189.2:443 state=error: certificate verify failed (Hostname mismatch)
SSL_connect returned=1 errno=0 peeraddr=162.243.189.2:443 state=error: certificate verify failed (Hostname mismatch)
SSL_connect returned=1 errno=0 peeraddr=162.243.189.2:443 state=error: certificate verify failed (Hostname mismatch)
SSL_connect returned=1 errno=0 peeraddr=162.243.189.2:443 state=error: certificate verify failed (Hostname mismatch)
SSL_connect returned=1 errno=0 peeraddr=162.243.189.2:443 state=error: certificate verify failed (Hostname mismatch)
Understanding Uploads, Images, and Attachments
S3, Assets & CDN Error
Capacity planning / Resource requirements
Migrate assets to s3 rake tasks
Best option for DB and file Storage
Forum rendered unusable
Forum rendered unusable
Configure automatic backups for Discourse
Migrate Discourse broke S3 images
Configure automatic backups for Discourse
Cloud storage and cdn
Migrating uploads from S3 to local
Another discourse offline "bootstrap failed with exit code 5"
Another discourse offline "bootstrap failed with exit code 5"
AI Plugin Build Error - 'bundle exec rake db:migrate' failed
Your Docker installation is not working correctly - no space left on device - safe to use ./launcher cleanup?
Uncaught SyntaxError: forum spins nonstop and never loads
Why is my upload limit 100mb?It's set to 500mb
Trouble with Google Bucket for backup
Did I overwrite my site settings with a cross-instance backup/restore?
S3 and Cloudfront - Setup Not Working
S3 and Cloudfront - Setup Not Working
Need tips on making my forum faster
What should be the server requirements
SSL_connect returned=1 errno=0 peeraddr=162.243.189.2:443 state=error: certificate verify failed (Hostname mismatch)
Why you should use Discourse internally for your company/team instead of Slack (4 years use case)
Make s3_region a string value
Decoupled Discourse Application - Managed Redis, Managed Postgres, and DIgital Ocean Volume with Discourse
S3 and Cloudfront - Setup Not Working
Cannot upload images in mobile discourse
Cloudflare R2: Navigating Setup and Handling Configuration Errors
Cloudflare R2: Navigating Setup and Handling Configuration Errors
Cloudflare R2: Navigating Setup and Handling Configuration Errors
S3 assets broken after moving forum
Colored loading dots because assets not uploaded
Backup request via FTP
Error when doing "bundle exec rake s3:upload_assets" - Could not locate Gemfile or .bundle/ directory
Separate S3 access keys for backups and uploads?
Secure Uploads
Topic List Previews (legacy)
Disk usage spike during backup, Discourse crashed hard :-(
Make s3_region a string value
Favicon setup: "To work correctly over a CDN it must be a png"
Change image folder to symlinked folder
Migrating uploads from S3 to local
S3 Upload Confusion: Dashboard vs. app.yml
Old installation failing upgrade
Where are Images and uploads stored?
Rebuild issue: [Cannot set dual-stack in combination with a custom endpoint.]
Problem updating data in the separate database
Backup Files Not Showing in Discourse Backend After Uploading to Cloudflare R2
Resizing images off server
Unable to setup S3 bucket
Discourse Stuck on Loading (Logs)
Discourse Stuck on Loading (Logs)
Unable to setup S3 bucket
Rebuild failure - skipping "after_assets_precompile" section of app.yml
How to add AWS Cloudfront as a Discourse CDN
Unable to setup S3 bucket
Configured s3, but i want asset to serve locally
Configured s3, but i want asset to serve locally
Set up BackBlaze S3 with BunnyCDN
Discourse s3 backup folder
SSO broken after rebuild with stable v3.3.3
How to Configure Cloudflare R2 for your Discourse Community
如何批量修改文件链接地址
Can't migrate uploads to S3
Backup discourse from the command line
Stuck and lost updating forum, problems with PG migration
Can't rebuild due to AWS SDK gem bump and new AWS Data Integrity Protections
Can't rebuild due to AWS SDK gem bump and new AWS Data Integrity Protections
S3 (not AWS) backups stopped working, presumably since an update
Troubleshooting S3 Uploads: Site hangs after rebuild, JS assets fail to load with net::ERR_... on both R2 and GCS
Inquiry About Discourse’s Support for Amazon S3 Storage
Setting up backup and image uploads to Backblaze B2
Inquiry About Discourse’s Support for Amazon S3 Storage
Inquiry About Discourse’s Support for Amazon S3 Storage
Cloudflare R2 Storage Issues
Hetzner S3 support
Can the /var/discourse and /var/lib/docker folders be on different volumes?
An AWS S3 Integration with Discourse Tutorial would be nice
Issues with AWS CDN and S3
Digital Ocean Spaces (S3) "unable to sign request without credentials set"
Issues with AWS CDN and S3
Digital Ocean Spaces (S3) "unable to sign request without credentials set"
Digital Ocean Spaces (S3) "unable to sign request without credentials set"
Digital Ocean Spaces (S3) "unable to sign request without credentials set"
Digital Ocean Spaces (S3) "unable to sign request without credentials set"
为啥我的七牛云s3附件上传成功后,论坛中无法加载出来?
Imgur upload built into the post buttons
Backup discourse from the command line
Is Scaleway a good option for object storage?
Blackblaze&Cloudflare: image uploading works, but not showing in post
SMF2 Conversion and Rake to S3 Help
Backing up your forum
What causes rake uploads:fix_relative_upload_links
Running 2 hosts behind haproxy fails with random 404s
Site Blank After Rebuild
Rebuild goes into a loop
Backblaze S3 issue: duplicated uploads after delete
Migrate_to_S3 Fails on Rebake
Downloads coming from S3 even with DISCOURSE_S3_CDN_URL set
Errors trying to use custom S3 storage
Moving from one S3 bucket to another
S3 image bandwidth costs are getting annoying
Basic How-To for Using MinIO storage server run by you for your Discourse Instance
SSL error - can't upload images
Digital Ocean Spaces don’t implement the AWS S3 API for the CORS rule
Extend S3 configuration for other S3 API compatible services
How to separate uploaded files to another server
Storing Images in the cloud
Migrate_to_S3 Fails on Rebake
Cannot rebake after setting up CDN
High Availability 3 Server setup
Enable hidden setting to include S3 uploads in the backups
S3 error, when updating to 2.9.0.beta1
Azure Blob Storage Plugin
How might we better structure #howto?
Migrating uploaded files from DO to S3
Discourse as a closed wiki
Using multiple containers - what needs to be shared?
Virus scanning of uploaded files
Imgur images broken
Admin role conflates server admin and board admin
Error in rebuilding using minio as object store