Trong thế giới phát triển phần mềm ngày càng nhanh chóng, việc quản lý mã nguồn hiệu quả là yếu tố then chốt cho mọi dự án. Gitea nổi lên như một giải pháp quản lý mã nguồn mở, nhẹ và vô cùng mạnh mẽ, mang lại sự linh hoạt mà nhiều nhà phát triển tìm kiếm. Bài viết này của AZWEB sẽ hướng dẫn bạn chi tiết cách cài đặt Ubuntu trên hệ điều hành Ubuntu bằng Docker, một công cụ ảo hóa giúp triển khai ứng dụng dễ dàng và nhất quán. Bạn sẽ khám phá từng bước, từ chuẩn bị môi trường đến cấu hình và bảo trì, đảm bảo Gitea của bạn hoạt động mượt mà, tối ưu nhất. Hãy cùng AZWEB xây dựng một hệ thống quản lý mã nguồn chuyên nghiệp, đơn giản ngay hôm nay!
Giới thiệu về Gitea và ưu điểm quản lý mã nguồn nhẹ
Gitea là một dịch vụ Git tự host, mã nguồn mở, được thiết kế để trở thành một giải pháp thay thế nhẹ và thân thiện với người dùng cho các nền tảng quản lý mã nguồn lớn hơn. Được viết bằng ngôn ngữ Go, Gitea nổi bật với hiệu suất cao và yêu cầu tài nguyên hệ thống thấp, rất lý tưởng cho các máy chủ nhỏ hoặc môi trường tài nguyên hạn chế. Đây là một “kiến trúc sư” đáng tin cậy giúp bạn xây dựng nền tảng quản lý mã nguồn riêng.
Khi so sánh với các nền tảng khác như GitLab hay GitHub, Gitea cung cấp đầy đủ các tính năng cơ bản như quản lý kho lưu trữ Git, theo dõi vấn đề, pull request, và quản lý người dùng. Tuy nhiên, Gitea loại bỏ sự phức tạp và cồng kềnh, tập trung vào sự đơn giản và tốc độ. Điều này giúp các nhóm phát triển nhỏ và cá nhân dễ dàng triển khai, vận hành mà không cần đầu tư nhiều vào hạ tầng.
Sử dụng Gitea trên môi trường Docker mang lại vô số lợi ích vượt trội. Docker giúp đóng gói Gitea và tất cả các phụ thuộc của nó vào một container độc lập, đảm bảo tính nhất quán giữa các môi trường khác nhau. Bạn có thể dễ dàng triển khai, sao lưu, di chuyển hoặc nâng cấp Gitea mà không lo lắng về xung đột hệ thống. Đây chính là “đồng minh” giúp bạn quản lý mã nguồn một cách linh hoạt và hiệu quả.
Chuẩn bị môi trường cài đặt trên Ubuntu
Yêu cầu hệ thống cần có
Để cài đặt Gitea trên Ubuntu bằng Docker một cách suôn sẻ, việc chuẩn bị một môi trường hệ thống phù hợp là bước đầu tiên và quan trọng nhất. Bạn cần đảm bảo hệ điều hành Ubuntu là gì của mình là phiên bản mới nhất hoặc được hỗ trợ tốt, khuyến nghị sử dụng Ubuntu 20.04 LTS hoặc 22.04 LTS. Điều này đảm bảo tính ổn định và khả năng tương thích với các gói phần mềm mới nhất.
Về tài nguyên phần cứng, Gitea nổi tiếng là nhẹ, nhưng vẫn cần một lượng tài nguyên tối thiểu để hoạt động ổn định. Đối với các trường hợp sử dụng cá nhân hoặc nhóm nhỏ, bạn nên có ít nhất 2GB RAM là gì và 2 CPU core. Dung lượng ổ đĩa tối thiểu là 20GB, nhưng hãy cân nhắc tăng thêm tùy thuộc vào số lượng kho lưu trữ và kích thước dự án của bạn.
Cập nhật hệ điều hành và các gói cần thiết
Sau khi đã có một máy chủ Ubuntu đáp ứng yêu cầu, bước tiếp theo là cập nhật hệ điều hành và các gói phần mềm. Điều này giúp khắc phục các lỗ hổng bảo mật và đảm bảo bạn có các phiên bản phần mềm mới nhất. Mở terminal và chạy các lệnh sau để cập nhật hệ thống của bạn:
sudo apt update
sudo apt upgrade -y
Sau khi hệ thống được cập nhật, bạn nên cài đặt một số tiện ích bổ trợ cần thiết như curl và gnupg nếu chúng chưa có. Đây là những công cụ hữu ích cho việc tải xuống và xác thực các gói phần mềm trong quá trình cài đặt Docker. Chạy lệnh sau để cài đặt chúng:
sudo apt install -y curl gnupg2 software-properties-common apt-transport-https ca-certificates
Những bước chuẩn bị này là nền tảng vững chắc để bạn tiếp tục quá trình cài đặt Docker và Gitea một cách thành công.

