การตั้งค่าเซิร์ฟเวอร์ git


57

ฉันเพิ่งตั้งค่าเซิร์ฟเวอร์ Ubuntu บน Amazon EC2 ฉันต้องการใช้เป็นเซิร์ฟเวอร์คอมไพล์ของฉันดังนั้นฉันสามารถเก็บ repos ของฉันไว้ที่นั่นได้

ดังนั้นฉันจะหาคำแนะนำโดยละเอียดเกี่ยวกับวิธีการตั้งค่า git บนเซิร์ฟเวอร์ ubuntu ได้จากที่ไหน? ปุ่ม SSH เหล่านี้และทุกอย่างเช่นนั้นผู้ใช้หลายคน ฯลฯ


2
ฉันไม่คิดว่านี่เป็นคำถามที่เกี่ยวกับอูบุนตู (นอกเหนือจากที่ชัดเจนว่า "ลินุกซ์") คุณเคยดูเอกสารของคอมไพล์หรือไม่ มีการกล่าวถึงการตั้งค่าสาธารณะเช่นเดียวกับพื้นที่เก็บข้อมูลส่วนตัว
Ward Muylaert

22
@BonboBingo การพูดว่า "Just search Google" ไม่ใช่วิธีแก้ปัญหาจริงๆ คำถามส่วนใหญ่ที่นี่สามารถตอบได้ด้วย "ถ้าคุณค้นหานานพอ ... " ถาม Ubuntu มุ่งมั่นที่จะเป็นเว็บไซต์คำถามและคำตอบที่ให้คำตอบระดับที่ 1 แทนที่จะเป็นกำแพงคำตอบที่พูดว่า "Just Google" - สำหรับข้อมูลเพิ่มเติม ตรวจสอบคำถามที่พบบ่อย
Marco Ceppi

1
มีคำแนะนำขั้นตอนที่มีประโยชน์ที่นี่: help.ubuntu.com/community/Git @Marco Ceppi ขอโทษ แต่ฉันไม่ได้ทะเลาะ แล้วลิงค์ที่ฉันโพสต์ดูเหมือนจะค่อนข้างเกี่ยวข้องกับคำถาม ... เอาล่ะตอนนี้เป็นคำตอบ?
BonboBingo

@BonboBingo ความคิดเห็นไม่นับเป็นคำตอบ! ฉันแค่แสดงความคิดเห็นในส่วน "ค้นหา Google" ของความคิดเห็นของคุณ หากคุณต้องการที่จะตอบรายละเอียดเกี่ยวกับบทความ Git ในคู่มือช่วยเหลือของ Ubuntu คุณควรใช้ช่อง "คำตอบของคุณ" ที่ด้านล่างของหน้านี้! :)
Marco Ceppi

2
"แทนที่จะเป็นกำแพงของคำตอบที่บอกว่า" แค่ Google "- สำหรับข้อมูลเพิ่มเติมตรวจสอบ" ... ตกลงคุณพูดถูกแล้ว :) หยุดที่นี่กันเถอะ
BonboBingo

คำตอบ:


38

คุณสามารถใช้บทช่วยสอนเพื่อติดตั้งเซิร์ฟเวอร์ Git ตามที่ aking1012 เสนอให้คุณหรือคุณสามารถติดตั้งเซิร์ฟเวอร์ SSH บนอินสแตนซ์ EC2 ของคุณ (อาจเป็นการฉลาดที่จะรักษาความปลอดภัยและเปลี่ยนพอร์ตเริ่มต้น)

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

GIT_DIR=project.git git init  
cd project.git  
git --bare update-server-info  
cp hooks/post-update.sample hooks/post-update

ในที่สุดติดตั้ง SSH บนเซิร์ฟเวอร์ของคุณ:

sudo apt-get install ssh-server

ตอนนี้คุณควรกำหนดค่า SSH ให้ปลอดภัย

ได้เวลาทำให้โครงการของคุณออนไลน์ (ข้อมูลที่คุณมีอยู่ในเครื่องพัฒนาของคุณ):

git push ssh://<username>@<remote-git-hostname>/path/to/project.git master

และตอนนี้คุณสามารถเริ่มการโคลนได้ คุณพัฒนาเครื่องจักรของคุณ:

git clone ssh://<username>@<remote-git-hostname>/path/to/dir.git

ตรวจสอบทรัพยากรที่ดีเยี่ยมใน Git

