สินทรัพย์ Magento Media ใน Amazon S3


21

ฉันถูกถามถึงวิธีการบันทึกสินทรัพย์สื่อวีโอไอพีทั้งหมดใน Amazon S3 ฉันคิดถึงการใช้ PHP Stream Wrapper อย่างนี้: https://github.com/punkave/aS3StreamWrapperและตั้งค่าโฟลเดอร์มีเดียเป็น s3: \ mybucket \ mediaFolder

ใครบ้างมีประสบการณ์กับสิ่งนี้หรือไม่?

หรือใช้สิ่งที่ดีกว่านี้: https://github.com/sstoiana/magento-s3 แต่ส่วนขยายนี้ดูไม่ดี มีคำแนะนำอื่น ๆ อีกไหม?


1
เพียงแค่เป็นกัน แรงจูงใจของคุณคืออะไรกันแน่? หรือผลักดันทราฟฟิกมากกว่าอินเทอร์เฟซของเซิร์ฟเวอร์ของคุณ (> 100Mbit / 1Gbit) หรือมีผู้ให้บริการเซิร์ฟเวอร์ที่มีการส่งผ่านข้อมูลไม่ดี (ซึ่งเป็นปัญหาในตัวเอง) - CDN มักจะช้ากว่าการให้บริการเนื้อหาโดยตรง จากเครื่องเดียวกัน เครือข่ายที่แออัด, จุดแตกหักที่ห่างไกลและเส้นทางที่ไม่ดีมักนำไปสู่การส่งเนื้อหาที่ช้ากว่าการโฮสต์ด้วยตัวเอง
Ben Lessani - Sonassi

1
แรงจูงใจคือมีคนถามฉันสำหรับประสบการณ์และความคิดของฉันและฉันคิดเกี่ยวกับมันและต้องการกระแสเสื้อคลุมแก้ปัญหา แต่เรามีเว็บไซต์เย็นนี้และอาจจะมีคนที่มีสองเซ็นต์ของเขาสำหรับฉัน :-)
Fabian Blechschmidt

@sonassi ประสบการณ์ของคุณกับ CDNs ดูเหมือนจะค่อนข้างเก่า โซลูชัน CDN ที่ครบวงจรทั้งหมดจะกระจายเนื้อหาทางภูมิศาสตร์ในระดับที่สูงกว่าที่คุณสามารถจ่ายได้สำหรับเว็บเซิร์ฟเวอร์ของคุณและจะให้บริการเนื้อหาจากตำแหน่งทางภูมิศาสตร์ที่ใกล้เคียงที่สุดไปยังไคลเอนต์ที่ร้องขอ สิ่งสำคัญคือการเพิ่มประสิทธิภาพ # ของคำขอ HTTP บนไซต์ของคุณโดยการใช้การส่งข้อมูลสินทรัพย์เพื่อการต่อข้อมูล js / css และ minification แต่มันซับซ้อนกว่ามากโดยเฉพาะสำหรับเว็บไซต์ Magento
Ralph Tice

@RalphTice นั่นไม่ใช่สิ่งที่ล้าสมัยเพราะเราใช้เครือข่าย BGP ของเราเองใน 3 ทวีป CDNs ที่ 'แพง' ส่วนใหญ่มี PoPs เดียวต่อประเทศ (บางแห่งต่อทวีป) ซึ่งไม่จำเป็นต้องอยู่ใกล้กับเว็บเซิร์ฟเวอร์ของคุณ เช่น. PoP ที่ใกล้ที่สุดของ GB สำหรับ Amazon คือไอร์แลนด์ซึ่งมีความหน่วงแฝงมากกว่าเครื่องที่อิงจากอังกฤษ ดังนั้นฉันขอย้ำว่าหากคุณไม่ได้กำหนดเป้าหมายไปยังผู้ชมทั่วโลกลูกค้าในประเทศของคุณก็จะไม่เห็นประโยชน์ใด ๆ จาก CDN ในบางกรณีมันช้าลงไม่ต้องพูดถึงราคาแพงและซับซ้อน
Ben Lessani - Sonassi

