Addon 2x Using DigitalOcean Spaces or Amazon S3 for file storage - Sử dụng DigitalOcean Spaces hoặc Amazon S3 để lưu trữ tệp cho XenForo 2 2.3.0

PVS

Super Moderator
Thành viên BQT
Tham gia
28/02/2015
Bài viết
16,728
Được Like
12,680
Using DigitalOcean Spaces or Amazon S3 for file storage - Sử dụng DigitalOcean Spaces hoặc Amazon S3 để lưu trữ tệp cho XenForo 2 2.3.0

Khả năng tương thích với phiên bản XenForo


Bản tải xuống chỉ tương thích với XenForo 2.1 trở lên.

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

Kể từ XenForo 2.0.0 đã hỗ trợ lưu trữ tệp từ xa bằng cách sử dụng hệ thống tệp trừu tượng có tên Flysystem . Nó được gọi là 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. 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ù đó 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, code của XenForo sẽ gọi các chức năng giống nhau và Flysystem sẽ đảm nhận phần còn lại.

Tuy hữu ích như vậy nhưng nó không phải là điều rõ ràng hoặc đơn giản nhất để thiết lập vì vậy hướng dẫn này và add-on đi kèm sẽ hữu í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 trở lên và bạn lo lắng về yêu cầu dung lượng ổ đĩa tăng lên, điều này sẽ hữu ích.


Tạo sẵn các tệp cần thiết

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


Trước khi bắt đầu

Nếu bạn đang thiết lập điều này trên một trang web, bạn sẽ cần phải di chuyển các tệp hiện có của mình theo cách thủ công. 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à thử nghiệm, khuyên bạn nên đóng diễn đàn trước.


Thiết lập DigitalOcean Spaces

Chúng ta sẽ đề cập đến vấn đề này trước tiên vì đây là cách thiết lập đơn giản nhất. Nếu bạn muốn sử dụng Amazon S3, hãy chuyển sang phần Thiết lập Amazon S3 bên dưới.
  1. Truy cập trang DigitalOcean Cloud và đăng ký hoặc đăng nhập.
  2. Tại thời điểm này, nếu bạn mới sử dụng DigitalOcean, bạn có thể cần 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 "Start using Spaces".
  5. Chọn khu vực trung tâm dữ liệu của bạn (Tôi đã chọn Amsterdam).
  6. Chọn "Restrict File Listing".
  7. Chọn một tên duy nhất (tôi đã chọn "xftest")
  8. Nhấp vào "Create a space"
Bây giờ không gian được tạo, bạn sẽ có một URL điểm cuối, tương tự như: https://xftest.ams3.digitaloceanspaces.com. Ghi lại điều này cho sau này.

Bây giờ chúng ta cần tạo một số thông tin đăng nhập API. Để làm điều này:
  1. Nhấp vào "Manage" ở sidebar trái.
  2. Nhấp vào "API".
  3. Trong phần "Spaces access keys", hãy nhấp vào "Generate New Key".
  4. Nhập tên cho key (Một lần nữa, tôi đã chọn "xftest") và lưu.
Điều này sẽ cung cấp cho bạn một key và một secret. Ghi lại chúng.

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

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

Mở tệp src/config.phpcủa bạn.

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

Chúng ta sẽ làm điều này bằng cách sử dụng một closure để có thể sử dụng lại cùng một code và chỉ phải gõ ra 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 keysecret là những gì bạn đã ghi lại sau khi thiết lập "Spaces access key" trước đó. region có thể được suy ra từ URL điểm cuối mà bạn đã ghi chú trước đó. Đó là phần sau phần . đầu tiên trong URL, trong trường hợp của tôi, nó là ams3. endpoint là 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 để sử dụng client S3:
PHP:
$config['fsAdapters']['data'] = function() use($s3)
{
   return new \League\Flysystem\AwsS3v3\AwsS3Adapter($s3(), 'xftest', 'data');
};

Cuối cùng, chúng ta cần đảm bảo rằng URL hình thu nhỏ của hình đại diện và tệp đính kèm được thêm vào trước với URL chính xác. Điều này yêu cầu URL điểm cuối mà bạn đã ghi chú 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ứ sẽ hoạt động về mặt tải lên mới. Đừng lo lắng nếu bạn nhận thấy rằng hình đại diện 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 di chuyển theo cách thủ công mà chúng ta sẽ xem xét 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 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 DigitalOcean Spaces của mình ngay bây giờ, bạn sẽ thấy rằng các thư mục mới đã được tạo chứa hình đại diện mới của bạn:

cloud.digitalocean.com_spaces_xftest_i=3f9b71&path=data_avatars_o_0_.png

Thành công! Nhưng chúng ta mới chỉ đi được một nửa!

Bây giờ chúng ta cũng cần thêm hỗ trợ cho các công cụ thư mục internal_data. Nói chung, đây là tệp đính kèm và bất kỳ nội dung nào khác phải là "private". Quay lại config.php và code để 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 tệp đính kèm lên một 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.


