Tài sản truyền thông Magento trong Amazon S3


21

Tôi đã được hỏi làm thế nào để lưu tất cả các tài sản truyền thông magento trong Amazon S3. Tôi đã nghĩ về việc sử dụng PHP Stream Wrapper như thế này: https://github.com/punkave/aS3StreamWrapper và chỉ cần đặt thư mục phương tiện thành s3: \ mybucket \ mediaFolder

Có ai có kinh nghiệm với điều này?

Hoặc tốt hơn là sử dụng một cái gì đó như thế này: https://github.com/sstoiana/magento-s3 Nhưng tiện ích mở rộng này có vẻ không tốt. Bất kỳ khuyến nghị khác?


1
Chỉ là một bên. Động lực của bạn chính xác là gì? Trừ khi bạn đang phục vụ đối tượng toàn cầu hoặc đẩy nhiều lưu lượng truy cập hơn giao diện máy chủ của bạn (> 100Mbit / 1Gbit) hoặc có nhà cung cấp máy chủ có vận chuyển kém (bản thân nó là một vấn đề) - CDN thường chậm hơn so với phục vụ trực tiếp nội dung từ cùng một máy. Các mạng bị tắc nghẽn, các điểm thoát xa và các tuyến kém thường dẫn đến việc phân phối nội dung chậm hơn là tự lưu trữ nó.
Ben Lessani - Sonassi

1
Động lực là: Ai đó đã hỏi tôi về kinh nghiệm và ý kiến ​​của tôi và tôi đã nghĩ về nó và thích giải pháp trình bao bọc luồng, nhưng chúng tôi có trang web tuyệt vời này và có thể ai đó có hai xu của anh ấy cho tôi :-)
Fabian Blechschmidt

@sonassi kinh nghiệm của bạn với CDN dường như có phần lỗi thời. Tất cả các giải pháp CDN trưởng thành phân phối nội dung theo địa lý ở quy mô cao hơn nhiều so với khả năng bạn có thể chi trả cho các máy chủ web của mình và sẽ phân phát nội dung từ vị trí địa lý gần nhất đến máy khách yêu cầu. Điều quan trọng nữa là tối ưu hóa # yêu cầu HTTP trên trang web của bạn bằng cách sử dụng đường dẫn tài sản để nối và thu nhỏ js / css, nhưng điều đó phức tạp hơn nhiều đối với các trang web Magento.
Ralph Tice

@RalphTice Không quá lỗi thời khi xem xét chúng tôi điều hành mạng anycast BGP của chúng tôi trên khắp 3 châu lục. Hầu hết các CDN 'giá cả phải chăng' đều có PoP duy nhất cho mỗi quốc gia (một số chỉ trên mỗi lục địa), điều đó không nhất thiết phải gần hơn về mặt địa lý so với chính máy chủ web của bạn. Ví dụ. PoP gần nhất của GB cho Amazon là Ireland - nơi có độ trễ lớn hơn nhiều so với máy có trụ sở ở Anh. Vì vậy, tôi xin nhắc lại, trừ khi bạn đang nhắm mục tiêu đối tượng toàn cầu, khách hàng trong nước của bạn sẽ không thấy bất kỳ lợi ích nào từ CDN. Trong một số trường hợp, nó chậm hơn, chưa kể đắt hơn và phức tạp hơn.
Ben Lessani - Sonassi

Các bạn, tôi đã sử dụng phần mở rộng thaiphan / magento-s3 cho s3 xô, nó hoạt động với tải lên hình ảnh sản phẩm trên s3 và kết nối với hình ảnh sản phẩm, nhưng nó cũng sẽ tạo ra hình ảnh sản phẩm trong máy chủ hệ thống của tôi. Tôi chỉ cần sử dụng s3 xô cho hình ảnh vì vậy tôi cũng đã cố gắng xóa pub / media / catalog của hệ thống của mình nhưng sau khi tải trang web, hình ảnh sản phẩm cũng được tạo lại trong máy chủ hệ thống của tôi. Có cần phải dừng hình ảnh này được tạo trong máy chủ cục bộ?
Camit1dk

Câu trả lời:


6

