Mục lục

Không có mục lục
Tham gia kênh Telegram của CloudFly để nhận thêm ưu đãi và không bỏ lỡ bất kỳ khuyến mãi nào từ CloudFly

Cách cài đặt Gitea trên Ubuntu bằng Docker

Ngày đăng: 9 tháng 11 năm 2022

Ubuntu

Giới thiệu

Khi làm việc về phát triển phần mềm, điều quan trọng là có thể quản lý mã nguồn một cách hiệu quả và có thể theo dõi được. Hệ thống quản lý mã nguồn (SCM) là lựa chọn tuyệt vời có thể cung cấp một quy trình hiệu quả và linh hoạt để làm việc trên các dự án ở bất kỳ quy mô nào với bất kỳ số lượng nhà phát triển nào. Những phần mềm SCM khác nhau đã tồn tại qua nhiều năm, từ CVS đến SubVersion, Perforce đến Mercurial, nhưng đơn vị dẫn đầu ngành hiện tại là Git, công ty đã cho thấy sự phát triển lớn mạnh với sự phổ biến của các trang web như GitHub và GitLab.

Tuy nhiên, các tài khoản miễn phí trên các dịch vụ này hướng tới kho lưu trữ mã nguồn mở công khai, khả năng làm việc trên phần mềm riêng tư hoặc độc quyền sẽ khiến nhà phát triển phải trả một khoản chi phí. Ngoài ra, quyền truy cập của một người vào kho lưu trữ thuộc về một tổ chức bên ngoài và nhiều người muốn kiểm soát phần mềm của riêng họ từ đầu đến cuối.

Vì vậy, một số giải pháp tự lưu trữ như Gogs, Gitea và GitLab đã được phát triển trong vài năm qua. Bài viết này tập trung vào việc thiết lập một trong những giải pháp phổ biến hơn - Gitea, cho phép bạn lưu trữ các kho lưu trữ riêng và quản lý các dự án của riêng bạn trong toàn bộ vòng đời. Gitea nhỏ, khép kín và nhẹ, làm cho quá trình triển khai nhanh chóng mà không vi phạm các yêu cầu phần cứng. Bạn sẽ sử dụng bản cài đặt Docker của Gitea, điều này đảm bảo rằng phần mềm sẽ được cập nhật.

Điều kiện

Trước khi bắt đầu với hướng dẫn này, bạn nên có những điều sau:

  • Máy chủ Ubuntu 20.04 với non-root user được thiết lập cấu hình với đặc quyền sudo như được mô tả trong Thiết lập máy chủ ban đầu cho Ubuntu 20.04.
  • Docker được cài đặt trên máy chủ của bạn. Làm theo Bước 1 và 2 của Cách cài đặt Docker trên Ubuntu 20.04 để cài đặt Docker.
  • Docker Compose được cài đặt trên máy chủ của bạn. Thực hiện theo Bước 1 trong hướng dẫn của chúng tôi về Cách cài đặt và sử dụng Docker Compose trên Ubuntu 20.04.
  • Một tên miền đã trỏ đến máy chủ của bạn. Nếu bạn đang sử dụng CloudFly Droplet, bạn có thể làm theo tài liệu Tên miền và DNS của chúng tôi. Hướng dẫn này sẽ sử dụng your_domain trong các ví dụ xuyên suốt.

Bước 1: Tạo Git user

Gitea, giống như nhiều kho mã nguồn, sử dụng SSH để truy cập các kho lưu trữ từ xa. Điều này cho phép người dùng kiểm soát quyền truy cập vào mã của họ bằng cách quản lý các SSH key trong chính Gitea. Tuy nhiên, để người dùng có thể truy cập máy chủ thông qua SSH, bạn sẽ cần tạo git user trên máy chủ. Bước này được hoàn thành đầu tiên để bạn có thể truy cập vào group ID và user của người dùng.

