Linux Study Lab !

当前位置:   网站首页 >> Linux 应用实践

gitea 安装,替代gitlab-ce

说到gitlab-ce大家都不陌生,但gitlab-ce的本体的资源占用的确是有点高,或者说有点浪费。由于架构的问题,在内存占用上完全败于国人开发的gitea。

本文将简单介绍如何启动一个gitea,gitea提供了多种形式的安装方式,有源码部署,服务部署,二进制部署与docker部署,本文介绍的为二进制部署与docker部署两种方式。

wget -O gitea https://dl.gitea.io/gitea/1.15.9/gitea-1.15.9-linux-amd64 
chmod +x gitea
cp gitea /usr/local/bin/gitea

验证下载的文件数字签名

gpg --keyserver keys.openpgp.org --recv 7C9E68152594688862D62AF62D9AE806EC1592E2 
gpg --verify gitea-1.15.9-linux-amd64.asc gitea-1.15.9-linux-amd64

返回值为

Good signature from "Teabot <[email protected]>"

则签名正确,这个二进制文件可以被安全的执行。

查看本机有无安装git,如果没有安装可能需要安装一下或手动在系统上创建一个git用户,这个用户名可以随意,用于运行这个gitea二进制文件。为安全考虑请不要使用root账户运行gitea文件!

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

创建二进制文件运行时所需的文件目录结构

mkdir -p /var/lib/gitea/{custom,data,log} 
chown -R git:git /var/lib/gitea/ 
chmod -R 750 /var/lib/gitea/ 
mkdir /etc/gitea 
chown root:git /etc/gitea 
chmod 770 /etc/gitea

需要注意的是/etc/gitea目录为了安装部署程序文件暂时被设置成了770权限,当安装结束后,需更改它的权限以便更安全的运行

chmod 750 /etc/gitea
chmod 640 /etc/gitea/app.ini

在bash下直接输入

export GITEA_WORK_DIR=/var/lib/gitea/

创建一个服务文件

cd /etc/systemd/system/
wget 
systemctl enable gitea
systemctl start gitea
systemctl enable gitea --now

使用supervisor

yum install  supervisor
mkdir /home/git/gitea/log/supervisor

创建一个supervisor配置文件

vi /etc/supervisor/supervisord.conf
在配置文件中输入如下内容:
[program:gitea]    
directory=/home/git/go/src/github.com/go-gitea/gitea/    
command=/home/git/go/src/github.com/go-gitea/gitea/gitea web    
autostart=true    
autorestart=true    
startsecs=10    
stdout_logfile=/var/log/gitea/stdout.log    
stdout_logfile_maxbytes=1MB    
stdout_logfile_backups=10    
stdout_capture_maxbytes=1MB    
stderr_logfile=/var/log/gitea/stderr.log    
stderr_logfile_maxbytes=1MB    
stderr_logfile_backups=10    
stderr_capture_maxbytes=1MB    
user = git    
environment = HOME="/home/git", USER="git"    
保存后
systemctl enable supervisor
systemctl start supervisor
systemctl enable supervisor --now

gitea的部署就完成了,可以使用默认的3000端口访问到它的安装界面,数据库可以选用mysql或postgresql。

下面是docker部署的方法,相较二进制部署简单许多,前提是你已安装docker与docker-compose,创建一个docker-compose.yml文件

version: "3"

networks:
  gitea:
    external: false

services:
  server:
    image: gitea/gitea:latest
    container_name: gitea
    environment:
      - USER_UID=1000
      - USER_GID=1000
      - GITEA__database__DB_TYPE=mysql
      - GITEA__database__HOST=db:3306
      - GITEA__database__NAME=gitea 
      - GITEA__database__USER=gitea 
      - GITEA__database__PASSWD=gitea
    restart: always
    networks:
      - gitea
    volumes:
      - ./site:/data
      - /etc/timezone:/etc/timezone:ro
      - /etc/localtime:/etc/localtime:ro
      - ./git-7doc-cn.crt:/data/git.crt
      - ./git-7doc-cn.key:/data/git.key 
    ports:
      - "3000:3000"
      - "222:22"
    depends_on: 
      - db
  db:
    image: mysql:8 
    restart: always 
    environment: 
      - MYSQL_ROOT_PASSWORD=gitea
      - MYSQL_USER=gitea 
      - MYSQL_PASSWORD=gitea 
      - MYSQL_DATABASE=gitea  
    networks: 
      - gitea 
    volumes: 
      - ./mysql:/var/lib/mysql

直接运行配置文件即可下载最新版的gitea并部署一个mysql,访问宿主机的3000端口即可打开安装界面。


更多的gitea部署方式与配置文件详解,技术信息请参考官方文档页面

Documentation - Docs (gitea.io)



附:gitea的库备份

使用docker运行时gitea运行在容器中,可以使用如下命令备份当前整个gitea的内容和配置

docker exec -u git -it -w /tmp $(docker ps -qf "name=gitea") bash -c '/app/gitea/gitea dump -c /data/gitea/conf/app.ini'

-u git  为当前容器中运行gitea的用户,这个用户在配置文件app.ini的RUN_USER定义着

-w       为执行下列bash命令的目录,这个目录是指容器中有的目录,可以在容器运行初直接指定一个挂载目录backup专门用于备份存档,默认使用/tmp

/app/gitea/gitea  是默认容器版二进制文件所在的位置

/data/gitea/conf/app.ini  是默认容器版配置文件所在位置

执行命令后,会在容器内 -w 指定的目录下生成压缩包备份文件

16:08:42 cmd/dump.go:223:runDump() [I] Dumping local repositories... /data/git/repositories
16:09:03 cmd/dump.go:267:runDump() [I] Dumping database...
16:09:03 cmd/dump.go:279:runDump() [I] Adding custom configuration file from /data/gitea/conf/app.ini
16:09:03 cmd/dump.go:295:runDump() [I] Custom dir /data/gitea is inside data dir /data/gitea, skipped
16:09:03 cmd/dump.go:307:runDump() [I] Packing data directory.../data/gitea
16:09:03 cmd/dump.go:377:runDump() [I] Finish dumping in file gitea-dump-1641802122.zip

可以看到最终成功打包了一个压缩文件,然后使docker cp从容器中复制出来即可

docker cp gitea:/tmp/gitea-dump-1641802122.zip /tmp/

注意,如果使用挂载目录的方式获取备份文件,docker exec的执行可能会提示权限错误,具体请见官方文档中关于docker备份的描述。


发表我的评论

Hi,您需要填写昵称和邮箱!

  • 必填项
  • 必填项