có vẻ như những kẻ này tìm ra giải pháp: ( http://thinkglobal.co/resource/moving-the-magento-media-directory-to-s3/ )

Có hai cách tiếp cận khả thi, một là để Magento đẩy tất cả các tài sản đa phương tiện lên S3 khi chúng được tạo và cách khác là chỉ cần gắn thư mục phương tiện vào một thùng S3 và để Magento nghĩ rằng nó ghi vào đĩa cục bộ. Chúng tôi đã chọn cái sau.

Chúng tôi đã kết thúc bằng cách sử dụng một công cụ gọi là s3fs, sử dụng công nghệ rộng hơn gọi là cầu chì. Với một số cấu hình khá đơn giản (được mô tả bên dưới), bạn có thể khởi động s3fs. Cẩn thận không mã hóa tên nhóm S3 hoặc thông tin truy cập API nếu bạn đang sử dụng AWS hoặc nhà cung cấp PAAS khác.

Đảm bảo bạn thay thế các biến sau bằng các giá trị cho cấu hình cụ thể của mình:

  • {{S3_BucksET}} (tên của nhóm S3 của bạn)
  • {{API_PUBLIC_ACCESS_KEY}} (được cung cấp bởi AWS)
  • {{API_SECRET_ACCESS_KEY}} (được cung cấp bởi AWS)
  • {{UID}} (id người dùng cho người dùng nginx / apache)
  • {{GID}} (id nhóm cho người dùng nginx / apache)
  • {{MOUNTED_DIRECTORY}} (đường dẫn đến thư mục phương tiện magento của bạn)

Đây là thiết lập:

yum install -y gcc libstdc++-devel gcc-c++ curl curl* curl-devel libxml2 libxml2* libxml2-devel openssl-devel mailcap

cd /usr/local/src
wget http://downloads.sourceforge.net/project/fuse/fuse-2.X/2.9.3/fuse-2.9.3.tar.gz
tar -xzf fuse-2.9.3.tar.gz
rm -f fuse-2.9.3.tar.gz
mv fuse-2.9.3 fuse
cd fuse/
./configure prefix=/usr
make
make install
export PKG_CONFIG_PATH=/usr/lib/pkgconfig:/usr/lib64/pkgconfig/
ldconfig
modprobe fuse
pkg-config modversion fuse

wget http://s3fs.googlecode.com/files/s3fs-1.74.tar.gz
tar -xzvf s3fs-1.74.tar.gz
rm -f s3fs-1.74.tar.gz
mv s3fs-1.74 s3fs
cd s3fs
./configure prefix=/usr
make
make install

echo “{{S3_BUCKET}}:{{API_PUBLIC_ACCESS_KEY}}:{{API_SECRET_ACCESS_KEY}}” > ~/.passwd-s3fs
chmod 600 ~/.passwd-s3fs

echo user_allow_other > /etc/fuse.conf

echo s3fs#{{S3_BUCKET}} {{MOUNTED_DIRECTORY}} fuse use_cache=/tmp,allow_other,uid={{UID}},gid={{GID}} 0 0″ >> /etc/fstab

s3fs -o allow_other -o uid={{UID}} -o gid={{GID}} -ouse_cache=/tmp {{S3_BUCKET}} {{MOUNTED_DIRECTORY}}

2
Đây dường như cũng là cách được khuyến nghị bởi AWS s3.amazonaws.com/quickstart-reference/magento/latest/doc/ trên trang 11 (ít nhất là cho đến khi AWS EFS có sẵn)
pHiL

1
Trong khi giải pháp này là tốt, tôi thấy rằng nó chạy rất chậm. Làm thế nào bạn đối phó với điều này? Có vẻ như khi Magento tạo URL, nó sẽ kiểm tra hệ thống tệp để đảm bảo tệp tồn tại.
greatwitenorth

2

Tiện ích mở rộng CDN của OnePica rất tiện dụng cho chức năng này và hỗ trợ nhiều hơn là chỉ S3. Trích dẫn: "Hiện tại, tiện ích mở rộng tích hợp với Amazon S3, Coral CDN, Mosso / Rackspace Cloud Files và bất kỳ CDN, máy chủ hoặc dịch vụ nào hỗ trợ FTP, FTPS hoặc SFTP."


+1 - Tôi có thể xác nhận rằng OnePica hoạt động khá độc đáo và hỗ trợ cả S3 và Rackspace Cloud.
philwinkle

4
OnePica chỉ là trình quản lý CDN, có nghĩa là các tệp vẫn còn cục bộ
Fabian Blechschmidt

@FabianBlechschmidt Bạn sẽ phải cụ thể hơn với bình luận của bạn. Tiện ích mở rộng của OnePica chắc chắn không để các tệp cục bộ khi được cài đặt / định cấu hình đúng cách và tôi đang sử dụng nó trong sản xuất với chính Amazon S3.
Ralph Tice

Có lẽ tôi đã bỏ lỡ điều gì đó. Bạn có nghĩa là các tệp được tải lên S3 và không còn trong media / catalog / ...?
Fabian Blechschmidt

1
FYI, điều này cũng sẽ hoạt động với giải pháp thay thế S3 thả xuống DreamObjects. Nó đã làm việc tuyệt vời với mọi nhóm S3 khác cho đến nay.
ylluminate

1

Tiện ích mở rộng CDN của OnePica không phải là giải pháp mà nó chỉ hoạt động đối với hình ảnh sản phẩm, chưa kể bạn cần đặt TTL chính xác cho thời gian sử dụng bộ nhớ cache của chính nó sẽ hết thời gian sớm hơn nhiều so với Magento mặc định. Tất cả hình ảnh wysiwyg của bạn sẽ nằm trong thư mục phương tiện nhưng không sử dụng S3, cuối cùng bạn sẽ tải tất cả hình ảnh phương tiện của mình lên S3.

Sử dụng cloudfront sẽ tốt nhưng bạn vẫn sẽ cần NFS để chia sẻ thư mục phương tiện của bạn trên tất cả các nút frontend và nút phụ trợ. Hoặc bạn cần xây dựng giao diện của riêng mình để lưu tệp trên S3 và bạn cũng cần xử lý lỗi (nghĩ về việc ai đó tải lên tệp cực lớn cho dù mã của bạn có thể xử lý được điều đó trước khi hết thời gian API S3)

Một cách khác chỉ lưu lưu trữ phương tiện trong RDS (cơ sở dữ liệu) bổ sung của bạn và hình ảnh bộ đệm thay đổi kích thước cá nhân vẫn sẽ lưu trong thư mục phương tiện cục bộ của máy chủ ứng dụng của bạn, nhưng không sao vì đám mây sẽ lưu trữ chúng vào bộ đệm.


1

Tôi thích có một nút "quản trị" riêng (admin.example.com) và giữ các thư mục phương tiện ở đó. Bằng cách này, bạn sẽ tự tiết kiệm chi phí NFS cũng như vấn đề đồng bộ hóa, v.v ... mọi CDN (tôi sử dụng điện toán đám mây) sau đó có thể được kết nối với các thư mục phương tiện nút quản trị và được định cấu hình cho tất cả các cửa hàng.

Các lợi ích khác của việc sử dụng nút quản trị là, bạn có thể di chuyển tất cả các crons (reindexing và các crons khác), các tác vụ theo lịch trình (nhập sản phẩm, đồng bộ hàng tồn kho và đặt hàng, v.v.) tại nút quản trị và lưu xử lý cpu nút giao diện.

Chỉnh sửa: Như câu trả lời cuối cùng không thực sự giải quyết câu hỏi của OP. Tài sản truyền thông Magento trong Amazon S3? Chà, tôi tin rằng Magento đã có quá nhiều xử lý, nên tôi nghĩ nên giữ nó khỏi đồng bộ hóa / truyền phát s3 và sử dụng thư mục phương tiện cục bộ thay thế.


Cảm ơn! Trên thực tế tôi đã kiểm tra một máy chủ đám mây nơi không thể tải lên. Bỏ nó sau :-)
Fabian Blechschmidt

