تكوين مزود تخزين كائنات متوافق مع S3 للرفع

<div data-theme-toc="true"

:information_source: يغطي هذا الموضوع كيفية تكوين بعض مزودي تخزين الكائنات المتوافقين مع S3 (استنساخات S3) الشائعة. انظر Set up file and image uploads to S3 لمزيد من التفاصيل حول تكوين Amazon AWS S3، والذي يتم دعمه رسمياً ويستخدمه Discourse داخلياً لخدمات الاستضافة الخاصة بنا.

المزود اسم الخدمة يعمل مع Discourse؟
Amazon AWS S3 نعم
Digital Ocean Spaces نعم
Linode Object Storage نعم
Google Cloud Storage نعم
Scaleway Object Storage نعم
Vultr Object Storage نعم
BackBlaze Cloud Storage نعم*
استضافة ذاتية MinIO نعم
Azure Blob Storage Flexify.IO نعم
Oracle Cloud Object Storage لا [1]
Wasabi Object Storage ربما
Cloudflare R2 نعم
Contabo Object Storage لا

إذا قمت بتشغيل خدمة مختلفة بنجاح، يرجى إضافتها إلى هذا الويكي.

التكوين

لتخزين أصول Discourse الثابتة في تخزين الكائنات الخاص بك، أضف هذا التكوين في ملف app.yml الخاص بك تحت قسم 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

عند استخدام تخزين الكائنات، تحتاج أيضاً إلى CDN لخدمة ما يتم تخزينه في الدلو (bucket). استخدمت StackPath CDN في اختباري، وبصرف النظر عن الحاجة إلى تعيين Dynamic Caching By Header: Accept-Encoding في تكوينهم، يعمل بشكل جيد.

DISCOURSE_CDN_URL هو CDN يشير إلى اسم المضيف الخاص بـ Discourse ويخزن الطلبات مؤقتاً. سيتم استخدامه بشكل أساسي للأصول القابلة للسحب: CSS وأصول السمات الأخرى.

DISCOURSE_S3_CDN_URL هو CDN يشير إلى دلو تخزين الكائنات الخاص بك ويخزن الطلبات مؤقتاً. سيتم استخدامه بشكل أساسي للأصول القابلة للدفع: JS، الصور، وتحميلات المستخدمين.

نوصي بأن يكونا مختلفين وأن يقوم المشرفون بتعيين كلاهما.

عدم استخدام CDN (أو إدخال عنوان URL الخاص بالدلو كعنوان URL لـ CDN) من المرجح أن يسبب مشاكل ولا يتم دعمه.

في الأمثلة التالية، https://falcoland-files-cdn.falco.dev هو CDN مُكوّن لخدمة الملفات الموجودة تحت الدلو. تم تعيين اسم الدلو إلى falcoland-files في أمثلتي.

يُنصح بتكوين هذه الإعدادات في متغيرات البيئة في ملف app.yml الخاص بك لأن هذا هو ما يفعله CDCK في بنيتهم التحتية، وبالتالي فهو مُختبر جيداً. أيضاً، تحدث مهمة رفع الأصول بعد تجميع الأصول، وهو ما يحدث أثناء إعادة البناء. إذا كنت تريد تشغيل Discourse يعمل بشكل صحيح مع تخزين الكائنات منذ البداية، فأنت بحاجة إلى تعيين متغيرات البيئة بحيث يتم رفع الأصول قبل بدء الموقع.

اختر مزودك من القائمة أدناه وأضف هذه الإعدادات إلى قسم env في ملف app.yml الخاص بك، مع تعديل القيم وفقاً لذلك:

AWS S3

ما ندعمه رسمياً ونستخدمه داخلياً. عرض CDN الخاص بهم Cloudfront يعمل أيضاً كواجهة لملفات الدلو. انظر Set up file and image uploads to S3 لمعرفة كيفية تكوين الأذونات بشكل صحيح.

  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

