Hướng dẫn cách cài đặt Gitea trên Ubuntu bằng Docker

Lượt xem
Home

Quản lý mã nguồn rất quan trọng trong quá trình phát triển của bất kì một phần mềm nào. Hiện trên thị trường có một số nền tảng hỗ trợ việc trên nhưng đa số là cần phải trả phí để nếu muốn tận dụng được hết các tính năng mà nền tảng cung cấp. Tuy nhiên trong bài viết này, Vietnix sẽ giới thiệu đến bạn cách sử dụng và cài đặt Gitea trên Ubuntu bằng Docker – một nền tảng quản lý mã nguồn miễn phí, đơn giản, gọn nhẹ.

Giới thiệu về cài đặt Gitea trên Ubuntu bằng Docker

Khi phát triển phần mềm, điều quan trọng là làm sao để bạn có thể quản lý mã nguồn một cách hiệu quả và có thể theo dõi được. Các hệ thống SCM (Source Code Management) hay hệ thống quản lý mã nguồn là nơi giúp quản lý quy trình phát triển một cách hiệu quả và linh hoạt giúp làm việc trên các dự án thuộc mọi quy mô với sự tham gia của nhiều nhà phát triển.

Đến nay, đã có nhiều phần mềm SCM khác nhau như CVS đến SubVersion, Perforce và Mercurial, đứng đầu trong đó là Git – cùng với sự phát triển vượt bậc với sự phổ biến của các trang web như GitHubGitLab.

Đôi nét về Gitea
Đôi nét về Gitea

Tuy nhiên, với các tài khoản miễn phí trên các nền tảng dịch vụ này chủ yếu là hướng đến các kho lưu trữ có mã nguồn mở và công khai, để có khả năng làm việc trên các dự án phần mềm riêng tư hoặc được sở hữu độc quyền thì bạn cần phải trả phí.

Thêm vào đó, quyền để một người có thể truy cập vào kho lưu trữ thuộc về tổ chức sở hữu phần mềm đó và nhiều tổ chức thường sẽ muốn kiểm soát hoàn toàn phần mềm của chính họ từ đầu đến cuối.

Do đó, trong vài năm qua, một số giải pháp tự lưu trữ như Gogs, Gitea và GitLab cũng đã được phát triển. Trong bài hướng dẫn này, Vietnix sẽ tập trung vào việc thiết lập một giải pháp phổ biến có tên là 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 mình trong toàn bộ vòng đời của dự án.

Gitea có đặc trưng là nhỏ, khép kín và nhẹ, giúp quá trình triển khai trở nên nhanh chóng mà không yêu cầu quá nhiều về phần cứng. Bạn sẽ sử dụng bản cài đặt Gitea từ Docker nhằm đảm bảo rằng phần mềm ở phiên bản được cập nhật mới nhất.

Yêu cầu tiên quyết để cài đặt Gitea trên Ubuntu bằng Docker

Trước khi bắt đầu hướng dẫn này, bạn cần chuẩn bị:

  • Máy chủ Ubuntu 20.04 với user non-root có đặc quyền sudo.
  • Docker và Docker Compose được cài đặt trên máy chủ Ubuntu.
  • Có một tên miền trỏ vào máy chủ Ubuntu của bạn. Bài hướng dẫn này sẽ sử dụng tên miền là your_domain trong xuyên suốt các ví dụ.

Nếu bạn chưa có máy chủ và tên miền để cài đặt Gitea trên Ubuntu bằng Docker, thì bạn có thể tham khảo thuê các gói VPS và đăng ký tên miền tại Vietnix.

Vietnix là một trong những nhà cung cấp dịch vụ VPS và tên miền uy tín hàng đầu tại Việt Nam, cung cấp các gói dịch vụ VPS tốc độ cao đa dạng và phù hợp với mọi nhu cầu của bạn. Từ các gói dịch vụ VPS Giá Rẻ đến các gói dịch vụ VPS Phổ Thông, VPS Cao Cấp và VPS NVMe.

Khi thuê VPS tại Vietnix, bạn sẽ được tặng bộ theme và plugin WordPress trị giá 50.000.000 VND/Năm. Bên cạnh đó, VPS Vietnix cũng được đánh giá cao về tốc độ và độ ổn định, khả năng bảo mật tốt, giúp bạn triển khai các dự án trên máy chủ hiệu quả, an toàn.