พวกฉันได้ใช้ส่วนขยาย thaiphan / magento-s3 สำหรับที่เก็บข้อมูล s3 มันทำงานกับอัปโหลดอิมเมจผลิตภัณฑ์บน s3 และเชื่อมต่อกับอิมเมจผลิตภัณฑ์ แต่มันจะสร้างอิมเมจผลิตภัณฑ์ในเซิร์ฟเวอร์ระบบของฉันด้วย ฉันแค่ต้องใช้ที่ฝากข้อมูล s3 สำหรับรูปภาพดังนั้นฉันจึงพยายามลบ pub / media / catalog ของระบบของฉัน แต่หลังจากรูปภาพผลิตภัณฑ์ของหน้าโหลดไซต์ถูกสร้างขึ้นใหม่ในเซิร์ฟเวอร์ระบบของฉันด้วย จำเป็นต้องหยุดรูปภาพนี้ที่สร้างในเซิร์ฟเวอร์ภายในหรือไม่
Camit1dk

คำตอบ:


6

ดูเหมือนว่าคนเหล่านี้จะหาทางออก: ( http://thinkglobal.co/resources/moving-the-magento-media-directory-to-s3/ )

มี 2 ​​แนวทางที่เป็นไปได้หนึ่งวิธีที่วีโอไอพีจะผลักดันเนื้อหาของสื่อทั้งหมดไปที่ S3 นั้นเป็นวิธีที่สร้างขึ้นและอีกวิธีหนึ่งคือการติดตั้งไดเรกทอรีสื่อลงในที่เก็บ S3 และปล่อยให้วีโอไอพีคิดว่าการเขียนลงดิสก์ท้องถิ่น เราเลือกหลัง

เราลงเอยด้วยการใช้เครื่องมือที่เรียกว่า s3fs ซึ่งใช้เทคโนโลยีที่กว้างกว่าที่เรียกว่าฟิวส์ ด้วยการกำหนดค่าที่ค่อนข้างตรงไปตรง (อธิบายไว้ด้านล่าง) คุณสามารถเรียกใช้ s3fs และทำงานได้ ระวังอย่าให้ hardcode S3 bucket ชื่อหรือข้อมูลรับรองการเข้าถึง API หากคุณใช้ AWS หรือผู้ให้บริการ PAAS อื่น ๆ

ตรวจสอบให้แน่ใจว่าคุณแทนที่ตัวแปรต่อไปนี้ด้วยค่าสำหรับการกำหนดค่าเฉพาะของคุณ:

  • {{S3_BUCKET}} (ชื่อถัง S3 ของคุณ)
  • {{API_PUBLIC_ACCESS_KEY}} (จัดทำโดย AWS)
  • {{API_SECRET_ACCESS_KEY}} (จัดทำโดย AWS)
  • {{UID}} (รหัสผู้ใช้สำหรับผู้ใช้ nginx / apache)
  • {{GID}} (รหัสกลุ่มสำหรับผู้ใช้ nginx / apache)
  • {{MOUNTED_DIRECTORY}} (เส้นทางไปยังไดเรกทอรีสื่อวีโอไอพีของคุณ)

นี่คือการตั้งค่า:

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
นี่เป็นวิธีที่แนะนำโดย AWS s3.amazonaws.com/quickstart-reference/magento/latest/doc/…หน้า 11 (อย่างน้อยก็จนกว่า AWS EFS จะพร้อมใช้งาน)
pHiL

1
ในขณะที่วิธีนี้ดี แต่ฉันพบว่ามันทำงานช้ามาก คุณจัดการกับสิ่งนี้อย่างไร ดูเหมือนว่าเมื่อ Magento สร้าง URL มันกำลังตรวจสอบระบบไฟล์เพื่อให้แน่ใจว่ามีไฟล์อยู่
greatwitenorth

2

ส่วนขยาย CDN ของ OnePicaนั้นใช้งานได้สะดวกมากสำหรับฟังก์ชั่นนี้และรองรับมากกว่า S3 อ้างอิง: "ปัจจุบันส่วนขยายนั้นรวมกับ Amazon S3, Coral CDN, Mosso / Rackspace Cloud Files และ CDN, เซิร์ฟเวอร์หรือบริการใด ๆ ที่สนับสนุน FTP, FTPS หรือ SFTP"


+1 - ฉันสามารถยืนยันได้ว่า OnePica ทำงานได้เป็นอย่างดีและรองรับทั้ง S3 และ Rackspace Cloud
philwinkle

4
OnePica เป็นผู้จัดการ CDN เพียงคนเดียวหมายความว่าไฟล์ยังคงอยู่ในเครื่อง
Fabian Blechschmidt

@FabianBlechschmidt คุณจะต้องเฉพาะเจาะจงมากขึ้นกับความคิดเห็นของคุณ ส่วนขยายของ OnePica ส่วนใหญ่จะไม่ทิ้งไฟล์ไว้ในเครื่องเมื่อทำการติดตั้ง / กำหนดค่าอย่างถูกต้องและฉันใช้มันในการผลิตด้วยตัวเองด้วย Amazon S3
Ralph Tice

บางทีฉันอาจจะพลาดบางสิ่งบางอย่าง คุณหมายถึงไฟล์ที่อัปโหลดไปยัง S3 และไม่เพิ่มเติมในสื่อ / แคตตาล็อก / ...
Fabian Blechschmidt

1
ในปีนี้สิ่งนี้ควรทำงานร่วมกับโซลูชันการเปลี่ยนแบบดรอปดาวน์ S3 ใน DreamObjects ด้วย มันใช้งานได้ดีกับถัง S3 อื่น ๆ จนถึงทุกวันนี้
ylluminate

1

ส่วนขยาย CDN ของ OnePica ไม่ใช่วิธีการแก้ปัญหาที่ใช้งานได้เฉพาะกับรูปภาพผลิตภัณฑ์เท่านั้นไม่ต้องพูดถึงคุณต้องตั้งค่า TTL ที่ถูกต้องสำหรับเวลาแคชของตัวเองซึ่งจะหมดเวลาเร็วกว่า Magento เริ่มต้นมาก ภาพ cms wysiwyg ทั้งหมดของคุณจะอยู่ในโฟลเดอร์สื่อ แต่ไม่ได้ใช้ S3 คุณจะจบการอัพโหลดภาพสื่อทั้งหมดของคุณไปยัง S3

ใช้ cloudfront จะดี แต่คุณยังต้องใช้ NFS เพื่อแชร์โฟลเดอร์สื่อของคุณในทุกโหนดของส่วนหน้าและโหนดส่วนหลัง หรือคุณต้องสร้างส่วนต่อประสานของคุณเองเพื่อบันทึกไฟล์ใน S3 และคุณต้องจัดการกับข้อผิดพลาด (คิดว่ามีคนอัปโหลดไฟล์ขนาดใหญ่มากว่ารหัสของคุณสามารถจัดการกับไฟล์นั้นก่อนหมดเวลา S3 API หรือไม่)

วิธีอื่นเพียงบันทึกที่เก็บข้อมูลสื่อใน RDS พิเศษของคุณ (ฐานข้อมูล) และขนาดภาพแคชที่ปรับขนาดแต่ละรายการจะยังคงบันทึกในโฟลเดอร์สื่อบันทึกภายในเครื่องเซิร์ฟเวอร์ของแอพของคุณ


1

ฉันชอบที่จะมีโหนด "ผู้ดูแลระบบ" แยกต่างหาก (admin.example.com) และเก็บโฟลเดอร์สื่อไว้ที่นั่น วิธีนี้จะช่วยให้คุณประหยัดค่าใช้จ่ายด้วย NFS รวมถึงปัญหาเกี่ยวกับการซิงค์เป็นต้น CDN (ฉันใช้ Cloudfront) สามารถเชื่อมต่อกับโฟลเดอร์สื่อโหนดผู้ดูแลระบบและกำหนดค่าสำหรับร้านค้าทั้งหมด

ประโยชน์อื่น ๆ ของการใช้โหนดผู้ดูแลระบบคือคุณสามารถย้าย crons ทั้งหมด (การทำดัชนีใหม่และ crons อื่น ๆ ) งานที่กำหนดเวลาไว้ (การนำเข้าผลิตภัณฑ์สินค้าคงคลังและการซิงค์คำสั่งซื้อ ฯลฯ ) ที่โหนดผู้ดูแลระบบและบันทึกการประมวลผลส่วนหน้า cpu

แก้ไข: เนื่องจากคำตอบสุดท้ายไม่ได้ตอบคำถามของ OP จริง ๆ สินทรัพย์ Magento Media ใน Amazon S3? ฉันเชื่อว่า Magento ได้รับการประมวลผลอย่างมากแล้วฉันคิดว่ามันเป็นความคิดที่ดีที่จะป้องกันไม่ให้ซิงค์ / สตรีม s3 และใช้โฟลเดอร์สื่อในพื้นที่แทน


ขอบคุณ! ที่จริงฉันเช็คเอาต์โฮสต์คลาวด์ที่ไม่สามารถอัปโหลดได้ วางในภายหลัง :-)
Fabian Blechschmidt