عرض DO جيد ويعمل مباشرة. من الجيد تمكين Restrict File Listing. المشكلة الوحيدة هي أن عرض CDN الخاص بهم معطوب بشكل سيء، لذا تحتاج إلى استخدام CDN مختلف للملفات. أيضاً، لا تحتاج إلى تثبيت قاعدة CORS، حيث إنها تعيد تثبيتها عند كل إعادة بناء.

مثال على التكوين:

  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

مطلوب معلمة تكوين إضافية، HTTP_CONTINUE_TIMEOUT، لـ Linode.

مثال على التكوين:

  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

قائمة الملفات معطوبة، لذا تحتاج إلى متغير بيئة إضافي لتخطي ذلك حتى تعمل الأصول. أيضاً تخطي CORS وقم بتكوينه يدوياً.

:warning: نظراً لأنه لا يمكنك سرد الملفات، فلن تتمكن من سرد النسخ الاحتياطية، وستفشل النسخ الاحتياطية التلقائية، لذا لا نوصي باستخدامها للنسخ الاحتياطي. ومع ذلك، يقترح البعض أنه إذا قمت بتغيير الدور من Storage Legacy Object Owner إلى Storage Legacy Bucket Owner، فإن النسخ الاحتياطية تعمل بشكل صحيح. انظر هذا الموضوع للمناقشة الخاصة بـ Google Cloud.

هناك إضافة من طرف ثالث لتحسين التكامل على Discourse GCS Helper.

مثال على التكوين:

  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

عرض Scaleway جيد أيضاً، وكل شيء يعمل بشكل جيد في معظم الأوقات.

:warning: عمليات الرفع متعددة الأجزاء في Scaleway تدعم حد أقصى 1,000 جزء فقط. هذا لا يتطابق مع Amazon S3، الذي يدعم حد أقصى 10,000 جزء. بالنسبة للتركيبات الأكبر، سيؤدي هذا إلى فشل النسخ الاحتياطي في Discourse وقد يحتاج الرفع غير المكتمل إلى حذفه يدوياً قبل إجراء محاولات أخرى. بالنسبة للتركيبات الصغيرة، هذه ليست مشكلة. يبدو أن Scaleway منفتح جداً على التعليقات، لذا إذا كنت ترغب في تغيير هذا الحد، يجب أن تتواصل معهم.

لاحظ أنه بالنسبة لمعلمة DISCOURSE_S3_ENDPOINT، يستخدم Discourse نقطة نهاية المنطقة بأكملها: https://s3.{region}.scw.cloud. تأتي “نقطة نهاية الدلو” الموجودة في لوحة تحكم Scaleway الخاصة بك في شكل https://{bucketName}.s3.{region}.scw.cloud. احذف اسم الدلو من اسم النطاق الفرعي لمنع أخطاء الاتصال.

مثال على التكوين:

  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

مطلوب معلمة تكوين إضافية، HTTP_CONTINUE_TIMEOUT، لـ Vultr.

مثال على التكوين:

  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

تحتاج إلى تخطي CORS وتكوينه يدوياً.

هناك تقارير عن عدم عمل تنظيف التحميلات اليتيمة بشكل صحيح مع BackBlaze. يجب عليك تغيير قواعد دورة الحياة لدلو الخاص بك حتى يعمل تنظيف اليتامى.

مثال على التكوين:

  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

ملاحظة: أثناء الهجرة الأولية إلى B2، قد تواجه حدود 2500 معاملة فورية مجانية يومياً من الفئة C. ستحتاج إلى إضافة طريقة دفع لإزالة الحدود.

MinIO Storage Server