Ngoài ra, đội ngũ kỹ thuật của Vietnix luôn sẵn sàng hỗ trợ bạn 24/7 trong việc cài đặt và sử dụng Gitea trên Ubuntu bằng Docker cũng như giải đáp mọi thắc mắc của bạn khi cần. Liên hệ ngay với Vietnix để được tư vấn chi tiết hơn.

Các bước tiến hành

Bước 1: Tạo người dùng Git

Gitea cũng giống như các kho lưu trữ mã nguồn khác, 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ã nguồn của họ bằng cách quản lý các khóa SSH trong chính Gitea.

Tuy nhiên, để người dùng có thể truy cập vào máy chủ thông qua SSH, bạn sẽ cần tạo một người dùng git trên máy chủ. Bước này cần được hoàn thành đầu tiên để bạn có thể truy cập được ID của người dùng và nhóm của người dùng.

Đầu tiên, hãy tạo người dùng trên máy chủ sẽ cho phép các kết nối này:

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

Trong lệnh này, bạn sẽ tạo một người dùng hệ thống sử dụng bash shell 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 người dùng đó nhưng không cần phải đăng nhập. Bạn cũng đặt thư mục chính của người dùng thành /home/git.

Lệnh này sẽ xuất ra một số thông tin về người dùng vừa được tạo như sau:

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' …

Bạn hãy ghi chú lại các giá trị UIDGID đượ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 bước tiếp theo sau đây.

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

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

Để khởi động bộ 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ạn bắt đầu bằng cách tạo một thư mục để lưu trữ dịch vụ và di chuyển vào trong đó:

mkdir ~/gitea
cd ~/gitea

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

nano docker-compose.yml

Thêm các nội dung sau sau vào tệp mới tạo này:

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 tin này thể hiện:

  • version: "3": Điều này cho phép Docker Compose biết về phiên bản của tệp cấu hình này.
  • networks: Phần này khai báo các thiết lập mạng của bộ các container của bạn. Trong trường hợp này, mạng gitea được tạo ra nhưng không được hiển thị ra bên ngoài.
  • services:
    • image: gitea/gitea:1.16.5: Điều này xác định rằng bạn sẽ sử dụng phiên bản Gitea 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, đó có thể là một phiên bản release hay một phiên bản lớn khác chẳng hạn như :1 hay một thẻ như :latest hay :dev.
    • environment: Phần môi trường chỉ định các biến môi trường sẽ có sẵn cho các image trong quá trình cài đặt và chạy. Trong trường hợp này, bạn đang chỉ định ID người dùng và nhóm cho môi trường, sử dụng UID và GID được cung cấp trong output của lệnh adduser ở Bước 1.
    • restart: always: Dòng này hướng dẫn Docker luôn khởi động lại các container nếu gặp sự cố, dù do là bản thân các container bị hỏng hay do máy chủ; về cơ bản, Gitea sẽ chạy khi được khởi động.
    • 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ó được xác định ở trên.
    • ./gitea:/data/home/git/.ssh/:/data/git/.ssh: Đây là những vị trí mà Gitea sẽ lưu trữ các kho lưu trữ và dữ liệu liên quan. Hiện tại, điều này đang trỏ tới thư mục có tên gitea trong thư mục đang làm việc hiện tại. Docker sẽ tạo thư mục này khi container khởi động nếu nó không tồn tại. Thư mục .ssh sẽ được mô tả thêm ở phần sau trong Bước 6.
    • /etc/timezone/etc/localtime: Hai tập tin này chứa thông tin về múi giờ và thời gian trên máy chủ. Bằng cách map những thứ này trực tiếp vào container dưới dạng tệp read-only map(được chỉ định với phần :ro cuối cùng của định nghĩa), container sẽ có cùng thông tin với máy chủ lưu trữ.
    • port: Gitea sẽ lắng nghe các kết nối trên hai cổng. Đầu tiên là lắng nghe các kết nối HTTP trên cổng 3000, nơi cung cấp giao diện web cho kho lưu trữ mã nguồn và tiếp theo là 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 map nó tới con số tương ứng và bạn đang map vào cổng trên bộ chứa của Gitea từ cổng 22 thông thường đến cổng 2222 để tránh xung đột cổng. Ở Bước 6, bạn sẽ thiết lập SSH shim để điều hướng các 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 cần phải có về tệp Docker Compose cho Gitea. Ngoài ra, còn có một số tùy chọn khác mà bạn có thể đưa vào như sử dụng MySQL hoặc PostGreSQL làm cơ sở dữ liệu sao lưu hoặc một ổ đĩa được đặt tên để lưu trữ. Thiết lập ở mức tối thiểu này sử dụng SQLite làm cơ sở dữ liệu sao lưu và một ổ đĩa sử dụng thư mục có tên gitea để lưu trữ.

