Sử dụng git hook để deploy website

Nhiệm vụ chính

Sử dụng git push để deploy code lên server, vừa nhanh đỡ phải connect FTP các công đoạn, mà nếu bạn quản lý nhiều website thì không tránh khỏi việc nhầm lẫn web này sang web kia. Đồng thời cũng là nhanh nhất việc áp dụng các file đã thay đổi mà không phải lựa chọn từng file sau khi chỉnh sửa.

Các bước cài đặt

1. Cài đặt git cho server của bạn, đồng thời cũng tạo luôn user là git và thư mục của user này trong /home/ là thư mục /home/git và nhớ phân quyền cho thư mục này là toàn quyền của git nhé.

Câu lệnh chown git:git /home/git sẽ giúp bạn phân quyền cho thư mục này.

2. Tạo git repo cho dự án mà bạn muốn deploy cụ thể là khi bạn dùng git push thì đây sẽ là nơi tiếp nhậ source code thay đổi của bạn để deploy. Tạo deploy bằng câu lệnh sau:

git init --bare /home/git/tenproject.git

như vậy là bạn đã tạo xong một git repo chứa code, phần này nó giống như là 1 repo của các bạn trên github vậy giờ bạn có thể push code cho repo này bằng đườn dẫn sau:

git@diachiip:tenproject.git ví dụ: git@123.244.222:wpazweb.git

Như vậy trong project code của bạn bạn sẽ cần add repo này vào git của các bạn, bằng cách sau:

Dùng câu lệnh git add : git add remote live git@123.244.222:wpazweb.git

Push code lên server: git push live master những thay đổi trong code của bạn sẽ được đưa lên server.

3. Xong phần 3 thì nó vẫn chưa deploy code vào thư mục mà mình mong muốn đâu các bạn ạ, mà mình phải viết hook cho cái repo này (tức là bảo nó làm gì khi có người push code vào nhánh master chẳng hạn, hoặc vào nhánh dev chẳng hạn)

Việc này sẽ đơn giản thôi đó là tạo 1 file tên là post-receive vào trong thư mục /home/git/wpazweb.git/hooks/post-receive trong file này sạn nội dung như sau:

Shell

Nhớ chạy chmod +x /home/git/wpazweb.git/hooks/post-receive để file có thể hoạt động nhé

Trong đoạn bash ở trên mình có sử dụng 2 nhánh 1 nhánh cho website dev.wpazweb.com mục đích là dùng để test trước khi deploy lên live là wpazweb.com chủ yếu là việc chỉnh sửa code theme nên mình làm như vậy. Với các team phải maintain hoặc deploy nhiều web mà các bạn có owner hẳn con server thì làm thế này quả là rất tiện và chắc cốp.

Nói chung cơ bản là các bạn đã hiểu 1 phần công việc mình đang làm và deploy cho website thế nào rồi đấy 🙂

Một số cách deploy khác dùng git

Sử dụng web hook trên repo của gitlab hoặc github khi bạn push code vào nhánh master sẽ gọi 1 đường dẫn tới server live của bạn và website của bên bạn sẽ tiến hành chạy câu lệnh để pull code về.

Sử dụng tính năng có sẵn của Cpanel tuy nhiên một số host sẽ không cho bạn chạy tính năng này đâu.

Tạo thư mục mà bạn muốn thay đổi là thư mục git luôn, khi có thay đổi thì bạn vào chạy câu lệnh pull trực tiếp cách này cũng ok nhưng trong thư mục của website live sẽ có 1 thư mục .git có vẻ sẽ thú vị với các hacker

Vấn đề lỗi sẽ gặp phải

Chạy theo những gì hướng dẫn các bạn sẽ gặp phải một số vấn đề như:

  1. File post-receive ko chạy được vì quên chmod +x
  2. Lỗi không ghi được files vào thư mục deploy
  3. Không push được code lên repo mình vừa tạo
  4. Push rồi xong chả thấy thay đổi gì cả

Cách khắc phục

  1. Chạy câu lệnh chmod +x duong-dan-file-post-receive
  2. Phân quyền cho tài khoản git có quyền ghi vào thư mục deploy
  3. Thêm ssh key vào file ~/.ssh/authorized_keys ( của tài khoản git nhé )
  4. Check lại xem quyền ghi thư mục, đường dẫn thư mục đã đúng chưa? kết nối mạng ra sao? fail ở bước nào?
  5. Tương tự bước 4 xem có bất kỳ lỗi nào xảy ra không?

Tóm lại

Bài hướng dẫn này dành cho các bạn thích mày mò, giảm thời gian phải bật Filezilla hoặc phần mềm nào đó tương tự để deploy code, hiện tại mình đang dùng cách này, các bạn có cách nào xịn xò thì vui lòng chia sẻ cho mình với nhé, cám ơn các bạn.

Note: bạn nào làm được rồi thì hãy chia sẻ cho mình biết với nha, mình cũng có 1 note ghi về vấn đề này tuy nhiên nó ko được hệ thống hoá cho lắm, nếu bạn nào cần thì nhắn mình chia sẻ link nhé.

2 thoughts on “Sử dụng git hook để deploy website

    • Trong bài viết của mình là mình hướng dẫn bạn dùng VPS nhé, còn một số host như Cpanel hay Direct Admin họ cho bạn dùng SSH thì bạn hoàn toàn có thể setup deploy theo kiểu khác. Đó là tạo web hook để add lên repo trên github hoặc gitlab của mình, khi bạn push code thì bên Shared Host sẽ tự cập nhật những thay đổi về web của bạn.

Trả lời

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *

Website này sử dụng Akismet để hạn chế spam. Tìm hiểu bình luận của bạn được duyệt như thế nào.