Cài đặt Docker và các yêu cầu cần thiết
Cách cài đặt Docker trên Ubuntu
Docker là xương sống của hệ thống Gitea mà chúng ta sẽ triển khai, vì vậy việc cài đặt Docker một cách chính xác là cực kỳ quan trọng. Để đảm bảo bạn có phiên bản Docker ổn định và được hỗ trợ, chúng ta sẽ thêm repository chính thức của Docker vào hệ thống. Đầu tiên, thêm khóa GPG của Docker:
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg –dearmor -o /etc/apt/keyrings/docker.gpg
Tiếp theo, thêm repository của Docker vào APT sources của bạn:
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 khi thêm repository, hãy cập nhật lại danh sách gói và cài đặt Docker Engine cùng với Docker Compose:
sudo apt update
sudo apt install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
Kiểm tra và xác minh Docker hoạt động
Sau khi quá trình cài đặt hoàn tất, điều cần thiết là kiểm tra để đảm bảo Docker đã được cài đặt đúng cách và đang hoạt động. Bạn có thể kiểm tra phiên bản Docker đã cài đặt bằng lệnh sau:
docker version
Để xác minh Docker Engine đang chạy và hoạt động, bạn có thể chạy thử một container đơn giản. Lệnh phổ biến nhất để kiểm tra là chạy container “hello-world”:
sudo docker run hello-world
Nếu bạn thấy thông báo “Hello from Docker!” trên terminal, điều đó có nghĩa là Docker đã được cài đặt thành công và sẵn sàng để bạn sử dụng. Cuối cùng, để tránh việc phải sử dụng sudo mỗi khi chạy lệnh Docker, bạn có thể thêm người dùng hiện tại vào nhóm docker:
sudo usermod -aG docker $USER
Sau khi chạy lệnh này, bạn cần đăng xuất và đăng nhập lại (hoặc khởi động lại máy) để các thay đổi có hiệu lực. Bây giờ, Docker của bạn đã sẵn sàng để triển khai Gitea.