Sau khi hoàn thành hãy lưu và đóng file. Nếu bạn đang sử dụng nano để chỉnh sửa file, có thể làm như vậy bằng cách nhấn CTRL + X, Y, rồi ENTER.

Với tệp docker-compose.yml trên, bạn có thể đưa các container lên bằng cách sử dụng Docker Compose:

docker-compose up

Lệnh này sẽ kéo các image xuống, khởi động container củ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 container chạy ở nền trước và sẽ dừng ngay khi bạn thoát khỏi tiến trình bằng Ctrl + C hoặc do mất kết nối. Để container vẫn chạy trong nền dưới dạng một tiến trình riêng biệt, bạn có thể nối thêm cờ -d vào lệnh trên như sau:

docker-compose up -d

Bạn sẽ được thông báo khi container khởi động và sau đó quay trở lại trình shell của bạn như bình thường.

Bước 3: Thiết lập NginX thành Reverse Proxy

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

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

sudo apt update

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

sudo apt install nginx

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

sudo ufw allow "Nginx Full"

Khi đã được thiết lập như trên, bạn sẽ 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 như chào mừng bạn đến với Nginx.

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

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

Trong file này, hãy thiết lập một khối máy chủ mới để hướng các request vào / chuyển tới Gitea instance đang chạy của bạn:

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;
    }
}

Khi đã hoàn tất việc chỉnh sửa file thì lưu và đóng file.

Lưu ý: Để hiểu được cách cấu hình cho tệp trên, bạn có thể tìm hiểu thêm về Nginx HTTP Proxying, Load Balancing, Buffering và Caching.

Nginx xác định những trang web sẽ phục vụ dựa trên việc các tệp đó có nằm trong thư mục sites-enabled của NginX hay không. Điều này được quản lý thông qua các liên kết tượng trưng (symbolic links) trỏ đến các tệp trong thư mục sites-available có sẵn.

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ụ cho Gitea:

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

Trước khi bạn khởi động lại Nginx để thực hiện các thay đổi của mình, hãy nên để 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 như sau.

sudo nginx -t

Nếu không có thông báo lỗi xảy ra, lệnh này sẽ trả về output 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, output trên sẽ cho bạn biết vấn đề đó là gì và nằm ở đâu.

Khi đã hoàn thành việc kiểm tra, hãy khởi động lại dịch vụ hệ thống Nginx:

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 mình đang ở trên trang thiết lập ban đầu cho Gitea.

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

Nhờ có Certbot và hệ thống cấp 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ỉ nằm vỏn vẹn trong chỉ 2 lệnh.

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

sudo apt install certbot python3-certbot-nginx

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

sudo certbot --nginx -d your_domain_here

Bạn sẽ được yêu cầu đồ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 đó sẽ tùy thuộc vào bạn, nhưng điều này thường được khuyến khích đồng ý nhằm để giúp cho trang web được an toàn hơn.

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

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à các sẽ tự động được điều hướng sang HTTPS nếu trước đó 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à an toàn hơn.

Bước 5: 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 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ụ:

Thiết lập ban đầu của Git
Thiết lập ban đầu của Git

Một 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à để tiếp tục theo dõi bài hướng dẫn này, bạn sẽ cần thay đổi những điều sau:

  • Server domain: Tên miền của 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ả phần giao thức. Ví dụ: https://your_domain.

Khi đã hoàn thành bạn lưu các thay đổi cấu hình của mình, và 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 nên bạn có thể gặp lỗi Nginx với thông báo 502 Bad Gateway. Nếu 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, trước tiên bạn sẽ cần tạo một user. Nhấp vào liên kết Need an Account? Register Now ngay bên dưới form đăng nhập để đăng ký user mới. Là người dùng đầu tiên trên hệ thống, người dùng 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 vào lúc cấu hình, trước tiên bạn có thể cần phải xác minh tài khoản của mình.

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

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

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

