กลยุทธ์การปรับใช้ php ที่คุณต้องการคืออะไร? [ปิด]


161

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

ฉันมีประสบการณ์กับการใช้งานโดยใช้ Capistrano กับ Ruby รวมถึงการเขียนสคริปต์พื้นฐานบางอย่าง

ก่อนที่ฉันจะดำน้ำด้วยตัวเองก่อนจะเป็นการดีที่จะได้ยินว่าคนอื่น ๆ เข้าหาสิ่งนี้ในโครงการของพวกเขาอย่างไร

ข้อมูลเพิ่มเติม

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

การเปลี่ยนแปลงเพิ่มเติมมักจะทำทีละน้อยโดยการอัพโหลดไฟล์ที่เปลี่ยนแปลง


น่ารัก :) ขอบคุณสำหรับการแก้ไข splattne
GloryFish

1
@Paul Tomblin: OMG ฉันหยุดหัวเราะไม่ได้ !!!!! ไม่มีทางไหนที่ดีไปกว่านี้อีกแล้ว :)
Andrei Rînea

ใครสามารถตอบคำถามนี้ได้โปรด - stackoverflow.com/questions/36034277/…
Sandeepan Nath

คำตอบ:


109

สำหรับ PHP, SVN กับสคริปต์สร้างPhingเป็นวิธีที่จะไป Phing คล้ายกับANTแต่เขียนด้วย PHP ซึ่งทำให้นักพัฒนา PHP สามารถปรับเปลี่ยนได้ตามความต้องการ

รูทีนการปรับใช้ของเรามีดังนี้:

  • ทุกคนพัฒนาบนเซิร์ฟเวอร์ในที่ทำงานเดียวกันนักพัฒนาทุกคนมีการเช็คเอาต์บนเครื่องของเขาที่บ้านเช่นกัน
  • คอมมิททริกเกอร์เบ็ด post-commit ที่อัพเดตเซิร์ฟเวอร์ staging
  • การทดสอบจะถูกรันบนเซิร์ฟเวอร์ staging หากผ่าน - ดำเนินการต่อ
  • สคริปต์สร้าง Phing ถูกเรียกใช้:
  • ทำให้เซิร์ฟเวอร์ที่ใช้งานไม่ทำงานเปลี่ยนโดเมนเป็นหน้า "อยู่ระหว่างการปรับปรุง"
  • เรียกใช้การปรับปรุง SVN จากการชำระเงินการผลิต
  • รันสคริปต์ schema deltas
  • รันการทดสอบ
  • หากการทดสอบล้มเหลว - รันสคริปต์ย้อนกลับ
  • หากผ่านการทดสอบเซิร์ฟเวอร์จะจัดเส้นทางกลับสู่การชำระเงินการผลิต

นอกจากนี้ยังมีphpUnderControlซึ่งเป็นเซิร์ฟเวอร์การรวมอย่างต่อเนื่อง ฉันไม่พบว่ามันมีประโยชน์มากสำหรับโครงการเว็บที่จะซื่อสัตย์


ฉันกำลังจะโพสต์รายการสิ่งที่ฉันทำที่ร้าน Windows / .NET ของฉัน แต่มันมากหรือน้อยที่คุณได้มาที่นี่ +1
Daniel Schaffer

คุณเคยพบข้อเสียใด ๆ ในการมี svn co เป็นสภาวะแวดล้อมที่ใช้งานจริงหรือไม่? ฉันไม่สามารถคิดถึงข้อเสียใด ๆ แต่ดูเหมือนว่า "สะอาด" ไม่ได้มี svn co เป็นการผลิตหรือไม่ ทำไมไม่ส่งออก svn หรือ rsync
ChrisR

เนื่องจากความแตกต่างพื้นฐานระหว่าง บริษัท ร่วมและการส่งออก - คุณไม่สามารถผลักดันการเปลี่ยนแปลงเฉพาะคุณจึงต้องส่งออกแอปพลิเคชันทั้งหมดอีกครั้ง มันเป็นความแตกต่างที่สำคัญมากที่ทำให้ชีวิตง่ายขึ้นมาก
Eran Galperin

36
ทำไมต้องวางเว็บไซต์ลงบนหน้าจอ? หากคุณเรียกใช้ไดเรกทอรีรุ่น / และชี้ liveSite / ผ่าน symlink ไปยังโฟลเดอร์ของคุณในรุ่น / จากนั้นคุณสามารถเช็คเอาต์ไซต์ลงในโฟลเดอร์รุ่นใหม่ / และทำการเชื่อมโยง symlink ทันทีเมื่อ co เสร็จแล้วหรือไม่ ไม่จำเป็นต้องหยุดทำงาน (ยกเว้นกรณีที่คุณเป็นคนยากจนที่ร้องขอในระหว่างการเปลี่ยน symlink นั้น)
Joseph Lust

