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

theanh

Administrator
Nhân viên
Gitea là dịch vụ Git tự lưu trữ miễn phí và mã nguồn mở giống như GitHub, BitBuacket và GitLab. Đây là nhánh cộng đồng của dịch vụ git Gogs, được viết bằng Go với Giấy phép MIT. Gitea cung cấp các tính năng cho phát triển cộng tác và nhóm như theo dõi lỗi, wiki và đánh giá mã. Gita là ứng dụng đa nền tảng, có thể cài đặt trên nhiều hệ điều hành như Linux, macOS, Windows và ARM.

Mục tiêu chính của Gitea là cung cấp cách dễ nhất, nhanh nhất và đơn giản nhất để tạo và triển khai dịch vụ Git trên máy chủ của bạn. Ngoài ra, Gitea hỗ trợ nhiều phương thức xác thực như LDAP, PAM, SMTP và FreeIPA. Đối với các sự kiện kho lưu trữ webhook, Gitea hỗ trợ nhiều webhook như Slack, Discord, Microsoft Team, Telegram, v.v.

Trong hướng dẫn này, bạn sẽ tìm hiểu cách cài đặt và cấu hình máy chủ Git tự lưu trữ có tên Gitea với Docker trên máy chủ Ubuntu 22.04 mới nhất. Bài viết này cũng hướng dẫn cài đặt và cấu hình máy chủ web Nginx như một proxy ngược cho dịch vụ container Gitea.

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

  • Máy chủ Ubuntu - hướng dẫn này sử dụng máy chủ Ubuntu 22.04 mới nhất.
  • Người dùng không phải root có quyền root - hoặc bạn cũng có thể sử dụng người dùng root.

Cài đặt và cấu hình Docker​

Bước đầu tiên bạn sẽ thực hiện là cài đặt và cấu hình Docker trên máy Ubuntu của mình. Đối với hướng dẫn này, bạn sẽ cài đặt Docker từ kho lưu trữ Docker chính thức, vì vậy bạn sẽ cần thêm khóa GPG và kho lưu trữ Docker vào hệ thống của mình.

Trước khi bắt đầu, hãy chạy lệnh apt bên dưới để cài đặt các gói phụ thuộc cơ bản như gnupg2 và curl.
Mã:
sudo apt install \
 ca-certificates \
 curl \
 gnupg \
 lsb-release
Sau khi cài đặt hoàn tất, hãy chạy lệnh bên dưới để tải xuống và thêm khóa GPG vào kho lưu trữ Docker. Khóa GPG sẽ được lưu trữ trong thư mục /etc/apt/keyrings.
Mã:
sudo mkdir -p /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
Tiếp theo, thêm kho lưu trữ Docker bằng lệnh sau.
Mã:
echo \
 "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \
 $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
Sau đó, hãy cập nhật và làm mới kho lưu trữ Ubuntu của bạn bằng lệnh bên dưới.
Mã:
sudo apt update
Trong ảnh chụp màn hình bên dưới, bạn có thể thấy kho lưu trữ Docker cho Ubuntu 22.04 đã được thêm vào.



Cuối cùng, bạn có thể cài đặt công cụ Docker vào hệ thống Ubuntu của mình bằng lệnh sau. Gói docker-compose plugin là sự thay thế cho Docker Compose, hiện có thể được sử dụng làm plugin cho Docker.
Mã:
sudo apt install docker-ce docker-ce-cli containerd.io docker-compose-plugin
Nhập Y để xác nhận cài đặt và nhấn ENTER để tiếp tục. Quá trình cài đặt Docker sẽ bắt đầu.



Bây giờ hãy chạy lệnh docker bên dưới để xác minh quá trình cài đặt Docker của bạn.
Mã:
sudo docker run hello-world
Nếu quá trình cài đặt Docker của bạn thành công, bạn sẽ thấy thông báo Hello World từ Docker.


Thiết lập Môi trường triển khai Gitea​

