การจัดการ Magento / Composer / Deployment


18

ดังนั้นฉันสนุกกับการใช้โปรแกรมติดตั้ง Magento Composer ของ Hackathon แต่ฉันพยายามที่จะเข้าใจว่าคนอื่น ๆ ใช้งานอย่างไรในส่วนที่เกี่ยวข้องกับบริการปรับใช้ ขณะนี้ฉันกำลังใช้ DeployHQ และใช่ฉันสามารถตั้งค่าให้ใช้งานและเรียกใช้ผู้แต่งเมื่อมีการอัปเดตไปที่ repo แต่ตอนนี้ก็ไม่สมเหตุสมผลสำหรับฉัน

repo ผู้แต่งหลักของฉันที่มีเพียงไฟล์ json ของแพ็คเกจทั้งหมดที่ฉันต้องการรวมไว้ในงานสร้างของฉันจะได้รับการอัปเดตเมื่อฉันเพิ่มแพ็คเกจใหม่ลงในรายการเท่านั้น

เมื่อฉันอัพเดตธีมของฉันหรือส่วนขยายที่กำหนดเอง (ซึ่งอ้างอิงในไฟล์ json) ไม่มี "hook" เพื่ออัพเดตบริการการปรับใช้ของฉัน ดังนั้นฉันต้องลงชื่อเข้าใช้เซิร์ฟเวอร์ของฉันและเรียกใช้ผู้แต่งเอง (ซึ่งจะทำให้ไซต์หยุดทำงานจนกว่าจะเสร็จ)

แล้วคนอื่นจะจัดการสิ่งนี้อย่างไร ฉันควรเรียกใช้ผู้แต่งในพื้นที่และรวมโฟลเดอร์ผู้ขายไว้ใน repo ของฉันหรือไม่

คำตอบใด ๆ จะได้รับการชื่นชมอย่างมาก


4
ฉันโหวตให้ปิดคำถามนี้เป็นนอกหัวข้อเพราะเป็นเรื่องเกี่ยวกับนักแต่งเพลง
mbalparda

1
สวัสดีโดยเฉพาะมันเกี่ยวข้องกับการใช้วีโอไอพีกับนักแต่งเพลงและโดยเฉพาะอย่างยิ่งฟังก์ชั่นการแฮ็กเก็ตวีโอไอพี ดังนั้นฉันคิดว่าคุณค่อนข้างขอโทษก่อนกำหนด!
JamesAllwood

มันซับซ้อนจริงๆที่จะอธิบาย แต่ฉันจะลอง: เนื่องจากฉันคิดว่าคำถามนี้ไม่เกี่ยวข้องกับวีโอไอพีและคุณคิดว่ามันเป็นฉันทำเครื่องหมายว่าเป็นหัวข้อปิด หากผู้ดูแลหรือสมาชิกคนอื่น ๆ 4 คนตัดสินใจว่าจะต้องปิดตัวเอง ถ้าไม่มันจะยังคงเปิดอยู่ ข้อความเป็นอัตโนมัติเมื่อคุณทำเครื่องหมายคำถามว่าเป็นปิดหัวข้อ และมันก็เป็นเรื่องนอกหัวข้อเพราะหัวข้อหลักคือนักประพันธ์ผูกติดกับวีโอไอพี แต่มันสามารถนำไปใช้กับการติดตั้งซอฟต์แวร์อื่น ๆ และมันอาจเป็นของไซต์เกี่ยวกับเซิร์ฟเวอร์ / การใช้งานและไม่ใช่ในวีโอไอพี SE ในความคิดของฉัน
mbalparda

1
พวกคำถามนี้ได้รับการโหวต 2 ครั้งและเป็นรายการโปรด การอนุญาตให้บางคนตอบคำถามนี้จะไม่เป็นอันตรายอย่างแน่นอน? มันจะช่วยให้คนอื่น ๆ ในชุมชนวีโอไอพี
JamesAllwood

@ JamesAllwood คุณไปกับเรื่องนี้ได้อย่างไร
jharrison.au