Nhấp vào dấu + ở góc trên bên phải của trang, sau đó nhấp vào + New Repository từ menu dạng trượt. 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 các thông tin như mô tả, các cài đặt như có riêng tư hay không và các nội dung mặc định chẳng hạn như tệp README hoặc .gitignore.

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

Bước 6: 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 SSH shim. Vì Gitea đang chạy trong container của Docker nên không 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ẽ gây ra xung đột với máy chủ lưu trữ.

Trong tệp docker-compose.yml mà bạn đã tạo ở trên, Docker được thiết lập để ánh xạ một cổng trên máy chủ lưu trữ tới cổng 22 trên container để cho phép các kết nối SSH tới cổng 2222. Ngoài ra, tệp authorized_keys của SSH sẽ không cho phép các truy cập vào host bằng SSH có khóa không nằm trong tệp theo mặc định.

Để xử lí điều đó, bạn sẽ cần tạo một SSH shim để chuyển các kết nối SSH tới người dùng git trên máy chủ vào container. Trong tệp docker-compose.yml, bạn cũng đã chỉ định rằng NGƯỜI DÙNG trong container sẽ có ID người dùng và ID nhóm là 1000 và trong lúc cấu cấu hình Gitea, bạn đã yêu cầu dịch vụ sử dụng người dùng có tên git.

Tạo người dùng Git và SSH cho người dùng

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

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

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

Cảnh báo: Nếu bạn đã đặt mật khẩu trên khóa thì bạn sẽ không thể sử dụng shim.

Bạn cần đảm bảo rằng người dùng trong vùng chứa Gitea sẽ cho phép khóa mới tạo này. Bạn có thể làm điều này bằng cách thêm khóa đó vào tệp .ssh/authorized_keys:

sudo -u git cat /home/git/.ssh/id_rsa.pub | sudo -u git tee -a /home/git/.ssh/authorized_keys
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 shim do là thư mục /home/git/.ssh trên Máy chủ được mount dưới dạng một ổ đĩa trên container, nghĩa là nội dung sẽ được chia sẻ với nhau giữa chúng. Khi nhận được kết nối đến máy chủ thông qua git bằng SSH, máy chủ sẽ sử dụng cùng một tệp authorized_keys để xác thực.

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ủ. Điều này sẽ cho phép các lệnh git hoạt động trên SSH: khi một kết nối SSH được thiết lập, một lệnh mặc định sẽ được chạy. Lệnh gitea này trên máy chủ sẽ chuyển các kết nối SSH tới các container.

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

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

Lệnh trong tập lệnh này sẽ tạo một kết nối SSH đến các container của Gitea Docker, và truyền vào đó các 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 tập lệnh có thể thực thi được, bằng việc cấp lệnh thực thi như sau:

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

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

Bạn có thể kiểm tra việc pull và push vào Git repo trên máy chủ Gitea hiện tại của mình bằng cách thêm khóa SSH vào người dùng Gitea.

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

cat ~/.ssh/id_rsa.pub

Sao chép output của lệnh này (là giá trị của public key).

Trong Gitea, nhấp vào biểu tượng người dùng của bạn ở góc trên bên phải và chọn Settings. 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 khóa của bạn vào vùng văn bản lớn trong biểu mẫu rồi nhấp vào nút Add Key bên dưới.

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

git clone git@your_domain:username/test

Điều này sẽ sử dụng SSH để kéo kho lưu trữ về máy bạn. Nếu bạn đã đặt mật khẩu cho khóa SSH 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 vừa clone và tạo một tệp mới:

cd test
touch just_testing

Tiếp theo, thêm tệp đó vào staged changes:

git add just_testing

Cuối cùng, commit tập tin đó:

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

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

git push origin master

Sau đó, hãy làm mới lạ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ữ.

Như bậy bạn đã thiết lập dịch vụ Gitea bằng Docker để tự lưu trữ kho lưu trữ 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 khai và riêng tư, sử dụng các quy trình công việc quen thuộc như pull-request code reviews và tổ chức sắp xếp các dự án.

