Cách cài đặt HTTP Git Server với Nginx trên Debian 11

theanh

Administrator
Nhân viên
Git là một hệ thống kiểm soát phiên bản mã nguồn mở được hàng nghìn nhà phát triển trên toàn thế giới sử dụng. Nó được sử dụng để theo dõi các thay đổi phần mềm của bạn ở cấp độ nguồn. Nó cho phép bạn theo dõi các thay đổi, khôi phục lại các giai đoạn trước đó và tạo phiên bản thay thế của các tệp và thư mục.

HTTP Git Server là một dự án mã nguồn mở sử dụng máy chủ web Nginx để phục vụ kho lưu trữ Git qua Mạng cục bộ (LAN) của bạn. Nó rất đơn giản và dễ thiết lập. Bất kỳ ai cũng có thể quản lý nó từ giao diện dòng lệnh.

Trong hướng dẫn này, tôi sẽ giải thích cách thiết lập máy chủ lưu trữ HTTP Git với Nginx trên Debian 11.

Điều kiện tiên quyết​

  • Máy chủ chạy Debian 11.
  • Tên miền hợp lệ được trỏ bằng IP máy chủ của bạn.
  • Mật khẩu gốc được cấu hình trên máy chủ của bạn.

Cài đặt Nginx và các phụ thuộc khác​

Đầu tiên, bạn sẽ cần cài đặt máy chủ web Nginx và các gói bắt buộc khác để thiết lập máy chủ HTTP Git. Bạn có thể cài đặt tất cả chúng bằng lệnh sau:
Mã:
apt-get install nginx git fcgiwrap apache2-utils unzip -y
Sau khi tất cả các gói được cài đặt, bạn có thể tiến hành bước tiếp theo.

Tạo kho lưu trữ Git​

Tiếp theo, bạn sẽ cần tạo một thư mục để lưu trữ kho lưu trữ Git. Hãy tạo một thư mục có tên myrepo bên trong thư mục gốc web Nginx:
Mã:
mkdir /var/www/html/myrepo
Tiếp theo, hãy đổi thư mục thành myrepo và tạo một thư mục khác cho người dùng:
Mã:
cd /var/www/html/myrepo
mkdir user1.git
Tiếp theo, hãy điều hướng đến thư mục người dùng và khởi tạo kho lưu trữ Git bằng lệnh sau:
Mã:
cd user1.git
git --bare init
Bạn sẽ nhận được kết quả sau:
Mã:
Đã khởi tạo kho lưu trữ Git trống trong /var/www/html/myrepo/user1.git/
Tiếp theo, hãy cập nhật thông tin máy chủ Git bằng lệnh sau:
Mã:
git update-server-info
Tiếp theo, hãy thay đổi quyền sở hữu myrepo và đặt quyền thích hợp bằng lệnh sau:
Mã:
chown -R www-data:www-data /var/www/html/myrepo
chmod -R 755 /var/www/html/myrepo
Tiếp theo, tạo một người dùng có tên là user1 và đặt mật khẩu:
Mã:
htpasswd -c /var/www/html/myrepo/htpasswd user1
Bạn có thể đặt mật khẩu như hiển thị bên dưới:
Mã:
Mật khẩu mới:Nhập lại mật khẩu mới:Đang thêm mật khẩu cho người dùng user1
Bạn có thể kiểm tra mật khẩu của mình bằng lệnh sau:
Mã:
cat /var/www/html/myrepo/htpasswd
Đầu ra mẫu:
Mã:
user1:$apr1$LoyCEkzA$Fjq5nBbLhBRdaxCQBBUQd1

Cấu hình Nginx để phục vụ kho lưu trữ Git​

