Turn Local/VPS into Git version controll.
Git
54
White

Lê Minh Tuấn viết ngày 21/07/2015

Vấn đề:

  • Ta có 1 VPS (Virtual Private Server), bình thường nếu muốn deploy một project lên VPS có rất nhiều cách:
    • Push lên Version controll (Git, Bitbucket, SVN...) sau đó lên VPS clone về.
    • Mỗi framework đều cung cấp một tool để deploy rất đơn giản và tiện dụng ta có thể sử dụng các tools này.
    • Dùng sshc (SSH copy) copy cả folder source thông qua SSH
  • Nhưng có một cách nào để Push trực tiếp code từ client lên VPS và có thể quản lý được từng version cũng như branch của nó.

=> Cách này làm VPS của bạn trở thành một server quản lý code giống như GitHub

Trả lời:

  • Tạo Git repository trên VPS.
  • Nghĩa là tất cả các thao tác với Github ta sẽ có thể thực hiện trên chính VPS của chúng ta
  • Thay vì store source ở Github ta sẽ store source ở chính VPS.
  • Các thao tác bên dưới làm tương tự nếu trên Localhost.

A : Setup on Git server site.

step 1: Create a Git repository:

  • Ta sẽ khởi tạo một Git repository trên máy local(hoặc vps) ~/Repositories/abc.
  • Thư mục ~/Repositories/abc là thư mục đóng vai trò làm Git Version Controll.
  • Thư mục ~/Repositories/abc quản lý source chứ không phải là nơi lưu trữ source.
  • Mỗi project sẽ có một repository tương ứng để quản lý source của project đó, vậy nên ta sẽ tạo nhiều reporitory khi làm việc với nhiều project.
  • ~/Repositories/abc ( quản lý source của project abc).
  • ~/Repositories/xyz (quản lý source của project xyz).
  • Demo với project có tên là "abc"
$ cd ~/
$ mkdir Repositories
$ cd Repositories
$ mkdir abc
$ cd abc
$ git init --bare

step 2: Hooks

  • Mỗi Git repository (trong mỗi thư mục abc hay xyz) sau khi chạy git init --bare sẽ có một thư mục là hooks
  • thư mục hooks chứa những file để handle những action khi bạn request lên server.
  • Bạn có thể customize những file trong thư mục hooks để thực hiện một action theo ý bạn.
  • File pre-receive sẽ được gọi khi bạn thực hiện các thao tác push, update.
  • File post-receive sẽ được gọi khi ban thực hiện xong thao tác push.
  • Các file trong hooks đều là shell script và được execute bởi bash.

step 3: Defind where are you want to store your source.

  • Ta sẽ sử dụng file post-receive để định nghĩa ta sẽ lưu trữ source ở đâu sau khi push từ client.
  • Tạo file post-receive
  • File post-receive đơn giản là một shell script sẽ được execute bởi bash shell.
  • Chúng ta hoàn toàn có thể code file post-receive bằng code Ruby khi đó đặt Shebang của file bằng Ruby #!/usr/bin/env ruby, nhưng chỉ để tham khảo, ta vẫn sẽ dùng bash script nhé.
#!/usr/bin/env ruby
# post-receive

# 1. Read STDIN (Format: "from_commit to_commit branch_name")
from, to, branch = ARGF.read.split " "

# 2. Only deploy if master branch was pushed
if (branch =~ /master$/) == nil
    puts "Received branch #{branch}, not deploying."
    exit
end

# 3. Copy files to deploy directory
deploy_to_dir = File.expand_path('../deploy')
`GIT_WORK_TREE="#{deploy_to_dir}" git checkout -f master`
puts "DEPLOY: master(#{to}) copied to '#{deploy_to_dir}'"

# 4.TODO: Deployment Tasks
# i.e.: Run Puppet Apply, Restart Daemons, etc
  • Tạo nội dung file post-receive
$ vim post-receive 
#!/bin/sh
git --work-tree=/~/project_store_place --git-dir=/~/Repositories/git_repository checkout -f
  • work-tree: vị trí lưu trữ source
  • git-dir : vị trí của Git repository.
  • /~/project_store_place : Sửa theo nơi mà bạn muốn lưu trữ source -/~/Repositories/git_repository : Vị trí mà bạn đã tạo Git repository ở step 1
  • Change mode của file post-receive