Tạo volume lưu trữ dữ liệu cho Gitea trong Docker
Khái niệm volume trong Docker và vai trò lưu trữ dữ liệu
Trong Docker, volume đóng vai trò cực kỳ quan trọng trong việc quản lý dữ liệu cho các container. Hiểu một cách đơn giản, volume là một cơ chế lưu trữ dữ liệu bền vững, được tách biệt hoàn toàn khỏi vòng đời của container. Điều này có nghĩa là ngay cả khi container của bạn bị xóa, dữ liệu trong volume vẫn được bảo toàn. Đây là một “kiến trúc sư” giúp đảm bảo an toàn dữ liệu.
Đối với Gitea, việc sử dụng volume để lưu trữ dữ liệu là bắt buộc. Gitea cần lưu trữ cơ sở dữ liệu, các kho lưu trữ Git, cấu hình, và các tệp đính kèm. Nếu không sử dụng volume, tất cả dữ liệu này sẽ nằm trong container và sẽ bị mất khi container bị xóa hoặc cập nhật. Volume giúp đảm bảo tính toàn vẹn và khả năng phục hồi của dữ liệu Gitea.
Hướng dẫn tạo volume riêng cho dữ liệu Gitea
Để tạo một volume riêng biệt cho Gitea, bạn có thể sử dụng lệnh docker volume create. Việc này tạo ra một không gian lưu trữ được quản lý bởi Docker, sẵn sàng để liên kết với container Gitea của bạn. Chạy lệnh sau để tạo volume:
docker volume create gitea_data
Lệnh này sẽ tạo một volume có tên là gitea_data. Bạn có thể thay đổi tên volume theo ý muốn, nhưng hãy đảm bảo sử dụng một tên dễ nhớ và có ý nghĩa. Sau khi tạo, volume này sẽ tồn tại trên hệ thống máy chủ Docker của bạn, tách biệt với bất kỳ container nào.
Quy trình liên kết volume vào container sẽ được thực hiện trong file docker-compose.yml ở các bước sau. Trong file đó, bạn sẽ chỉ định rằng container Gitea sẽ sử dụng gitea_data volume để lưu trữ tất cả dữ liệu quan trọng. Điều này đảm bảo rằng mọi thay đổi, mọi dự án và mọi cấu hình của Gitea sẽ được lưu trữ an toàn và bền vững, không bị ảnh hưởng bởi quá trình khởi động lại hay cập nhật container. Đây là một “đồng minh” đáng tin cậy cho dữ liệu của bạn.

Cấu hình container Docker cho Gitea
Viết file docker-compose.yml chuẩn cho Gitea
Để triển khai Gitea cùng với cơ sở dữ liệu một cách dễ dàng và có tổ chức, chúng ta sẽ sử dụng Docker Compose. Docker Compose cho phép bạn định nghĩa và chạy các ứng dụng đa container bằng một file YAML đơn giản. Tạo một file mới tên là docker-compose.yml trong thư mục làm việc của bạn và thêm nội dung sau:
version: ‘3’
services:
gitea:
image: gitea/gitea:latest
container_name: gitea
restart: always
ports:
– “3000:3000”
– “2222:22”
volumes:
– gitea_data:/data
– /etc/timezone:/etc/timezone:ro
– /etc/localtime:/etc/localtime:ro
environment:
– GITEA__database__DB_TYPE=sqlite3
– GITEA__database__PATH=/data/gitea/gitea.db
– GITEA__server__ROOT_URL=http://your_domain_or_ip:3000/
volumes:
gitea_data:
external: true
Trong file này, chúng ta định nghĩa một dịch vụ gitea sử dụng image gitea/gitea:latest. Các tham số cấu hình quan trọng bao gồm ports (ánh xạ cổng 3000 và 22 từ container ra máy chủ), volumes (liên kết volume gitea_data đã tạo với thư mục /data bên trong container), và environment variables để cấu hình Gitea.
Tùy chỉnh cấu hình nâng cao theo nhu cầu cá nhân
File docker-compose.yml trên cung cấp cấu hình cơ bản cho Gitea với SQLite làm cơ sở dữ liệu. Tuy nhiên, bạn có thể dễ dàng tùy chỉnh cấu hình nâng cao để phù hợp với nhu cầu cụ thể của mình. Ví dụ, nếu bạn muốn sử dụng MySQL hoặc PostgreSQL thay vì SQLite, bạn sẽ cần thêm một dịch vụ cơ sở dữ liệu khác vào file docker-compose.yml và cập nhật các biến môi trường của Gitea tương ứng.
Để tăng cường bảo mật, bạn có thể thiết lập Gitea chạy trên HTTPS bằng cách sử dụng một reverse proxy như Nginx hoặc Apache. Khi đó, bạn sẽ ánh xạ cổng 443 từ reverse proxy đến cổng 3000 của Gitea container, đồng thời cấu hình chứng chỉ SSL/TLS. Ngoài ra, bạn có thể điều chỉnh các biến môi trường khác của Gitea để tùy chỉnh email server, LDAP authentication, hoặc các thiết lập nâng cao khác. Đừng quên thay your_domain_or_ip bằng địa chỉ IP hoặc tên miền thực tế của bạn. Việc tùy chỉnh này biến Gitea thành một “kiến trúc sư” hoàn hảo cho quy trình làm việc của bạn.