هناك بعض التحذيرات والمتطلبات التي يجب التأكد من استيفاؤها قبل أن تتمكن من استخدام خادم تخزين MinIO كبديل لـ S3:

  1. لديك خادم MinIO مُكوّن بالكامل
  2. تم تمكين دعم النطاق في تكوين MinIO، لعناوين URL الدلو المدفوعة بالنطاق. هذا هو مطلب التكوين الإلزامي لـ MinIO و Discourse، حيث لا يزال MinIO يدعم أنماط “المسار” القديمة لـ S3 والتي لم تعد مدعومة في Discourse.
  3. تم تعيين تكوين DNS بشكل صحيح لـ MinIO بحيث تحل أسماء النطاقات الفرعية للدلو بشكل صحيح إلى خادم MinIO، وتم تكوين خادم MinIO مع نطاق أساسي (في هذه الحالة، minio.example.com)
  4. يوجد الدلو discourse-data على خادم MinIO ويتم تعيين سياسة “عام” عليه
  5. يشير عنوان URL الخاص بـ S3 CDN الخاص بك إلى CDN مُكوّن بشكل صحيح يشير إلى الدلو ويخزن الطلبات مؤقتاً، كما ورد سابقاً في هذا المستند.
  6. يتم تكوين CDNs الخاصة بك لاستخدام رأس "Host

  1. Oracle Cloud تفتقر إلى دعم الوصول إلى الدلاء بأسلوب المضيف الافتراضي و لن تعمل ↩︎

69 إعجابًا
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
Setting up backup and image uploads to Backblaze B2
What are the right settings to use S3 bucket (with non-Amazon URL)?
Upload assets to S3 after in-browser upgrade
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
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
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
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?
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?
Colored loading dots because assets not uploaded
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
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
S3 error, when updating to 2.9.0.beta1
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?
Setting up backup and image uploads to Backblaze B2
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)
Set up BackBlaze S3 with BunnyCDN
Why you should use Discourse internally for your company/team instead of Slack (4 years use case)
Make s3_region a string value
Imgur upload built into the post buttons
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
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?
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
Resizing images off server
Unable to setup S3 bucket
Discourse Stuck on Loading (Logs)
Discourse Stuck on Loading (Logs)
Unable to setup S3 bucket
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
Backup discourse from the command line
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附件上传成功后,论坛中无法加载出来?
Install Discourse on a residential internet with Cloudflare Tunnel
Custom emoji don't use CDN for S3 stored assets in a few pages
S3 and Cloudfront - Setup Not Working
Secure Uploads
Make s3_region a string value
Backup Files Not Showing in Discourse Backend After Uploading to Cloudflare R2
Images after a restore don't have S3 bucket URL
Can't upload to S3 (Cloudflare R2)
Daily Summary (9pm UTC)
Custom Emojis loaded from S3/R2 bypass CDN routing
Need tips on making my forum faster
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
Custom Emojis loaded from S3/R2 bypass CDN routing
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
S3 and Cloudfront - Setup Not Working
Migrate_to_S3 Fails on Rebake
Can not access backup page and related error when restoring using GCP Object Storage
Cannot rebake after setting up CDN
Rebuild failure - skipping "after_assets_precompile" section of app.yml
High Availability 3 Server setup
Enable hidden setting to include S3 uploads in the backups
Run Discourse as docker swarm service
Azure Blob Storage Plugin
How might we better structure #howto?
Migrating uploaded files from DO to S3
Discourse as a closed wiki

مرحبًا بالجميع،

أستخدم تخزين S3 منذ عدة سنوات الآن بدون شبكة توصيل محتوى (CDN).

اتباعًا للنصيحة التي تلقّيتها في موضوع آخر، قمت اليوم بإعداد شبكة CloudFront CDN.

قبل أن أضيف عنوان URL الخاص بـ CDN إلى لوحة التحكم وأعيد معالجة أكثر من 230,000 منشور فقط لأكتشف أن إعدادًا خاطئًا في CloudFront قد يعطل كل شيء، هل يمكن لأحد تأكيد أن هذا هو السلوك المتوقع بالنسبة لي من فضلك؟ :bowing_man:t2:

حاليًا، هذا مثال لعنوان URL لصورة قام أحد المستخدمين برفعها:

https://greyarrows.s3.dualstack.eu-west-2.amazonaws.com/original/3X/8/3/8335cab232f512f4a979c7f0c8562e149c01b212.png