Trước tiên, hãy tạo user trên máy chủ lưu trữ, user đó sẽ chấp nhận các kết nối này:

  1. sudo adduser --system --shell /bin/bash --gecos 'Git Version Control' --group --disabled-password --home /home/git git

Trong lệnh này, bạn tạo một hệ thống user sử dụng bash làm vỏ bọc của nó, nhưng không có mật khẩu đăng nhập. Điều này cho phép bạn sử dụng sudo để chạy các lệnh với tư cách là user nhưng ngăn không cho đăng nhập với tư cách là user đó. Bạn đặt thư mục chính của user thành /home/git.

Lệnh này sẽ xuất ra một số thông tin về user mà nó vừa tạo:

Output
Adding system user `git' (UID 112) ... Adding new group `git' (GID 119) ... Adding new user `git' (UID 112) with group `git' ... Creating home directory `/home/git' …

Ghi lại các giá trị UID và GID được cung cấp tại đây (trong trường hợp này UID là 112 và GID là 119), vì chúng sẽ được sử dụng trong một bước ở phần sau.

Bước 2: Cài đặt Gitea Docker Image

Gitea có một hình ảnh có sẵn trong kho lưu trữ Docker toàn cầu, có nghĩa là, bằng cách sử dụng Docker Compose, bạn có thể cài đặt và chạy hình ảnh đó như một dịch vụ mà không cần làm thêm bất cứ cái gì. Bản thân hình ảnh đó chạy các dịch vụ web và SSH của Gitea, cho phép Git truy cập cả từ trình duyệt và dòng lệnh.

Để tạo vùng chứa Gitea, bạn sẽ sử dụng Docker Compose, một công cụ khai báo để thiết lập môi trường.

Để bắt đầu, hãy tạo một thư mục để lưu trữ dịch vụ của bạn và nhập nó vào:

  1. mkdir ~/gitea
  2. cd ~/gitea

Khi đó, hãy tạo một tệp có tên là docker-compos.yml bằng cách sử dụng trình soạn thảo văn bản ưa thích của bạn. Ví dụ dưới đây sử dụng nano. Tệp này sẽ chứa mô tả của các vùng chứa sẽ chạy như một phần của quá trình cài đặt Gitea của bạn:

  1. nano docker-compose.yml

Thêm phần sau vào tệp mới:

~/gitea/docker-compose.yml
version: "3"

networks:
  gitea:
    external: false

services:
  server:
    image: gitea/gitea:1.16.5
    container_name: gitea
    environment:
      - USER_UID=UID_from_step_1
      - USER_GID=GID_from_step_1
    restart: always
    networks:
      - gitea
    volumes:
      - ./gitea:/data
      - /home/git/.ssh/:/data/git/.ssh
      - /etc/timezone:/etc/timezone:ro
      - /etc/localtime:/etc/localtime:ro
    ports:
      - "127.0.0.1:3000:3000"
      - "127.0.0.1:2222:22"

