Cách cài đặt Gitea Code Hosting Platform với HTTPS trên CentOS 8

theanh

Administrator
Nhân viên
Gitea là một ứng dụng web lưu trữ mã được viết bằng Go. Như tên gọi của nó, nó được thiết kế để sử dụng với chương trình kiểm soát nguồn phổ biến Git, tương tự như Gitlab và Github. Hướng dẫn này sẽ giải thích cách cài đặt Gitea trên CentOS 8 với proxy ngược Nginx HTTPS.

Yêu cầu​

  • Hệ thống CentOS 8 mà bạn có quyền root.
  • Tên miền đã đăng ký trỏ đến máy chủ của bạn.
  • Biến môi trường $EDITOR phải được đặt thành trình soạn thảo văn bản ưa thích của bạn.
  • Truy cập vào máy chủ SMTP để nhận thông báo qua email (tùy chọn).
Đảm bảo rằng (tên miền phụ) của bạn trỏ đến địa chỉ IPv4 của máy chủ với bản ghi A. Tùy chọn, tạo bản ghi AAAA trỏ đến địa chỉ IPv6 của máy chủ của bạn.

LƯU Ý: Hướng dẫn này giả định SELinux được đặt thành vô hiệu hóa hoặc cho phép.

Bước 1: Chuẩn bị hệ thống​

Bắt đầu bằng cách cài đặt bất kỳ bản cập nhật nào có sẵn và khởi động lại:
Mã:
dnf update -yreboot
Đối với thiết lập này, cần có một số thành phần phần mềm:
  • Git, một phần phụ thuộc của Gitea.
  • PostgreSQL, vì Gitea yêu cầu một cơ sở dữ liệu.
  • Nginx, sẽ được sử dụng như một proxy ngược.
  • Sudo, để chạy các lệnh với tư cách là người dùng hệ thống postgres.
  • Wget
  • Certbot, một tiện ích để lấy chứng chỉ SSL Let's Encrypt. Certbot sẽ được cài đặt riêng vì nó không có sẵn trong kho phần mềm CentOS.
Cài đặt chúng như sau:
Mã:
dnf install -y git postgresql postgresql-server nginx sudo wget
Certbot-auto là một tập lệnh quản lý quá trình cài đặt certbot. Tải xuống:
Mã:
wget https://dl.eff.org/certbot-auto -O /usr/local/bin/certbot-auto
Đảm bảo thiết lập đúng quyền:
Mã:
chmod 0755 /usr/local/bin/certbot-auto
Chạy lệnh sau để cài đặt certbot. Trình quản lý gói sẽ nhắc bạn xác nhận cài đặt các phụ thuộc, hãy trả lời 'y'.
Mã:
certbot-auto --install-only
Tiếp theo, tạo người dùng để chạy Gitea:
Mã:
useradd --system --shell /bin/bash --create-home --home-dir /home/gitea gitea
Sau đó, tạo cấu trúc thư mục cho Gitea:
Mã:
mkdir -p /var/lib/gitea/{data,log} /etc/gitea /run/gitea
Và đặt quyền sở hữu và quyền như sau:
Mã:
chown -R gitea:gitea /var/lib/giteachown -R gitea:gitea /var/run/giteachown -R root:gitea /etc/giteachmod -R 750 /var/lib/giteachmod 770 /etc/gitea
Quyền trên /etc/gitea là tạm thời và sẽ được thắt chặt sau khi chạy trình cài đặt web.

Bật lưu lượng truy cập đến các cổng 80 và 443 vĩnh viễn:
Mã:
firewall-cmd --add-port 80/tcp --add-port 443/tcp --permanentfirewall-cmd --reload
Chỉ yêu cầu truy cập vào cổng 3000 tạm thời cho quá trình thiết lập ban đầu vì chúng tôi sẽ cấu hình gitea để sử dụng ổ cắm Unix thay thế.
Mã:
firewall-cmd --add-port 3000/tcp

Bước 2: Thiết lập cơ sở dữ liệu​

