【git】Gogs Gitea安装搭建教程,简单快速



一、背景介绍

为什么要使用git服务器?最简单的原生 ssh+git 的私人远程仓库搭建方法

如果想可视化地查看文件的变更,查看每次提交的细节,那么可以搭建一个带 Web 的git服务器

目前的选择是 gitlib 和 gogs、gitea。个人使用选后者,公司的话一般会选gitlib

这是几个代码托管工具的对比:https://docs.gitea.io/zh-cn/comparison/

Gogs Gitea的相同点和区别

  • 二者都是使用go语言开发的轻量级(相比gitlib)自建 Git 服务

  • gitea出自gogs项目(2014.2- ),因内部想法不一致,16年11月gitea派生独立,参考官方B站视频

  • gogs相比gitea更轻量,配置更简单,但是功能和细节不到位

    比如gogs开启登录才能访问后,游客只能访问登录页面,连介绍页都点不了。比如gogs没有贡献日历

  • gitea的设计更用心,但是应用会复杂一些

    体现在二者docker镜像gogs 40M,gitea 60M,以及gitea提供了超多的可配置项

二者的安装差不多,正常使用的安装配置步骤毫无差别,故博主选gitea为例



二、安装 - 2023更新

2.1 安装

最新1.20.5版本

官方文档 - 使用 Docker 安装 (rootless)

rootless版本是使用docker内置ssh,因为容器以gitea用户运行,普通版本似乎无法调用宿主机的ssh?

博主选的rootless版本,但是完全按照官方文档运行似乎不行,博主结合两个版本弄出了自己的docker-compose.yml

安装步骤:

需要提前安装docker、docker-compose、git(会创建git用户)

mkdir -p /var/gitea/{data,config}
cd /var/gitea
chown 1000:1000 config/ data/
vi docker-compose.yml
version: "3"

networks:
  gitea:
    external: false

services:
  server:
    image: gitea/gitea:1.20.5-rootless
    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:
      - ./data:/var/lib/gitea
      - ./config:/etc/gitea
      - /etc/timezone:/etc/timezone:ro
      - /etc/localtime:/etc/localtime:ro
    ports:
      - "3000:3000"
      - "3022:22"

    depends_on:
      - db

  db:
    image: mysql:8
    restart: always
    container_name: mysql
    environment:
      - MYSQL_ROOT_PASSWORD=gitea
      - MYSQL_USER=gitea
      - MYSQL_PASSWORD=gitea
      - MYSQL_DATABASE=gitea
    networks:
      - gitea
    volumes:
      - ./mysql:/var/lib/mysql

rootless和普通版的区别是映射的卷不一样 ./data:/var/lib/gitea



2.2 启动

# 启动容器,必须在docker-compose.yml目录下
docker-compose up -d

# 查看日志
docker-compose logs

# 停止并移除容器
docker-compose down



2.3 配置

安装好后启动,在config里设置ini

官方 - 配置参考与说明

[repository]
DEFAULT_BRANCH = master

[migrations]
;; Allow private addresses defined by RFC 1918, RFC 1122, RFC 4632 and RFC 4291 (false by default)
;; If a domain is allowed by ALLOWED_DOMAINS, this option will be ignored.
;; 允许从局域网迁移
ALLOW_LOCALNETWORKS = true
ALLOWED_DOMAINS = github.com,*.github.com,gitee.com,*.gitee.com,gitlab.com,*.gitlab.com

[service]
;; 注册用户需要审核
REGISTER_MANUAL_CONFIRM = true

[picture]
;; 头像使用gravatar在国内的镜像
;; https://cdn.sep.cc/avatar/
;; https://gravatar.kuibu.net/avatar/
GRAVATAR_SOURCE = https://gravatar.loli.net/avatar/



2.4 使用

和github一样的用法:

在个人的设置-账号中,添加你git config user.email中的email,才能识别为你的commit

git认证需要在设置-应用中添加token,作为密码,来push



2.5 迁移

将整个gitea目录打包即可