Hãy xem qua những gì tệp này thực hiện:

  • version: "3": cho thấy Docker Compose là phiên bản nào của tệp cấu hình.
  • networks: phần này khai báo thiết lập mạng của bộ sưu tập các vùng chứa của chúng tôi. Trong trường hợp này, một mạng gitea được tạo, nhưng không bị lộ ra bên ngoài.
  • services
  1. image: gitea/gitea:1.16.5: điều này xác định rằng chúng tôi sẽ sử dụng Gitea phiên bản 1.16.5; tuy nhiên, bạn có thể thay đổi giá trị sau dấu hai chấm để chỉ định các phiên bản khác, cho dù là một bản phát hành cụ thể, một phiên bản chính như :1, hoặc một thẻ như :latest hoặc :dev.
  2. environment: phần môi trường chỉ định các biến môi trường sẽ có sẵn cho hình ảnh trong quá trình cài đặt và hoạt động. Trong trường hợp này, chúng tôi đang chỉ định user và group ID cho môi trường, sử dụng UID và GID được cung cấp trong đầu ra của lệnh adduser ở Bước 1.
  3. restart: always: dòng này hướng dẫn Docker phải luôn khởi động lại vùng chứa nếu nó gặp sự cố, cho dù là do bản thân vùng chứa gặp sự cố hay do máy chủ; về cơ bản, Gitea sẽ bắt đầu khi khởi động.
  4. networks: điều này chỉ định rằng dịch vụ Gitea sẽ có quyền truy cập và có thể truy cập được trên mạng có tên ở trên.
  5. ./gitea:/data/home/git/.ssh/:/data/git/.ssh: đây là những vị trí mà Gitea sẽ lưu trữ kho của nó và dữ liệu liên quan. Hiện tại, chúng được dẫn tới thư mục có tên gitea trong thư mục hiện tại. Docker sẽ tạo thư mục này khi vùng chứa bắt đầu nếu nó không tồn tại. Thư mục .ssh sẽ được mô tả thêm ở phần sau của Bước 6.
  6. /etc/timezone/etc/localtime: hai tệp này chứa thông tin về múi giờ và thời gian trên máy chủ. Bằng cách sắp xếp các tệp này vào trong vùng chứa dưới dạng tệp chỉ đọc (read-only) (được chỉ định với phần cuối cùng :ro của định nghĩa), vùng chứa sẽ có cùng thông tin với máy chủ.
  7. ports: Gitea lắng nghe các kết nối trên hai cổng. Nó lắng nghe các kết nối HTTP trên cổng 3000, nơi nó phục vụ giao diện web cho kho mã nguồn và lắng nghe các kết nối SSH trên cổng 22. Trong trường hợp này, bạn đang giữ cổng 3000 cho các kết nối HTTP bằng cách sắp xếp nó đến cùng số tương tự, và bạn đang sắp xếp cổng đó trên vùng chứa của Gitea từ 22 thông thường đến 2222 để tránh đụng độ cổng. Ở Bước 6, bạn sẽ thiết lập một miếng đệm SSH để hướng lưu lượng truy cập đến Gitea khi được yêu cầu.

Lưu ý: Đây là một ví dụ tối thiểu về tệp Docker Compose cho Gitea. Có một số tùy chọn khác mà nó có thể bao gồm, chẳng hạn như sử dụng MySQL hoặc PostGreSQL làm cơ sở dữ liệu hỗ trợ hoặc một ổ đĩa được đặt tên để lưu trữ. Thiết lập tối thiểu này sử dụng SQLite làm cơ sở dữ liệu hỗ trợ và một ổ đĩa sử dụng thư mục có tên gitea để lưu trữ. Bạn có thể đọc thêm về các tùy chọn này trong Tài liệu của Gitea.

Lưu và đóng tập tin. Nếu bạn đã sử dụng nano để chỉnh sửa tệp, bạn có thể làm như vậy bằng cách nhấn CTRL + X, Y, sau đó ENTER.

Với tệp này bạn có thể đưa các vùng chứa lên bằng cách sử dụng Docker Compose:

  1. docker-compose up

Lệnh này sẽ kéo các hình ảnh xuống, khởi động vùng chứa Gitea và sẽ trả về kết quả như sau:

Output
[+] Running 9/9 ⠿ server Pulled 8.2s ⠿ e1096b72685a Pull complete 1.4s ⠿ ac9df86bb932 Pull complete 3.3s ⠿ 6d34ed99b58a Pull complete 3.4s ⠿ a8913d040fab Pull complete 3.6s ⠿ a5d3a72a2366 Pull complete 5.3s ⠿ 1f0dcaae29cc Pull complete 5.6s ⠿ f284bcea5adb Pull complete 7.3s ⠿ 0f09c34c97e3 Pull complete 7.5s [+] Running 2/2 ⠿ Network gitea_gitea Created 0.2s ⠿ Container gitea Created 0.2s Attaching to gitea gitea | Generating /data/ssh/ssh_host_ed25519_key... gitea | Generating /data/ssh/ssh_host_rsa_key... gitea | Generating /data/ssh/ssh_host_dsa_key... gitea | Generating /data/ssh/ssh_host_ecdsa_key... gitea | Server listening on :: port 22. gitea | Server listening on 0.0.0.0 port 22. gitea | 2022/03/31 17:26:21 cmd/web.go:102:runWeb() [I] Starting Gitea on PID: 14 gitea | 2022/03/31 17:26:21 ...s/install/setting.go:21:PreloadSettings() [I] AppPath: /usr/local/bin/gitea gitea | 2022/03/31 17:26:21 ...s/install/setting.go:22:PreloadSettings() [I] AppWorkPath: /app/gitea gitea | 2022/03/31 17:26:21 ...s/install/setting.go:23:PreloadSettings() [I] Custom path: /data/gitea gitea | 2022/03/31 17:26:21 ...s/install/setting.go:24:PreloadSettings() [I] Log path: /data/gitea/log gitea | 2022/03/31 17:26:21 ...s/install/setting.go:25:PreloadSettings() [I] Configuration file: /data/gitea/conf/app.ini gitea | 2022/03/31 17:26:21 ...s/install/setting.go:26:PreloadSettings() [I] Prepare to run install page gitea | 2022/03/31 17:26:21 ...s/install/setting.go:29:PreloadSettings() [I] SQLite3 is supported gitea | 2022/03/31 17:26:21 cmd/web.go:208:listen() [I] Listen: http://0.0.0.0:3000 gitea | 2022/03/31 17:26:21 cmd/web.go:212:listen() [I] AppURL(ROOT_URL): http://localhost:3000/

Tuy nhiên, điều này sẽ khiến vùng chứa chạy ở phía trước và nó sẽ dừng ngay sau khi bạn thoát khỏi quá trình đó bằng Ctrl + C hoặc khi bạn mất kết nối. Để vùng chứa chạy trong nền như một quá trình riêng biệt, bạn có thể gắn -d vào lệnh Compose:

  1. docker-compose up -d

Bạn sẽ được thông báo khi vùng chứa bắt đầu và sau đó quay trở lại vỏ bọc.

Bước 3: Cài đặt Nginx làm Reverse Proxy

Việc chạy một dịch vụ web như Gitea sau reverse proxy là một thực tế phổ biến, vì phần mềm máy chủ hiện đại như Apache hoặc Nginx có thể dễ dàng xử lý nhiều dịch vụ trên một máy hơn, cân bằng tải (balance load) trên nhiều máy chủ và xử lý SSL. Ngoài ra, điều này sẽ cho phép bạn thiết lập một tên miền trỏ đến phiên bản Gitea của bạn chạy trên các cổng HTTP (S) tiêu chuẩn.

Với mục đích của hướng dẫn này, chúng tôi sẽ sử dụng Nginx. Trước tiên, hãy cập nhật danh sách gói trên máy chủ của bạn:

  1. sudo apt update

Tiếp theo, cài đặt Nginx bằng apt:

  1. sudo apt install nginx

Bây giờ, khi bạn đang sử dụng tường lửa ufw, bạn sẽ cần cho phép truy cập vào các cổng sau:

  1. sudo ufw allow "Nginx Full"

Sau khi nó đã được cài đặt, bạn có thể truy cập máy chủ của mình trong trình duyệt bằng cách truy cập http://your_domain. Điều này sẽ dẫn bạn đến một trang rất đơn giản chào đón bạn đến với Nginx.

Tại thời điểm này, bạn sẽ cần tạo một mục reverse proxy để hướng lưu lượng truy cập vào thông qua Nginx đến phiên bản Gitea đang chạy trong Docker. Tạo một tệp mới trong thư mục sites-available Nginx bằng cách sử dụng trình soạn thảo văn bản ưa thích của bạn. Ví dụ dưới đây sử dụng nano:

  1. sudo nano /etc/nginx/sites-available/gitea