Khởi tạo Postgres:
Mã:
postgresql-setup --initdb --unit postgresql
Đảm bảo rằng nó được bật và đang chạy:
Mã:
systemctl enable --now postgresql.service
Đăng nhập vào Postgres:
Mã:
sudo -u postgres psql
Sau đó tạo vai trò người dùng và cơ sở dữ liệu để Gitea sử dụng:
Mã:
postgres=# CREATE ROLE gitea LOGIN ENCRYPTED PASSWORD 'your_password';postgres=# CREATE DATABASE gitea;postgres=# GRANT ALL PRIVILEGES ON DATABASE gitea TO gitea;postgres=# \q
Mở tệp cấu hình xác thực máy khách Postgres:
Mã:
$EDITOR /var/lib/pgsql/data/pg_hba.conf
Thêm dòng sau ngay sau # IPv4 local connections :
Mã:
# IPv4 local connections:host gitea gitea 127.0.0.1/32 md5
Lưu tệp và khởi động lại Postgres:
Mã:
systemctl restart postgresql.service

Bước 3: Cài đặt Gitea​

Tải xuống phiên bản nhị phân linux-amd64 của Gitea từ trang tải xuống của Gitea. Ví dụ:
Mã:
wget https://dl.gitea.io/gitea/master/gitea-master-linux-amd64 -O /usr/local/bin/gitea
Thiết lập quyền chính xác cho tệp nhị phân đã tải xuống:
Mã:
chmod 755 /usr/local/bin/gitea
Tiếp theo, tạo tệp đơn vị systemd:
Mã:
$EDITOR /etc/systemd/system/gitea.service
Và nhập lệnh sau:
Mã:
[Unit]Description=Gitea (Git với một tách trà)After=syslog.targetAfter=network.targetRequires=postgresql.service[Service]Type=simpleUser=giteaGroup=giteaWorkingDirectory=/var/lib/gitea/RuntimeDirectory=giteaExecStart=/usr/local/bin/gitea web -c /etc/gitea/app.iniRestart=alwaysEnvironment=USER=gitea HOME=/home/gitea GITEA_WORK_DIR=/var/lib/gitea[Install]WantedBy=multi-user.target
Đảm bảo rằng đơn vị mới đã được tải:
Mã:
systemctl daemon-reload
Sau đó hướng dẫn systemd khởi động Gitea khi khởi động:
Mã:
systemctl enable gitea.service

Bước 4: Cấu hình Gitea​

Đối với cấu hình ban đầu, chúng tôi sẽ sử dụng trình cài đặt web đi kèm. Trước tiên, hãy khởi động Gitea:
Mã:
systemctl start gitea.service
Sau đó, điều hướng đến http://your_domain:3000/install và điền vào các tham số bắt buộc như sau:
  • Loại cơ sở dữ liệu: PostgreSQL
  • Máy chủ: 127.0.0.1:5432
  • Tên người dùng: gitea
  • Mật khẩu: Nhập mật khẩu bạn đã chọn trong quá trình tạo vai trò Postgres.
  • Tên cơ sở dữ liệu: gitea
  • SSL: Tắt
  • Tiêu đề trang web: Tiêu đề bạn chọn.
  • Đường dẫn gốc của kho lưu trữ: /var/lib/gitea/data/repositories
  • Đường dẫn gốc của Git LFS: /var/lib/gitea/data/lfs
  • Chạy với tư cách là tên người dùng: gitea
  • Tên miền máy chủ SSH: your_domain
  • SSH Cổng máy chủ: 22
  • Gitea HTTP Listen Post: 3000
  • URL cơ sở Gitea: https://your_domain/
  • Đường dẫn nhật ký: /var/lib/gitea/log
Cấu hình email và các cài đặt còn lại theo ý muốn, sau đó nhấp vào "Cài đặt Gitea". Bạn sẽ được chuyển hướng đến một URL bị lỗi. Điều này là bình thường vì chúng tôi chưa cấu hình Nginx hoặc HTTPS. Vì lý do hiệu suất, bây giờ chúng tôi sẽ cấu hình Gitea để lắng nghe trên một socket unix thay vì cổng TCP mặc định.

