Git là một hệ thống kiểm soát phiên bản mã nguồn mở và miễn phí có thể được sử dụng để theo dõi các thay đổi của mã. Git cho phép bạn tạo nhiều kho lưu trữ cho cùng một ứng dụng và phối hợp công việc trên các tệp đó giữa nhiều người. Nó chủ yếu được sử dụng để quản lý mã nguồn trong phát triển phần mềm.
Trong bài viết này, chúng ta sẽ tìm hiểu cách cài đặt Máy chủ HTTP Git với Nginx trên Ubuntu 16.04.
Yêu cầu
Bạn có thể thực hiện việc này bằng cách chạy lệnh sau:
Sau khi hệ thống của bạn được cập nhật, hãy khởi động lại hệ thống và đăng nhập bằng người dùng sudo.
Sau khi tất cả các gói bắt buộc được cài đặt, bạn sẽ cần tạo một thư mục cho kho lưu trữ Git. Bạn có thể thực hiện việc này bằng cách chạy lệnh sau:
Tiếp theo, cấp quyền thích hợp cho thư mục Git:
Sau khi hoàn tất, bạn có thể tiến hành cấu hình máy chủ web Nginx.
Thay đổi tệp như hiển thị bên dưới:
Lưu và đóng tệp khi bạn hoàn tất. Sau đó, hãy kiểm tra Nginx xem có lỗi cấu hình nào không bằng lệnh sau:
Nếu mọi thứ đều ổn, bạn sẽ thấy kết quả sau:
Tiếp theo, bạn sẽ cần tạo một tài khoản người dùng mà bạn sẽ cần sử dụng để duyệt hoặc cam kết với kho lưu trữ. Bạn có thể tạo người dùng có tên hitesh bằng cách sử dụng tiện ích htpasswd:
Cuối cùng, khởi động lại Nginx để áp dụng tất cả các thay đổi bằng lệnh sau:
Bạn có thể kiểm tra trạng thái của máy chủ Nginx bằng lệnh sau:
Bạn sẽ thấy đầu ra sau:
Bạn có thể tạo kho lưu trữ có tên repo.git bằng lệnh sau:
Tiếp theo, bạn sẽ cần cho phép dịch vụ http thông qua tường lửa UFW. Theo mặc định, UFW bị vô hiệu hóa trên hệ thống của bạn, vì vậy trước tiên bạn cần bật nó. Bạn có thể bật nó bằng lệnh sau:
Sau khi tường lửa UFW được bật, bạn có thể cho phép dịch vụ HTTP bằng cách chạy lệnh sau:
Bây giờ bạn có thể kiểm tra trạng thái của tường lửa UFW bằng cách chạy lệnh sau:
Được rồi, đó là tất cả về cấu hình phía máy chủ. Bây giờ bạn có thể chuyển sang phía máy khách để kiểm tra Git.
Trước tiên, tạo một kho lưu trữ cục bộ bằng lệnh sau:
Tiếp theo, thay đổi thư mục thành testproject và khởi tạo kho lưu trữ từ xa mới bằng lệnh sau:
Tiếp theo, tạo một số tệp và thư mục bằng lệnh sau:
Tiếp theo, chạy lệnh sau để thêm tất cả các tệp và thư mục vào kho lưu trữ:
Bạn sẽ thấy kết quả sau:
Tiếp theo, đẩy tất cả các tệp và thư mục lên máy chủ Git bằng lệnh sau:
Bạn sẽ thấy kết quả sau:
Bây giờ, tất cả các tệp và thư mục của bạn đã được cam kết với máy chủ Git của bạn.
Quá trình tạo kho lưu trữ Git của bạn hiện đã hoàn tất. Bây giờ, bạn có thể dễ dàng sao chép kho lưu trữ của mình trong tương lai. Bạn có thể sao chép kho lưu trữ của mình bằng lệnh sau trên hệ thống từ xa:
Bạn sẽ thấy đầu ra sau:
Bây giờ, hãy thay đổi thư mục thành kho lưu trữ đã sao chép bằng lệnh sau:
Bạn sẽ thấy đầu ra sau:
Trong bài viết này, chúng ta sẽ tìm hiểu cách cài đặt Máy chủ HTTP Git với Nginx trên Ubuntu 16.04.
Yêu cầu
- Máy chủ Ubuntu 16.04 mới được cài đặt trên hệ thống của bạn.
- Người dùng Sudo có quyền root.
- Địa chỉ IP tĩnh 192.168.15.189 cấu hình trên máy chủ của bạn
1 Bắt đầu
Trước khi bắt đầu, bạn sẽ cần cập nhật hệ thống của mình lên phiên bản ổn định mới nhất.Bạn có thể thực hiện việc này bằng cách chạy lệnh sau:
Mã:
sudo apt-get update -y
sudo apt-get upgrade -y
2 Cài đặt các gói bắt buộc
Trước tiên, bạn sẽ cần cài đặt một số gói bắt buộc bao gồm nginx, git, nano và fcgiwrap vào hệ thống của mình. Bạn có thể cài đặt tất cả chúng bằng cách chạy lệnh sau:
Mã:
sudo apt-get install nginx git nano fcgiwrap apache2-utils -y
Mã:
sudo mkdir /var/www/html/git
Mã:
sudo chown -R www-data:www-data /var/www/html/git
3 Cấu hình Nginx
Trước tiên, bạn sẽ cần cấu hình Nginx để chuyển lưu lượng Git sang Git. Bạn có thể thực hiện việc này bằng cách chỉnh sửa tệp cấu hình mặc định của Nginx:
Mã:
sudo nano /etc/nginx/sites-available/default
Mã:
# Cấu hình máy chủ mặc định#server { listen 80 default_server; listen [::]:80 default_server; root /var/www/html/git; # Thêm index.php vào danh sách nếu bạn đang sử dụng PHP index index.html index.htm index.nginx-debian.html; server_name _; location / { # Đầu tiên thử phục vụ yêu cầu dưới dạng tệp, sau đó # dưới dạng thư mục, sau đó chuyển sang hiển thị lỗi 404. try_files $uri $uri/ =404; }location ~ (/.*) { client_max_body_size 0; # Git push có thể rất lớn, chỉ để đảm bảo nginx không đột nhiên cắt kết nối, hãy thêm lệnh này. auth_basic "Git Login"; # Bất kỳ văn bản nào có thể thực hiện. auth_basic_user_file "/var/www/html/git/htpasswd"; include /etc/nginx/fastcgi_params; # Bao gồm các cấu hình fastcgi mặc định fastcgi_param SCRIPT_FILENAME /usr/lib/git-core/git-http-backend; # Yêu cầu fastcgi chuyển yêu cầu đến git http backend executable fastcgi_param GIT_HTTP_EXPORT_ALL ""; fastcgi_param GIT_PROJECT_ROOT /var/www/html/git; # /var/www/git là vị trí của tất cả các kho lưu trữ git của bạn. fastcgi_param REMOTE_USER $remote_user; fastcgi_param PATH_INFO $1; # Lấy nhóm capture từ chỉ thị location của chúng ta và cung cấp cho git. fastcgi_pass unix:/var/run/fcgiwrap.socket; # Chuyển yêu cầu đến fastcgi}}
Mã:
sudo nginx -t
Mã:
nginx: cú pháp tệp cấu hình /etc/nginx/nginx.conf là oknginx: tệp cấu hình /etc/nginx/nginx.conf đã kiểm tra thành công
Mã:
sudo htpasswd -c /var/www/html/git/htpasswd hitesh
Mã:
sudo systemctl restart nginx
Mã:
sudo systemctl status nginx
Mã:
?? nginx.service - Một máy chủ web hiệu suất cao và một máy chủ proxy ngược Đã tải: đã tải (/lib/systemd/system/nginx.service; đã bật; cài đặt trước của nhà cung cấp: đã bật) Đang hoạt động: đang hoạt động (đang chạy) từ Tue 2017-06-20 23:00:11 IST; 51 phút trước Tiến trình: 12415 ExecStop=/sbin/start-stop-daemon --quiet --stop --retry QUIT/5 --pidfile /run/nginx.pid (code=exited, status=0/SUCCESS) Tiến trình: 7616 ExecReload=/usr/sbin/nginx -g daemon on; master_process on; -s reload (code=exited, status=0/SUCCESS) Tiến trình: 12423 ExecStart=/usr/sbin/nginx -g daemon on; master_process on; (code=exited, status=0/SUCCESS) Tiến trình: 12419 ExecStartPre=/usr/sbin/nginx -t -q -g daemon on; master_process on; (code=exited, status=0/SUCCESS) PID chính: 12427 (nginx) CGroup: /system.slice/nginx.service ??????12427 nginx: tiến trình chính /usr/sbin/nginx -g daemon on; master_process on ??????12431 nginx: tiến trình công nhân20 tháng 6 23:00:11 localhost systemd[1]: Đã dừng Một máy chủ web hiệu suất cao và một máy chủ proxy ngược.20/06 23:00:11 localhost systemd[1]: Đang khởi động Một máy chủ web hiệu suất cao và một máy chủ proxy ngược...20/06 23:00:11 localhost systemd[1]: nginx.service: Không đọc được PID từ tệp /run/nginx.pid: Đối số không hợp lệ20/06 23:00:11 localhost systemd[1]: Đang khởi động Một máy chủ web hiệu suất cao và một máy chủ proxy ngược.
4 Tạo kho lưu trữ Git
Sau khi mọi thứ được cấu hình đúng, đã đến lúc tạo kho lưu trữ Git.Bạn có thể tạo kho lưu trữ có tên repo.git bằng lệnh sau:
Mã:
cd /var/www/html/git
sudo mkdir hitesh.git
sudo cd hitesh.git
sudo git --bare init
sudo git update-server-info
sudo chown -R www-data.www-data .
sudo chmod -R 777 .
Mã:
sudo ufw enable
Mã:
sudo ufw allow http
Mã:
sudo ufw status
5 Kiểm tra Git trên Máy khách
Trước khi bắt đầu, bạn sẽ cần cài đặt git trên hệ thống máy khách. Bạn có thể cài đặt bằng lệnh sau:
Mã:
sudo apt-get install git -y
Mã:
sudo mkdir ~/testproject
Mã:
cd ~/testproject
git init
git remote add origin http://[emailprotected]/hitesh.git
Mã:
mkdir test1 test2 test3
echo "Đây là kho lưu trữ đầu tiên của tôi" > test1/repo1
echo "Đây là kho lưu trữ thứ hai của tôi" > test2/repo2
echo "Đây là kho lưu trữ thứ ba của tôi" > test3/repo3
Mã:
git add .
git commit -a -m "Add files and directoires"
Mã:
[master 002fac9] Add files and directoires 3 files changed, 3 inserteds(+) create mode 100644 repo1 create mode 100644 repo2 create mode 100644 repo3
Mã:
git push origin master
Mã:
Password for 'http://[emailprotected]':Đang đếm đối tượng: 6, xong.Nén delta sử dụng tối đa 4 luồng.Nén đối tượng: 100% (2/2), xong.Đang ghi đối tượng: 100% (5/5), 422 byte | 0 byte/giây, hoàn tất.Tổng cộng 5 (delta 0), đã sử dụng lại 0 (delta 0)Đến http://[emailprotected]/hitesh.git 68f1270..002fac9 master -> master
Quá trình tạo kho lưu trữ Git của bạn hiện đã hoàn tất. Bây giờ, bạn có thể dễ dàng sao chép kho lưu trữ của mình trong tương lai. Bạn có thể sao chép kho lưu trữ của mình bằng lệnh sau trên hệ thống từ xa:
Mã:
git clone [emailprotected]:/var/www/html/git/hitesh.git
Mã:
Đang sao chép vào 'hitesh'...Mật khẩu của [emailprotected]:remote: Đang đếm đối tượng: 8, hoàn tất.remote: Đang nén đối tượng: 100% (3/3), hoàn tất.Đang nhận đối tượng: 100% (8/8), 598 byte | 0 byte/giây, xong.từ xa: Tổng cộng 8 (delta 0), sử dụng lại 0 (delta 0)Đang kiểm tra kết nối... xong.
Mã:
cd hitesh
tree
Mã:
.|-- test1| `-- repo1|-- test2| `-- repo2`-- test3 `-- repo33 thư mục, 3 tệp