คำตอบ:


13

ฉันได้สร้างโครงสร้างที่เอเจนซี่ของเราที่ช่วยให้เราใช้นักแต่งเพลงเพื่อปรับใช้ไซต์ Magento ทั้งหมดของเรา นี่อาจจะเกินความเป็นจริงสำหรับคำถามที่คุณถาม แต่นี่เป็นภาพรวมพื้นฐานของโครงสร้างต่อไป:

โครงสร้างพื้นที่เก็บข้อมูล

ด้านล่างคือโครงสร้างโฟลเดอร์ของพื้นที่เก็บข้อมูล 'parent' มันมีผู้แต่ง JSON และล็อคไฟล์และการกำหนดค่าอื่น ๆ ที่จำเป็นสำหรับการใช้งาน

- code
   - magento
- deployment
- environmental
   - local
       - local.xml
       - robots.txt
   - staging
       - local.xml
       - robots.txt
   - production
       - local.xml
       - robots.txt
- provisioning
- public
   - index.php
- vendor
- composer.json
- composer.lock
  • การปรับแต่งเฉพาะของลูกค้าทั้งหมดจะถูกเก็บไว้ในโมดูล "ปรับแต่ง" แยกต่างหากที่ได้รับการติดตั้งโดยใช้นักแต่งเพลง
  • แกนกลางวีโอไอพีรวมอยู่ใน God submodule ( code/magento)
  • index.phpโฟลเดอร์ที่กำหนดเองและอื่น ๆ เช่นสื่อและข้อผิดพลาดจะอยู่ในโฟลเดอร์สาธารณะที่อยู่นอกรูทวีโอไอพี
  • ไฟล์เฉพาะสภาพแวดล้อม (local.xml, robots.txt และอื่น ๆ ) รับ symlinked ในรูทวีโอไอพีในระหว่างกระบวนการปรับใช้
  • โฟลเดอร์ผู้จำหน่ายถูกแยกออกจาก Git แต่มีไฟล์ composer.lock รวมอยู่ด้วย

การปรับใช้

  • เราปรับใช้โดยใช้Capsitranoซึ่งอนุญาตให้เซิร์ฟเวอร์แอปหลายเครื่องและสภาพแวดล้อม (การจัดเตรียม / การผลิต)
  • Capistrano สร้าง codebase ทั้งหมดบนเซิร์ฟเวอร์ในโฟลเดอร์ใหม่จากนั้นทำการแลกเปลี่ยน webroot symlink ที่ท้ายสุดซึ่งหมายความว่าไม่มีการหยุดทำงานสำหรับเว็บไซต์ของคุณ
  • Capistrano ทำงานcomposer installในระหว่างการสร้างและปรับใช้โมดูลทั้งหมดลงใน submodule Magento

นี่ยังไม่ใช่การตั้งค่าการรวมระบบอย่างต่อเนื่อง แต่ฉันคิดว่ามันทำงานได้ดีสำหรับเว็บไซต์ Magento อย่าลังเลที่จะส่งข้อความถึงฉันหากคุณต้องการคำแนะนำเพิ่มเติมที่เฉพาะเจาะจงสำหรับการตั้งค่าของคุณ


1
มันและคำตอบเก่า แต่หวังว่าคุณจะสามารถตอบได้ 1 การจัดเก็บข้อมูลของการผลิต local.xml ไม่ใช่ปัญหาด้านความปลอดภัยหรือไม่ 2 ในขั้นตอนใดและคุณนำเข้าฐานข้อมูลอย่างไร
จ้าง

5

อีกวิธีหนึ่งคือการใช้กลยุทธ์การปรับใช้การคัดลอกวีโอไอพีที่มีลักษณะเช่นนี้ในไฟล์ผู้แต่งของคุณ:

"extra": {
    "magento-root-dir": "./",
    "magento-deploystrategy": "copy",
    "magento-force": true
}