1

Chà, bây giờ đã vài năm trôi qua tôi nghĩ điều quan trọng cần lưu ý là có nhiều plugin có sẵn sẽ di chuyển và phục vụ tài sản từ S3 / CDN.

Các tìm kiếm của Google xuất hiện rất nhiều tùy chọn.

Đây là một trên GitHub:

https://github.com/magefm/cdn

Đây là một trên thị trường Connect của Magento:

http: //www.magentoc Commerce.com/magento-connect/aws-s3-cdn-for-product-images.html

Tôi chưa thử các tiện ích mở rộng cụ thể này nhưng sẽ dành cho một dự án sắp tới. Có những người khác ở ngoài đó, quá.

Tôi phải không đồng ý với @Sonassi, sử dụng bộ nhớ riêng để cho phép cấu hình máy chủ rẻ nhất vẫn có hiệu suất tốt thực sự được coi là cách tốt nhất hiện nay. Ví dụ: chỉ cần sử dụng S3 để di chuyển tất cả nội dung tĩnh khỏi máy chủ web của bạn sẽ giúp máy chủ sử dụng băng thông ít hơn nhiều và cho phép người dùng đồng thời nhiều hơn và cần ít năng lượng máy chủ tổng thể hơn. Và, nếu bạn ở một trung tâm dữ liệu giống như hầu hết mọi người hiện nay và nói rằng đó là ở Dallas, thì không nghi ngờ gì rằng mọi người ở Tây Âu sẽ được phục vụ nhanh hơn nhiều với CDN toàn cầu như Cloudfront. Vì vậy, sử dụng lưu trữ tách biệt với máy chủ web của bạn để sử dụng băng thông thấp hơn cho phép bạn chỉ sử dụng 1 máy chủ khi bạn cần sớm hơn mà không cần phương pháp này và sử dụng CDN sẽ giúp tăng đáng kể thời gian tải toàn cầu.


Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.