Trong tệp này, hãy thiết lập một khối máy chủ mới với các yêu cầu gửi đến / ủy quyền cho phiên bản Gitea của bạn:

/etc/nginx/sites-available/gitea
server {
    # Listen for requests on your domain/IP address.
    server_name your_domain;

    root /var/www/html;

    location / {
        # Proxy all requests to Gitea running on port 3000
        proxy_pass http://localhost:3000;
        
        # Pass on information about the requests to the proxied service using headers
        proxy_set_header HOST $host;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }
}

Sau khi bạn hoàn tất chỉnh sửa tệp, hãy lưu và đóng tệp đó.

Lưu ý: Để biết thêm thông tin về cách hiểu những gì đang diễn ra trong các hướng dẫn này, hãy xem bài viết Hiểu về Nginx HTTP Proxying, Cân bằng tải, Bộ đệm và Bộ nhớ đệm.

Nginx xác định những trang web mà nó sẽ phục vụ dựa trên việc các tệp đó có xuất hiện trong thư mục sites-enabled của nó hay không. Điều này được quản lý thông qua các liên kết tượng trưng trỏ đến các tệp trong thư mục sites-available. Bạn sẽ cần tạo một trong những liên kết tượng trưng đó để Nginx bắt đầu phục vụ Gitea:

  1. sudo ln -s /etc/nginx/sites-available/gitea /etc/nginx/sites-enabled/gitea

Trước khi khởi động lại Nginx để thực hiện các thay đổi của mình, bạn nên yêu cầu Nginx tự kiểm tra xem những thay đổi đó có hợp lệ hay không, bằng cách kiểm tra cấu hình của nó.

  1. sudo nginx -t

Nếu mọi thứ đều ổn, lệnh này sẽ trả về kết quả đầu ra như sau:

Output
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok nginx: configuration file /etc/nginx/nginx.conf test is successful

Nếu có bất kỳ vấn đề nào, nó sẽ cho bạn biết chúng đang ở đâu và làm gì.

Khi bạn đã sẵn sàng tiếp tục với thay đổi này, hãy khởi động lại dịch vụ hệ thống Nginx:

  1. sudo systemctl restart nginx

Bây giờ, khi bạn truy cập http://your_domain trong trình duyệt của mình, bạn sẽ thấy trên trang thiết lập ban đầu và Gitea đã sẵn sàng cho bạn điền vào.

Bước 4: Cài đặt Certbot và Thiết lập Chứng chỉ TLS

Nhờ Certbot và tổ chức phát hành chứng chỉ miễn phí Let’s Encrypt, việc thêm mã hóa TLS vào ứng dụng cài đặt Gitea của bạn sẽ chỉ mất hai lệnh.

Đầu tiên, hãy cài đặt Certbot và plugin Nginx của nó:

  1. sudo apt install certbot python3-certbot-nginx

Tiếp theo, chạy certbot ở chế độ --nginx và xác định cùng một miền mà bạn đã sử dụng trong chỉ thị cấu hình Nginx server_name:

  1. sudo certbot --nginx -d your_domain_here

Bạn sẽ được nhắc nhở đồng ý với các điều khoản dịch vụ của Let’s Encrypt và nhập địa chỉ email.

Sau đó, bạn sẽ được hỏi có muốn chuyển hướng tất cả lưu lượng HTTP sang HTTPS hay không. Điều đó là tùy thuộc vào bạn, nhưng điều này thường được khuyến khích và nó an toàn để thực hiện.

Sau đó, Let’s Encrypt sẽ xác nhận yêu cầu của bạn và Certbot sẽ tải xuống chứng chỉ của bạn:

