Anh chị em Việt Nam
COME AS GUESTS. STAY AS FAMILY.

Sử dụng DigitalOcean Spaces hoặc Amazon S3 để lưu trữ tệp trong XF 2.x

Bcat

Member
Uploader
Credits
293
  • Keeps coming back
Tương thích phiên bản XenForo

Hướng dẫn sau đây sẽ hoạt động trong XF 2.0 hoặc XF 2.1. Bạn cần đảm bảo bạn đang sử dụng phiên bản chính xác của các tệp bổ trợ .

Cả hai đều được bao gồm khi bạn nhấp vào nút tải xuống, vui lòng đảm bảo bạn tải xuống phiên bản 2.0.x nếu bạn đang sử dụng XenForo 2.0.x và vui lòng đảm bảo bạn tải xuống phiên bản 2.1.x nếu bạn đang sử dụng XenForo 2.1.x.

Tại sao hướng dẫn này?

Kể từ XenForo 2.0.0, chúng tôi đã hỗ trợ lưu trữ tệp từ xa bằng hệ thống tệp trừu tượng có tên Flysystem. Nó được gọi là một hệ thống tệp trừu tượng vì nó thêm một lớp trừu tượng giữa mã và hệ thống tệp. Điều đó có nghĩa là nó cung cấp một API nhất quán để thực hiện các hoạt động của hệ thống tệp để cho dù hệ thống tệp là hệ thống tệp dựa trên đĩa cục bộ hay hệ thống tệp phân tán và có thể truy cập từ xa, mã của chúng tôi gọi các chức năng tương tự và Flysystem đảm nhiệm phần còn lại.

Cũng hữu ích như vậy, nó không phải là điều rõ ràng nhất hoặc đơn giản nhất để thiết lập để hướng dẫn này và tiện ích bổ sung kèm theo sẽ giúp ích.

Vì vậy, nếu bạn dự định sử dụng chức năng tải lên video trong XF 2.1 và bạn lo lắng về các yêu cầu dung lượng ổ đĩa tăng lên hoặc ngay cả khi bạn ở lại 2.0 trong một thời gian và bạn chỉ cần giảm tải các yêu cầu lưu trữ của mình ở nơi khác, điều này sẽ giúp.

Cung cấp các tệp cần thiết

Mặc dù bạn có thể tải xuống các tệp và tự thiết lập những thứ như trình tải tự động, có lẽ bạn sẽ thích tải xuống bổ trợ được đính kèm với tài nguyên này. Bạn có thể cài đặt tiện ích theo cách thông thường .


Trước khi bạn bắt đầu

Nếu bạn đang thiết lập điều này trên một trang web hiện tại, bạn sẽ cần phải di chuyển thủ công các tệp hiện có của mình. Có một phần về điều đó ở cuối. Trong khi bạn đang di chuyển các tệp hiện có, thiết lập mọi thứ và kiểm tra, chúng tôi khuyên bạn nên đóng diễn đàn trước.

Tự động tải SDK AWS (chỉ dành cho XenForo 2.0.x)

Điều đầu tiên cần làm là thiết lập tự động tải SDK AWS.

Mở
Tự động tải SDK AWS (chỉ dành cho XenForo 2.0.x)

Điều đầu tiên cần làm là thiết lập tự động tải SDK AWS.

Mở src/config.php tập tincủa bạn.

Có một số gói nhà cung cấp khác nhau có liên quan và được cung cấp bởi tiện ích bổ sung được đính kèm với tài nguyên này, các dòng sau đảm bảo tất cả chúng đều được tự động tải. Chúng tôi đang làm điều này ở đây vì chúng tôi cần các tệp có sẵn càng sớm càng tốt trong yêu cầu:

PHP:
\XFAws\Composer::autoloadNamespaces(\XF::app());
\XFAws\Composer::autoloadPsr4(\XF::app());
\XFAws\Composer::autoloadClassmap(\XF::app());
\XFAws\Composer::autoloadFiles(\XF::app());
Bây giờ chúng tôi đã sẵn sàng để thiết lập một triển khai cụ thể. Xem bên dưới để biết hướng dẫn Thiết lập DigitalOcean Spaces hoặc bỏ qua phía trước để hướng dẫn Cài đặt Amazon S3 .


Thiết lập không gian DigitalOcean