2
ใครเป็นผู้รับผิดชอบในการทำงานทั้งหมดเหล่านั้นเช่นอัพเดต SVN เกี่ยวกับการผลิตและ symlinkin ในรีลีสใหม่ มันคือ phing? เจนกินส์ไหม
Daniel Ribeiro

24

ฉันกำลังปรับใช้ PHP ใช้ Git การผลิตแบบพุชแบบง่ายๆคือทั้งหมดที่จำเป็นในการอัปเดตเซิร์ฟเวอร์การผลิตของฉันด้วยสำเนาล่าสุดจาก Git มันง่ายและรวดเร็วเพราะ Git ฉลาดพอที่จะส่งความแตกต่างไม่ใช่แค่โครงการทั้งหมดอีกครั้ง นอกจากนี้ยังช่วยเก็บสำเนาที่ซ้ำซ้อนของที่เก็บบนเว็บเซิร์ฟเวอร์ในกรณีที่ฮาร์ดแวร์ล้มเหลวในตอนท้ายของฉัน (แม้ว่าฉันจะผลักดันให้ GitHub ปลอดภัยด้วย)


ฉันได้ทำสิ่งเดียวกันมาหลายปีในโครงการขนาดเล็กถึงขนาดกลางเช่นกัน ฉันต้องบอกว่ามันใช้งานได้ดีสำหรับฉัน คุณต้องรักความเรียบง่ายของวิธีนี้
Chris Allen Lane

3
คุณจะจัดการฐานข้อมูลด้วยวิธีนี้ได้อย่างไร
32423hjh32423

1
@neilc ด้วยมือ แต่น่าเสียดายที่ การเปลี่ยนแปลงใด ๆ ในฐานข้อมูลจะต้องดำเนินการด้วยตนเองก่อนที่จะผลักดัน
Kyle Cronin

ฉันมักจะรวม () ไฟล์ PHP ที่มีการกำหนดค่า DB และวางไฟล์บนเซิร์ฟเวอร์หรือเครื่องทดสอบด้วยตนเอง ด้วยวิธีนี้คุณไม่ได้เก็บรหัสผ่านไว้ในคอมไพล์และไม่ได้ตั้งใจทำงานบนฐานข้อมูลการผลิต
Matt

คุณจะกำหนดค่า git ให้ทำเพื่อคุณได้อย่างไร? มีคำแนะนำ / บทช่วยสอนหรือไม่? ขอบคุณล่วงหน้า.
Miguel Stevens

14

เราใช้Webistranoส่วนหน้าเว็บของ Capistrano และมีความสุขมาก

Webistrano อนุญาตให้มีการปรับใช้หลายขั้นตอนจาก SVN, GIT และอื่น ๆ มันมีการสนับสนุนการย้อนกลับในตัวรองรับบทบาทเซิร์ฟเวอร์แยกต่างหากเช่นเว็บฐานข้อมูลแอพ ฯลฯ และปรับใช้แบบขนาน อนุญาตให้คุณแทนที่พารามิเตอร์การกำหนดค่าในหลาย ๆ ระดับเช่นต่อสเตจและบันทึกผลลัพธ์ของการปรับใช้ทุกครั้ง

แม้ว่า Capistrano และ Webistrano เป็นแอพพลิเคชั่นของ Ruby แต่ไวยากรณ์ของการปรับใช้ 'สูตรอาหาร' นั้นง่ายและมีประสิทธิภาพเพียงพอที่จะเข้าใจสำหรับโปรแกรมเมอร์ PHP ทุกคน เดิมที Capistrano ถูกสร้างขึ้นสำหรับ Ruby on Rails แต่รองรับโครงการ PHP ได้อย่างง่ายดาย

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

เพื่อให้การปรับใช้ที่เร็วที่สุดเป็นไปได้เราได้ติดตั้งวิธีการfast_remote_cacheซึ่งอัปเดตแคชสำเนาการทำงาน svn บนเซิร์ฟเวอร์ระยะไกลแล้วทำการลิงก์ผลลัพธ์


7

ฉันใช้Apache Antเพื่อปรับใช้กับเป้าหมายที่แตกต่างกัน (dev, QA และ live) Ant ถูกออกแบบมาเพื่อทำงานสำหรับการปรับใช้ Java แต่ให้โซลูชันเคสที่มีประโยชน์โดยทั่วไปสำหรับการปรับใช้ไฟล์โดยพล