Output
Congratulations! You have successfully enabled https://your_domain You should test your configuration at: https://www.ssllabs.com/ssltest/analyze.html?d=your_domain - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - IMPORTANT NOTES: - Congratulations! Your certificate and chain have been saved at: /etc/letsencrypt/live/your_domain/fullchain.pem Your key file has been saved at: /etc/letsencrypt/live/your_domain/privkey.pem Your cert will expire on 2022-05-09. 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" - Your account credentials have been saved in your Certbot configuration directory at /etc/letsencrypt. You should make a secure backup of this folder now. This configuration directory will also contain certificates and private keys obtained by Certbot so making regular backups of this folder is ideal. - 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

Certbot sẽ tự động tải lại Nginx với cấu hình và chứng chỉ mới. Tải lại trang web của bạn trong trình duyệt và nó sẽ tự động chuyển bạn sang HTTPS nếu bạn chọn tùy chọn chuyển hướng.

Trang web của bạn hiện đã được bảo mật và có thể an toàn khi tiếp tục với các bước thiết lập dựa trên web.

Bạn có thể tìm thêm thông tin về cách bảo mật tên miền bằng Let’s Encrypt trong hướng dẫn Cách bảo mật Nginx với Let’s Encrypt trên Ubuntu 20.04.

Bước 5: Thiết lập cấu hình Gitea và thêm người dùng đầu tiên

Bây giờ bạn có thể chuyển sang cấu hình chính Gitea và tạo người dùng quản trị đầu tiên. Truy cập phiên bản Gitea của bạn bằng cách mở https://your_domain trong trình duyệt. Trên màn hình cấu hình Gitea ban đầu, sẽ có một số tùy chọn cho dịch vụ:

description image

Một vài tùy chọn trong số này chẳng hạn như tiêu đề trang web tùy thuộc vào trường hợp sử dụng cụ thể của bạn, vì mục đích của hướng dẫn này, bạn sẽ cần thay đổi những điều sau:

  • Server domain: miền máy chủ mà bạn đã thiết lập ở Bước 3
  • Gitea Base URL: URL đầy đủ mà bạn sẽ sử dụng để truy cập Gitea trong trình duyệt, bao gồm cả giao thức. Ví dụ: https: //your_domain. Khi bạn lưu các thay đổi cấu hình của mình, bạn sẽ được chuyển đến trang đăng nhập Gitea.

Lưu ý: Khi cấu hình đã được lưu, dịch vụ Gitea sẽ khởi động lại. Vì quá trình này có thể mất vài giây, bạn có thể gặp phải lỗi Nginx cho biết 502 Bad Gateway. Nếu bạn gặp phải lỗi này, hãy đợi vài giây và khởi động lại trang.

Vì bạn chưa có user, nên trước tiên bạn cần tạo một user. Nhấp vào link Need an account? Register now (Cần một tài khoản? Đăng ký ngay) liên kết bên dưới biểu mẫu đăng nhập để đăng ký người dùng mới. Là user đầu tiên trên hệ thống, user này sẽ được tạo với tư cách quản trị viên. Nếu bạn thiết lập cài đặt email trên màn hình cấu hình, trước tiên bạn có thể cần xác minh tài khoản của mình.

Khi bạn đã đăng nhập với tư cách là người dùng đó, hãy nhấp vào biểu tượng user của bạn ở góc trên bên phải của trang, sau đó nhấp vào Site Administration (Quản trị trang), nó sẽ đưa bạn đến một trang nơi bạn có thể thực hiện các công việc bảo trì , quản lý tài khoản người dùng và tổ chức, đồng thời thiết lập thêm cấu hình Gitea.

Tạo kho lưu trữ thử nghiệm

Để kiểm tra Gitea, cả trên giao diện web và sử dụng Git, hãy tạo một kho thử nghiệm. Bạn có thể xóa kho lưu trữ này sau đó.