Gitea cũng hoạt động tốt với nhiều công cụ triển khai và tích hợp liên tục (CI/CD) khác nhau như Drone, Jenkins và GoCD. Ngoài ra, việc sử dụng các volume Docker cho phép mở rộng dung lượng lưu trữ để phù hợp với nội dung Git LFS (lưu trữ tệp lớn) trên mạng hay các block storage.

Lời kết

Cảm ơn bạn đã theo dõi bài viết hướng dẫn cài đặt Gitea trên Ubuntu bằng Docker. Nếu bạn có bất kỳ câu hỏi hay cần hỗ trợ thêm, đừng ngần ngại để lại bình luận, Vietnix sẽ hỗ trợ bạn nhanh chóng nhất.

Chia sẻ lên

Theo dõi trên

Logo Google new

Đánh giá

5/5 - (93 bình chọn)

Hưng Nguyễn

Kết nối với mình qua

Icon Quote
Icon Quote
Đăng ký nhận tin
Để không bỏ sót bất kỳ tin tức hoặc chương trình khuyến mãi từ Vietnix

Bình luận

Theo dõi
Thông báo của
guest
0 Comments
Phản hồi nội tuyến
Xem tất cả bình luận

Chỉ số tăng trưởng

Điểm Desktop

100 (+39)

Điểm Mobile

100 (+67)

Core Web Vitals

Passed

Lĩnh vực

Ecommerce

Chỉ số tăng trưởng

Điểm Desktop

99 (+28)

Điểm Mobile

100 (+50)

Core Web Vitals

Passed

Lĩnh vực

SEO

Chỉ số tăng trưởng

Điểm Desktop

99 (+26)

Điểm Mobile

98 (+59)

Core Web Vitals

Passed

Lĩnh vực

Ecommerce

Chỉ số tăng trưởng

Điểm Desktop

100 (+8)

Điểm Mobile

98 (+35)

Core Web Vitals

Passed

Lĩnh vực

Giáo Dục

Chỉ số tăng trưởng

Điểm Desktop

100 (+61)

Điểm Mobile

100 (+61)

Core Web Vitals

Passed

Lĩnh vực

Giáo Dục

Võ Thiên Tòng

25 Tháng 2 lúc 21:09

·