และสำหรับการสร้างคีย์ SSH ของคุณสำหรับการตรวจสอบความปลอดภัยมากขึ้นคุณสามารถอ่านบทความเกี่ยวกับการตรวจสอบ SSH


ไม่ควรเหopenssh-serverรอ?
Jorge Castro

1
@jorge ดูเหมือนว่าssh-serverเป็นชื่อแทน openssh-server อย่างน้อยใน Ubuntu 10.04
Huygens

1
นี่สามารถใช้งานได้ แต่การบันทึกผ่าน SSH ไปยังเครื่อง Amazon EC2 ต้องใช้คีย์สาธารณะ / ส่วนตัว (ssh -i key.pem ubuntu @ address) นอกจากนี้ฉันต้องจำเส้นทาง (ubuntu @ ที่อยู่: / var / www / dir1 / dir2) แทนที่จะเป็นแค่คอมไพล์ clit git.mydomain.com/repository
Pawełkowy

1
@Pawel จุดที่ดี นั่นเป็นสาเหตุที่บางคนใส่ที่เก็บ git ไว้ที่รูทระบบไฟล์ แต่ใช่คุณต้องใช้คีย์ ssh หรือบัญชี หรือคุณสามารถใช้ HTTP ได้ แต่คุณไม่มีการควบคุมการเข้าถึง AFAIK ที่ดีจริงๆ
Huygens

3
@ PawełKarpiński - คุณสามารถตั้งค่าไฟล์ SSH ฝั่งไคลเอ็นต์~/.ssh/configเพื่อจัดการชื่อผู้ใช้ / ที่อยู่โฮสต์อินพุตคีย์พอร์ตและอะไรก็ได้
Shauna

15

สำหรับการตั้งค่าเซิร์ฟเวอร์ Git ทั้งหมดของฉันฉันใช้Gitoliteซึ่งอนุญาตให้มีการรักษาความปลอดภัยระดับย่อยของการเข้าถึง "ต่อสาขา" การตั้งค่าค่อนข้างตรงไปตรงมาถ้าคุณทำบนเซิร์ฟเวอร์ระยะไกลมันง่ายเหมือนการเรียกใช้สคริปต์แบบโต้ตอบ นอกเหนือจากลักษณะ "ติดตั้งง่าย" แล้วยังมีแพ็คเกจใน Natty และ Maverick

sudo apt-get install gitolite

สิ่งนี้จะไม่ให้ส่วนหน้าของเว็บอย่าง Github หรือ Gitweb แต่คุณสามารถกำหนดค่าและติดตั้งที่อยู่ด้านบนของ Gitolite ได้อย่างง่ายดาย


9

ผมชอบgitolite หนังสือ Pro Git มีส่วนอยู่ แต่ฉันแนะนำให้อ่านทั้งเล่ม

สำหรับความต้องการของผู้ใช้หลายคนของคุณ:

Gitolite ช่วยให้คุณระบุการอนุญาตไม่ได้เป็นเพียงแค่พื้นที่เก็บข้อมูล (เช่น Gitosis) แต่ยังตามชื่อสาขาหรือแท็กภายในแต่ละพื้นที่เก็บข้อมูล นั่นคือคุณสามารถระบุได้ว่าบางคน (หรือกลุ่มคน) สามารถผลักดัน "refs" (สาขาหรือแท็ก) บางอย่างได้ แต่ไม่ใช่คนอื่น


7

http://scie.nti.st/2007/11/14/hosting-git-repositories-the-easy-and-secure-wayสามารถปรับเปลี่ยนเล็กน้อยเพื่อให้เหมาะกับวัตถุประสงค์ของคุณ ... กวดวิชาที่คล้ายกันhttp: // บล็อก .agdunn.net


1
หมายเหตุ: ขณะนี้ฉันกำลังรวบรวม 0 ถึง rvm, ree / ruby, rails, git tutorial สำหรับไคลเอนต์การพัฒนาและการสอนเซิร์ฟเวอร์สำหรับการพัฒนา เพียงแค่ดึงบทช่วยสอนออนไลน์จำนวนมากไว้ในที่เดียวและทำการปรับเปลี่ยนเล็กน้อย แต่ก็ยังอยู่ระหว่างการดำเนินการในขณะนี้
RobotHumans

บทเรียนเหล่านี้ยอดเยี่ยม แต่ก็ค่อนข้างซับซ้อน ไม่มีบทเรียน "ที่สั้นกว่านี้" ใช่หรือไม่ :)
Pawełkowy