Nhấp vào dấu + ở góc trên bên phải của trang, sau đó nhấp vào + New Repository (+ Kho lưu trữ mới). Tại đây, bạn sẽ thấy một màn hình cho phép bạn đặt tên và tùy chỉnh kho lưu trữ của mình với thông tin như mô tả của nó, cài đặt ví dụ như có riêng tư hay không và bất kỳ nội dung mặc định nào như tệp README hoặc .gitignore.

Sau khi bạn nhấn Create Repository (Tạo kho lưu trữ), bạn sẽ có một kho lưu trữ mới để sử dụng.

Bước 6: Định cấu hình SSH Shim

Bước cuối cùng của quy trình là chuẩn bị máy chủ với miếng đệm SSH. Vì Gitea đang chạy trong vùng chứa Docker nên nó không thể chấp nhận các kết nối SSH trên cổng mặc định là 22, vì điều này sẽ xung đột với máy chủ. Trong tệp docker-compos.yml mà bạn đã tạo ở trên, Docker được hướng dẫn sắp xếp một cổng trên máy chủ tới cổng 22 trên vùng chứa để nó chấp nhận các kết nối SSH đến cổng 2222. Ngoài ra, tệp SSH authorized_keys sẽ không thể truy cập đến ai đó SSHing vào máy chủ theo mặc định.

Để đưa vào tài khoản, bạn sẽ cần tạo một miếng đệm SSH chuyển các kết nối SSH tới người dùng git trên máy chủ lưu trữ vào vùng chứa. Trong tệp soạn thảo, bạn cũng đã xác định rằng USER trong vùng chứa sẽ có user và group ID là 1000, và trên màn hình cấu hình Gitea, bạn đã yêu cầu dịch vụ sử dụng user có tên git.

Tạo Git user và SSH key của nó

Tiếp theo, bạn sẽ cần tạo SSH key cho user. Điều này sẽ chỉ được sử dụng trong một bước dưới đây và không được chia sẻ với bất kỳ ai bên ngoài máy chủ.

  1. sudo -u git ssh-keygen -t rsa -b 4096 -C "Gitea Host Key"

Lệnh này sử dụng sudo để tạo SSH key với tư cách là người dùng mà bạn đã tạo ở trên. Trong trường hợp này, key sẽ là key RSA 4096-bit. Bạn sẽ được hỏi một loạt câu hỏi như mật khẩu và đặt tên cho tệp key. Nhấn ENTER cho từng câu hỏi, để trống nếu chấp nhận giá trị mặc định.

Cảnh báo: Nếu bạn đặt mật khẩu trên key, bạn sẽ không thể sử dụng miếng đệm.

Bạn sẽ cần đảm bảo rằng user trong vùng chứa Gitea sẽ chấp nhận key này. Bạn có thể thực hiện việc này bằng cách thêm nó vào tệp .ssh/authorized_keys:

  1. sudo -u git cat /home/git/.ssh/id_rsa.pub | sudo -u git tee -a /home/git/.ssh/authorized_keys
  2. sudo -u git chmod 600 /home/git/.ssh/authorized_keys

Tất cả các lệnh này đều hoạt động với miếng đệm vì thực tế là thư mục /home/git/.ssh trên máy chủ được gắn như một ổ đĩa trên vùng chứa, có nghĩa là nội dung được chia sẻ giữa chúng. Khi nhận được kết nối tới máy chủ lưu trữ thông qua git trên SSH, nó sẽ sử dụng cùng một tệp authorized_keys như vùng chứa.

Tạo SSH Shim Script

Bước cuối cùng cho shim là tạo một lệnh gitea sơ khai trên máy chủ. Đây là điều cho phép các lệnh git hoạt động trên SSH: khi kết nối SSH được thực hiện, một lệnh mặc định sẽ được chạy. Lệnh gitea này trên máy chủ sẽ ủy quyền kết nối SSH đến vùng chứa.