Mình muốn gửi lời cảm ơn chân thành đến Team Vietnix, anh Hưng Nguyễn, anh Vietnix Trung, em Quốc Huy đã hỗ trợ tối ưu Page Speed Insight (PSI) cho website vanvoiminhhoa.vn của mình.
Biết đến anh Hưng đã lâu nhưng chưa có duyên sử dụng dịch vụ bên anh. Tình cờ thấy được bài Post của anh về việc hỗ trợ tối ưu PSI miễn phí chỉ với vài Slot, thấy AE cmt khá nhiều nên cũng không nghĩ tới lượt mình. Hôm sau đánh liều inbox 1 phen xem sao thì may mắn được đưa vào danh sách. Vài ngày sau được Team Vietnix liên hệ và hỗ trợ.
Kết quả đạt được:
• Điểm xanh lè xanh lét
• Tốc độ tải trang nhanh hơn hẳn
• Các chỉ số cũng được cải thiện đáng kể
• Và mình tin rằng với việc PSI được cải thiện cũng thúc đẩy những thứ khác đi lên theo!
Mình thực sự hài lòng với dịch vụ của Vietnix và muốn giới thiệu đến tất cả mọi người:
• Dịch vụ Wordpress Hosting: Tốc độ nhanh, ổn định, bảo mật cao, hỗ trợ kỹ thuật 24/7. (https://vietnix.vn/wordpress-hosting/)
• Dịch vụ Business Hosting: Dung lượng lớn, phù hợp cho website có lượng truy cập cao, tích hợp nhiều tính năng cao cấp. (https://vietnix.vn/business-hosting/)
Đặc biệt, Vietnix đang có chương trình ưu đãi:
• Giảm giá 20% trọn đời khi nhập code THIENTONG_PAGESPEED tại trang thanh toán (Chu kỳ 12 tháng trở lên)
• Tặng 1 lần tối ưu điểm Page Speed Insight cho 1 website
Cám ơn Vietnix một lần nữa!
#Vietnix #Vanvoiminhhoa #Pagespeedinsight
Trước khi tối ưu
Sau khi tối ưu
Thiện Nguyễn - CEO SEO Dạo

5 Tháng 3 lúc 16:21

·

CORE WEB VITAL YẾU TỐ XẾP HẠNG TÌM KIẾM SEO
Core Web Vitals là một tập hợp các chỉ số đo lường hiệu suất của trang web từ góc độ người dùng, được Google sử dụng để đánh giá trải nghiệm người dùng trên các trang web. Các chỉ số chính bao gồm:
– Largest contentful paint (LCP): Tốc độ render của page. Mục tiêu là dưới 2,5 giây.
– First input delay (FID): Tốc độ phản hồi của website với tương tác của người dùng. Mục tiêu là dưới 100ms.
– Cumulative Layout Shift (CLS): Độ ổn định của bố cục trang. Mục tiêu là dưới 0.1.
Tất cả các chỉ số này đo lường các khía cạnh quan trọng của trải nghiệm người dùng trên trang web. Google đã công bố rằng từ tháng 5 năm 2021, các Core Web Vitals sẽ được sử dụng làm một trong các yếu tố đánh giá trong việc xếp hạng trang web trên kết quả tìm kiếm. Do đó, hiểu và cải thiện các Core Web Vitals là rất quan trọng đối với SEO.
Tóm lại, Core Web Vitals không chỉ giúp cải thiện hiệu suất và xếp hạng trang web trên công cụ tìm kiếm, mà còn cải thiện trải nghiệm của người dùng khi họ truy cập và tương tác với trang website.
P/s: mình đang có gói hỗ trợ đặc biệt cho anh em tối ưu tốc độ bên VIETNIX:
– Giảm 20% lifetime dịch vụ Hosting Business và Hosting Wordpress chu kỳ 12 tháng trở lên.
– Tặng 1 lần tối ưu điểm Page Speed Insight cho 1 website.
Anh em có nhu cầu đăng ký qua bạn Vietnix Trung này nhé và nhập mã SEODAO_PAGESPEED để được ưu đãi nhé.😁
Trước khi tối ưu
Sau khi tối ưu SEO Dạo
Icharm review

5 Tháng 3 lúc 15:43

·

[Mình vừa được hỗ trợ tối ưu page speed website]
Trước khi được tối ưu, web của mình điểm rất thấp, đặc biệt là mobile chỉ có 39. Cơ duyên thế nào lúc lướt face lại va phải chương trình tối ưu pagespeed bên Vietnix.
Sau khi được Trần Hoàng Phúc và team Vietnix hỗ trợ nhiệt tình, điểm web vọt lên 98 99 (như hình bên dưới). Dùng thử web thì thấy quá là mượt, 10 điểm cho team Vietnix.
Nói thật thì mình thật sự ấn tượng về sự nhiệt huyết, tận tâm và rất chuyên nghiệp bên Vietnix.
Anh em có nhu cầu về hosting hay có vấn đề về website như:
1. Web load chậm
2. Khách rời web vì đợi tải nội dung, hình ảnh lâu
3. Hay tất tần tật mọi thứ về website
THÌ LIÊN HỆ NGAY VIETNIX NHÉ!
Và đừng quên dùng pass “ICHARM_PAGESPEED” để được giảm 20% trọn đời hosting business và wp hosting. Quả code này còn được tặng 1 lần tối ưu pagespeed nữa nhé, ưu đãi chắc cũng phải nhất nhì thị trường luôn.
Trước khi tối ưu
Sau khi tối ưu
Hoàng Nguyễn

29 Tháng 2 lúc 17:04

·

Xin chào mọi người! Vừa rồi mình có sử dụng dịch vụ tối ưu website, tăng tốc độ tải trang pagespeed của Vietnix kết quả trên cả tuyệt vời nên mình viết bài này để chia sẻ thông tin với các bạn.
Lý do mình chọn dịch vụ tối ưu tốc độ website của Vietnix:
✅ Đội ngũ chuyên gia giàu kinh nghiệm: Đã tối ưu thành công cho hàng nghìn website trong nhiều lĩnh vực khác nhau. Các bạn nhân viên rất thân thiện, nhiệt tình và chủ động trong quá trình làm việc để cập nhật tiến độ.
✅ Quy trình chuyên nghiệp:
– Kiểm tra và phân tích: Vietnix sử dụng các công cụ tiên tiến để kiểm tra và phân tích tốc độ website của bạn.
– Xác định nguyên nhân: Vietnix xác định nguyên nhân khiến website tải chậm và đưa ra giải pháp tối ưu phù hợp.
– Tối ưu hóa website: Vietnix áp dụng các kỹ thuật tối ưu tiên tiến nhất để tăng tốc độ tải trang.
– Báo cáo kết quả: Vietnix cung cấp báo cáo chi tiết về kết quả tối ưu hóa website.
Công nghệ tiên tiến: Vietnix sử dụng các công nghệ tối ưu mới nhất như LiteSpeed, LSCache, Memcached, Redis, v.v.
✅ Cam kết kết quả: Vietnix cam kết tăng tốc độ website của bạn lên tối thiểu 90%.
✅ Giá cả cạnh tranh: Vietnix cung cấp dịch vụ tối ưu tốc độ website với mức giá cạnh tranh nhất trên thị trường.
📣 Để đăng ký sử dụng dịch vụ tối ưu tốc độ website và các dịch vụ khác như hosting, vps, domain… các bạn có thể đăng ký tại https://portal.vietnix.vn/aff.php?aff=57 hoặc Inbox cho sếp Vietnix Trung nhé.
Các bạn có thể kiểm tra tốc độ trang của mình https://lasan.edu.vn hoặc một vài trang khác đã sử dụng dịch vụ của Vietnix như sau:
https://pagespeed.web.dev/…/https…/v8beqewyt2…
https://pagespeed.web.dev/…/https…/etiohjvtl4…
https://pagespeed.web.dev/…/https…/yczuqpw6d1…
https://pagespeed.web.dev/…/https…/xf9y65kuzk…
https://pagespeed.web.dev/…/https…/fdrsms15en…
https://pagespeed.web.dev/…/https…/s7p9cgzeri…
Trước khi tối ưu
Sau khi tối ưu
Dũng cá xinh

30 Tháng 1 lúc 19:09

·

[Đỉnh]
Em có dùng hosting, vps, cloud vps, cloud server, dedicated server của rất nhiều bên từ trong nước đến nước ngoài để hosting khoảng 2,000+ domain. Mỗi bên đều có ưu nhược khác nhau, nhưng có 1 số bên đặc biệt “bá đạo”, trong đó có: Vietnix!!!!

Lần đầu tiên em được cả CEO Hưng Nguyễn lẫn Master về dev Vietnix Trung của 1 đơn vị hàng đầu liên quan đến Hosting, Server support từ A – Z (từ Zalo, Tele, đến FB và cả Phone)

Em có khá nhiều web dạng Big Data (bài, ảnh, database, data) lên đến hàng trăm Gb. Càng to thì nó càng có nhiều vấn đề về phần phản hồi ban đầu (nhược điểm cố hữu của php wordpress so với nativejs, reactjs, html, headless,…), và anh em Vietnix có nhã ý hỗ trợ xử lý phần Speed Insight này.

Kết quả thực sự kinh ngạc, từ cách trao đổi đến xử lý vấn đề, cut off những cái cần cut off, xử lý rất sâu vấn đề và gợi ý rất nhiều ý tưởng optimize hệ thống!!!! Thực sự quá hài lòng về kết quả cũng như cách tương tác của các đầu tầu bên Vietnix ^^!!!

Nhân cơ duyên được kết nối với những cao thủ của Vietnix, em xin chia sẻ và lan tỏa để nhiều anh em có cơ hội được sử dụng những dịch vụ tốt nhất với giá vô cùng hợp lý!!!!

1 – Với anh em chưa có hosting, em đặc biệt recommend sử dụng hosting bên Vietnix:
– Sử dụng mã DUNGCAXINH_PAGESPEED sẽ được giảm 20% trọn đời (lifetime luôn)
– Áp dụng các gói Hosting Business, Hosting wordpress và reg 1 năm trở lên
– Anh em chưa biết cách reg thì còm men hoặc ib để em hướng dẫn hoặc nhờ các bạn bên Vietnix support từ A – Z

2 – Anh em có hosting rồi và muốn build blog hoặc web = wordpress mà chưa có giao diện thì nhân tiện em đang có tài khoản Premium bên Envato, em sẽ tặng bất kỳ giao diện nào có trên Envato Themes (Link em để dưới còm men) ạ. Cả nhà còm hoặc ib em Themes mà mọi người “chim ưng”, em sẽ cho anh em tải về, up drive và gửi ạ!!! (Chương trình này kéo dài đến ngày 29 tết âm lịch ạ)

3 – BEST NHẤT luôn!!!! Anh em nào mua hosting dùng mã DUNGCAXINH_PAGESPEED sẽ được tối ưu 100 điểm tốc độ cho 1 web (đây là ưu đãi riêng của CEO Hưng Nguyễn dành cho bạn bè của #dungcaxinh ^^) (Giá trị nhất là cái vụ số 3 này anh chị em nhé ^^), cơ hội vàng để move về đơn vị hosting uy tín là đây ^^!!!!

Một lần nữa xin chân thành cám ơn 2 đồng chí em: Hưng Nguyễn và Vietnix Trung đã giải được một bài toán khó cho các trang WP Big data mà anh loay hoay bao lâu nay chưa tìm ra đáp án!!! Chúc Vietnix ngày càng phát triển và có một năm 2024 đại đại thắng nhé ^^ !!!!!
#SEO #Vietnix #dungcaxinh

Trước khi tối ưu
Sau khi tối ưu
Hiếu AI

2 Tháng 2 lúc 21:06

·

UY TÍN – TẬN TÂM – TỐC ĐỘ

3 từ trên là vẫn chưa đủ để nói về quy trình làm việc cực chuyên nghiệp của team Vietnix.Chuyện là mình có con website chính đang có lượt truy cập organic hàng ngày cũng tương đối (hình 1)

Vấn đề là, con site này đang nằm trên hosting dùng chung nên tốc độ load chưa nhanh, tốc độ load chưa nhanh thì trải nghiệm visitor chưa tốt, trải nghiệm visitor chưa tốt thì tỷ lệ chuyển đổi ra đơn hàng kiểu gì thì kiểu cũng sẽ bị ảnh hưởng.

Biết rõ là đang mất tiền nhưng không biết xử lý như lào, nghĩ mà cay.

Đang loay hoay thì vận may nó tới, hôm qua đang lướt phở bò thấy a Nguyễn Việt Dũng đăng bài, rảnh nên thả cái comment hóng hớt, ai ngờ ngoằng phát thấy ông Dũng tạo nhóm với Vietnix Trung luôn.

Ae Vietnix thì siêu tốc độ, lập tức lấy thông tin vào việc, không hỏi han lằng nhằng, không kỳ kèo chốt đơn dù lúc đấy cũng đang đêm muộn.
Sáng hôm sau dậy vẫn còn đang lơ ngơ mở điện thoại check tin nhắn thì đã thấy ae Vietnix báo xong việc, trong khi mình vẫn chưa biết có chuyện gì xảy ra @@.

Được cái bấm thử website thì thấy load siêu nhanh, chưa tới một giây là thông tin các thứ hiện hết. Quá phê, thả con ảnh trước sau (hình 2,3) để ace tiện đối chiếu nhé. Thế này thì mình gửi gắm nốt 15 em website còn lại cho team Vietnix thôi chứ không cần nghĩ ngợi gì nữa. 10/10.

Nên là:

  1. Anh chị em muốn có một con website tốc độ load nhanh như tốc độ trở mặt của nyc – Dùng ngay dịch vụ hosting của Vietnix
  2. Anh chị em có website rồi muốn tìm bên hosting uy tín, chuyên nghiệp hỗ trợ không quản ngày đêm – Liên hệ ngay Vietnix Trung
  3. Anh chị em quan tâm đến trải nghiệm khách hàng, từ những cái nhỏ nhất như tăng tốc độ website – Better call Vietnix Trung

Và đừng quên dùng pass “HIEUAI_PAGESPEED” để được giảm 20% trọn đời hosting business và wp hosting, quả code này còn được tặng 1 lần tối ưu pagespeed nữa nhé, ưu đãi chắc cũng phải nhất nhì thị trường luôn.
#SEO #Vietnix #hieuai

Website
Trước khi tối ưu
Sau khi tối ưu

Chỉ số tăng trưởng

Điểm Desktop

100 (+43)

Điểm Mobile

100 (+74)

Core Web Vitals

Passed

Lĩnh vực

AI