والذي يعرض:

اسم النطاق الخاص بـ CloudFront هو: d1q8cepst0v8xp.cloudfront.net

إذا قمت بتعديل عنوان URL أعلاه يدويًا واستبدلت جزء S3 الحالي في اسم النطاق باسم نطاق CloudFront الخاص بي، أحصل على:

https://d1q8cepst0v8xp.cloudfront.net/original/3X/8/3/8335cab232f512f4a979c7f0c8562e149c01b212.png

وبالفعل، تظل الصورة تُحمّل بشكل صحيح:

لذلك، هل صحيح أنني أحتاج فقط إلى إضافة عنوان URL لـ S3 CDN وهو d1q8cepst0v8xp.cloudfront.net إلى لوحة تحكم Discourse، وإعادة معالجة جميع المنشورات، ثم الاسترخاء وانتظار حدوث السحر؟

شكرًا مسبقًا، فشبكة CDN جديدة تمامًا بالنسبة لي ولا أملك بيئة تطوير يمكنني فيها اختبار ذلك بأمان :grimacing:

4 إعجابات

لديّ أيضًا إعداد s3 configure tombstone policy مفعّل:

Screen Shot 2021-02-14 at 21.08.39

هل سيُشكّل هذا مشكلة؟ بما أنني أستخدم الآن شبكة توصيل محتوى (CDN) بدلاً من ذلك؟ أم أن العمليات في الخلفية لا تزال تفحص حزمة S3 الأصلية، وليس عنوان URL الخاص بشبكة CDN؟

من الطبيعي أن أفترض أن الأمر يتعلق بالأخير، لكن مرة أخرى، لا أستطيع المخاطرة بإيقاف مئات الآلاف من مستخدميني عن تحميل الصور :scream:

:blush:

إعجابَين (2)

الإجابة هي نعم.

ولاختبار هذه الفرضية، قبل إعادة خبز مئات الآلاف من المنشورات، قمت بالتحققات المنطقية التالية:

  • قمت برفع صورة
  • غيّرت إعداد عنوان URL الخاص بـ S3 CDN
  • أعيد بناء HTML في منشوري الاختباري (عبر واجهة المستخدم)
  • حدّثت الصفحة في المتصفح
  • تحققت من تبويب الشبكة في وحدة تحكم المتصفح للتأكد من أن الصورة يتم جلبها عبر Cloudfront
  • قمت برفع صورة اختبارية جديدة إلى منشور جديد
  • تحققت من تبويب الشبكة في وحدة تحكم المتصفح للتأكد من أن الصورة يتم جلبها عبر Cloudfront

أنا الآن أقوم بإعادة خبز جميع المنشورات في هذه اللحظة :+1:t2:

14 إعجابًا

شكرًا لك على التقرير يا ريتشي. لقد كان لدي تخزين صور AWS S3 يعمل منذ عدة سنوات، ووصلت إلى هذا المنشور عبر رسالة وحدة التحكم. لكن الوصف في الأعلى لا يقول شيئًا عن الحالة التي يكون فيها لديك S3 بالفعل وتحتاج فقط إلى CDN.

للتوضيح، إليك ما قمت به:

  1. ذهبت إلى وحدة تحكم AWS، وفي قسم الشبكة وتوصيل المحتوى، اخترت Cloudfront.
  2. نقرت على زر إنشاء توزيع (Create distribution).
  3. ملأت النموذج الواضح إلى حد كبير، والشيء الوحيد الذي تحتاج حقًا إلى فعله فيه هو اختيار حاوية AWS S3 الخاصة بك حيث توجد الصور من القائمة المنسدلة.
  4. انتظرت قليلًا حتى ينتهي تكوين Cloudfront.
  5. ظهر نطاق <gibberish>.cloudfront.net في عمود “اسم النطاق” في قائمة توزيعات Cloudfront.
  6. قمت بنسخ ولصق ذلك النطاق في حقل s3 cdn url في إعدادات الملفات الخاصة بمسؤول موقعي.
  7. أجريت بعض الاختبارات:
    أ. قمت بإنشاء منشور جديد مع رفع صورة، وكان موجودًا بالفعل على Cloudfront.
    ب. ضغطت على إعادة بناء HTML لبعض منشورات الصور الموجودة عشوائيًا ورأيت أنها أعيد بناؤها أيضًا بصور cloudfront.net.
  8. بما أن كل شيء بدا جيدًا، دخلت ونفذت عملية إعادة خبز (rebake)، والتي استغرقت عدة ساعات لأن لدي الآن حوالي نصف مليون منشور:
./launcher enter app
# rake posts:rebake
  1. يبدو أن كل شيء يعمل بشكل جيد. لقد وضع عددًا هائلاً من الوظائف في قائمة Sidekiq، واحدة لكل منشور على ما يبدو، والتي ستستغرق بضعة أيام لتنظيفها، لكنها تعمل حاليًا على معالجتها على دفعات.
18 إعجابًا

هل أنت متأكد من ذلك؟ هذا الموقع يستخدم أصولًا من CDN ولم نضطر إلى تفريغ ذاكرة التخزين المؤقت. كما أن هذا تغيير في EmberCli لا ينبغي أن يؤثر على بيئة الإنتاج :thinking:

5 إعجابات

أولئك المحسّنون اللعائنون. سأخبرك بتعطيل ذلك إذا أمكن، حيث تأتي منصة Discourse مُعدة مسبقًا بتكوينات مثالية لكل أصل. هذه المحسّنات رائعة عندما تستضيف برمجيات ويب مغلقة المصدر من تسعينيات القرن الماضي، لكنها تفشل فشلاً ذريعًا في التعامل مع التقنيات الحديثة. وحتى المحسّن الكبير من Cloudflare غالبًا ما يتسبب في تعطل Discourse، لذا لا أملك أي أمل في الآخرين. قد تعمل في يوم ما، ثم تتعطل في اليوم التالي، تاركة جميع زوارك أمام صفحة فارغة. كل هذا دون أي فائدة.

6 إعجابات

هل من الممكن أن تكون قد فعّلت secure_uploads في إعدادات الموقع؟

يبدو أيضًا أن هذه المشكلة قد تم الإبلاغ عنها وإصلاحها اليوم بسبب توافقها مع Discourse:

6 إعجابات

هل توجد طريقة لإيقاف ظهور هذا التنبيه في لوحة تحكم المسؤول؟

تم إعداد الخادم لرفع الملفات إلى S3، لكن لا يوجد CDN لـ S3 مُعد.

واجهتُ بعض الصعوبات في إعداد CDN لـ S3، لكن التكلفة ليست باهظة، لذا أنا راضٍ عن استخدام S3 مباشرة. لكن ما أود حقًا هو اختفاء هذا الإشعار لأنني أدرك تمامًا العواقب.

إعجابَين (2)

مرحباً.

أود فقط تقديم تحديث. سنتمكن الآن من إعداد النسخ الاحتياطي باستخدام GCS. لقد نشرت في موضوع آخر أيضاً. آمل أن يساعد هذا الأشخاص الآخرين الذين يبحثون عن هذا الحل بصعوبة.

كيف نفعل ذلك؟
فعّل الإعداد الافتراضي للنسخ الاحتياطي (أو يمكنك الإعداد من لوحة تحكم المسؤول).

DISCOURSE_S3_BACKUP_BUCKET: falcoland-files/backup
DISCOURSE_BACKUP_LOCATION: s3

ثم اضبط أذونات الدلو (Bucket) على Storage Legacy Object Owner:

  1. انتقل إلى مشروعك في وحدة تحكم Google Cloud
  2. اختر التخزين (Storage)
  3. اختر الدلو (Bucket) الخاص بك
  4. انتقل إلى علامة التبويب الأذونات (Permissions)
  5. أضف إذنًا جديدًا، وأدخل بريد حساب الخدمة الخاص بك مع حسابك. بالنسبة للأدوار، اختر Storage Legacy Object Owner
  6. احفظ وانتهى.