Chúng tôi sẽ đề cập đến vấn đề này trước tiên vì đây là cách đơn giản nhất để thiết lập. Nếu bạn muốn sử dụng Amazon S3, hãy bỏ qua phần Thiết lập Amazon S3 bên dưới.
  1. Tới DigitalOcean Mây trang và đăng ký hoặc đăng nhập.
  2. Tại thời điểm này, nếu bạn chưa quen với DigitalOcean, bạn có thể cần phải thiết lập thanh toán.
  3. Bây giờ bạn sẽ có thể tạo một dự án mới.
  4. Nhấp vào liên kết "Bắt đầu sử dụng Spaces". ( Start using Spaces )
  5. Chọn khu vực trung tâm dữ liệu của bạn (Tôi đã chọn Amsterdam). ( singapore )
  6. Để lại "Hạn chế danh sách tập tin" được chọn. ( Leave "Restrict File Listing" selected. )
  7. Chọn một tên duy nhất (Tôi đã chọn "xftest")
  8. Nhấp vào "Tạo không gian"
Bây giờ, không gian được tạo, bạn nên có một URL điểm cuối, tương tự như: https://xftest.ams3.digitaloceanspaces.com. Lưu ý điều này xuống sau.

Bây giờ chúng ta cần tạo một số thông tin API. Để làm điều này:
  1. Nhấp vào "Quản lý" trong thanh bên trái.
  2. Nhấp vào "API".
  3. Trong phần "Phím truy cập không gian", nhấp vào "Tạo khóa mới". ( In the "Spaces access keys" section click "Generate New Key". )
  4. Nhập tên cho khóa (Một lần nữa, tôi đã chọn "xftest") và lưu lại.
Điều này sẽ cung cấp cho bạn một chìa khóa và một bí mật. Lưu ý chúng xuống.

Định cấu hình XF để sử dụng Spaces DigitalOcean

Bây giờ chúng ta cần cấu hình XF để sử dụng Spaces DigitalOcean để lưu trữ tệp. Chúng ta sẽ bắt đầu với những gì thường đi vào data thư mục đầu tiên. Điều này thường bao gồm hình thu nhỏ đính kèm và hình đại diện.

Mở src/config.php tập tin của bạn .

Trước tiên, chúng ta cần định cấu hình ứng dụng khách Amazon S3 (API Spaces của DigitalOcean tương thích với SDK AWS của Amazon).

Chúng tôi sẽ làm điều này bằng cách sử dụng closure để chúng tôi có thể sử dụng lại cùng một mã và chúng tôi chỉ phải gõ nó một lần:

PHP:
$s3 = function()
{
   return new \Aws\S3\S3Client([
      'credentials' => [
         'key' => 'ABC',
         'secret' => '123'
      ],
      'region' => 'ams3',
      'version' => 'latest',
      'endpoint' => 'https://ams3.digitaloceanspaces.com'
   ]);
};
Lưu ý rằng key secret là những gì bạn đã ghi lại sau khi thiết lập "Khóa truy cập không gian" trước đó. Có region thể được suy ra từ URL điểm cuối mà bạn đã ghi lại trước đó. Đó là phần sau phần đầu tiên .trong URL, trong trường hợp của tôi là vậy ams3. (Amsterdam) Đây endpoin tlà cùng một URL điểm cuối trừ tên duy nhất bạn đã chọn.

Tiếp theo, chúng ta cần thiết lập bộ điều hợp Flysystem thực tế để sử dụng máy khách S3:

Code:
$config['fsAdapters']['data'] = function() use($s3)
{
   return new \League\Flysystem\AwsS3v3\AwsS3Adapter($s3(), 'xftest', 'data');
};
Cuối cùng, chúng tôi cần đảm bảo rằng các hình thu nhỏ và hình thu nhỏ của URL được đính kèm với URL chính xác. Điều này yêu cầu URL điểm cuối mà bạn đã ghi lại trước đó, một lần nữa:

PHP:
$config['externalDataUrl'] = function($externalPath, $canonical)
{
   return 'https://xftest.ams3.digitaloceanspaces.com/data/' . $externalPath;
};
Tại thời điểm này, mọi thứ nên hoạt động về mặt tải lên mới. Đừng hoảng hốt nếu bạn nhận thấy avatar và hình thu nhỏ bị thiếu; nếu bạn có các tệp hiện có, chúng sẽ cần được chuyển qua thủ công mà chúng ta sẽ thực hiện sau.

Đầu tiên, chúng ta cần kiểm tra xem cấu hình có hoạt động không. Đơn giản chỉ cần đi và tải lên một hình đại diện mới. Hình đại diện bây giờ sẽ được lưu trữ và phục vụ từ xa!

Nếu bạn kiểm tra tài khoản Spaces DigitalOcean của mình ngay bây giờ, bạn sẽ thấy các thư mục mới đã được tạo có chứa hình đại diện mới của bạn:


Sự thành công! 🌟Nhưng chúng ta chỉ cách đó một nửa!