二、安装

因为搭建go环境,编译安装挺麻烦的,所以我选择docker安装,docker的优点:

  • 镜像相对其它镜像来说已经很小了

  • 可以通过挂载卷把容器里的目录放在宿主机上,这和在宿主机上直接跑Gitea没什么区别,git仓库都能在目录中找到

  • 安全,如果Gitea被挖出漏洞,容器也能给我们一层防护

但是数据库的话还是得自己安装,放容器里不符合数据库设计的初衷



2.1 创建数据库和数据库用户

参考:Rocky Linux 8系统介绍、安装、配置、软件安装步骤,Rocky Linux 8 可以当作 CentOS 8

建立数据库,创建用户,授权用户:

# 登录
mysql -u root -p

CREATE DATABASE `gitea` DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;
CREATE USER 'gitea'@'%' IDENTIFIED BY 'your_password';
GRANT ALL ON gitea.* TO 'gitea'@'%';



2.2 Gogs Gitea安装

安装gogs docker

参考:官方GitHub

安装gitea docker

参考:官方文档

官方文档说用docker-compose,其实单个容器没必要,我们参照gogs用docker run

docker pull gitea/gitea:latest
docker run -d -p 3000:3000 -p 3022:22 -v /var/gitea:/data --restart=always --name=gitea gitea/gitea
# 后续启动重启
docker start|restart gitea

这样一来就安装好了,本机的3000端口就是gitea web,3022端口就是gitea ssh,本机的/var/gitea就是gitea容器里的/data



2.3 Gogs Gitea Web安装

访问3000端口,进行配置,如果是nginx代理,初始化时建议不要有前缀,就转发端口,初始化web页面设置前缀,初始化完成后,方可添加前缀

二者一样,gogs参考: https://learnku.com/articles/36255

值得注意的是,数据库地址,如果不是docker-compose,则要填对ip

都可以是默认,建议修改的选项有:

  • 应用url,后续会显示在你仓库的clone地址中。如果你设置了前缀如http://127.0.0.1:3000/xxxxxgitea/那么网站根目录也会带前缀,包括js等静态资源,这个设置了可以方便后续nginx代理.

    除了前缀,其余的都不会影响实际请求的url,比如ip、端口、http/https,这些都只影响仓库中克隆地址的显示

  • 建议勾选禁止用户自主注册启用登录访问限制,后者设置后游客只能访问登录页面,不设置游客可以看到用户、公开仓库

  • 在最后填写管理员账户的账户密码,如果不填写,第一个注册的用户是管理员

此时不设置,后续只能通过配置文件设置,无法在web更改设置



三、配置

在宿主机上 vi /var/gitea/gitea/conf/app.ini 即可修改容器中的配置

配置参考:gogs gitea

修改配置后:docker restart gitea



三、安全设置

3.1 暴力破解

gogs显然不是很重视安全,需求提了很久,仍未实现 issue #2384

比如登录处无验证码,无登录失败次数限制

日志不记录登录失败的IP

那么防暴力破解大神给的办法是:

  • 用nginx代理,用fail2ban检查nginx access log来ban IP

我给出的简单办法:如果你不想公开你的gogs地址让大伙知道的话,在配置中设置一个超长超复杂的前缀,配合nginx代理,那么没人能知道你的url

一定要配合nginx代理,否则你前缀再长,访问也会自动跳转到登录页面

使用nginx代理后,如果没输对前缀,就会404

nginx安装参考

# gogs配置
[server]
EXTERNAL_URL     = http://IP:Port/gogsxxxxxxxxxxx/
# nginx 配置
        location / {
            root   html;
            index  404.html;
        }

        location ^~ /gogsxxxxxxxxxxx/ {
            proxy_pass http://127.0.0.1:3000/;
        }



3.2 docker -v权限

奇怪的是,gogs挂载的目录在宿主机中是git用户所有,而gitea是root用户所有



posted @ 2022-01-06 20:33  云牧青  阅读(1517)  评论(0编辑  收藏  举报