2011-10-20 41 views
40

Tôi là loại mới đối với cả EC2 và Git, và tôi vừa thiết lập phiên bản EC2 đầu tiên của mình, sử dụng AMI Amazon Linux sạch. Tôi cũng đã cài đặt MySQL, Apache và PHP và mở một số cổng để làm cho nó hoạt động như một máy chủ web thông thường, đáp ứng với một IP đàn hồi.Thiết lập Git trên EC2 để kéo từ GitHub repo

Bây giờ, mã của tôi nằm trên repo riêng trên GitHub và tôi muốn thực hiện triển khai đơn giản bằng cách thực hiện git pull hoặc điều gì đó tương tự. Git cũng được cài đặt trên máy chủ rồi. Tôi biết tôi có thể thiết lập repo git của tôi trên máy chủ bằng cách sử dụng khóa ssh cá nhân của tôi, nhưng nó có vẻ kỳ lạ. Tôi đoán một giải pháp khác là tạo một người dùng GitHub mới và sử dụng nó trên máy chủ, nhưng có vẻ như không đúng.

Làm cách nào để đạt được điều này một cách thanh lịch, an toàn?

Trả lời

32

Để tránh phải giữ khóa riêng SSH trên phiên bản EC2 của bạn, mọi người thường sử dụng quy trình làm việc liên quan đến việc đẩy tới máy chủ từ xa đó để triển khai. Về cơ bản, bạn thiết lập một kho git trống ở đó với một móc pre-receive triển khai đến một thư mục khác. Có một ví dụ đơn giản về việc này trong this tutorial. Sau đó, bạn chỉ cần có khóa công khai SSH của mình trong ~/.ssh/authorized_keys trên máy chủ. Tuy nhiên, với quy trình làm việc này, bạn không thể triển khai trực tiếp từ kho lưu trữ GitHub của mình - bạn sẽ cần phải kéo nó cục bộ và sau đó đẩy vào máy EC2.

Cách khác là sử dụng cơ chế deploy keys của GitHub. Điều này sẽ liên quan đến việc tạo một cặp khóa SSH mới trên cá thể EC2 của bạn và thêm khoá công khai làm khóa triển khai vào kho lưu trữ riêng của bạn trên GitHub. Sau đó, bạn có thể kéo trực tiếp từ kho lưu trữ GitHub riêng của bạn vào cá thể EC2 của bạn.

+0

Tuyệt vời, cảm ơn! – luchomolina

7

Tôi vừa giải quyết tình huống như vậy bằng cách theo dõi tutorial rằng Mark Longair đã chỉ ra trước đó. Vấn đề duy nhất tôi nhận được là tạo ra kho chứa git trống. Vì vậy, hãy để tôi tiếp tục cách tôi giải quyết nó.

  1. Tôi đã có kho lưu trữ riêng tư của github.
  2. Tôi đã tạo EC2 Linux AMI (Ubuntu cho các thủ tục thực tế)
  3. Tôi đã cài đặt git, mysql, php, apache và ssh tại phiên bản EC2 và thêm khóa ssh công khai của mình vào tệp /home/ubuntu/.ssh/authorized_keys.
  4. Khi ở trường hợp EC2, tôi đã tạo hai thư mục, thư mục đầu tiên chứa kho lưu trữ (tôi đã đặt tên cho nó là tôi đã đặt tên kho lưu trữ github) và thứ hai để giữ (các) trang web: mkdir sitesrepo.git websites.
  5. Sau đó, tôi đã đi đến thư mục đó đang xảy ra để giữ kho và khởi tạo kho trần: cd sitesrepo.git && git init --bare
  6. Tôi tạo ra file móc qua vim với các nội dung sau đây trong một file có tên post-receive và sau đó tôi đã làm cho nó thực thi qua chmod +x post-receive (giống như hướng dẫn đã nêu). tập tin đó phải được đặt ở /home/ubuntu/sitesrepo.git/hooks

    #!/bin/sh 
    GIT_WORK_TREE=/home/ubuntu/websites git checkout -f 
    
  7. Đây là nơi các bước của tôi khác với hướng dẫn đã đề cập trước: Một kho git trần có một cuộc xung đột mà nó không thể giữ worktree là một kho lưu trữ trần (Nó không có ý nghĩa vì nó là một kho lưu trữ trần. Các kho không phải là trần có ý định có một không gian làm việc, tức là một worktree). May mắn thay bạn có thể tự thiết lập kho lưu trữ config tệp.Vì vậy, bằng cách chỉnh sửa tập tin /home/ubuntu/sitesrepo.git/config bạn phải đảm bảo có một cái gì đó như thế này:

    [core] 
        repositoryformatversion = 0 
        filemode = true 
        bare = false 
        worktree = /home/ubuntu/websites 
    [receive] 
        denycurrentbranch = ignore 
    
  8. Bây giờ, tại máy của riêng bạn, tại thư mục làm việc git kho địa phương của bạn, ý tưởng là để thêm một kho lưu trữ từ xa mới. Hiện tại bạn đã định cấu hình theo mặc định origin cho kho lưu trữ của bạn đẩy nội dung của bạn vào kho lưu trữ của github. Hướng dẫn này gọi các kho lưu trữ từ xa như vậy web. Vì vậy, bạn phải chạy một lần: git remote add web ssh://mysite.com/home/ubuntu/sitesrepo.git && git push web +master:refs/heads/master. Các lần đẩy tiếp theo có thể được thực hiện thông qua một đơn giản git push web

  9. Tùy thuộc vào số lượng trang web bạn định giữ, bạn phải configure your apache sites-enabled hosts. Ngoài ra, kể từ khi bạn đang sử dụng apache, đừng quên thay đổi thư mục web để trỏ đến /home/ubuntu/websites, bởi vì theo mặc định nó trỏ đến /var/www Nhưng bạn đã sẵn sàng để đi, chỉ cần đừng quên khởi động lại dịch vụ apache sau khi xác định thư mục web mới.

Hy vọng điều này sẽ giúp với câu hỏi của bạn.

Các vấn đề liên quan