Cài đặt Gitea trên Ubuntu Server

Giới thiệu

Git là một ứng dụng tương tự như GitHub, GitLab hay Bitbucket nhưng phục vụ cho việc Self Hosted, tự lưu trữ trên server của mình.

Ưu điểm của Gitea

  • Miễn phí, miễn phí và miễn phí.
  • Mã nguồn mở.
  • Hầu như giống với GitHub...nên làm quen rất đơn giản.
  • Self Hosted.

Yêu cầu hệ thống

  • Ubuntu Server.
  • Nginx để làm Reverse Proxy.
  • NodeJS phiên bản 14.13.1 trở lên, tốt nhất là ở bản 16.
  • Tên miền với chứng chỉ SSL đã được lấy miễn phí từ Let's Encrypt.
  • Cơ sở dữ liệu, có thể dùng PostgreSQL, MySQL, MariaDB hoặc SQLite, ở đây mình dùng MySQL.

Cài đặt

Tạo cơ sở dữ liệu

Đăng nhập vào tài khoản root

sudo mysql -u root -p

Tạo cơ sở dữ liệu giteadb và tài khoản gitea, tên cơ sở dữ liệu và tài khoản cũng như mật khẩu tùy bạn

CREATE USER 'gitea' IDENTIFIED BY 'password';
CREATE DATABASE giteadb CHARACTER SET 'utf8mb4' COLLATE 'utf8mb4_unicode_ci';
GRANT ALL PRIVILEGES ON giteadb.* TO 'gitea';
FLUSH PRIVILEGES;

Tải về và cài đặt

Có nhiều cách cài, qua Docker, build từ source, thông qua snap hay cài từ binary đã được build sẵn. Mình chọn phương án cài từ binary.
Tải về phiên bản mới nhất, thời điểm mình cài mới nhất là 1.19.

wget -O gitea https://dl.gitea.com/gitea/1.19/gitea-1.19-linux-amd64
sudo chmod +x gitea

Xác minh chữ ký GPG
Gitea ký tất cả các tệp nhị phân bằng khóa GPG để ngăn chặn việc sửa đổi các file binary không mong muốn. Để xác thực tệp, hãy tải xuống tệp .asc ứng với file binary mà bạn đã tải xuống và sử dụng công cụ dòng lệnh GPG để xác thực lại.

wget -O gitea.asc https://dl.gitea.com/gitea/1.19/gitea-1.19-linux-amd64.asc
gpg --keyserver keys.openpgp.org --recv 7C9E68152594688862D62AF62D9AE806EC1592E2
gpg --verify gitea.asc gitea

Nếu có kết quả hiện ra là Good signature from "Teabot teabot@gitea.io" thì là được, còn nếu là This key is not certified with a trusted signature! thì tải và xác nhận lại cho chắc ăn nhé.
Kiểm tra phiên bản git trên máy, yêu cầu phiên bản >2.0 nhé.
Tạo tài khoản git để chạy ứng dụng thông qua tài khoản đó (Hạn chế sử dụng tài khoản chính thường ssh để chạy các ứng dụng).

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

Tạo các thư mục cần thiết, gán quyền truy cập của tài khoản vừa tạo cho các thư mục đó.

sudo mkdir -p /var/lib/gitea/custom
sudo mkdir -p /var/lib/gitea/data
sudo mkdir -p /var/lib/gitea/log
sudo chown -R git:git /var/lib/gitea/
sudo chmod -R 750 /var/lib/gitea/
sudo mkdir /etc/gitea
sudo chown root:git /etc/gitea
sudo chmod 770 /etc/gitea
LƯU Ý: /etc/gitea tạm thời được đặt quyền ghi cho tài khoản git để trình cài đặt qua nền web có thể ghi tệp cấu hình. Sau khi cài đặt xong, nên đặt quyền thành chỉ đọc bằng cách sử dụng:
chmod 750 /etc/gitea
chmod 640 /etc/gitea/app.ini

Copy file gitea đã download về vào thư mục ứng dụng.

sudo cp gitea /usr/local/bin/gitea

Tạo file .service để Gitea tự khởi động thông qua systemd

sudo nano /etc/systemd/system/gitea.service