Thiết lập Amazon S3
  1. Truy cập trang AWS Management Console và đăng ký hoặc đăng nhập.
  2. Trong phần "AWS services", nhập "S3" để chuyển đến "S3 Console".
  3. Nhấp vào "Create bucket".
  4. Chọn tên nhóm (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 nhóm được tạo.
  7. Bây giờ bạn cần truy cập bảng điều khiển "IAM".
  8. Nhấp vào "Add user".
  9. Chọn tên người dùng (vâng, tôi đã sử dụng lại xftest ).
  10. Đặt loại truy cập thành "Programmatic".
  11. Để đặt quyền, hãy nhấp vào tab "Attach existing policies directly", sau đó nhấp vào nút "Create policy".
  12. IAM và các chính sách và quyền hạn khác nhau có thể khá khó khăn. Chúng ta 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 được 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 "Review policy" đặt tên cho nó và lưu.
  2. Quay lại trang "Add user" trước đó, nhấp vào nút "Refresh" và tìm kiếm chính sách bạn vừa tạo.
  3. Nhấp vào "Next", tiếp theo là "Create user".
Điều này sẽ cung cấp cho bạn một key và một secret. Ghi lại chú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 cho việc lưu trữ tệp. Chúng ta sẽ bắt đầu với những gì thường đi vào thư mục data trước. Điều này thường bao gồm hình thu nhỏ và hình đại diện của tệp đính kèm.

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

Chúng ta sẽ làm điều này bằng cách sử dụng một closure để chúng ta có thể sử dụng lại cùng một code và chỉ phải gõ ra một lần:
PHP:
$s3 = function()
{
   return new \Aws\S3\S3Client([
      'credentials' => [
         'key' => 'ABC',
         'secret' => '123'
      ],
      'region' => 'eu-west-2',
      'version' => 'latest',
      'endpoint' => 'https://s3.eu-west-2.amazonaws.com'
   ]);
};

Lưu ý rằng keysecret là những gì bạn đã ghi lại sau khi thiết lập người dùng IAM trước đó. region có 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 để sử dụng client S3:
PHP:
$config['fsAdapters']['data'] = function() use($s3)
{
   return new \League\Flysystem\AwsS3v3\AwsS3Adapter($s3(), 'xftest', 'data');
};

Cuối cùng, chúng ta cần đảm bảo rằng các URL hình thu nhỏ của hình đại diện và tệp đính kèm được thêm vào trước với URL chính xác:
PHP:
$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ứ sẽ hoạt động về mặt tải lên mới. Đừng lo lắng nếu bạn nhận thấy rằng hình đại diện 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 di chuyển theo cách thủ công mà chúng ta sẽ xem xét 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 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 nhóm của mình ngay bây giờ, bạn sẽ thấy rằng các thư mục mới đã được tạo chứa hình đại diện mới của bạn:

s3.console.aws.amazon.com_s3_buckets_xftest_data_avatars_o_0__region=us-east-1&tab=overview.png

Thành công! Nhưng chúng ta mới chỉ đi được một nửa!

Bây giờ chúng ta cũng cần thêm hỗ trợ cho các công cụ thư mục internal_data. Nói chung, đây là tệp đính kèm và bất kỳ nội dung nào khác phải là "private". Quay lại config.php và code để 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 tệp đính kèm lên một 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 nhóm của mình.


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

Bây giờ 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 hiện có của bạn?

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 qua một cách rất dễ dàng. Mặc dù đây là thao tác 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 cho là cách tốt nhất là sử dụng một công cụ có tên là s3cmd. Đây là một công cụ dòng lệnh đa nền tảng phổ biến để quản lý S3 và S3-compatible object stores.

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

Thay vì viết lại nội dung nào đó đã được viết sẵn, 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.

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

Chúc các bạn thành công.


Nguồn: xenforo.com​
 

Đính kèm

  • XFAws-2.3.0.zip
    627.3 KB · Lượt xem: 45

ThachHao

Private
Tham gia
07/01/2024
Bài viết
3
Được Like
0
Chào bác
e làm theo hướng dẫn, nhưng bị lỗi.
Up ảnh qua media thì up bình thường, ảnh có vào store của S3 amazon.
Up ảnh qua phần đính kèm tệp thì lại báo lỗi như hình.

Không biết e sai ở đâu? Sai ở addon, file config, hay phần cấu hình nào trên S3 ạ.
Ảnh chụp Màn hình 2024-01-07 lúc 14.54.59.png
 

Hướng dẫn sử dụng

XenForo 1 XenForo 2
Translate by PVS

Dịch vụ XenForo của VNXF

Mr. Tuấn

Mobile/Zalo: 0988 488 096

Telegram: bluekpro

Email: [email protected]

Nhà Tài Trợ

Mút Xốp Không Gian
pallet Thịnh Phát
Top Bottom