Deploy Website với GIT

Deploy Website với GIT

Giống như nhiều lập trình viên khác, tôi sử dụng GIT hàng ngày để quản lý các đoạn mã của mình và dùng nó thường xuyên trong quá trình deploy website. Trên thực tế, tôi tin rằng GIT rất hữu ích, đến nỗi tôi liệt kê nó như một kỹ năng cần thiết mỗi khi tôi đăng cơ hội việc làm cho các lập trình viên tại nơi làm việc.

Mặc dù nó được nhiều người sử dụng, nhưng tôi thường thấy rằng GIT không được sử dụng hết tiềm năng của nó. Chủ yếu, tôi thấy rằng các lập trình viên sẽ sử dụng git để versioning các đoạn mã của họ, mà họ vẫn tải lên các tệp thông qua FTP hoặc một số phương pháp khác. Bài viết này sẽ chỉ cho bạn cách tôi sử dụng git để triển khai mã nhanh chóng và dễ dàng trên nhiều máy chủ mà không cần dùng đến các trình FTP.

Thiết lập trên DEV Server

Trước tiên, hãy nhìn vào bức hình bên dưới đây: chúng ta có một dev server (DEV), một production server (LIVE) và một remote repository như github hay bitbucket…

Trên DEV (local) server, chúng ta sẽ tạo một thư mục dự án và cd vào trong nó (dòng 1). Sau đó chúng ta khởi tạo một git repository trống (dòng 2) và tạo file đầu tiên cho dự án có tên là index.html (dòng 3). Tiếp theo chúng ta thêm file mới vào git và cuối cùng commit thay đổi này.

dev$ mkdir mywebsite && cd mywebsite
dev$ git init
dev$ cat 'hello world!' > index.html
dev$ git add index.html
dev$ git commit -m "commit dau tien cho du an."

Bây giờ, kho chứa trên máy cục bộ của chúng ta đã được setup thành công. Tiếp tục, chúng ta sẽ cần tạo thêm một kho chứa remote. Trong bài viết này tôi sẽ sử dụng dịch vụ của bitbucket, với các dịch vụ khác như github cũng hoàn toàn tương tự.

dev$ git remote add origin ssh://git@bitbucket.org/myweb.git
dev$ git push -u origin --all

2 câu lệnh bên trên cũng rất đơn giản: chúng ta thêm remote repository vào kho chứa git trên DEV server (dòng 1) và push hết các file nguồn lên đó (dòng 2).

Thiết lập Bare Repository trên Production server

Bây giờ bạn cần kết nối SSH đến production server và đảm bảo rằng mọi thứ đã được cài đặt đầy đủ để bạn có thể ssh tới đó mà không phải nhập password.

Trên production server, chúng ta sẽ tạo một bare reposiroty để làm bản sao của repository trên máy cục bộ.

live$ mkdir mywebsite.git && cd mywebsite.git
live$ git init --bare
Initialized empty Git repository in /home/testuser/mywebsite.git/

Ở dòng 1, chúng ta tạo một thư mục nơi sẽ làm kho chứa của chúng ta trên production server và cd vào trong nó. Tiếp theo, chúng ta tạo một bare repository ở dòng số 2.

Tiêp theo, chúng ta sẽ định nghĩa (và kích hoạt) một post-receive hook (tạm hiểu là một móc xử lý sự kiện trước mỗi lần kho chứa được tải lên). Hook này sẽ copy các commit mới nhất của chúng ta vào trong một thư mục mà chúng ta chỉ định cho nó. Thư mục này nên là thư mục root của dự án.

live$ mkdir /var/www/www.mywebsite.com
live$ cat > hooks/post-receive << EOL
#!/bin/sh
GIT_WORK_TREE=/var/www/www.mywebsite.com git checkout -f
EOL

Tất nhiên chúng ta cần thiết lập quyền hạn để cho file có thể được thực thi:

live$ chmod +x hooks/post-receive

Quay trở lại DEV server của chúng ta và định nghĩa một cái tên dễ nhớ cho kho chứa trên production server này và thêm nó vào remote repo trên kho chứa cục bộ, rồi tạo nhánh “master” cho kho nó.

dev$ git remote add prod ssh://www.mywebsite.com/home/testuser/mywebsite.git
dev$ git push prod +master:refs/heads/master

Deploy website lên Production server

Bất cứ khi nào bạn tạo ra những sự thay đổi trên DEV server, bạn đều có thể commit và push chúng lên các kho chứa remote như bitbucket hay github… Nếu bạn đã sẵn sàng để đưa những sự thay đổi lên production server, bạn đơn giản là chỉ việc push nó từ DEV như bình thường.

dev$ git push prod

Câu lệnh này sẽ chuyển tất cả các commit mới lên bare repository trên production server, nơi mà post-receive hook sẽ ngay lập tức cập nhật chúng lên thư mục root của dự án.

Chúc bạn thành công!

Công ty TNHH Giải pháp Website & Ứng dụng phần mềm Quang Minh

🚩 Địa chỉ
Số 81 Võ Huy Tâm, Phường Cẩm Trung, Thành phố Cẩm Phả, Tỉnh Quảng Ninh
📞 Điện thoại
(0862) 814-787
💌 Email
[email protected]
🌐 Zalo OA
https://zalo.me/369605269295116980
🌐 Facebook
https://www.facebook.com/qmasdotvn/
🌐 Twitter