Sau khi bạn đã cài đặt Docker thành công, bây giờ bạn sẽ thiết lập môi trường cài đặt Gitea. Trong ví dụ này, dịch vụ vùng chứa Gitea sẽ chạy dưới dạng người dùng không phải root, vì vậy bạn sẽ cần tạo một người dùng mới trên hệ thống của mình và thêm người dùng vào nhóm 'docker' để cho phép người dùng thực thi và chạy các vùng chứa Docker.

Chạy lệnh bên dưới để thêm một người dùng mới có tên là gitea. Tùy chọn -m ở đây được sử dụng để tự động tạo thư mục home mới cho người dùng 'gitea' và shell mặc định cho người dùng mới là /bin/bash.
Mã:
useradd -m -s /bin/bash gitea
Tiếp theo, thêm người dùng 'gitea' vào nhóm 'docker' bằng lệnh sau. Và bây giờ người dùng 'gitea' sẽ có thể chạy các container Docker.
Mã:
usermod -aG docker gitea
Để xác minh, hãy đăng nhập với tư cách là người dùng 'gitea' bằng lệnh sau.
Mã:
su - gitea
Bây giờ hãy chạy lệnh docker bên dưới để khởi động một container mới với hình ảnh "hello-world".
Mã:
docker run hello-world
Bạn sẽ thấy thông báo Hello-world từ Docker, điều này có nghĩa là bạn đã sẵn sàng bắt đầu cấu hình một dự án mới để cài đặt Gitea.


Xây dựng Gitea Container Services​

Sau khi thêm người dùng mới để chạy dịch vụ container Gitea, giờ bạn sẽ thiết lập cài đặt dự án Gitea. Tất cả các lệnh trong phần này đều chạy dưới người dùng mới 'gitea'.

Trước tiên, hãy tạo một thư mục dự án mới có tên "myapp" và thay đổi thư mục làm việc thành thư mục đó.
Mã:
mkdir -p myapp; cd myapp/
Tạo tệp docker-compose.yml mới bằng trình soạn thảo nano.
Mã:
nano docker-compose.yml
Thêm cấu hình sau vào tệp docker-compose.yml.
Mã:
version: "2"

volumes:
 gitea-data:
 driver: local
 gitea-config:
 driver: local

services:
 server:
 image: gitea/gitea:1.16.8-rootless
 environment:
 - GITEA__database__DB_TYPE=postgres
 - GITEA__database__HOST=db:5432
 - GITEA__database__NAME=gitea
 - GITEA__database__USER=gitea
 - GITEA__database__PASSWD=gitea
 khởi động lại: luôn luôn
 khối lượng:
 - ./data:/var/lib/gitea
 - gitea-data:/var/lib/gitea
 - ./config:/etc/gitea
 - gitea-config:/etc/gitea
 - /etc/timezone:/etc/timezone:ro
 - /etc/localtime:/etc/localtime:ro
 cổng:
 - "3000:3000"
 - "2222:2222"
 phụ thuộc vào:
 - db

 db:
 hình ảnh: postgres:14
 khởi động lại: luôn luôn
 môi trường:
 - POSTGRES_USER=gitea
 - POSTGRES_PASSWORD=gitea
 - POSTGRES_DB=gitea
 khối lượng:
 - ./postgres:/var/lib/postgresql/data
Lưu và đóng tệp khi bạn hoàn tất.

Với các cấu hình này, bạn sẽ tạo các tài nguyên sau:
  • Hai ổ đĩa Docker gitea-data và gitea-config để lưu trữ dữ liệu người dùng Gitea và các tệp cấu hình.
  • Hai dịch vụ có tên "server" và "db".
  • Dịch vụ chứa Gitea sẽ chạy với tên "server", dựa trên hình ảnh Docker "gitea/gitea:1.16.8-rootless" và xuất các cổng TCP 30002222.
  • Dịch vụ chứa Gitea sẽ chạy với dịch vụ cơ sở dữ liệu PostgreSQL có tên là "db".
  • Dịch vụ "db" sẽ chạy như cơ sở dữ liệu cho dịch vụ Gitea với hình ảnh Docker mặc định là PostgreSQL "postgres:14". Tất cả dữ liệu liên quan đến dịch vụ "db" sẽ được lưu trữ cục bộ trên thư mục có tên "postgres".