ฉันไม่เห็นอะไรที่ตรงไปตรงมา ... บทเรียนส่วนใหญ่เกี่ยวกับเรื่องอื้อฉาวและเรื่องอื้อฉาวไม่ได้ผ่านการสร้างโครงการตัวอย่างและการทดสอบ (สิ่งที่ฉันคิดว่าควรจะเป็นในทุกบทช่วยสอน) หากฉันเห็น
อาจารย์สอนพิเศษ

@ PawełKarpiński - มีอะไรซับซ้อนเกี่ยวกับพวกเขาบ้าง? ฉันเคยใช้การตั้งค่า Gitosis มาก่อนและจริงๆแล้วมันง่ายมาก
Shauna


4

วิธีแก้ปัญหาที่ได้ผลดีที่สุดสำหรับฉันคือการตั้งค่า WebDAV

  • sudo a2enmod sudo dav_fs

  • sudo a2enmod dav

  • เพิ่มไฟล์ใหม่เพื่อและชื่อตัวอย่างเช่น/etc/apache2/sites-available git.yourserver.comแก้ไขและเพิ่มบรรทัดต่อไปนี้:

<VirtualHost *:80>

DocumentRoot /var/www/git.yourserver.com/repos
ServerName git.yourserver.net
Options Indexes FollowSymLinks MultiViews

<Location />
    DAV On
    AuthType Basic
    AuthName "git repos"
    AuthUserFile /var/www/git.yourserver.net/password.dav
    Require valid-user
</Location>

</VirtualHost>

  • สร้างไดเรกทอรี/var/www/git.yourserver.comและไดเรกทอรีreposภายใน id
  • sudo chown www-data /var/www/git.yourserver.com/repos
  • sudo htpasswd -c /var/www/git.yourserver.com/password.dav user_login และป้อนรหัสผ่านสำหรับชื่อผู้ใช้ user_login
  • sudo chown root:www-data /var/www/git.yourserver.com/password.dav
  • sudo chmod 640 /var/www/git.yourserver.com/password.dav

ตอนนี้และsudo a2ensite git.yourserver.comsudo service apache2 restart

  • ป้อน/var/www/git.yourserver.com/reposและสร้างไดเรกทอรีตัวอย่างเช่นmyrepo.git
  • cd myrepo.git
  • git --bare init
  • git update-server-info

ตอนนี้ออกจากระบบจากเซิร์ฟเวอร์ระยะไกลของคุณและไปที่ไดเรกทอรีท้องถิ่นที่คุณต้องการแก้ไขไฟล์ของคุณ

git clone http://user_login:user_password@git.yourserver.com/myrepo.git

และคุณทำเสร็จแล้ว หากคุณต้องการส่งการเปลี่ยนแปลงที่กระทำไปยังเซิร์ฟเวอร์:

git push origin master

sudo htpasswdคุณสามารถสร้างผู้ใช้จำนวนมากเท่าที่คุณต้องการใช้ เพียงจำไว้ว่าอย่าใช้-cสวิตช์เมื่อเพิ่มผู้ใช้มากขึ้นเพราะไฟล์เก่าจะถูกลบ


3
HTTP เป็นโปรโตคอล "โง่" ที่ได้รับการสนับสนุน แต่ไม่สนับสนุนอย่างยิ่ง โพรโทคอล git ดั้งเดิมทำงานได้ดีขึ้นมากและง่ายต่อการติดตั้งเนื่องจากสิ่งที่คุณต้องทำคือมีเซิร์ฟเวอร์ ssh (ซึ่งคุณควรใช้แล้ว) และติดตั้ง git-core ไม่จำเป็นต้องยุ่งเกี่ยวกับ Apache เลย
psusi

3

ฉันชอบวิธีการgitoliteสำหรับการจัดการผู้ใช้และความปลอดภัย ฉันมีเซิร์ฟเวอร์ Git + gitolite AMI สำหรับ EC2 ที่กำลังถูกทดสอบ รู้สึกอิสระที่จะลอง เอกสารมีอยู่ที่นี่:

เซิร์ฟเวอร์ Git Alestic

เมื่อใช้วิธีนี้คุณสามารถมีเซิร์ฟเวอร์ Git ส่วนกลางที่มีที่เก็บส่วนตัวทำงานในเวลาไม่กี่นาที มีเส้นโค้งการเรียนรู้สำหรับ gitolite และ EC2 หากคุณไม่คุ้นเคย


3

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

ฉันมีบทความ Howto บนเว็บไซต์ของฉัน

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