Git server tự host: Forgejo, Gitea hay cgit?
So sánh 4 cách chạy Git server tự host theo RAM: bare repo qua SSH, cgit, Forgejo hoặc Gitea và GitLab. Biết VPS 1 GB chạy được lựa chọn nào.
Nên chạy Git server tự host nào
Git server tự host không chỉ có một sản phẩm, và dung lượng RAM (random access memory) trên VPS quyết định bạn có thể dùng phiên bản nào. Git không cần daemon riêng: một bare repository cùng tài khoản SSH (secure shell) đã là một server hoạt động được trên VPS nhỏ nhất mà bạn có thể thuê. Mọi lựa chọn cao hơn đều là web application bạn chạy thêm bên cạnh nó, và mỗi cấp đều tiêu tốn thêm dung lượng bộ nhớ mà một VPS nhỏ có thể không đáp ứng được.
Có 4 cấp. Bare repository qua SSH, không có tiến trình nào lắng nghe ngoài những tiến trình vốn đã lắng nghe. cgit là giao diện web chỉ đọc, hoạt động nhanh và không cần database. Forgejo hoặc Gitea là một forge đầy đủ, có account, issue và pull request, chạy được với vài trăm megabyte. GitLab cần một server lớn hơn các lựa chọn còn lại nhiều lần.
Hãy quyết định dựa trên công việc bạn cần thực hiện, rồi đối chiếu dung lượng bộ nhớ với gói VPS bạn đang trả phí.
Mỗi lựa chọn thực sự cần bao nhiêu RAM
Chỉ hai dự án trong số này công bố thông số phần cứng. Hãy xem thông số đã công bố là mức tối thiểu, không phải bảo đảm hoạt động, và đo instance của bạn sau khi chạy bằng systemd-cgtop hoặc ps -o rss= -C forgejo.
The data behind this chart
[
{
"label": "Gitea, small team",
"ram_gb": 1
},
{
"label": "GitLab, memory constrained",
"ram_gb": 8
},
{
"label": "GitLab, single node baseline",
"ram_gb": 16
}
]Gitea ghi rõ 1 GB RAM với 2 lõi CPU thường là đủ cho các nhóm và dự án nhỏ, đồng thời cho biết Raspberry Pi 3 đủ cho workload nhỏ. GitLab ghi rõ 16 GB là mức cơ bản cho một cài đặt single-node, và 8 GB là mức thấp nhất cho môi trường bị giới hạn bộ nhớ, theo cách gọi trên chính trang của họ. Forgejo không công bố yêu cầu phần cứng nào. Đây là fork của Gitea và hoạt động tương tự, nên thông số của Gitea là hướng dẫn gần nhất mà bạn có.
Điều đó có nghĩa gì trên VPS 1 GB: bare repository và cgit vẫn chạy vừa đủ, còn dư tài nguyên, vì cả hai không chạy resident service. Forgejo hoặc Gitea sẽ khởi động và phục vụ một nhóm nhỏ trên SQLite, nhưng bạn đang ở đúng mức tối thiểu đã nêu trong tài liệu. Vì vậy, không chạy PostgreSQL và CI (continuous integration) runner trên máy đó. Nếu web interface biến mất mà không có lỗi, hãy chạy sudo dmesg -T | grep -i oom và tìm dòng như Out of memory: Killed process 1181 (forgejo). Dòng đó có nghĩa là kernel out of memory killer đã dừng tiến trình. GitLab trên máy 1 GB không phải vấn đề tuning. Nó sẽ không chạy.
Cấp 0: repository trần qua SSH
Git không có network daemon cần khởi động. git push qua SSH chạy git-receive-pack ở máy bên kia dưới dạng một process Unix thông thường, nên mọi account bạn có thể truy cập bằng key đều đã là một Git remote. Tạo một account riêng cho các repository, và đặt các repository bên ngoài thư mục home của account đó, vì trên Ubuntu 24.04, thư mục home mới có mode 0750 và web view thêm sau này sẽ không thể đọc vào đó.
sudo adduser --system --shell /bin/bash --gecos 'Git Version Control' \
--group --disabled-password --home /home/git git
sudo install -d -m 0755 -o git -g git /srv/git
sudo -u git git init --bare /srv/git/project.git--bare tạo một repository không có working copy, đúng với loại repository mà server lưu giữ. Push vào repository có working copy sẽ bị từ chối với refusing to update checked out branch: refs/heads/main, và đây là lỗi phổ biến nhất ở cấp này.
Bây giờ cấp key cho account rồi clone repository.
sudo -u git install -d -m 700 /home/git/.ssh
sudo -u git tee -a /home/git/.ssh/authorized_keys <<'EOF'
ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIexamplekeyhere alice@laptop
EOF
sudo -u git chmod 600 /home/git/.ssh/authorized_keysgit remote add origin git@vps.example.com:/srv/git/project.git
git push -u origin mainMột lần push thành công sẽ kết thúc với * [new branch] main -> main. Nếu kết thúc với git@vps.example.com: Permission denied (publickey) thì quá trình xác thực chưa từng thành công, vì vậy hãy đọc log server bằng sudo journalctl -u ssh -n 20. Dòng có nội dung Authentication refused: bad ownership or modes for file /home/git/.ssh/authorized_keys nghĩa là file mode không đúng, vì sshd bỏ qua file key mà user khác có quyền ghi.
Sau đó tắt shell của account.
command -v git-shell | sudo tee -a /etc/shells
sudo chsh -s "$(command -v git-shell)" gitgit-shell chỉ chấp nhận một vài command mà Git gửi qua SSH, nên lần interactive login sau đó sẽ dừng với một thông báo thay vì prompt:
fatal: Interactive git shell is not enabled.
hint: ~/git-shell-commands should exist and have read and execute access.Đó là toàn bộ server. Không có database và cũng không có web process cần nâng cấp. Đổi lại, bạn không có bất kỳ tính năng nào mà forge cung cấp: không browsing, không issue tracker, không pull request và không có quyền riêng cho từng user. Mọi key trong file đó đều có thể đọc và ghi mọi repository mà user git sở hữu.
Tầng 1: cgit cung cấp giao diện web mà không cần database
cgit là một chương trình CGI (common gateway interface) được viết bằng C. Web server chạy chương trình này một lần cho mỗi request, chương trình đọc trực tiếp các repository từ disk và không tự lưu state. Ubuntu 24.04 cung cấp cgit trong component universe.
sudo apt update
sudo apt install -y cgit fcgiwrap nginx
sudo install -d -o www-data -g www-data /var/cache/cgitTrỏ cgit đến thư mục chứa repository trong /etc/cgitrc:
root-title=Git on example.com
css=/cgit.css
logo=/cgit.png
cache-size=1000
cache-root=/var/cache/cgit
snapshots=tar.gz zip
scan-path=/srv/gitscan-path quét thư mục đó và liệt kê mọi repository tìm thấy, vì vậy bare repo mới sẽ xuất hiện mà không cần cấu hình thêm. cache-size là số trang được cache; cache vẫn tắt khi giá trị này bằng 0. Hãy đọc nội dung package đã ghi vào /etc/cgitrc trước khi thêm dòng mới, vì package Debian và Ubuntu đã có sẵn một số giá trị mặc định.
Mỗi entry hiển thị dòng đầu tiên trong file description của repository, vì vậy bare repo mới sẽ được liệt kê là Unnamed repository; edit this file 'description' to name the repository. Hãy sửa nội dung đó một lần cho mỗi repository:
echo 'Project X, internal tooling' | sudo -u git tee /srv/git/project.git/descriptionFile site của nginx và cách kiểm tra
server {
listen 80;
server_name git.example.com;
root /usr/share/cgit;
try_files $uri @cgit;
location @cgit {
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME /usr/lib/cgit/cgit.cgi;
fastcgi_param PATH_INFO $uri;
fastcgi_param QUERY_STRING $args;
fastcgi_param HTTP_HOST $server_name;
fastcgi_pass unix:/run/fcgiwrap.socket;
}
}sudo systemctl enable --now fcgiwrap.socket
sudo nginx -t && sudo systemctl reload nginx
systemctl show fcgiwrap.socket -p Listenroot /usr/share/cgit phục vụ cgit.css và cgit.png dưới dạng file tĩnh, còn try_files chuyển mọi request khác đến CGI tại /usr/lib/cgit/cgit.cgi. Trang lỗi 502 có connect() to unix:/run/fcgiwrap.socket failed (2: No such file or directory) trong /var/log/nginx/error.log nghĩa là socket unit chưa chạy hoặc đang listen trên path khác. Dòng systemctl show in ra path mà cgit thực sự sử dụng.
Có 2 giới hạn cần biết trước khi dựa vào cgit. cgit chỉ có quyền đọc và không có chức năng đăng nhập, nên mọi thứ bên dưới scan-path đều public: không đặt private repository trong thư mục đó, hoặc thêm HTTP basic authentication phía trước toàn bộ site. CGI chạy dưới user của web server, nên user đó phải traverse được /srv/git và đọc được từng repository. Nếu user này không thể vào một thư mục, thư mục đó sẽ xuất hiện dưới dạng index rỗng thay vì báo lỗi.
Forgejo hoặc Gitea cho issue và pull request
Forgejo và Gitea có cùng mô hình: một binary Go cung cấp web forge với user, organisation, issue, pull request, release, package registry và hệ thống CI tích hợp sẵn. Toàn bộ quá trình cài đặt chỉ cần binary và SQLite. Vì vậy, chúng chạy được trên phần cứng mà GitLab không thể chạy. File Compose bên dưới là file trong tài liệu Forgejo, với image tag được tài liệu này nêu tại thời điểm tháng 8 năm 2026.
networks:
forgejo:
external: false
services:
server:
image: codeberg.org/forgejo/forgejo:16
container_name: forgejo
environment:
- USER_UID=1000
- USER_GID=1000
restart: always
networks:
- forgejo
volumes:
- ./forgejo:/data
- /etc/localtime:/etc/localtime:ro
ports:
- '3000:3000'
- '222:22'docker compose up -d
docker compose ps
curl -sI http://127.0.0.1:3000 | head -1Dòng curl phải in ra một HTTP status line. Trước khi hoàn tất thiết lập lần đầu, dòng này có thể là redirect đến /install. Điều đó vẫn có nghĩa là service đang hoạt động. Nếu container thoát thay vì trả về phản hồi, nguyên nhân thường là ownership: thư mục ./forgejo phải thuộc về UID (user id) trong USER_UID. Nếu không, tiến trình không thể ghi vào data directory của chính nó. Docker Compose trên VPS trình bày đầy đủ layout của file và quy tắc ownership của volume.
Hai câu trả lời trên trang thiết lập quyết định clone URL có hoạt động hay không. SSH port phải là 222, vì file Compose map host port 222 vào port 22 của container. Domain phải là tên mà người dùng thực sự sẽ nhập. Chỉ cần sai một trong hai, mọi repository page sẽ cung cấp clone command bị lỗi cho tất cả người sao chép command đó. Sau này, cả hai nằm trong phần [server] của app.ini, lần lượt là SSH_PORT, SSH_DOMAIN và ROOT_URL.
Với instance public, chỉ publish web port trên loopback address ('127.0.0.1:3000:3000'), rồi đặt nginx phía trước để xử lý TLS (transport layer security). Gitea cũng cài theo cách tương tự từ image gitea/gitea, hoặc dưới dạng một binary duy nhất với một systemd unit và một app.ini. Tính đến tháng 8 năm 2026, stable release hiện tại của nó là 1.27.1.
Hãy tiếp tục dùng SQLite khi có thể. Nó giữ instance ở dạng một process và một file, đồng thời vẫn hoạt động sau reboot mà không cần giám sát thêm service nào. PostgreSQL đáng dùng khi có nhiều người ghi dữ liệu cùng lúc, vì SQLite tuần tự hóa các thao tác ghi và những lần chạy CI dài liên tục ghi dữ liệu. Cả hai project đều có thể chuyển instance hiện có sang PostgreSQL về sau, nên đây không phải quyết định không thể thay đổi.
Forgejo và Gitea: thực tế khác nhau ở đâu
Hai dự án có cùng nguồn gốc. Gitea fork từ Gogs vào năm 2016. Cuối năm 2022, quyền kiểm soát domain và trademark của Gitea được chuyển cho một công ty là Gitea Ltd. Một số maintainer cùng Codeberg sau đó đã bắt đầu Forgejo. Forgejo được Codeberg e.V., một hiệp hội phi lợi nhuận đăng ký tại Đức, phát hành. Năm 2024, dự án chuyển từ giấy phép MIT sang GPLv3 (GNU general public license version 3). Gitea vẫn dùng giấy phép MIT và được phát triển với sự hậu thuẫn thương mại.
Trong sử dụng hằng ngày, bộ tính năng của hai dự án khá giống nhau. Nhưng quá trình chuyển đổi giữa chúng thì không đơn giản. Forgejo v10.0, phát hành vào tháng 1 năm 2025, là bản cuối cùng có thể dùng trực tiếp database của Gitea, và chỉ hỗ trợ Gitea v1.22 hoặc cũ hơn. Tính đến tháng 8 năm 2026, Gitea đang ở phiên bản 1.27.1. Vì vậy, một instance Gitea hiện tại không có cách chuyển tại chỗ được hỗ trợ sang Forgejo. Hãy chọn một dự án trước khi đưa dữ liệu vào, và coi mọi lần chuyển đổi sau đó là quy trình export rồi import lại.
Quy tắc chọn nhanh như sau. Nếu bạn quan tâm đến governance hoặc muốn dự án tiếp tục thuộc một tổ chức phi lợi nhuận, hãy dùng Forgejo. Nếu bạn muốn có install base lớn hơn và tùy chọn hỗ trợ thương mại, hãy dùng Gitea. Cả hai đều được phát triển công khai và thường xuyên phát hành bản mới. Forgejo phát hành một bản stable mỗi ba tháng và một bản LTS (long term support) mỗi năm. Tính đến tháng 8 năm 2026, v16.0.2 là bản hiện tại và v15.0.6 là bản LTS.
Tier 3: GitLab tiêu tốn bao nhiêu tài nguyên trước khi làm được việc
GitLab CE thuộc một nhóm phần mềm khác. Một instance gồm nhiều service phối hợp với nhau: Puma cho web application, Sidekiq cho background job, PostgreSQL, Redis, Gitaly để truy cập repository và nginx ở phía trước. Gói Omnibus cài tất cả các thành phần này cùng nhau, nên việc cài đặt đơn giản nhưng mức RAM tối thiểu lại cao.
Trang yêu cầu của GitLab ghi rõ 16 GB RAM và 8 vCPU là mức cơ bản cho một single-node installation, đồng thời nêu 8 GB là mức thấp nhất trong môi trường hạn chế bộ nhớ. Trang này cũng yêu cầu tắt swap vì swap dưới tải cao làm instance suy giảm hiệu năng nghiêm trọng. Đây là các con số được công bố tính đến tháng 8 năm 2026. Các yêu cầu này đã tăng theo thời gian, vì vậy hãy đọc lại trang đó trước khi chọn cấu hình server.
Với mức tài nguyên đó, bạn nhận được các tính năng thực tế: container registry, package registry, quyền hạn chi tiết, các tính năng compliance và audit, cùng CI đã được kiểm thử ở quy mô lớn. Nếu không ai trong team của bạn nêu được một tính năng trong danh sách này mà họ cần dùng trong quý này, bạn đang trả tiền cho một VPS lớn hơn nhưng không nhận lại lợi ích tương xứng.
Mô hình truy cập SSH: một user git và nhiều key
Mọi tier ở đây đều xác thực theo cùng một cách. Có một tài khoản Unix tên là git, và mọi public key đều được ghi vào ~/.ssh/authorized_keys của tài khoản đó. Key thực hiện việc xác thực. Quyền được cấp tùy thuộc vào các option bạn ghi trước key trên cùng một dòng.
Một dòng key không có giới hạn sẽ cấp cho người giữ key mọi quyền mà tài khoản đó có thể thực hiện. Forced command giới hạn quyền đó vào Git:
restrict,command="git-shell -c \"$SSH_ORIGINAL_COMMAND\"" ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIexamplekeyhere alice@laptoprestrict, có từ OpenSSH 7.2, tắt port forwarding, agent forwarding, X11 và cấp phát PTY (pseudo terminal) chỉ bằng một từ. command= thay thế yêu cầu của client bằng giá trị bạn chỉ định, và Git vẫn hoạt động vì Git gửi yêu cầu trong $SSH_ORIGINAL_COMMAND.
Forge tự ghi file đó cho bạn, và đây là khác biệt thực sự giữa tier 0 và tier 2. Forgejo và Gitea ghi lại authorized_keys với mỗi key đã đăng ký trên một dòng, mỗi dòng có một forced command xác định key bằng database id của key đó:
command="/usr/local/bin/forgejo --config=/etc/forgejo/app.ini serv key-3",no-port-forwarding,no-x11-forwarding,no-agent-forwarding,no-pty ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIexamplekeyhere aliceForced command này biến một tài khoản Unix dùng chung thành quyền riêng cho từng user: key-3 cho forge biết user nào đang kết nối, rồi forge kiểm tra user đó có quyền trên repository trước khi bất kỳ object nào được truyền. Không chỉnh sửa thủ công file đó trên máy chủ do forge quản lý, vì file sẽ được ghi lại từ database và dòng bạn thêm sẽ biến mất. Deploy key dùng cùng cơ chế: deploy key là một SSH key thông thường được đăng ký cho một repository duy nhất, thường ở chế độ chỉ đọc; forge thực hiện việc kiểm tra thay vì sshd.
Có 2 thói quen quan trọng hơn mọi cấu hình ở trên. Cấp 1 key cho mỗi người hoặc mỗi máy, không dùng key chung, vì thu hồi key chung đồng nghĩa phải thay key cho tất cả mọi người cùng lúc. Đồng thời xóa key ngay trong ngày một người rời đi, vì key cũ còn nằm trong file đó sẽ tạo ra một cách đăng nhập vĩnh viễn mà không ai theo dõi. Quản lý SSH key đúng cách trên máy chủ trình bày về loại key và passphrase; mọi nội dung trong đó đều áp dụng ở đây mà không cần thay đổi. Nếu máy chủ còn mới, hãy làm theo 10 phút đầu tiên trên một VPS mới trước khi đưa repository lên đó.
Tôi có thể chạy GitHub Actions trên Git server của mình không?
Bạn có thể chạy các workflow viết theo cú pháp GitHub Actions. Bạn không thể chạy GitHub. Forgejo Actions được bật mặc định từ Forgejo v1.21 và đọc các file workflow từ .forgejo/workflows trong từng repository. Gitea Actions hoạt động tương tự và đọc .gitea/workflows. Cả hai đều cần một chương trình thứ hai là runner. Bạn phải cài đặt runner và đăng ký nó với instance bằng token lấy từ phần cài đặt quản trị. Nhiều action được phát hành có thể chạy nguyên trạng. Tuy nhiên, các action gọi GitHub API hoặc phụ thuộc vào hạ tầng do GitHub host sẽ không chạy được.
Hãy tính đến 2 hệ quả. Runner khởi động một container cho mỗi job. Vì vậy, nó cần container engine và phần bộ nhớ riêng. Đây là lý do không nên đặt runner trên cùng box 1 GB với forge. Runner cũng thực thi mọi lệnh được nêu trong file workflow. Tài liệu Forgejo nói rõ: runner thực hiện remote code execution. Nếu có thể, hãy đặt runner trên host riêng. Tối thiểu, hãy chạy nó bằng user không có đặc quyền riêng và dùng registration token chỉ áp dụng cho một repository.
Nếu các repository của bạn vẫn nằm trên GitHub và bạn chỉ muốn chạy compute trên phần cứng do mình kiểm soát, đó là một mô hình khác với các bước khác: runner GitHub Actions tự host kết nối với một repository trên GitHub và không cần các thành phần này. Nếu bạn vẫn đang cân nhắc chi phí khi rời GitHub, những gì GitHub thực sự cung cấp sẽ tách riêng dịch vụ Git hosting khỏi mạng lưới xung quanh nó.
Sao lưu: repository chỉ là một nửa trạng thái
Bare repository là một thư mục, nên sao chép thư mục đó sẽ sao chép toàn bộ dữ liệu bên trong. Mirror clone từ một máy khác là một bản sao lưu thực sự và có thể cập nhật trực tiếp tại chỗ:
git clone --mirror git@vps.example.com:/srv/git/project.git
cd project.git && git remote updateLệnh này lấy mọi ref và mọi object. Lệnh không lấy các hook phía server hoặc file description, nên nếu dùng hook, bạn cũng phải giữ một bản sao ở cấp file của cả thư mục.
Forge lưu issue, pull request, user, key và permission trong database. Chỉ sao lưu repository sẽ làm mất toàn bộ dữ liệu đó. Cả hai project đều cung cấp lệnh dump để ghi database, repository, cấu hình và file đính kèm vào một archive:
sudo -u git forgejo dump -c /etc/forgejo/app.ini -f /var/backups/forgejo-dump.zipKhi chạy trong Docker, cùng lệnh đó phải được chạy bên trong container. Đường dẫn cấu hình phụ thuộc vào image, nên hãy kiểm tra trước khi nhập lệnh:
docker compose exec server ls /data/gitea/conf
docker compose exec -u git server forgejo dump -c /data/gitea/conf/app.iniChạy lệnh bằng user sở hữu dữ liệu và ghi archive vào một thư mục mà user đó có quyền ghi. Sau đó sao chép archive ra khỏi server. Một bản sao lưu chỉ tồn tại trên chính máy đang được sao lưu thì không phải là bản sao lưu. Khôi phục là bước nhiều người bỏ qua: hãy giải nén một dump lên một máy dự phòng ngay bây giờ để học quy trình trong lúc bình thường, thay vì phải làm lần đầu khi hệ thống đang outage.
Chọn theo tình huống
Một người dùng laptop và VPS, không cần duyệt mã nguồn trên web: dùng bare repository qua SSH. Không có service bổ sung nào chạy và không có gì cần nâng cấp.
Trường hợp tương tự nhưng bạn muốn đọc code trên trình duyệt và gửi link đến code: thêm cgit. Vẫn không cần database và không có tiến trình thường trú.
Một team cần review code của nhau và theo dõi issue: dùng Forgejo hoặc Gitea, với 2 GB RAM trở lên. Chuyển CI runner sang máy thứ hai khi các job bắt đầu chạy thực tế.
Một tổ chức cần container registry và audit trail, với 16 GB RAM dành cho server: dùng GitLab. Nếu không có mức tài nguyên đó, không nên triển khai.
Việc nâng cấp qua 3 tầng đầu khá rẻ, vì ở cả 3 tầng, repository vẫn là các thư mục Git thông thường trên disk. Hãy bắt đầu từ tầng thấp nhất đáp ứng được nhu cầu. Nếu bạn đang xác định dịch vụ nào khác đáng chiếm chỗ trên cùng server, danh sách ngắn các dịch vụ đáng tự host đặt Git server cạnh những dịch vụ khác đang cạnh tranh tài nguyên RAM đó.
FAQ
Một VPS 1 GB có chạy được Forgejo hoặc Gitea không?
Có, nếu dùng cho một nhóm nhỏ, chạy trên SQLite và máy không chạy thêm tác vụ nặng nào. Tài liệu Gitea cho biết 1 GB RAM và 2 CPU core thường là đủ cho các nhóm và dự án nhỏ. Forgejo là fork của Gitea và có yêu cầu tương tự. Không nên cài thêm PostgreSQL hoặc CI runner trên máy đó. Nếu service biến mất mà log riêng của service không có lỗi, hãy chạy sudo dmesg -T | grep -i oom: một dòng ghi tên process bị kill cho biết kernel out of memory killer đã xử lý nó. Khi đó, cần nâng cấp gói tài nguyên thay vì thêm một flag tinh chỉnh.
Forgejo và Gitea khác nhau như thế nào?
Hai dự án có chung lịch sử codebase và phần lớn tính năng. Gitea fork từ Gogs vào năm 2016. Forgejo fork từ Gitea vào cuối năm 2022, sau khi quyền kiểm soát trademark Gitea chuyển sang một công ty. Forgejo do Codeberg e.V., một tổ chức phi lợi nhuận tại Đức, phát hành theo GPLv3. Gitea vẫn dùng giấy phép MIT và có hỗ trợ thương mại. Khác biệt thực tế nằm ở đường migration. Forgejo v10.0, phát hành vào tháng 1 năm 2025, là bản cuối cùng có thể nhận trực tiếp database của Gitea, và chỉ hỗ trợ từ Gitea v1.22 trở xuống. Vì vậy, một instance Gitea hiện tại không có cách chuyển đổi tại chỗ được hỗ trợ.
Tôi có thể chạy workflow GitHub Actions trên Git server tự host không?
Forgejo Actions và Gitea Actions đều chạy workflow viết theo cú pháp YAML của GitHub Actions, được đọc từ .forgejo/workflows và .gitea/workflows. Bạn cài một runner program riêng rồi đăng ký nó với instance của mình. Nhiều action được công bố có thể chạy nguyên trạng, nhưng các action gọi GitHub API thì không. Runner thực thi code tùy ý từ repository của bạn và khởi động một container cho mỗi job. Vì vậy, hãy đặt runner trên host riêng, hoặc ít nhất chạy bằng một user không có quyền đặc biệt riêng. Không nên đặt runner trên server 1 GB đã chạy forge.
Làm thế nào để backup Git server tự host?
Với bare repository, git clone --mirror từ một máy khác sẽ sao chép mọi ref và object. Chạy git remote update bên trong mirror để cập nhật mirror đó. Với Forgejo hoặc Gitea, repository chỉ là một phần của state, vì issue, pull request, user và key nằm trong database. Hãy dùng chức năng dump tích hợp, sudo -u git forgejo dump -c /etc/forgejo/app.ini, hoặc chạy cùng command bên trong container nếu cài đặt bằng Docker. Sao chép archive ra khỏi server. Sau đó, hãy restore một archive lên máy dự phòng một lần để xác nhận quy trình hoạt động.