Tiếp theo, chạy lệnh docker bên dưới để bắt đầu xây dựng và khởi động các dịch vụ container Gitea.
Mã:
docker compose up -d
Dưới đây, bạn có thể thấy quá trình tải xuống các hình ảnh Docker cần thiết cho Gitea.



Khi tất cả quá trình hoàn tất, bạn sẽ thấy đầu ra giống như ảnh chụp màn hình sau.



Bây giờ hãy chạy lệnh docker bên dưới để kiểm tra các dịch vụ container Gitea.
Mã:
docker compose ps
Trong ảnh chụp màn hình sau, bạn có thể thấy dịch vụ có tên "server" và "db" đang chạy, điều này có nghĩa là quá trình triển khai dịch vụ container Gitea đã hoàn tất và thành công.

Dịch vụ Gitea đang chạy trên máy chủ cục bộ với cổng 3000. Và cổng 2222 có thể được sử dụng cho các kết nối SSH.



nếu bạn gặp lỗi trong quá trình cài đặt, bạn luôn kiểm tra nhật ký của các dịch vụ container bằng các lệnh bên dưới.

Kiểm tra nhật ký từ tất cả các dịch vụ container.
Mã:
docker compose logs
Kiểm tra nhật ký cho từng dịch vụ container db và máy chủ.
Mã:
docker compose logs db
docker compose logs server

Thiết lập Nginx làm Proxy ngược cho Gitea​

Bạn đã hoàn tất cài đặt dịch vụ container Gitea, bây giờ bạn sẽ cài đặt và cấu hình máy chủ web Nginx làm proxy ngược cho dịch vụ container Gitea đang chạy trên cổng mặc định 3000.

Trong ví dụ này, dịch vụ container Gitea sẽ chạy với tên miền git.howtoforge.local và SSL Letsencrypt được bật. Vì vậy, trước khi bạn thiết lập proxy ngược nginx, hãy đảm bảo rằng bạn đã tạo tên miền và SSL Letsencrypted cho tên miền của mình.

Bây giờ hãy cài đặt gói Nginx bằng lệnh apt bên dưới.
Mã:
sudo apt install nginx
Nhập Y để xác nhận cài đặt và nhấn ENTER để tiếp tục.



Tiếp theo, tạo cấu hình SSL mới /etc/nginx/snippets/ssl.conf bằng trình soạn thảo nano.
Mã:
sudo nano /etc/nginx/snippets/ssl.conf
Thêm cấu hình sau vào tệp. Ngoài ra, bạn sẽ cần thay đổi đường dẫn chứng chỉ SSL.
Mã:
ssl_certificate /etc/letsencrypt/live/git.howtoforge.local/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/git.howtoforge.local/privkey.pem;

# từ https://cipherli.st/
# và https://raymii.org/s/tutorials/Strong_SSL_Security_On_nginx.html

ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_prefer_server_ciphers on;
ssl_ciphers "EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH";
ssl_ecdh_curve secp384r1;
ssl_session_cache shared:SSL:10m;
ssl_session_tickets tắt;
#ssl_stapling bật;
#ssl_stapling_verify bật;
#resolver 8.8.8.8 8.8.4.4 valid=300 giây;
#resolver_timeout 5 giây;
# Tắt tải trước HSTS ngay bây giờ. Bạn có thể sử dụng dòng tiêu đề được chú thích bao gồm 
# chỉ thị "preload" nếu bạn hiểu ý nghĩa của nó. 
#add_header Strict-Transport-Security "max-age=63072000; includeSubdomains; preload";
add_header Strict-Transport-Security "max-age=63072000; includeSubdomains";
add_header X-Frame-Options DENY;
add_header X-Content-Type-Options nosniff;
Lưu và đóng tệp khi bạn hoàn tất.