Khởi chạy và kiểm tra dịch vụ Gitea
Chạy container và kiểm tra trạng thái hoạt động
Khi file docker-compose.yml đã được cấu hình xong, bước tiếp theo là khởi chạy Gitea container. Điều này được thực hiện bằng một lệnh đơn giản của Docker Compose. Điều hướng đến thư mục chứa file docker-compose.yml của bạn trong terminal và chạy lệnh sau:
docker compose up -d
Lệnh docker compose up -d sẽ tải xuống image Gitea (nếu chưa có), tạo và khởi động container Gitea ở chế độ nền. Tham số -d (detached mode) cho phép container chạy ngầm mà không chiếm giữ terminal của bạn. Sau khi chạy lệnh này, bạn có thể kiểm tra trạng thái của container để đảm bảo nó đã khởi động thành công. Sử dụng lệnh:
docker ps
Bạn sẽ thấy một dòng hiển thị container gitea đang chạy, cùng với các thông tin về cổng và thời gian hoạt động. Nếu có bất kỳ lỗi nào, bạn có thể kiểm tra log của container để tìm hiểu nguyên nhân. Dùng lệnh docker compose logs gitea để xem chi tiết log của dịch vụ Gitea.
Truy cập giao diện web và thiết lập ban đầu
Với container Gitea đang chạy, bây giờ là lúc truy cập giao diện web của nó để thực hiện thiết lập ban đầu. Mở trình duyệt web và nhập địa chỉ IP hoặc tên miền của máy chủ Ubuntu của bạn, theo sau là cổng 3000. Ví dụ: http://your_server_ip:3000.
Lần đầu tiên truy cập, Gitea sẽ hiển thị trang cấu hình ban đầu. Tại đây, bạn cần nhập thông tin về cơ sở dữ liệu (nếu bạn không dùng SQLite mặc định), thiết lập tài khoản quản trị viên đầu tiên (admin user) và các tùy chọn khác như tên trang web Gitea, URL gốc. Hãy đảm bảo rằng URL Gitea gốc được cấu hình chính xác với địa chỉ mà bạn sẽ truy cập Gitea. Sau khi điền đầy đủ thông tin, nhấn “Cài đặt Gitea” để hoàn tất quá trình. Bây giờ, Gitea của bạn đã sẵn sàng để sử dụng như một “đồng minh” đáng tin cậy cho việc quản lý mã nguồn.

