Git là một hệ thống kiểm soát phiên bản mã nguồn mở theo dõi các thay đổi phần mềm của bạn ở cấp độ nguồn. Nó được hàng nghìn nhà phát triển trên toàn thế giới sử dụng để theo dõi và quản lý các thay đổi mã của họ, 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ở cho phép người dùng chia sẻ kho lưu trữ Git qua Mạng cục bộ (LAN) của bạn. Rất đơn giản, dễ thiết lập và giúp các nhà phát triển quản lý từ giao diện dòng lệnh.
Hướng dẫn này sẽ giải thích cách thiết lập máy chủ lưu trữ HTTP Git với Nginx trên Ubuntu 22.04.
Sau khi cài đặt tất cả các gói, bạn có thể tiến hành tạo kho lưu trữ Git.
Tiếp theo, điều hướng đến gitrepo và tạo một thư mục khác cho người dùng:
Tiếp theo, đ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 lệnh:
Bạn sẽ nhận được kết quả đầu ra sau:
Tiếp theo, cập nhật thông tin máy chủ Git bằng thông tin sau lệnh:
Tiếp theo, thay đổi quyền sở hữu của gitrepo và thiết lập quyền thích hợp bằng lệnh sau:
Tiếp theo, tạo một người dùng có tên là hitesh và thiết lập mật khẩu:
Bạn có thể đặt mật khẩu như hiển thị bên dưới:
Bạn có thể kiểm tra mật khẩu của mình bằng cách sau lệnh:
Đầu ra mẫu:
Thêm các cấu hình sau:
Lưu và đóng tệp khi bạn hoàn tất, sau đó xác minh Nginx xem có lỗi cú pháp nào không bằng cách sử dụng lệnh sau lệnh:
Bạn sẽ nhận được kết quả sau:
Cuối cùng, khởi động lại dịch vụ Nginx để áp dụng thay đổi:
Bạn cũng có thể kiểm tra trạng thái Nginx bằng lệnh sau:
Bạn sẽ nhận được kết quả đầu ra sau:
Sau khi cài đặt xong máy khách Certbot, hãy chạy lệnh sau để tải xuống và cài đặt Let's Encrypt SSL cho trang web của bạn:
Cung cấp địa chỉ email của bạn và chấp nhận các điều khoản dịch vụ như hiển thị bên dưới:
Chọn có chuyển hướng lưu lượng HTTP sang HTTPS hay không:
Nhập 2 và nhấn enter để bắt đầu quy trình. Sau khi cài đặt hoàn tất, bạn sẽ thấy kết quả sau:
Lúc này, máy chủ Git HTTP của bạn được bảo mật bằng Let's Encrypt SSL.
Đầu tiên, cài đặt gói Git trên máy khách bằng lệnh sau:
Tiếp theo, tạo một thư mục cho dự án của bạn bằng lệnh sau:
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:
Tiếp theo, cấu hình Git bằng email và tên người dùng của bạn:
Tiếp theo, thêm máy chủ HTTP Git của bạn bằng cách sử dụng lệnh sau lệnh:
Tiếp theo, tạo một thư mục có tên là data và thêm một tệp vào bên trong thư mục đó:
Tiếp theo, thêm thư mục và tệp bạn đã tạo vào Git kho lưu trữ:
Tiếp theo, hãy cam kết các thay đổi bằng lệnh sau:
Bạn sẽ nhận được thông tin sau đầu ra:
Tiếp theo, tải tệp và thư mục của bạn lên máy chủ HTTP Git bằng lệnh sau:
Bạn sẽ được yêu cầu cung cấp mật khẩu để truy cập Git máy chủ:
Sau khi kết nối, bạn sẽ nhận được kết quả sau:
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 cách sử dụng lệnh sau lệnh:
Bạn sẽ nhận được kết quả đầu ra sau:
HTTP Git Server là một dự án mã nguồn mở cho phép người dùng chia sẻ kho lưu trữ Git qua Mạng cục bộ (LAN) của bạn. Rất đơn giản, dễ thiết lập và giúp các nhà phát triển quản lý từ giao diện dòng lệnh.
Hướng dẫn này sẽ giải thích cách thiết lập máy chủ lưu trữ HTTP Git với Nginx trên Ubuntu 22.04.
Điều kiện tiên quyết
- Máy chủ chạy Ubuntu 22.04.
- Tên miền hợp lệ được trỏ đến 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 Web Server
Trong bài đăng này, chúng ta sẽ sử dụng máy chủ Nginx để phục vụ kho lưu trữ Git, vì vậy bạn sẽ cần cài đặt máy chủ web Nginx và các gói cần thiết khác vào máy chủ của mình. 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
Tạo kho lưu trữ Git
Đầu tiên, tạo một thư mục để lưu trữ kho lưu trữ Git bên trong Nginx web root:
Mã:
mkdir /var/www/html/gitrepo
Mã:
cd /var/www/html/gitrepo
mkdir hitesh.git
Mã:
cd hitesh.git
git --bare init
Mã:
Initialized empty Git repository in /var/www/html/gitrepo/hitesh.git/
Mã:
git update-server-info
Mã:
chown -R www-data:www-data /var/www/html/gitrepo
chmod -R 755 /var/www/html/gitrepo
Mã:
htpasswd -c /var/www/html/gitrepo/htpasswd hitesh
Mã:
New password:
Re-type new password:
Adding password for user hitesh
Mã:
cat /var/www/html/gitrepo/htpasswd
Mã:
hitesh:$vcr2$AdyCEkaA$Fsq5nDbLhBDdafCQGBUsr2
Cấu hình Nginx để phục vụ kho lưu trữ Git
Tiếp theo, tạo tệp cấu hình máy chủ ảo Nginx để phục vụ kho lưu trữ Git qua internet.
Mã:
nano /etc/nginx/conf.d/gitrepo.conf
Mã:
server { listen 80; root /var/www/html/gitrepo; # Add index.php to the list if you are using PHP index index.html index.htm index.nginx-debian.html; server_name git.example.com; location / { # First attempt to serve request as file, then # as directory, then fall back to displaying a 404. try_files $uri $uri/ =404; }
location ~ (/.*) { client_max_body_size 0; auth_basic "Git Login"; auth_basic_user_file "/var/www/html/gitrepo/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/gitrepo; fastcgi_param REMOTE_USER $remote_user; fastcgi_param PATH_INFO $1; fastcgi_pass unix:/var/run/fcgiwrap.socket;
}
}
Mã:
nginx -t
Mã:
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
Mã:
systemctl restart nginx
Mã:
systemctl status nginx
Mã:
? nginx.service - A high performance web server and a reverse proxy server Loaded: loaded (/lib/systemd/system/nginx.service; enabled; vendor preset: enabled) Active: active (running) since Sat 2022-11-05 08:00:04 UTC; 2s ago Docs: man:nginx(8) Process: 144985 ExecStartPre=/usr/sbin/nginx -t -q -g daemon on; master_process on; (code=exited, status=0/SUCCESS) Process: 144986 ExecStart=/usr/sbin/nginx -g daemon on; master_process on; (code=exited, status=0/SUCCESS) Main PID: 144987 (nginx) Tasks: 2 (limit: 2341) Memory: 2.5M CPU: 42ms CGroup: /system.slice/nginx.service ??144987 nginx: master process /usr/sbin/nginx -g daemon on; master_process on; ??144988 nginx: worker process
Nove 5 08:00:04 ubuntu2204 systemd[1]: Starting A high performance web server and a reverse proxy server...
Nove 5 08:00:04 ubuntu2204 systemd[1]: nginx.service: Failed to parse PID from file /run/nginx.pid: Invalid argument
Nove 5 08:00:04 ubuntu2204 systemd[1]: Started A high performance web server and a reverse proxy server.
Bảo mật máy chủ Git HTTP với Let's Encrypt
Trước khi bắt đầu, bạn sẽ cần cài đặt ứng dụng khách Certbot trong hệ thống của mình để cài đặt và quản lý Let's Encrypt SSL. Bạn có thể cài đặt bằng lệnh sau:
Mã:
apt-get install certbot python3-certbot-nginx -y
Mã:
certbot --nginx -d git.example.com
Mã:
Saving debug log to /var/log/letsencrypt/letsencrypt.log
Plugins selected: Authenticator nginx, Installer nginx
Enter email address (used for urgent renewal and security notices) (Enter 'c' to
cancel): [emailprotected]
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Please read the Terms of Service at
https://letsencrypt.org/documents/LE-SA-v1.2-November-15-2017.pdf. You must
agree in order to register with the ACME server at
https://acme-v02.api.letsencrypt.org/directory
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
(A)gree/(C)ancel: A
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Would you be willing to share your email address with the Electronic Frontier
Foundation, a founding partner of the Let's Encrypt project and the non-profit
organization that develops Certbot? We'd like to send you email about our work
encrypting the web, EFF news, campaigns, and ways to support digital freedom.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
(Y)es/(N)o: Y
Obtaining a new certificate
Performing the following challenges:
http-01 challenge for git.example.com
Waiting for verification...
Cleaning up challenges
Deploying Certificate to VirtualHost /etc/nginx/sites-enabled/git.conf
Mã:
Please choose whether or not to redirect HTTP traffic to HTTPS, removing HTTP access.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
1: No redirect - Make no further changes to the webserver configuration.
2: Redirect - Make all requests redirect to secure HTTPS access. Choose this for
new sites, or if you're confident your site works on HTTPS. You can undo this
change by editing your web server's configuration.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Select the appropriate number [1-2] then [enter] (press 'c' to cancel): 2
Mã:
Redirecting all traffic on port 80 to ssl in /etc/nginx/sites-enabled/git.conf
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Congratulations! You have successfully enabled https://git.example.com
You should test your configuration at:
https://www.ssllabs.com/ssltest/analyze.html?d=git.example.com
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
IMPORTANT NOTES: - Congratulations! Your certificate and chain have been saved at: /etc/letsencrypt/live/git.example.com/fullchain.pem Your key file has been saved at: /etc/letsencrypt/live/git.example.com/privkey.pem Your cert will expire on 2023-02-06. To obtain a new or tweaked version of this certificate in the future, simply run certbot again with the "certonly" option. To non-interactively renew *all* of your certificates, run "certbot renew" - If you like Certbot, please consider supporting our work by: Donating to ISRG / Let's Encrypt: https://letsencrypt.org/donate Donating to EFF: https://eff.org/donate-le
Kết nối tới Git Repository từ Client
Tại thời điểm này, máy chủ Git HTTP được thiết lập với Nginx và Let's Encrypt SSL. 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
Mã:
mkdir project
Mã:
cd project
git init
Mã:
git config --global user.email "[emailprotected]"
git config --global user.name "hitesh"
Mã:
git remote add origin https://[emailprotected]/hitesh.git
Mã:
mkdir data
echo "This is my first application" > data/app
Mã:
git add .
Mã:
git commit -a -m "Add files and directories"
Mã:
[master (root-commit) 0299d83] Add files and directories 1 file changed, 1 insertion(+) create mode 100644 data/app
Mã:
git push origin master
Mã:
Password for 'https://[emailprotected]':
Mã:
Counting objects: 4, done.
Writing objects: 100% (4/4), 281 bytes | 281.00 KiB/s, done.
Total 4 (delta 0), reused 0 (delta 0)
To https://git.example.com/hitesh.git * [new branch] master -> master
Mã:
git clone https://[emailprotected]/hitesh.git
Mã:
Cloning into 'hitesh'...
Password for 'https://[emailprotected]':
remote: Enumerating objects: 4, done.
remote: Counting objects: 100% (4/4), done.
remote: Total 4 (delta 0), reused 0 (delta 0), pack-reused 0
Unpacking objects: 100% (4/4), done.