ไวยากรณ์ของไฟล์ build.xml นั้นค่อนข้างง่ายต่อการเรียนรู้ - คุณกำหนดเป้าหมายที่แตกต่างกันและการพึ่งพาที่ทำงานเมื่อคุณเรียกใช้โปรแกรม ant บนบรรทัดคำสั่ง

ตัวอย่างเช่นฉันมีเป้าหมายสำหรับ dev, QA และ live ซึ่งแต่ละอย่างขึ้นอยู่กับเป้าหมาย cvsbuild ซึ่งตรวจสอบการแก้ไขส่วนหัวล่าสุดจากเซิร์ฟเวอร์ CVS ของเราคัดลอกไฟล์ที่เหมาะสมไปยังไดเรกทอรีสร้าง (โดยใช้แท็กชุดไฟล์) จากนั้น rsyncs สร้างไดเรกทอรีไปยังเซิร์ฟเวอร์ที่เหมาะสม มีนิสัยใจคอนิดหน่อยที่จะเรียนรู้และช่วงการเรียนรู้ไม่แบนอย่างสิ้นเชิง แต่ฉันได้ทำแบบนี้มาหลายปีแล้วโดยไม่มีปัญหาดังนั้นฉันจึงขอแนะนำให้ใช้กับสถานการณ์ของคุณ จะเห็นในหัวข้อนี้


6

ฉันทำสิ่งต่างๆด้วยตนเองโดยใช้ Git ที่เก็บหนึ่งรายการสำหรับการพัฒนาซึ่งได้รับgit push --mirror'ed สู่ repo สาธารณะและเซิร์ฟเวอร์สดเป็น repo ตัวที่สามที่ดึงออกมา ฉันคิดว่าส่วนนี้เหมือนกับการตั้งค่าของคุณเอง

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

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


3

ฉันรู้ว่าพิงค์ได้รับการกล่าวถึงไม่กี่ครั้งในขณะนี้ แต่ฉันเคยโชคดีกับphpUnderControl สำหรับเราพวกเรา

  1. ตรวจสอบสำเนาแต่ละสาขาไปยังเครื่องท้องถิ่น
  2. มีการทดสอบสาขาแล้วรวมเข้ากับ Trunk
  3. Commits to Trunk ถูกสร้างขึ้นโดยอัตโนมัติโดย phpUnderControl ทำการทดสอบและสร้างเอกสารทั้งหมดโดยใช้ฐานข้อมูล
  4. Trunk ได้รับการทดสอบคุณภาพแล้วรวมเข้ากับสาขาที่มีเสถียรภาพของเรา
  5. อีกครั้ง phpUnderControl สร้าง Stable โดยอัตโนมัติทำการทดสอบและสร้างฐานข้อมูล documenation และอัพเดท
  6. เมื่อเราพร้อมที่จะผลักดันการผลิตเราเรียกใช้สคริปต์ rsync ที่สำรองการผลิตอัปเดตฐานข้อมูลและจากนั้นดันไฟล์ขึ้น คำสั่ง rsync ถูกเรียกด้วยมือเพื่อให้แน่ใจว่ามีคนกำลังดูโปรโมชัน

5
phpUnderControl ตายแล้ว: |
m02ph3u5

3

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

PaaS ที่ฉันอยากจะแนะนำคือdotCloudนอกเหนือจาก PHP ( ดู PHP quickstart ของพวกเขา ) แล้วมันยังสามารถปรับใช้ MySQL, MongoDB และบริการเพิ่มเติมทั้งหมดได้อีกด้วย นอกจากนี้ยังมีสินค้าที่ดีเช่นการปรับใช้ไม่ต้องหยุดทำงาน, ย้อนกลับได้ทันที, รองรับ SSL และ websocket ได้อย่างเต็มที่และมีระดับฟรีที่ดีเสมอ :)

แน่นอนว่าฉันมีอคติเล็กน้อยตั้งแต่ทำงานที่นั่น! ตัวเลือกอื่น ๆ ที่ควรค่าแก่การตรวจสอบเพิ่มเติมนอกเหนือจาก dotCloud คือ Pagodabox และ Orchestra (ปัจจุบันเป็นส่วนหนึ่งของ Engine Yard)

หวังว่านี่จะช่วยได้!

ซาโลมอน


2

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

แต่ถ้าคุณต้องการระบบการรวมอย่างต่อเนื่องสำหรับ PHP ฉันคิดว่าPhingเป็นตัวเลือกที่ดีที่สุดสำหรับ PHP ฉันยังไม่ได้ทดสอบด้วยตัวเองเพราะฉันทำสิ่งต่าง ๆ เช่นคู่มือวิธีการเช่น scp


2