Hướng dẫn quản lý và bảo trì Gitea trên Docker
Cách cập nhật Gitea phiên bản mới trong container
Việc cập nhật Gitea lên phiên bản mới nhất là rất quan trọng để đảm bảo bạn luôn có các tính năng mới nhất, cải thiện hiệu suất và các bản vá bảo mật. Quy trình cập nhật Gitea khi chạy bằng Docker rất đơn giản và an toàn. Tuy nhiên, luôn nhớ rằng việc đầu tiên cần làm trước khi cập nhật bất kỳ phần mềm nào là sao lưu dữ liệu. Với Gitea trên Docker, bạn chỉ cần sao lưu volume gitea_data của mình. Sau khi sao lưu, hãy dừng container Gitea hiện tại và xóa nó:
docker compose down
Tiếp theo, kéo image Gitea phiên bản mới nhất từ Docker Hub:
docker compose pull gitea
Cuối cùng, khởi động lại Gitea bằng Docker Compose:
docker compose up -d
Docker sẽ sử dụng image mới nhất mà bạn vừa kéo. Dữ liệu của bạn sẽ được giữ nguyên vì nó nằm trong volume gitea_data, tách biệt với container. Gitea sẽ tự động thực hiện các nâng cấp cơ sở dữ liệu cần thiết khi khởi động với phiên bản mới.
Giám sát và xử lý sự cố thường gặp
Giám sát Gitea là một phần quan trọng của việc duy trì một hệ thống quản lý mã nguồn ổn định. Bạn nên thường xuyên kiểm tra log của container Gitea để phát hiện sớm các vấn đề. Sử dụng lệnh:
docker compose logs gitea
Lệnh này sẽ hiển thị tất cả các log từ dịch vụ Gitea, giúp bạn theo dõi hoạt động và phát hiện các lỗi. Nếu Gitea không hoạt động đúng cách, hãy kiểm tra log để tìm thông báo lỗi cụ thể. Các sự cố thường gặp có thể bao gồm lỗi kết nối cơ sở dữ liệu, lỗi quyền truy cập file, hoặc các vấn đề liên quan đến cấu hình mạng.
Để tối ưu hiệu suất, hãy đảm bảo rằng máy chủ của bạn có đủ tài nguyên (CPU, RAM). Nếu Gitea chậm, bạn có thể cần xem xét nâng cấp tài nguyên máy chủ hoặc tối ưu cấu hình Gitea. Gitea cung cấp nhiều tùy chọn cấu hình để tinh chỉnh hiệu suất. Việc giám sát và xử lý sự cố kịp thời biến bạn thành một “kiến trúc sư” luôn đảm bảo hệ thống hoạt động trơn tru.

Các lỗi phổ biến và cách khắc phục
Lỗi không kết nối được tới giao diện web Gitea
Một trong những lỗi phổ biến nhất khi cài đặt Gitea là không thể truy cập giao diện web thông qua trình duyệt. Khi gặp phải tình huống này, có một số bước kiểm tra bạn nên thực hiện. Đầu tiên, hãy đảm bảo rằng container Gitea đang chạy. Sử dụng lệnh docker ps để xác nhận trạng thái của container. Nếu container không chạy, hãy kiểm tra log bằng docker compose logs gitea để tìm nguyên nhân cụ thể.
Tiếp theo, hãy kiểm tra cấu hình cổng trong file docker-compose.yml của bạn. Đảm bảo rằng cổng mà bạn đang cố gắng truy cập (ví dụ: 3000) đã được ánh xạ đúng từ container ra máy chủ. Đồng thời, kiểm tra tường lửa trên máy chủ Ubuntu của bạn. Nếu bạn đang sử dụng ufw hoặc một tường lửa khác, hãy đảm bảo rằng cổng 3000 (hoặc cổng mà bạn đã cấu hình cho Gitea) đã được mở. Ví dụ: sudo ufw allow 3000/tcp. Cuối cùng, hãy xác nhận rằng GITEA__server__ROOT_URL trong biến môi trường đã được cấu hình đúng với địa chỉ IP hoặc tên miền của máy chủ. Đây là “đồng minh” giúp bạn khắc phục lỗi nhanh chóng.
Lỗi quyền truy cập volume hoặc dữ liệu mất khi khởi động lại
Một vấn đề khác mà người dùng Docker Gitea thường gặp là các lỗi liên quan đến quyền truy cập volume hoặc tình trạng dữ liệu bị mất sau khi khởi động lại container. Lỗi quyền truy cập thường xảy ra khi người dùng hoặc nhóm sở hữu thư mục trên máy chủ không khớp với UID/GID mà Gitea container sử dụng. Mặc định, Gitea chạy bên trong container với một người dùng có UID nhất định (thường là 1000 hoặc khác).
Để khắc phục, bạn có thể thử điều chỉnh quyền sở hữu của thư mục dữ liệu trên máy chủ lưu trữ volume. Ví dụ, nếu volume gitea_data của bạn nằm ở /var/lib/docker/volumes/gitea_data/_data, bạn có thể cần chạy sudo chown -R 1000:1000 /var/lib/docker/volumes/gitea_data/_data để thay đổi quyền sở hữu (thay 1000 bằng UID/GID thực tế của người dùng Gitea trong container, có thể kiểm tra trong log). Đối với lỗi dữ liệu mất khi khởi động lại, nguyên nhân gần như chắc chắn là do bạn chưa liên kết volume một cách chính xác trong docker-compose.yml. Hãy kiểm tra lại phần volumes trong file docker-compose.yml để đảm bảo gitea_data:/data đã được cấu hình đúng, với gitea_data là tên volume bạn đã tạo trước đó. Nếu đã đảm bảo các bước này, hệ thống của bạn sẽ ổn định.