Dừng Gitea trước khi tiếp tục:
Mã:
systemctl stop gitea.service
Thắt chặt quyền đối với /etc/gitea như được hiển thị bên dưới. Điều này ngăn không cho bất kỳ ai không thuộc nhóm gitea đọc app.ini , tệp này chứa thông tin nhạy cảm, bao gồm thông tin xác thực cơ sở dữ liệu.
Mã:
chmod 750 /etc/giteachown root:gitea /etc/gitea/app.inichmod 640 /etc/gitea/app.ini
Mở tệp cấu hình của nó:
Mã:
$EDITOR /etc/gitea/app.ini
Xóa dòng sau khỏi phần server:
Mã:
HTTP_PORT = 3000
Và thêm các dòng sau vào phần server:
Mã:
HTTP_ADDR = /run/gitea/gitea.sockPROTOCOL = unixUNIX_SOCKET_PERMISSION = 666

Bước 5: Thiết lập Proxy ngược​

Dừng Nginx nếu đang chạy, để cho phép certbot lắng nghe trên cổng 80:
Mã:
systemctl stop nginx.service
Sử dụng lệnh sau để lấy chứng chỉ cho tên miền của bạn:
Mã:
certbot-auto certonly --standalone --agree-tos -m [emailprotected] -d your_domain
Let's Encrypt sẽ xác minh quyền sở hữu tên miền trước khi cấp chứng chỉ. Chứng chỉ, chuỗi và khóa riêng của bạn sẽ được lưu trữ trong /etc/letsencrypt/live/your_domain/ .

Bây giờ chúng ta có thể cấu hình Nginx. Tạo một tệp cấu hình mới:
Mã:
$EDITOR /etc/nginx/conf.d/gitea.conf
Và nhập các khối máy chủ sau:
Mã:
server { listen 80; listen [::]:80; server_name your_domain; return 301 https://$server_name$request_uri; access_log /var/log/nginx/gitea-proxy_access.log; error_log /var/log/nginx/gitea-proxy_error.log;}server { listen 443 ssl; listen [::]:443 ssl; server_name your_domain; ssl on; ssl_certificate /etc/letsencrypt/live/your_domain/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/your_domain/privkey.pem; location / { proxy_pass http://unix:/var/run/gitea/gitea.sock; } access_log /var/log/nginx/gitea-proxy_access.log; error_log /var/log/nginx/gitea-proxy_error.log;}
Khối máy chủ đầu tiên chỉ phục vụ mục đích chuyển hướng tất cả các yêu cầu HTTP sang HTTPS. Khối thứ hai lắng nghe các kết nối HTTPS và chuyển tiếp chúng đến socket Unix mà chúng tôi đã định cấu hình Gitea để lắng nghe.

Sau khi bạn đã lưu cấu hình trên, hãy kiểm tra mọi lỗi cú pháp và chỉnh sửa cấu hình của bạn nếu cần:
Mã:
nginx -t
Cuối cùng, hãy khởi động Nginx và Gitea:
Mã:
systemctl start nginx.service gitea.service
Hiện tại, phiên bản Gitea của bạn sẽ chạy thành công. Truy cập tại https://your_domain

Các bước tùy chọn​

Cấu hình ghi nhật ký​

Theo mặc định, nhật ký của Gitea sẽ ghi lại các thông báo ở mức độ nghiêm trọng Info trở lên. Bạn có thể muốn thay đổi thành Warn hoặc Error. Để thực hiện, hãy mở /etc/gitea/app.ini và thay đổi tham số LEVEL trong phần [log] thành một trong các mục sau: trace, debug, info, warn, error, critical, fatal, none. Ví dụ, để ghi lại các thông báo có mức độ nghiêm trọng Cảnh báo trở lên, hãy sử dụng:
Mã:
[log]MODE = fileLEVEL = warnROOT_PATH = /var/lib/gitea/log
Khởi động lại Gitea để các thay đổi có hiệu lực:
Mã:
systemctl restart gitea.service

Máy chủ SSH riêng​

Gitea cũng có thể sử dụng máy chủ SSH riêng của mình. Để bật tính năng này, hãy thêm dòng sau vào phần cấu hình [server]:
Mã:
START_SSH_SERVER = true
Và thay đổi cổng SSH thành bất kỳ số nào lớn hơn 1024, ví dụ:
Mã:
SSH_PORT = 2222
Sau đó khởi động lại Gitea để áp dụng các thay đổi và bật lưu lượng truy cập đến cổng đã chọn:
Mã:
firewall-cmd --add-port 2222/tcp --permanentfirewall-cmd --reload
 
Back
Bên trên