ฉันไปงานเลี้ยงสาย แต่ฉันคิดว่าฉันจะแบ่งปันวิธีการของเรา เราใช้ Phing กับPhingistranoซึ่งมีฟังก์ชั่นเหมือน Capistrano ให้กับ Phing ผ่านไฟล์บิลด์ที่สร้างไว้ล่วงหน้า มันเจ๋งมาก แต่ใช้ได้เฉพาะเมื่อคุณใช้ Git ในตอนนี้


1

ฉันมีสำเนาทำงานของสาขาย่อย SVN บนเซิร์ฟเวอร์ การอัพเดตไซต์ (เมื่อไม่มีการเปลี่ยนแปลงสกีมา) นั้นง่ายเหมือนการออกคำสั่งอัพเดต SVN ฉันไม่จำเป็นต้องใช้ไซต์ออฟไลน์


1
ดังนั้นคุณมี. svn ไดเรกทอรีกระจัดกระจายไปทั่วไซต์? สมองผู้พิถีพิถันของฉันไม่ชอบสิ่งนี้ :)
Stann

สิ่งนี้จะดูแลซอร์สโค้ดเท่านั้น การปรับใช้มักจะต้องดำเนินการอื่น ๆ - การเปลี่ยนแปลงฐานข้อมูลที่นำไปใช้แคชล้าง ฯลฯ
Leonid Mamchenkov

1

Phing อาจเป็นทางออกที่ดีที่สุดของคุณหากคุณสามารถทนกับความเจ็บปวดของไฟล์กำหนดค่า xml เฟรมเวิร์ก Symfony มีพอร์ตของเรค (pake) ของตัวเองซึ่งทำงานได้ค่อนข้างดี แต่ค่อนข้างแน่นควบคู่ไปกับส่วนที่เหลือของ Symfony (แม้ว่าคุณอาจแยกกันได้)

อีกทางเลือกหนึ่งคือใช้ Capistrano เห็นได้ชัดว่ามันไม่ได้รวมกับ PHP เช่นเดียวกับ Ruby แต่คุณยังคงสามารถใช้งานได้หลายอย่าง

สุดท้ายคุณสามารถเขียนเชลล์สคริปต์ได้ตลอดเวลา จนถึงตอนนี้นั่นคือสิ่งที่ฉันได้ทำ



1

ปลายปีหนึ่ง แต่ ... ในกรณีของฉันการปรับใช้ไม่ใช่อัตโนมัติ ฉันพบว่าเป็นอันตรายในการปรับใช้รหัสและเรียกใช้สคริปต์การย้ายฐานข้อมูลโดยอัตโนมัติ

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


1

ที่ทำงานของฉันตัวฉันเองและทีมของฉันได้พัฒนา Phing oriented สำหรับการติดตั้งของ capistrano และเรายังได้รวมเอาสารพัดที่มีอยู่ใน phing เช่นการทดสอบ PHPUnit, phpcs และ PHPDocumentor เราทำให้มันเป็น repo คอมไพล์ที่สามารถเพิ่มเข้าไปในโปรเจ็กต์ในรูปแบบ submodule ในคอมไพล์และมันทำงานได้ดีมาก ฉันได้แนบมันเข้ากับโปรเจ็กต์จำนวนหนึ่งและมันเป็นโมดูลที่เพียงพอที่จะทำให้มันใช้งานได้กับทุกโครงการในทุกสภาพแวดล้อมของเรา (การแสดงละครการทดสอบการผลิตและอื่น ๆ )

ด้วยสคริปต์การสร้าง phing คุณสามารถเรียกใช้จากบรรทัดคำสั่งด้วยตนเองและฉันก็ประสบความสำเร็จในการสร้างรูทีนการสร้าง / ปรับใช้กับฮัดสันและตอนนี้เจนกินส์โดยอัตโนมัติ

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


0

ฉันคิดว่าวิธีการปรับใช้ SVN ไม่ดีมาก เพราะ:

คุณต้องเปิดการเข้าถึง SVN สำหรับคนทั้งโลก

มี. svn มากมายในเว็บเซิร์ฟเวอร์ที่ใช้งานจริง

ฉันคิดว่า Phing จะสร้าง branch + รวม js / css + แทนที่การตั้งค่า stage + ssh อัพโหลดไปยังเซิร์ฟเวอร์ www ทั้งหมดเป็นวิธีที่ดีกว่า

ssh ถึง 10 www เซิร์ฟเวอร์และ svn up ก็เป็นปัญหาเช่นกัน


เปิดเซิร์ฟเวอร์ svn ของฉันไปทั่วโลกไม่มีทาง! เพียงใช้ไฟร์วอลล์และการตรวจสอบสิทธิ์ของคุณผ่าน ssl เพื่อ จำกัด ผู้ที่สามารถเห็นรหัสของคุณ
Shadok
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.