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

PVS

Super Moderator
Thành viên BQT
Tham gia
28/02/2015
Bài viết
17,142
Được Like
12,745
Sử dụng DigitalOcean Spaces hoặc Amazon S3 để lưu trữ tệp trong XenForo 2

Nếu bạn đang thiết lập điều này trên một trang web hiện có, 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. Trong quá trình bạn 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
  1. Tới 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 phải thiết lập thanh toán.
  3. Bây giờ bạn có thể tạo một project 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.
  6. Để "Restrict File Listing" được chọn.
  7. Chọn một tên duy nhất (mình đã chọn "xftest")
  8. Nhấp vào "Create a space"
Bây giờ space được tạo, bạn nên có một URL endpoint, tương tự như: https://xftest.ams3.digitaloceanspaces.com. Lưu ý đ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 bên 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, mình chọn "xftest") và lưu lại.
Điều này sẽ cung cấp cho bạn một key và một secret. Ghi nhớ điều này.

Cấu hình XF để sử dụng DigitalOcean Spaces

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

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

Điều đầu tiên cần làm là cấu hình client Amazon S3 (API DigitalOcean Spaces tương thích với Amazon AWS SDK) và data filesystem adapter:
Mã:
$config['fsAdapters']['data'] = function()

{
   $s3 = new \Aws\S3\S3Client([
      'credentials' => [
         'key' => 'ABC',
         'secret' => '123'
      ],
      'region' => 'ams3',
      'version' => 'latest',
      'endpoint' => 'https://ams3.digitaloceanspaces.com'
   ]);
   return new \League\Flysystem\AwsS3v3\AwsS3Adapter($s3, 'xftest', 'data');
};

Lưu ý rằng key và secret là những gì bạn đã lấy ở thiết lập "Spaces access key" trước đó. Region có thể được suy ra từ URL endpoint mà bạn đã ghi lại trước đó. Đó là phần sau dấu "." đầu tiên trong URL, trong trường hợp của mình nó là ams3. Endpoint là cùng một URL endpoint trừ đi tên duy nhất bạn đã chọn.

Cuối cùng, cần đảm bảo rằng URL hình đại diện và hình đính kèm thu nhỏ được thêm vào trước với URL chính xác. Điều này yêu cầu URL endpoint bạn đã ghi lại trước đó, một lần nữa:
Mã:
$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 theo các lượ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à XF 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 đi và tải lên một avatar mới. Hình đại diện 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 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%2Favatars%2Fo%2F0%2F.png

Vậy là thành công.

Bây giờ chúng ta cần phải thêm hỗ trợ cho 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à "riêng tư". Quay lại config.php và code để thêm là tương tự nhau:
Mã:
$config['fsAdapters']['internal-data'] = function()
{
   $s3 = new \Aws\S3\S3Client([
      'credentials' => [
         'key' => 'ABC',
         'secret' => '123'
      ],
      'region' => 'ams3',
      'version' => 'latest',
      'endpoint' => 'https://ams3.digitaloceanspaces.com'
   ]);
   return new \League\Flysystem\AwsS3v3\AwsS3Adapter($s3, 'xftest', 'internal_data');
};

Giờ hãy thử tải lên tệp đính kèm vào bài viết 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. Tới trang AWS Management Console và đăng ký hoặc đăng nhập.
  2. Trong phần "AWS services", hãy nhập "S3" để đi tới "S3 Console".
  3. Nhấp vào "Create bucket".
  4. Chọn tên bucket (mình chọn xftest).
  5. Chọn một region.
  6. Chấp nhận bất kỳ tùy chọn mặc định nào khác cho đến khi bucket đượ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 "Add user".
  9. Chọn tên người dùng (yep, mình đã sử dụng xftest lần nữa).
  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. Trên trang này có một tab được gọi là "JSON". Dán nội dung sau vào đó, thay thế YOUR-BUCKET-NAME bằng tên bucket bạn đã chọn trước đó:
    Mã:
    {
        "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/*"
                ]
            }
        ]
    }
  13. Nhấp vào "Review policy" đặt tên cho nó và lưu.
  14. 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.
  15. 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à secret. Ghi nhớ lại chúng.

Cấu hình XF để sử dụng Amazon S3

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

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

Điều đầu tiên cần làm là cấu hình client Amazon S3 và data filesystem adapter:
Mã:
$config['fsAdapters']['data'] = function()
{
   $s3 = new \Aws\S3\S3Client([
      'credentials' => [
         'key' => 'ABC',
         'secret' => '123'
      ],
      'region' => 'eu-west-2',
      'version' => 'latest',
      'endpoint' => 'https://s3.eu-west-2.amazonaws.com'
   ]);
   return new \League\Flysystem\AwsS3v3\AwsS3Adapter($s3, 'xftest', 'data');
};

Lưu ý rằng key và secret là những gì bạn đã ghi nhớ sau khi thiết lập người dùng IAM trước đó. Region có thể được suy ra từ URL endpoint S3.