và nhập vào nội dung sau.

[Unit]
Description=Gitea (Git with a cup of tea)
After=syslog.target
After=network.target
Wants=mariadb.service
After=mariadb.service
Wants=memcached.service
After=memcached.service
Wants=redis.service
After=redis.service

[Service]
# Uncomment the next line if you have repos with lots of files and get a HTTP 5>
# LimitNOFILE=524288:524288
RestartSec=2s
Type=simple
User=git
Group=git
WorkingDirectory=/var/lib/gitea/
ExecStart=/usr/local/bin/gitea web -p 2023 --config /etc/gitea/app.ini
Restart=always
Environment=USER=git HOME=/home/git GITEA_WORK_DIR=/var/lib/gitea

[Install]
WantedBy=multi-user.target

Ở đây mình sủ dụng memcachedredis để tăng tốc cho Gitea, cổng là 2023, nếu bỏ qua phần "-p 2023" thì Gitea sẽ chạy mặc định ở cổng 3000.
Làm cho systemd nhận cấu hình mới, tải lại và khởi động Gitea.

sudo systemctl daemon-reload
sudo systemctl enable --now gitea.service
sudo systemctl start gitea.service

Kiểm tra hoạt động chưa

systemctl status gitea.service

Hiện ra như hình là được rồi đó, tốn khoảng 100Mb RAM nhé.

Cấu hình Nginx

Tạo file cấu hình Nginx

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

Và nhập vào nội dung sau

server {
	listen 80;
	server_name gitea.com;
	return 301 https://$server_name$request_uri;
}

server {
	server_name gitea.com;

	listen 443 ssl http2;
	# listen [::]:443 ssl http2;

	access_log  /var/log/nginx/gitea.access.log;
	error_log   /var/log/nginx/gitea.error.log;

	ssl_certificate /etc/letsencrypt/live/gitea.com/fullchain.pem;
	ssl_certificate_key /etc/letsencrypt/live/gitea.com/privkey.pem;
	#include /etc/nginx/include/diffie-hellman;

	client_max_body_size 20M;

	location ~* \.(?:ico|css|js|gif|jpe?g|png|ttf|woff|)$ {
		access_log off;
		expires 30d;
		add_header Pragma public;
		add_header Cache-Control "public, mustrevalidate, proxy-revalidate";
		proxy_set_header HOST $host;
		proxy_set_header X-Real-IP $remote_addr;
		proxy_set_header X-NginX-Proxy true;
		proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
		proxy_set_header X-Forwarded-Proto $scheme;
		proxy_next_upstream error timeout invalid_header http_500 http_502 http_503 http_504;
		proxy_pass http://localhost:2023;
		proxy_redirect off;
		proxy_buffering off;
	}

	location / {
		proxy_set_header HOST $host;
		proxy_set_header X-Real-IP $remote_addr;
		proxy_set_header X-NginX-Proxy true;
		proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
		proxy_set_header X-Forwarded-Proto $scheme;
		proxy_next_upstream error timeout invalid_header http_500 http_502 http_503 http_504;
		proxy_pass http://localhost:2023;
		proxy_redirect off;
		proxy_buffering off;
	}
}

Ánh xạ, kiểm tra cấu hình không lỗi thì khởi động lại Nginx

sudo ln -s /etc/nginx/sites-available/gitea.com /etc/nginx/sites-enabled/gitea.com
sudo nginx -t
sudo systemctl restart nginx

Xong, giờ chúng ta truy cập vào Tên miền và tiếp tục bước tiếp theo.
Điền thông tin cơ sở dữ liệu đã tạo ở trên.

Điền thông tin cấu hình chung như Tiêu đề trang.., ở đây cần chú ý phần port nên tránh 22 đi.

Điền địa chỉ trang...

Phần Optional Settings, phần này chú ý, vì sử dụng cho cá nhân nên mình tắt chức năng đăng ký đi, lúc này tài khoản chỉ có thể tạo bằng tài khoản Admin, còn không thể đăng ký tự do được.

Điền thông tin tài khoảng Admin và nhấn nút Install Gitea

Chờ đợi một lát để cài đặt. Chúc các bạn thành công.