Tiếp theo, bạn sẽ cần tạo tệp cấu hình máy chủ ảo Nginx để phục vụ kho lưu trữ Git.
Mã:
nano /etc/nginx/conf.d/git.conf
Thêm các dòng sau:
Mã:
server { listen 80; root /var/www/html/myrepo; # 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 git.yourdomain.com; 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 đó quay lại hiển thị lỗi 404. try_files $uri $uri/ =404; }location ~ (/.*) { client_max_body_size 0; auth_basic "Git Login"; auth_basic_user_file "/var/www/html/myrepo/htpasswd"; include /etc/nginx/fastcgi_params; fastcgi_param SCRIPT_FILENAME /usr/lib/git-core/git-http-backend; fastcgi_param GIT_HTTP_EXPORT_ALL ""; fastcgi_param GIT_PROJECT_ROOT /var/www/html/myrepo; fastcgi_param REMOTE_USER $remote_user; fastcgi_param PATH_INFO $1; fastcgi_pass unix:/var/run/fcgiwrap.socket;}}
Lưu và đóng tệp khi bạn hoàn tất, sau đó kiểm tra Nginx xem có lỗi cú pháp nào không:
Mã:
nginx -t
Bạn sẽ nhận được kết quả sau:
Mã:
nginx: cú pháp tệp cấu hình /etc/nginx/nginx.conf là oknginx: kiểm tra tệp cấu hình /etc/nginx/nginx.conf thành công
Cuối cùng, khởi động lại dịch vụ Nginx để áp dụng các thay đổi:
Mã:
systemctl restart nginx
Bạn cũng có thể kiểm tra trạng thái Nginx bằng lệnh sau:
Mã:
systemctl status nginx
Bạn sẽ nhận được kết quả sau:
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) kể từ Sat 2021-12-11 08:00:04 UTC; 2 giây trước Tài liệu: man:nginx(8) Quy trình: 144985 ExecStartPre=/usr/sbin/nginx -t -q -g daemon on; master_process on; (code=exited, status=0/SUCCESS) Quy trình: 144986 ExecStart=/usr/sbin/nginx -g daemon on; master_process on; (code=exited, status=0/SUCCESS) PID chính: 144987 (nginx) Nhiệm vụ: 2 (giới hạn: 2341) Bộ nhớ: 2,5M CPU: 42ms CGroup: /system.slice/nginx.service ??144987 nginx: tiến trình chính /usr/sbin/nginx -g daemon on; master_process on; ??144988 nginx: tiến trình công nhân11/12 08:00:04 debian11 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...11/12 08:00:04 debian11 systemd[1]: nginx.service: Không phân tích được PID từ tệp /run/nginx.pid: Đối số không hợp lệ11/12 08:00:04 debian11 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.

Kết nối đến Kho lưu trữ Git từ Máy khách​

Tại thời điểm này, máy chủ HTTP Git được thiết lập với Nginx. Bây giờ, đã đến lúc kết nối nó từ máy khách và kiểm tra nó.

Đầu tiên, cài đặt gói Git trên máy khách bằng lệnh sau:
Mã:
apt-get install git -y
Tiếp theo, tạo một thư mục cho dự án của bạn bằng lệnh sau:
Mã:
mkdir project
Tiếp theo, điều hướng đến thư mục dự án của bạn và khởi tạo Git bằng lệnh bên dưới:
Mã:
cd project
git init
Tiếp theo, cấu hình Git bằng email và tên người dùng của bạn:
Mã:
git config --global user.email "[emailprotected]"
git config --global user.name "user1"
Tiếp theo, thêm máy chủ HTTP Git của bạn bằng lệnh sau:
Mã:
git remote add origin http://[emailprotected]/user1.git
Tiếp theo, tạo một thư mục có tên là dev01 và thêm tệp bên trong nó:
Mã:
mkdir dev01
echo "Đây là ứng dụng đầu tiên của tôi" > dev01/file1
Tiếp theo, thêm thư mục và tệp đã tạo vào kho lưu trữ Git:
Mã:
git add .
Tiếp theo, cam kết các thay đổi bằng lệnh sau:
Mã:
git commit -a -m "Add files and directories"
Bạn sẽ nhận được kết quả sau:
Mã:
[master (root-commit) 0299d83] Add files and directories 1 file changed, 1 inserted(+) create mode 100644 dev01/file1
Tiếp theo, tải tệp và thư mục của bạn lên máy chủ Git HTTP bằng lệnh sau:
Mã:
git push origin master
Bạn sẽ được yêu cầu cung cấp mật khẩu để truy cập máy chủ Git:
Mã:
Mật khẩu cho 'http://[emailprotected]':
Sau khi kết nối, bạn sẽ nhận được kết quả sau:
Mã:
Đang đếm đối tượng: 4, xong.Đang ghi đối tượng: 100% (4/4), 281 byte | 281,00 KiB/giây, xong.Tổng cộng 4 (delta 0), đã sử dụng lại 0 (delta 0)Đến http://git.yourdomain.com/user1.git * [new branch] master -> master
Bạn cũng có thể tải kho lưu trữ của mình trực tiếp từ máy chủ Git bằng lệnh sau:
Mã:
git clone http://[emailprotected]/user1.git
Bạn sẽ nhận được kết quả sau:
Mã:
Đang sao chép vào 'user1'...Mật khẩu cho 'http://[emailprotected]':remote: Đang liệt kê đối tượng: 4, xong.remote: Đang đếm đối tượng: 100% (4/4), xong.remote: Tổng cộng 4 (delta 0), đã sử dụng lại 0 (delta 0), đã đóng gói-sử dụng lại 0Đang giải nén các đối tượng: 100% (4/4), đã hoàn tất.

Kết luận​

Trong hướng dẫn trên, bạn đã học cách thiết lập máy chủ HTTP Git với Nginx trên Debian 11. Bây giờ bạn có thể triển khai thiết lập này vào môi trường phát triển cục bộ của mình và quản lý cũng như theo dõi dự án của mình bằng dòng lệnh.
 
Back
Bên trên