$ sudo chmod +x post-receive

B: Setup on Git client site.

Giả sử bạn tạo một project mới và sẽ push lên server (nếu đã có một project rồi thì cũng tương tự)

Step 1: Create new project.

$ cd ~/
$ mkdir my_abc_project
$ cd my_abc_project
$ git init
$ vim first_commit_file

Step 2: Configure the remote path of our repository

Định nghĩa remote path

  • git remote add live ssh://user@mydomain/~/Repositories/abc
    • live là tên của remote.
    • user : user mà bạn đã sử dụng để tạo Git repository ở bước 1 (bình thường ta dùng chính user của hệ thống git để thao tác nhưng bạn cũng có thể dùng một user khác, user git được tạo khi bạn cài git apt-get install git).
    • domain : nếu ở local bạn ghi là localhost nếu ở vps bạn ghi là domain của vps đó ví dụ 133.242.153.83
    • ~/Repositories/abc chính là Git repository bạn đã khởi tạo trên server từ bước 1 của phần Git server
  • Nếu muốn sửa một remote đã có
    • git remote set-url live ssh://leminhtuan@localhost/~/Repositories/abc

Step 3: Push

  • Ta sẽ push code lên server nhé.
$ git add -A
$ git commit -m "My project is ready"
$ git push live master
  • Bây giờ vào thư mục mà bạn đã định nghĩa để lưu trữ source trong file post-receive, bạn sẽ thấy code của project sẽ được lưu tại đó.

Thanks.

Thank you so much for reading. Please give me some feedbacks or leave a comment so that i could be better myself.

Bình luận


White
{{ comment.user.name }}
Bỏ hay Hay
{{comment.like_count}}
Male avatar
{{ comment_error }}
Hủy
   

Hiển thị thử

Chỉnh sửa

White

Lê Minh Tuấn

11 bài viết.
23 người follow
Kipalog
{{userFollowed ? 'Following' : 'Follow'}}
Cùng một tác giả
White
17 8
(Ảnh) 1. Elasticsearch là gì ??? 2. ElasticSearch dùng cho những ứng dụng nào ??? 3. Vấn đề : Hiện nay tất cả các hệ thống thông tin (hay c...
Lê Minh Tuấn viết gần 3 năm trước
17 8
White
15 2
1. Maven là gì? 2. Maven hoạt động như nào? 3. Tại Sao cần Maven? 4. Cài đặt Maven 5. Khởi tạo một Project Java bằng Maven 6. Cấu trúc POM.xml...
Lê Minh Tuấn viết gần 3 năm trước
15 2
White
12 0
(Ảnh) 1. Software design pattern là gì ? 2. Có bắt buộc phải sử dụng design pattern khi lập trình ? 3. Có bao nhiêu design pattern ? 5. Bà...
Lê Minh Tuấn viết gần 3 năm trước
12 0
Bài viết liên quan
White
49 8
Tôi xin tổng hợp các cách dùng git stash tôi hay sử dụng Lưu lại thay đổi Git stash được sử dụng khi muốn lưu lại các thay đổi chưa commit, thườ...
BB viết 3 năm trước
49 8
White
13 2
Xin chào các bạn. Chắc hẳn mỗi chúng ta đều đã từng phát triển app sử dụng API của bên thứ 3, và chắc mọi người đều biết là hầu hết các API service...
Hải Nguyễn viết hơn 1 năm trước
13 2
White
5 7
Thông thường một feature mới thường được làm trên một nhánh (branch) riêng và thường xuyên pull các cập nhật từ nhánh master trong quá trình đấy. S...
Lơi Rệ viết gần 3 năm trước
5 7
{{like_count}}

kipalog

{{ comment_count }}

bình luận

{{liked ? "Đã kipalog" : "Kipalog"}}


White
{{userFollowed ? 'Following' : 'Follow'}}
11 bài viết.
23 người follow

 Đầu mục bài viết

Vẫn còn nữa! x

Kipalog vẫn còn rất nhiều bài viết hay và chủ đề thú vị chờ bạn khám phá!