Bây giờ chúng ta cũng cần thêm hỗ trợ cho các internal_data công cụ thư mục. Nói chung, đây là tệp đính kèm và bất kỳ nội dung nào khác phải là "riêng tư". Quay lại config.php và mã để thêm rất giống nhau:

PHP:
$config['fsAdapters']['internal-data'] = function() use($s3)
{
   return new \League\Flysystem\AwsS3v3\AwsS3Adapter($s3(), 'xftest', 'internal_data');
};
Bây giờ hãy thử tải lên tệp đính kèm vào bài đăng và, giống như trước đây, bây giờ bạn sẽ thấy các tệp và thư mục bổ sung trong trình duyệt tệp Spaces của mình. 🎉
 

Bcat

Member
Uploader
Credits
293
  • Keeps coming back
Thiết lập Amazon S3
  1. Chuyển đến trang AWS Management Console và đăng ký hoặc đăng nhập.
  2. Trong phần "Dịch vụ AWS", nhập "S3" để chuyển đến "Bảng điều khiển S3".
  3. Nhấp vào "Tạo xô". ( Create bucket )
  4. Chọn một tên xô (Tôi đã chọn xftest).
  5. Chọn một khu vực (Tôi đã chọn EU London).
  6. Chấp nhận bất kỳ tùy chọn mặc định nào khác cho đến khi xô được tạo.
  7. Bây giờ bạn cần phải đi đến giao diện điều khiển "IAM".
  8. Nhấp vào "Thêm người dùng".
  9. Chọn tên người dùng (vâng, tôi đã sử dụng xftest một lần nữa 😉).
  10. Đặt loại truy cập thành "Lập trình".
  11. Để đặt quyền, nhấp vào tab "Đính kèm chính sách hiện tại trực tiếp" kèm theo nút "Tạo chính sách".
  12. IAM và các chính sách và quyền khác nhau có thể khá khó khăn. Chúng tôi có thể làm cho nó dễ dàng hơn một chút, mặc dù bạn có thể có các yêu cầu khác nhau. Trên trang này có một tab gọi là "JSON". Dán phần sau vào đó, thay thế YOUR-BUCKET-NAME bằng tên nhóm bạn đã chọn trước đó:

JSON:
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "s3:ListBucket",
                "s3:GetObject",
                "s3:GetObjectAcl",
                "s3:putObject",
                "s3:putObjectAcl",
                "s3:ReplicateObject",
                "s3:DeleteObject"
            ],
            "Resource": [
                "arn:aws:s3:::YOUR-BUCKET-NAME",
                "arn:aws:s3:::YOUR-BUCKET-NAME/*"
            ]
        }
    ]
}
  1. Nhấp vào "Xem lại chính sách" đặt tên và lưu.
  2. Quay trở lại trang "Thêm người dùng" trước đó, nhấp vào nút "Làm mới" và tìm kiếm chính sách bạn vừa tạo.
  3. Nhấp vào "Tiếp theo", theo sau là "Tạo người dùng".
Điều này sẽ cung cấp cho bạn một chìa khóa và một bí mật. Lưu ý chúng xuống.

Định cấu hình XF để sử dụng Amazon S3

Bây giờ chúng ta cần định cấu hình XF để sử dụng Amazon S3 để lưu trữ tệp. Chúng ta sẽ bắt đầu với những gì thường đi vào datathư mục đầu tiên. Điều này thường bao gồm hình thu nhỏ đính kèm và hình đại diện.

Mở src/config.php tập tin của bạn .

Chúng tôi sẽ làm điều này bằng cách sử dụng closure để chúng tôi có thể sử dụng lại cùng một mã và chúng tôi chỉ phải gõ nó một lần:

PHP:
$s3 = function()
{
   return new \Aws\S3\S3Client([
      'credentials' => [
         'key' => 'ABC',
         'secret' => '123'
      ],
      'region' => 'us-east-1',
      'version' => 'latest',
      'endpoint' => 'https://s3.eu-west-2.amazonaws.com'
   ]);
};
Lưu ý rằng key secret là những gì bạn đã lưu ý sau khi thiết lập người dùng IAM trước đó. Có region thể được suy ra từ URL điểm cuối S3.

Tiếp theo, chúng ta cần thiết lập bộ điều hợp Flysystem thực tế để sử dụng máy khách S3:

PHP:
$config['fsAdapters']['data'] = function() use($s3)
{
   return new \League\Flysystem\AwsS3v3\AwsS3Adapter($s3(), 'xftest', 'data');
};
Cuối cùng, chúng tôi cần đảm bảo rằng các hình thu nhỏ và hình thu nhỏ của URL được đính kèm với URL chính xác:

Code:
$config['externalDataUrl'] = function($externalPath, $canonical)
{
   return 'https://xftest.s3.eu-west-2.amazonaws.com/data/' . $externalPath;
};
Tại thời điểm này, mọi thứ nên hoạt động về mặt tải lên mới. Đừng hoảng hốt nếu bạn nhận thấy avatar và hình thu nhỏ bị thiếu; nếu bạn có các tệp hiện có, chúng sẽ cần được chuyển qua thủ công mà chúng ta sẽ thực hiện sau. ( copy past ah ?? )

Đầu tiên, chúng ta cần kiểm tra xem cấu hình có hoạt động không. Đơn giản chỉ cần đi và tải lên một hình đại diện mới. Hình đại diện bây giờ sẽ được lưu trữ và phục vụ từ xa!

Nếu bạn kiểm tra trình duyệt tệp xô của mình ngay bây giờ, bạn sẽ thấy các thư mục mới đã được tạo có chứa hình đại diện mới của bạn:



Sự thành công! 🌟Nhưng chúng ta chỉ cách đó một nửa!

Bây giờ chúng ta cũng cần thêm hỗ trợ cho các internal_data công cụ thư mục. Nói chung, đây là tệp đính kèm và bất kỳ nội dung nào khác phải là "riêng tư". Quay lại config.php và mã để thêm rất giống nhau:

PHP:
$config['fsAdapters']['internal-data'] = function() use($s3)
{
   return new \League\Flysystem\AwsS3v3\AwsS3Adapter($s3(), 'xftest', 'internal_data');
};
Bây giờ hãy thử tải lên tệp đính kèm vào bài đăng và, giống như trước đây, bây giờ bạn sẽ thấy các tệp và thư mục bổ sung trong trình duyệt tệp xô của mình. 🎉

Di chuyển các tệp hiện có sang DigitalOcean Spaces hoặc Amazon S3

Vì vậy, giờ đây bạn có các tệp được lưu trữ từ xa. Ít nhất, bạn làm từ thời điểm này trở đi. Nhưng những gì về tất cả các tập tin hiện có bạn có?

Rất may, có một số cách để tương tác với Spaces và S3 để giúp di chuyển nội dung hiện có của bạn rất dễ dàng. Mặc dù đây là hoạt động một lần, tùy thuộc vào số lượng và kích thước của tệp, có thể mất một khoảng thời gian đáng kể.

Có một số cách để quản lý quá trình này, nhưng có thể nói cách tiếp cận tốt nhất là sử dụng một công cụ có tên là s3cmd là một công cụ dòng lệnh đa nền tảng phổ biến để quản lý các cửa hàng đối tượng tương thích S3 và S3.

Có thể cho dù bạn đang sử dụng Spaces hoặc S3 để cài đặt s3cmdcông cụ trên máy chủ của mình và chạy các lệnh để sao chép các tệp qua nhà mới của họ.

Thay vì làm lại một cái gì đó đã được viết, tôi sẽ để lại cho bạn hướng dẫn sau từ DigitalOcean, hướng dẫn cách di chuyển các tệp hiện có của bạn bằng s3cmd.

https://www.digitalocean.com/docs/spaces/resources/s3cmd/

Lưu ý: Khi sao chép các tệp dữ liệu hiện tại của bạn, chúng sẽ cần được công khai. Bạn có thể làm điều này bằng cách đặt ACL thành công khai trong khi sao chép:

https://www.digitalocean.com/docs/spaces/resources/s3cmd-usage/#put-all-files-in-your-current-directory

Add-ons: https://www.vietfriend.org/resources/using-digitalocean-spaces-or-amazon-s3-for-file-storage-in-xf-2-x.179/
 

dinhphucv

Well-known member
Staff member
Administrator
Moderator
Uploader
XF Premium
Credits
11.686
  • Addicted
  • Can't stop!
  • Keeps coming back
Em đọc nó ghi là để mặc định, em để mặc định không được, loay hoay mãi rồi để public mới được!
 

Bcat

Member
Uploader
Credits
293
  • Keeps coming back
Em đọc nó ghi là để mặc định, em để mặc định không được, loay hoay mãi rồi để public mới được!
Lúc đọc tiêu đề cứ nghĩ xen vs DO hợp tác :v được giảm giá cho xen khi dùng trên này =))
 

Users Who Are Viewing This Thread (Users: 0, Guests: 1)

Chủ đề tương tự

Chủ đề thịnh hành

About us

VietFriend community được xây dựng với mục đích kết nối mọi người lại với nhau, là nơi để giao lưu, học hỏi và chia sẻ mọi thứ trên đời.
Top