1

ตอนนี้สองสามปีที่ผ่านมาฉันคิดว่ามันสำคัญที่จะต้องทราบว่ามีปลั๊กอินหลายตัวที่จะย้ายและให้บริการสินทรัพย์จาก S3 / CDN

การค้นหาของ Google มีตัวเลือกมากมาย

นี่คือหนึ่งใน GitHub:

https://github.com/magefm/cdn

นี่คือหนึ่งในตลาดการเชื่อมต่อของ Magento:

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

ฉันยังไม่ได้ทดลองใช้ส่วนขยายเฉพาะเหล่านี้ แต่จะใช้สำหรับโครงการที่กำลังจะมาถึง มีคนอื่นออกไปที่นั่นเช่นกัน

ฉันต้องไม่เห็นด้วยกับ @Sonassi การใช้พื้นที่เก็บข้อมูลแยกต่างหากเพื่อให้การกำหนดค่าเซิร์ฟเวอร์ที่ถูกที่สุดยังคงมีประสิทธิภาพที่ดีถือว่าเป็นแนวปฏิบัติที่ดีที่สุดในวันนี้ ตัวอย่างเช่นเพียงใช้ S3 เพื่อย้ายเนื้อหาแบบคงที่ทั้งหมดออกจากเว็บเซิร์ฟเวอร์ของคุณช่วยให้เซิร์ฟเวอร์ใช้แบนด์วิดท์น้อยกว่าและอนุญาตให้ผู้ใช้พร้อมกันมากขึ้นและใช้พลังงานเซิร์ฟเวอร์โดยรวมน้อยลง และถ้าคุณอยู่ในดาต้าเซ็นเตอร์เดียวเหมือนคนส่วนใหญ่ในทุกวันนี้และพูดว่าอยู่ในดัลลัสก็ไม่ต้องสงสัยเลยว่าคนในยุโรปตะวันตกจะได้รับการบริการที่เร็วขึ้นด้วย Global CDN เช่น Cloudfront ดังนั้นการใช้ที่เก็บข้อมูลแยกต่างหากจากเว็บเซิร์ฟเวอร์ของคุณเพื่อลดการใช้แบนด์วิดท์ช่วยให้คุณใช้เซิร์ฟเวอร์เพียง 1 เซิร์ฟเวอร์เมื่อคุณต้องการได้เร็วกว่าโดยไม่ต้องใช้วิธีนี้และการใช้ CDN จะเพิ่มเวลาในการโหลดทั่วโลกอย่างมาก


โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.