أعتذر عن النشر المزدوج، أردت فقط مشاركة هذا التحديث الجيد.
شكرًا لك

5 إعجابات

سيكون رائعًا لو أضفت Wasabi أيضًا…

إعجاب واحد (1)

استخدمت Wasabi للنسخ الاحتياطي لفترة من الوقت. من حيث التكوين، كان “يعمل ببساطة”، لذا يمكنك تجربته إذا أردت.

لكن مع مرور الوقت، فشلت النسخ الاحتياطي بصمت وبقيت على الجهاز المحلي، مما أدى إلى امتلاء القرص. نظرت إلى أخطاء Wasabi و Discourse ولم أجد تفسيرًا يسمح لأي من الطرفين بـ “إصلاح” أي شيء.

لا أنصح به، لأنني لست متأكدًا من أنه “ممتاز”.

إعجابَين (2)

شكرًا لك!
سأتحقق من كيفية سير الأمر هذه المرة.
التكرار الافتراضي للنسخ الاحتياطي هو 7 أيام بين النسخ الاحتياطية، مع الاحتفاظ بما يصل إلى 5 نسخ احتياطية.
سأشاركك النتائج.

إعجاب واحد (1)

كنت أقوم بنسخ احتياطي يومي؛ لا أتذكر كم عدد النسخ التي كنت أحاول الاحتفاظ بها، لكن القرص الصلب المحلي كان يحتوي على مساحة لنسخة أو اثنتين فقط.

إعجابَين (2)

أي خدمة تخزين تنصح بها شخصيًا؟
لا أعتقد أن AWS و Azure ميسورة التكلفة للمشاريع الشخصية.
لست متأكدًا بشأن Azure، لكن AWS تبدو مربكة وغير متوقعة…

إعجاب واحد (1)

أملت أن يكون الـ wasabi جيدًا على الأقل للنسخ الاحتياطي. خدمة Backblaze S3 ميسورة التكلفة. لا أظن أنني استخدمتها للرفع، لكنها تعمل للنسخ الاحتياطي (أعتقد). أعتقد أن المشكلة الوحيدة مع Backblaze هي أنه (عندما اختبرتها آخر مرة) كان يتعين عليك استخدام مفتاح عالمي (لذا لم أستطع استخدامه مع العملاء الذين يمكنهم رؤية المفتاح). أعتقد أن شخصًا ما نشر مؤخرًا حلاً لذلك (شيء يتعلق بـ “قديم” أو ما شابه، في مكان ما). لمشروع شخصي، هذا ما سأجربه بعد ذلك، أعتقد. (وإذا كنت تستخدم Digital Ocean، فإن Spaces خيار جيد، أعتقد.)

3 إعجابات

أنا أستخدم DigitalOcean، لكن من حيث التكلفة، Blackblaze/Wasabi أرخص.
ما الذي استخدمته للرفع؟

إعجاب واحد (1)

عذراً، لم أستطع الفهم.
لماذا يجب تحديد الإعدادات في app.yml، بينما يمكننا إدخال هذه المعلومات من خلال Discourse → Settings؟

إعجاب واحد (1)

أعتقد أن السبب يعود إلى الطريقة التي يتعامل بها مع بناء الأصول عند بناء الحاوية. من المحير إلى حد ما أن السلوك يختلف عندما تكون الإعدادات في متغيرات البيئة وقاعدة البيانات، لكن هذا هو الحال. كما أنها طريقة أفضل للتعامل معها، حيث يعني ذلك أنه يمكنك بناء واستعادة موقع جديد من سطر الأوامر.

4 إعجابات

أين يجب أن أقوم بتعيين هذا؟ لم أجده في إعدادات إدارة Discourse؟

إعجاب واحد (1)