Đối với script, hãy sử dụng cat để ghi vào tệp /usr/local/bin/gitea:

  1. cat <<"EOF" | sudo tee /usr/local/bin/gitea
  2. #!/bin/sh
  3. ssh -p 2222 -o StrictHostKeyChecking=no git@127.0.0.1 "SSH_ORIGINAL_COMMAND=\"$SSH_ORIGINAL_COMMAND\" $0 $@"
  4. EOF

Lệnh ở trong những script SSH này vào vùng chứa Gitea Docker, truyền nội dung của lệnh ban đầu được sử dụng bởi git.

Cuối cùng, hãy đảm bảo rằng script có thể thực thi được:

  1. sudo chmod +x /usr/local/bin/gitea

Kiểm tra kết nối Git SSH

Bạn có thể kiểm tra việc kéo và đẩy đến kho lưu trữ Git trên phiên bản Gitea của mình bằng cách thêm SSH key vào Gitea user của bạn.

Bạn sẽ cần nội dung của khóa công khai SSH của mình. Nó thường nằm trong một tệp có tên như ~/.ssh/id_rsa.pub, tùy thuộc vào thuật toán bạn đã sử dụng khi tạo khóa của mình:

  1. cat ~/.ssh/id_rsa.pub

Lưu ý: Nếu bạn cần tạo SSH key lần đầu tiên, bạn có thể tìm hiểu cách thực hiện việc này với hướng dẫn Cách cài đặt SSH key trên Ubuntu 20.04 này.

Sao chép đầu ra của lệnh này.

Trong Gitea, nhấp vào biểu tượng user của bạn ở góc trên bên phải và chọn Settings (Cài đặt). Trên trang cài đặt, sẽ có một loạt các tab ở trên cùng. Nhấp vào SSH/GPG Keys, sau đó nhấp vào nút Add Key bên cạnh Manage SSH Keys. Dán key của bạn vào vùng văn bản lớn trong biểu mẫu và sau đó nhấp vào nút Add Key bên dưới nó.

Bây giờ, điều hướng đến kho lưu trữ thử nghiệm bạn đã tạo ở Bước 3 và sao chép URL SSH được cung cấp. Trên máy cục bộ của bạn, sao chép kho lưu trữ:

  1. git clone git@your_domain:username/test

Điều này sẽ sử dụng SSH để sao chép kho lưu trữ. Nếu bạn đã đặt mật khẩu trên SSH key của mình, bạn sẽ được yêu cầu cung cấp mật khẩu đó.

Di chuyển đến thư mục đó, tạo một tệp mới:

  1. cd test
  2. touch just_testing

Tiếp theo, thêm nó vào các thay đổi theo giai đoạn của bạn:

  1. git add just_testing

Cuối cùng, cam kết tệp đó:

  1. git commit -am "Just testing pushing over SSH!"

Bây giờ, bạn sẽ có thể đẩy các thay đổi của mình vào kho lưu trữ từ xa:

  1. git push origin master

Khi bạn làm mới trang trong trình duyệt của mình, tệp mới của bạn sẽ xuất hiện trong kho lưu trữ.

Kết luận

Bạn đã thiết lập một dịch vụ Gitea bằng Docker để tự lưu trữ kho mã nguồn của mình. Từ đây, bạn sẽ có thể làm việc trên cả kho lưu trữ công cộng và riêng tư, sử dụng các quy trình công việc quen thuộc như đánh giá mã pull-request và các dự án do tổ chức sắp xếp. Gitea cũng hoạt động tốt với nhiều công cụ tích hợp và triển khai liên tục (CI / CD) như Drone, Jenkins và GoCD. Ngoài ra, việc sử dụng các ổ đĩa Docker như vậy cho phép bạn mở rộng bộ nhớ của mình để phù hợp với nội dung Git LFS (bộ nhớ tệp lớn) trên mạng hoặc khối lưu trữ.

Tham gia kênh Telegram của CloudFly để nhận thêm ưu đãi và không bỏ lỡ bất kỳ khuyến mãi nào từ CloudFly
Chia sẻ

0 câu trả lời