Tiếp theo, tạo cấu hình khối máy chủ Nginx mới cho proxy ngược Gitea /etc/nginx/sites-available/gitea.conf bằng trình soạn thảo nano.
Mã:
sudo nano /etc/nginx/sites-available/gitea.conf
Thêm cấu hình sau vào tệp và đảm bảo t thay đổi tên miền git.howtoforge.local bằng tên miền của bạn.
Mã:
server {
 server_name git.howtoforge.local;
 listen 443 ssl http2;
 include snippets/ssl.conf;

 # Tệp nhật ký
 access_log /var/log/nginx/gitea.access.log;
 error_log /var/log/nginx/gitea.error.log;

 location / {
 proxy_pass http://localhost:3000;
 proxy_set_header Host $host;
 proxy_set_header X-Real-IP $remote_addr;
 proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
 proxy_set_header X-Forwarded-Proto $scheme;
 }
}
Lưu và đóng tệp khi bạn hoàn tất.

Bây giờ hãy chạy lệnh sau để kích hoạt cấu hình khối máy chủ gitea.conf và xác minh cấu hình Nginx.
Mã:
sudo ln -s /etc/nginx/sites-available/gitea.conf /etc/nginx/sites-enabled/
sudo nginx -t
Nếu cấu hình của bạn đúng, bạn sẽ thấy thông báo đầu ra như "cú pháp ok - thử nghiệm thành công".

Cuối cùng, hãy khởi động lại dịch vụ nginx để áp dụng cấu hình khối máy chủ Nginx mới gitea.conf và cấu hình SSL ssl.conf.
Mã:
sudo systemctl restart nginx
Bây giờ bạn đã hoàn tất cấu hình Nginx dưới dạng proxy ngược cho dịch vụ vùng chứa Gitea, hiện đang chạy trên tên miền https://git.howtoforge.local với SSL được bật trên đó.

Bắt đầu cấu hình cài đặt Gitea​

Để bắt đầu cài đặt và cấu hình Gitea, hãy mở trình duyệt web của bạn và truy cập tên miền gitea để cài đặt (ví dụ: https://git.howtoforge.local). Và bây giờ bạn sẽ thấy trang cài đặt Gitea.

Trong phần Cấu hình ban đầu, hãy để mặc định vì nó tự động điền thông tin xác thực cơ sở dữ liệu PostgreSQL từ tệp docker-compose.yml.



Bây giờ hãy thay đổi "Miền máy chủ" và "URL cơ sở Gitea" của Gitea bằng cài đặt tên miền của bạn. Trong ví dụ này, tên miền là https://git.howtoforge.local.



Trong phần "Cài đặt tùy chọn", hãy nhấp vào mũi tên trên "Cài đặt tài khoản quản trị viên". Bây giờ hãy nhập tên người dùng quản trị mới, mật khẩu và địa chỉ email cho máy chủ Gitea của bạn và nhấp vào nút "Cài đặt Gitea".



Sau khi quá trình cài đặt hoàn tất, bạn sẽ được chuyển hướng đến trang chủ Gitea và đăng nhập với tư cách là người dùng mới mà bạn vừa tạo.



Quá trình cài đặt và cấu hình Gitea với Docker trên Ubuntu 22.04 mới nhất đã hoàn tất và thành công.

Kết luận​

Xin chúc mừng! Bây giờ bạn đã hoàn tất quá trình cài đặt máy chủ git tự lưu trữ có tên là Gitea với Docker trên máy chủ Ubuntu 22.04 mới nhất. Ngoài ra, bạn đã tìm hiểu cấu hình cơ bản của docker-compose.yml để tạo dịch vụ container. Ngoài ra, bạn đã tìm hiểu cách thiết lập Nginx làm proxy ngược cho ứng dụng container, trong ví dụ này là dịch vụ container Gitea.
 
Back
Bên trên