2011-03-25 8 views
7

Trên máy chủ của tôi, tôi có hai người dùng, www-data (được sử dụng bởi nginx) và git. Người dùng git sở hữu một kho chứa mã của trang web của tôi và người dùng www-data sở hữu bản sao của kho lưu trữ đó (hoạt động dưới dạng webroot cho nginx). Tôi muốn thiết lập một quy trình làm việc như vậy để đẩy tới kho lưu trữ của git làm cho kho lưu trữ của www-data cập nhật, do đó việc cập nhật trang web của tôi.Quy trình triển khai trang web dựa trên Git

Cách chính xác để thiết lập móc cho các kho lưu trữ này (cũng xem xét các đặc quyền và quyền của hai người dùng này) là gì?

+0

Có thực sự là một ý tưởng hay khi có tất cả nội dung công khai của bạn thuộc sở hữu của tài khoản người dùng chạy máy chủ? Nếu máy chủ hoặc mã của bạn bị khai thác, khai thác có thể sửa đổi dữ liệu liên tục, thay vì chỉ truy cập vào scribble trên các kết nối cơ sở dữ liệu của bạn ... – sarnold

+0

Sau đó, tôi nên tạo nội dung công khai thuộc sở hữu của 'git', và làm cho nó có thể đọc được bởi tất cả mọi người ? Điều đó cũng sẽ đơn giản hóa các vấn đề về quyền trong câu hỏi này ... – Chetan

+0

_If_ bạn đang hài lòng với giải pháp đó, sau đó có, nó sẽ giúp bạn tránh được rắc rối khi tìm cách mới để đẩy từ 'git' sang' www-data 'repos. :) Bạn có thích hai repo git trên máy chủ không? Một tùy chọn khác là đặt quyền sở hữu nhóm của các tệp thành một trong các nhóm của máy chủ và cho phép truy cập đọc thông qua các đặc quyền nhóm. – sarnold

Trả lời

5

Tháo kho thuộc sở hữu của www-data và làm theo các giải pháp trên webpage này thành lập một cái móc sau nhận được trong kho thuộc sở hữu của git.

2

Tôi đã kết thúc việc tạo nội dung công khai thuộc sở hữu của người dùng git và tất cả đều có thể đọc được. Sau đó, tôi đã làm như sau để thiết lập các móc:

Giả sử các kho lưu trữ được gọi là mysite:

  1. Tạo một cây làm việc tách ra mà sẽ đóng vai trò là webroot (như là người dùng git)

    mkdir /var/www/mysite 
    cd /path/to/repository/mysite.git 
    git config core.worktree /var/www/mysite 
    git config core.bare false 
    git config receive.denycurrentbranch ignore 
    
  2. Thêm một hậu nhận móc rằng sẽ cập nhật các trang web và thiết lập quyền chính xác cho nó

    touch hooks/post-receive 
    chmod +x hooks/post-receive 
    vim hooks/post-receive 
    

    Các hậu nhận được kịch bản:

    #!/bin/sh 
    git checkout -f 
    chmod -R o+rX /var/www/mysite 
    

tham khảo:
http://www.deanoj.co.uk/programming/git/using-git-and-a-post-receive-hook-script-for-auto-deployment/


Cập nhật: Đây là một better solution.

Lưu ý: các phiên bản trước của hướng dẫn này phụ thuộc vào việc đặt biến cấu hình git core.worktree thành thư mục đích, core.bare thành false và receive.denycurrentbranch để bỏ qua. Nhưng những thay đổi này là không cần thiết nếu bạn sử dụng GIT_WORK_TREE (không hoạt động khi tôi lần đầu tiên viết howto), và kho lưu trữ từ xa có thể vẫn trống.

+0

Ack tại sao mọi người tiếp tục tìm kiếm tất cả các giải pháp khó chịu trên blog của mọi người thay vì những người thích hợp. – Arrowmaster

+1

@Arrowmaster: Cảm ơn, đơn giản hơn luôn tốt hơn. – Chetan