Cuối cùng, cần đảm bảo rằng URL hình đại diện và hình đính kèm thu nhỏ được thêm vào trước bằng URL chính xác:
Mã:
$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 theo các lượ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.

Đầ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 avatar mới. Hình đại diện sẽ được lưu trữ và phục vụ từ xa!

Nếu bạn kiểm tra trình duyệt tệp bucket của mình ngay bây giờ, bạn sẽ thấy 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

Vậy là thành công.

Bây giờ chúng ta cần phải thêm hỗ trợ cho 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à "riêng tư". Quay lại config.php và code để thêm là tương tự nhau:
Mã:
$config['fsAdapters']['internal-data'] = function()
{
   $s3 = new \Aws\S3\S3Client([
      'credentials' => [
         'key' => 'ABC',
         'secret' => '123'
      ],
      'region' => 'eu-west-2',
      'version' => 'latest',
      'endpoint' => 'https://s3.eu-west-2.amazonaws.com'
   ]);
   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 viết 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 bucket của mình.

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. Nhưng còn tất cả các tệp hiện có thì sao?

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 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ó lẽ cách tốt nhất là sử dụng một công cụ bằng tên s3cmd, 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 managing S3 và S3-compatible.

Bạn có thể sử dụng Spaces hoặc S3 để cài đặt công cụ s3cmd trên máy chủ của bạn và chạy các lệnh để sao chép các tập tin sang "nhà mới".

Thay vì phục hồi lại thứ gì đó đã được viết, mình sẽ để lại cho bạn hướng dẫn sau đây từ DigitalOcean, hướng dẫn cách di chuyển các tệp hiện có của bạn bằng cách sử dụng s3cmd. Các bạn tham khảo tại đây.

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


Nguồn: xenforo.com​
 

Đính kèm

  • XFAws-2.0.0.zip
    1.8 MB · Lượt xem: 52

AdminPro1990

Gefreiter
Tham gia
09/01/2016
Bài viết
63
Được Like
14
Anh viết bài hướng dẫn cách tạo nút bbcode trèn ảnh giống vnxf đi ạ. Tắt chức năng upload file lên sever giống vnxf đc k ạ
V6xtttb.png
 

PVS

Super Moderator
Thành viên BQT
Tham gia
28/02/2015
Bài viết
17,142
Được Like
12,745
Anh viết bài hướng dẫn cách tạo nút bbcode trèn ảnh giống vnxf đi ạ. Tắt chức năng upload file lên sever giống vnxf đc k ạ
V6xtttb.png
Chèn ảnh này mặc định đã có rồi đó bạn.
 

AdminPro1990

Gefreiter
Tham gia
09/01/2016
Bài viết
63
Được Like
14
Chèn ảnh này mặc định đã có rồi đó bạn.
nhưng mình muốn tắt cái mục cho up lên sever đi ạ. ấn vào n chỉ hiện khung dán link ảnh hoặc thay thế mục up thành đường dẫn đến trang up ảnh ngoài
 

PVS

Super Moderator
Thành viên BQT
Tham gia
28/02/2015
Bài viết
17,142
Được Like
12,745
Bạn có thể set quyền để thành viên không đính kèm được mà.
 

runmanton

Private
Tham gia
24/11/2018
Bài viết
13
Được Like
1
bài dịch này bằng google nên đọc lủng củng quá bác ạ :D

Em setup theo hướng dẫn trên mà vẫn bị báo lỗi không kết nối được với amazon S3
 

runmanton

Private
Tham gia
24/11/2018
Bài viết
13
Được Like
1
Có bác nào đã cài đặt và xài thành công cái addon này chưa?

Làm ơn chỉ cho em cách setup trên Amazon S3 + setup trên file config.php với.
 

gintakao

Private
Tham gia
04/12/2018
Bài viết
4
Được Like
0
Digital Ocean support ngon hơn Amazon web service nhé :)
Bạn nào mua thì chọn DS
 

runmanton

Private
Tham gia
24/11/2018
Bài viết
13
Được Like
1
Digital Ocean support ngon hơn Amazon web service nhé :)
Bạn nào mua thì chọn DS
thằng Digital Ocean nó 5$/tháng bác ạ.

Amazon S3 thì hình như miễn phí cho 5GB/tháng. Nếu dùng quá 5GB thì mới bị trừ tiền
 

phucvandinh

Private
Tham gia
11/02/2020
Bài viết
48
Được Like
24
Không chuyển qua được Drive đâu nhé :D Đã làm web thì đừng sợ tốn kém.
 

locphat

Private
Tham gia
13/03/2020
Bài viết
8
Được Like
1
Không chuyển qua được Drive đâu nhé :D Đã làm web thì đừng sợ tốn kém.
Sao lại ko chuyển đc bạn ơi, mình có cái tài khoản bussiness , mà web mình đang làm source nhiều media quá, anh em nghiên cứu cái Flysystem chưa
 

Top Bottom