Các thực hành tốt khi sử dụng Gitea trên Docker
Để đảm bảo Gitea của bạn hoạt động ổn định, an toàn và hiệu quả trên Docker, việc áp dụng các thực hành tốt là điều cần thiết. Đầu tiên và quan trọng nhất, hãy luôn sao lưu dữ liệu định kỳ. Dù bạn đang sử dụng Docker volume, việc sao lưu vẫn là tuyến phòng thủ cuối cùng chống lại mất mát dữ liệu do lỗi hệ thống, phần cứng hỏng, hoặc vô tình xóa. Bạn có thể sao lưu volume gitea_data bằng cách sử dụng các công cụ sao lưu hệ thống hoặc Docker CLI.
Không nên chạy container dưới quyền root. Mặc định, các image Docker được thiết kế để chạy các dịch vụ với quyền hạn thấp nhất có thể. Chạy container Gitea dưới quyền root có thể tạo ra lỗ hổng bảo mật tiềm ẩn. Hãy kiểm tra các hướng dẫn của Gitea hoặc Docker để đảm bảo rằng container của bạn đang chạy với người dùng không phải root.
Tối ưu tài nguyên là yếu tố then chốt để tránh gián đoạn dịch vụ. Mặc dù Gitea nhẹ, nhưng nếu có quá nhiều kho lưu trữ hoặc người dùng đồng thời, nó vẫn cần đủ CPU và RAM. Giám sát việc sử dụng tài nguyên của container Docker và máy chủ là cần thiết để điều chỉnh khi cần. Cuối cùng, hãy cập nhật Gitea và Docker thường xuyên để đảm bảo bảo mật và khả năng tương thích. Các bản cập nhật thường bao gồm các bản vá bảo mật quan trọng và cải tiến hiệu suất, giúp Gitea của bạn luôn trong tình trạng tốt nhất. Việc tuân thủ những nguyên tắc này sẽ biến bạn thành một “kiến trúc sư” luôn giữ cho hệ thống hoạt động tối ưu.

Kết luận
Thông qua bài viết này, chúng ta đã cùng AZWEB đi qua một hành trình chi tiết từ việc chuẩn bị môi trường Ubuntu đến cài đặt Docker, cấu hình và khởi chạy Gitea một cách thành công. Bạn đã học cách tạo volume bền vững, viết file docker-compose.yml chuyên nghiệp, và tùy chỉnh Gitea theo nhu cầu riêng. Đây là nền tảng vững chắc để bạn quản lý mã nguồn của mình một cách hiệu quả, an toàn và linh hoạt.
Với những kiến thức đã được chia sẻ, AZWEB khuyến khích bạn bắt đầu trải nghiệm ngay với Gitea để cảm nhận sự nhẹ nhàng, mạnh mẽ mà nó mang lại. Gitea không chỉ là một kho lưu trữ Git mà còn là một công cụ giúp tối ưu hóa quy trình phát triển của bạn. Đừng ngần ngại thử nghiệm và khai thác tối đa tiềm năng của nó.
Để tiếp tục mở rộng khả năng của Gitea, bạn có thể khám phá cách tích hợp nó với các hệ thống CI/CD như Jenkins hoặc GitLab CI/CD để tự động hóa quá trình kiểm thử và triển khai. Ngoài ra, việc tìm hiểu sâu hơn về cấu hình bảo mật Gitea và Docker sẽ giúp bạn xây dựng một môi trường phát triển mạnh mẽ và đáng tin cậy. AZWEB luôn đồng hành cùng bạn trên con đường phát triển kỹ thuật số.