การใช้วิธีการด้านบนจะเป็นการคัดลอกไฟล์ที่ติดตั้งจากผู้ขายไปยังการติดตั้งจริงซึ่งอนุญาตให้ทำการคอมไพล์ใน Git และปรับใช้ตามปกติโดยไม่ต้องทำการติดตั้งโปรแกรมแต่งเพลงใด ๆ

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

อ่านบทความนี้แล้วมันจะให้มุมมองที่แตกต่าง: http://www.letscodejavascript.com/v3/blog/2014/03/the_npm_debacle

โดยทั่วไป NPM ลดลง (เรียงลำดับจาก .. ) และระบบการสร้างของทุกคนหยุดทำงาน (สำหรับการปรับใช้ที่สำคัญ!) เพราะพวกเขาขึ้นอยู่กับ NPM โดยตรง (NPM เป็นเหมือน Packagist สำหรับ Javascript ยกเว้นว่า NPM เป็นโฮสต์ของไฟล์และ Packagist เพียงชี้ไปที่ Github repos ของโมดูล - แก้ไขฉันถ้าฉันผิด)

แก้ไข: เพียงแค่การตอบสนองของ fschmengler สีแดง .. นี่คือรายละเอียดเกี่ยวกับวิธีการที่ 1 ของเขา


4

สิ่งสำคัญคือต้องเข้าใจว่านักแต่งเพลงไม่ใช่เครื่องมือการปรับใช้ แต่เป็นเครื่องมือในการพัฒนา

มีวิธีที่แตกต่างกันในการเตรียมการปรับใช้กับการอ้างอิงทั้งหมด:

  • ยอมรับไดเรกทอรีผู้จัดจำหน่าย (หรือที่ใดก็ตามที่ผู้แต่งติดตั้งแหล่งข้อมูล) ลงในที่เก็บโครงการ
  • ใช้บิลด์เซิร์ฟเวอร์ที่รันcomposer installและสร้างไฟล์เก็บถาวรที่มีผลลัพธ์ซึ่งคุณสามารถปรับใช้ซ้ำกับระบบเป้าหมายที่แตกต่างกัน
    • ทำงานcomposer installบนเซิร์ฟเวอร์แล้วสลับ symlink ตามที่แนะนำโดย @ jharrison.au เป็นรูปแบบของสิ่งนี้

ว่ากันผมไม่แนะนำให้ใช้แต่งเพลงสำหรับทุกโมดูลเดียวและเพียง แต่ให้ composer.jsonและcomposer.lock ในพื้นที่เก็บข้อมูลโครงการ สิ่งนี้ทำมากเกินไปและทำให้การพัฒนามีความซับซ้อนโดยไม่จำเป็น มันเหมาะสมสำหรับรหัสที่นำกลับมาใช้ในหลายโครงการ แต่ทำไมคุณต้องใส่รหัสโครงการเฉพาะลงในที่เก็บแยกต่างหาก

โครงสร้างโครงการปัจจุบันของฉันมีลักษณะดังนี้ (ใช้ตัวติดตั้งตัวเลือกผู้แต่งโดย AOE ):

  • srcมีโมดูลเฉพาะโครงการทั้งหมด นักแต่งเพลงยังติดตั้งโมดูล Magento อื่น ๆ ที่นี่
  • .modmanลิงก์ไปsrcที่ modman สามารถจัดการ symlinking ได้อย่างง่ายดาย
  • wwwเป็น webroot นักแต่งเพลงติดตั้ง Magento core ที่นี่

วิธีนี้ฉันรวมโมดูลภายนอกในที่เก็บ หากคุณไม่ต้องการปรับให้ทำดังนี้:

  • srcมีโมดูลเฉพาะโครงการทั้งหมด หากต้องการรวมไว้ใน.modmanmodman เพื่อสร้าง symlink ให้ใช้modman link
  • .modman.gitignoreอยู่ใน นักแต่งเพลงติดตั้งโมดูล Magento ที่นี่
  • wwwเป็น webroot นักแต่งเพลงติดตั้ง Magento core ที่นี่
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.