基于docker搭建gitea私服仓库,并开启https访问、ssh访问和邮箱验证通知功能

系列文章目录

git常用命令大锦囊


文章目录

  • 系列文章目录
  • 前言
  • 一、gitea安装
    • 1. 安装docker compose
    • 2. 安装gitea
  • 二、给gitea配置https访问
  • 三、gitea配置ssh方式拉取代码
  • 四、给gitea配置可发送的邮箱
  • 五、gitea注册开启邮箱验证和邮箱通知
  • 六、限制所有仓库只有登录后才能访问
  • 七、关闭gitea的注册功能
  • 总结
  • 附录


前言

团队需要多人协作开发,gitee,github等仓库管理协作人数有限,因此自己搭建基于gitea的仓库私服(最开始使用gitlab,鉴于gitlab功能庞大,占用内存太高,于是换成gitea搭建)。


一、gitea安装

gitea是基于Golang开发的极易安装、运行快速、内存占用小的代码托管服务平台,下面展示基于Docker快速安装gitea。

1. 安装docker compose

由于官方使用docker compose来启动gitea,本环境只有docker,因此需要安装docker compose plugin插件来使用docker compose

DOCKER_CONFIG=${DOCKER_CONFIG:-$HOME/.docker}
mkdir -p $DOCKER_CONFIG/cli-plugins
curl -SL https://github.com/docker/compose/releases/download/v2.19.0/docker-compose-linux-x86_64 -o $DOCKER_CONFIG/cli-plugins/docker-compose

docker compose将会安装到~/.docker/cli-plugins,可自行替换。第三行的v2.19.0也是可以替换的,本文直接按照官网给的版本号安装。第三条命令可能因为外网问题执行不成功,可以先想办法下载下来文件,然后传到Linux上。v2.19.0版本可以从这个百度网盘取:

链接:https://pan.baidu.com/s/17-buewHwxMM5I2_awhuALQ
提取码:1234

安装完后赋予执行权限

chmod +x $DOCKER_CONFIG/cli-plugins/docker-compose

执行完后在bash输入docker compose version出现如下内容即安装成功
在这里插入图片描述
官网内容点此:https://docs.docker.com/compose/install/linux/#install-the-plugin-manually

2. 安装gitea

首先我们需要一个可以访问的MySQL服务,来存放gitea服务信息。如果没有MySQL也可以使用docker创建一个很方便,或者使用官方的带MySQL镜像的docker compose 脚本, 详情参考附录

找一个干净的目录如/home/ubuntu/gitea(将来该目录会存放gitea配置文件) 新建docker-compose.yaml文件,里边内容如下:

version: "3"

networks:
  gitea:
    external: false

services:
  server:
    image: gitea/gitea:1.19
    container_name: gitea
    environment:
      - USER_UID=1000
      - USER_GID=1000
      - GITEA__database__DB_TYPE=mysql      
      - GITEA__database__HOST=127.0.0.1:3306       # 可以访问到的MySQL的ip和port
      - GITEA__database__NAME=giteadb              # 给gitea用的数据库名,可自定义
      - GITEA__database__USER=gitea                # 给gitea用的用户名,可自定义
      - GITEA__database__PASSWD=gitea              # 给gitea用户的数据库密码,可自定义
    restart: always
    networks:
      - gitea
    volumes:
      - ./gitea:/data
      - /etc/timezone:/etc/timezone:ro
      - /etc/localtime:/etc/localtime:ro
    ports:
      - "3000:3000"
      - "10022:22"             # 将来22端口会映射到10022端口,10022端口可自定义

这里有一个小问题就是,你的数据库配置最好一开始就在docker-compose.yaml 中定好,因为如果等gitea容器创建好了之后再修改app.ini 配置文件,那么当容器重启的时候,他的配置项还是走的是docker-compose.yaml中的配置,所以修改配置的时候,记得把docker-compose.yaml 中的配置也修改了。

先初始化MySQL,创建gitea需要的账号等。下面的这个ip根据自己的服务器定,也可修改为%让任何ip都可访问。

CREATE USER 'gitea'@'192.0.2.10' IDENTIFIED BY 'gitea';    # ip位置可以改为%,表示任何人都可以访问
CREATE DATABASE giteadb CHARACTER SET 'utf8mb4' COLLATE 'utf8mb4_unicode_ci';

GRANT ALL PRIVILEGES ON giteadb.* TO 'gitea'@'192.0.2.10';  # ip可改为%
FLUSH PRIVILEGES;

官网位置:https://docs.gitea.com/installation/database-prep#mysql

执行docker compose up -d即可安装gitea。
在这里插入图片描述

安装完后就会看到启动了一个docker
在这里插入图片描述
我们访问IP:3000端口即可看到如下引导页面。可以自己修改一些基础信息,然后点击立即安装即可。
在这里插入图片描述
在这里插入图片描述
随后就可以进入登录页面,我们自己注册一个账号使用了。
在这里插入图片描述
官网内容点此:https://docs.gitea.com/installation/install-with-docker


二、给gitea配置https访问

如不需要配置https可以跳过

首先我们需要准备一个域名和申请好的ssl证书,可以去云厂商自己申请免费证书
在这里插入图片描述
然后下载证书文件,本文讲解如何使用nginx代理gitea配置https。
首先把下载好的Nginx证书文件放到一个可以访问到的目录中
在这里插入图片描述
然后在nginx配置文件中配置

server {
    listen 443 ssl;
    server_name git.nideyuming.com; 
    ssl_certificate /etc/nginx/ssl/cert/git.nideyuming_nginx/git.nideyuming_bundle.pem;
    ssl_certificate_key /etc/nginx/ssl/cert/git.nideyuming_nginx/git.nideyuming.key;
    ssl_session_cache shared:SSL:1m;
    ssl_session_timeout 5m;
    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
    ssl_ciphers HIGH:!aNULL:!MD5;
    ssl_prefer_server_ciphers on;

    location / {
        proxy_pass http://127.0.0.1:3000;
    }
}

server_name位置放置你的域名
ssl_certificate填写你的证书所在位置
ssl_certificate_key 填写你的证书密钥所在位置
location / 的位置是你要代理的地址
然后就可以开启https访问了。


三、gitea配置ssh方式拉取代码

注册登录进入gitea会发现页面十分简约,创建仓库的方式也是跟github等一样,我们首先创建一个仓库。在这里插入图片描述
在这里插入图片描述
可以看到页面和gitee, github等都是类似的。下面我们绑定一个SSH公钥
具体如何生成参考SSH公钥生成方式
在这里插入图片描述
在这里插入图片描述
然后我们使用git clone git@192.168.43.246:kylin/gitea-test.git 下载结果如下:在这里插入图片描述
理论上来说我们绑定了ssh公钥,就不应该再去输入密码,因此我们需要调整。

我们在配置gitea的时候,把gitea的22端口映射到了物理机的10022端口,因此我们git clone 的时候也应该去修改成10022端口,但是我们的gitea给我们自动显示的还是22默认端口,我们需要修改gitea的配置信息。

/home/ubuntu/gitea/gitea文件中,我们映射了docker内部的/data 目录,因此可以在/home/ubuntu/gitea/gitea 中找配置文件:/home/ubuntu/gitea/gitea/gitea/conf/app.ini
打开该文件内容如下:
在这里插入图片描述
在server配置中,我们需要把这里边的两个22改成我们自己定义的10022端口,然后重启gitea容器即可:docker restart gitea

在这里插入图片描述
可以发现我们的ssh访问方式也加上了10022端口,再次测试:
在这里插入图片描述
发现这次访问我们没有输入密码,直接拉取成功。


四、给gitea配置可发送的邮箱

我们可以选择自己搭建属于自己的邮箱服务,也可以选择例如QQ邮箱,163邮箱的smtp服务来发送邮件。下面介绍如何给gitea绑定qq邮箱,其他邮箱同理。

登录邮箱,选择设置
在这里插入图片描述
然后点击账户列,会发现有一个POP3/IMAP/SMTP/Exchange/CardDAV/CalDAV服务
在这里插入图片描述
如果你的服务是关闭状态,记得开启一下,需要收验证码等操作。开启之后点击管理服务,页面如下:
在这里插入图片描述
点击生成授权码,会生成一串乱码,这一串乱码就是我们的密码,需要记住。
然后回到gitea的配置项中:/home/ubuntu/gitea/gitea/gitea/conf/app.ini, 找到[mailer] 选项,按照下面的格式填写自己的内容,填写完成重启docker容器即可。

[mailer]
ENABLED = true
SMTP_ADDR = smtp.qq.com         # 这里是固定的qq邮箱smtp地址
SMTP_PORT = 465                 # 端口也固定
FROM = 123456789@qq.com         # 这里是你的QQ邮箱号
USER = 123456789@qq.com         # 这里是你的QQ邮箱号
PASSWD = cnslgzhabcfededh       # 这里是生成的授权码
MAILER_TYPE = smtp              # 这里是固定的smtp
IS_TLS_ENABLED = true           # 这里是固定的true

QQ邮箱官网说明:https://wx.mail.qq.com/list/readtemplate?name=app_intro.html#/agreement/authorizationCode
gitea官网说明:https://docs.gitea.com/administration/email-setup#using-smtp

下面我们可以到gitea测试一下
点击管理后台 -> 应用配置
在这里插入图片描述
在这里插入图片描述
我们可以在此填入一个正确的其他邮箱地址,来给这个邮箱发送测试内容,发送成功后,填写的邮箱会收到一个来自gitea的测试消息。
在这里插入图片描述
到此给gitea配置邮箱完成


五、gitea注册开启邮箱验证和邮箱通知

打开gitea配置文件/home/ubuntu/gitea/gitea/gitea/conf/app.ini, 把REGISTER_EMAIL_CONFIRM 设置成true,这个是打开注册需要邮箱验证;把ENABLE_NOTIFY_MAIL设置成true,这个是开启邮箱通知。

[service]
DISABLE_REGISTRATION              = false
REQUIRE_SIGNIN_VIEW               = false
REGISTER_EMAIL_CONFIRM            = true
ENABLE_NOTIFY_MAIL                = true
ALLOW_ONLY_EXTERNAL_REGISTRATION  = false
ENABLE_CAPTCHA                    = false
DEFAULT_KEEP_EMAIL_PRIVATE        = false
DEFAULT_ALLOW_CREATE_ORGANIZATION = true
DEFAULT_ENABLE_TIMETRACKING       = true
NO_REPLY_ADDRESS                  = noreply.localhost

随后重启gitea容器即可。


六、限制所有仓库只有登录后才能访问

我们搭建好gitea私服之后,如果是在公司内网,那么只能内部人访问,如果是在公有云服务器,任何人只要点击你搭建好的gitea私服首页的探索 , 就会访问到私服里边的公开仓库
在这里插入图片描述
在这里插入图片描述
为了只允许有本公司账号的人登录进入查看,我们需要限制仓库只能登录后看到,找到gitea的配置文件/home/ubuntu/gitea/gitea/gitea/conf/app.ini , [server] 中有一个REQUIRE_SIGNIN_VIEW 字段,默认是false 就是说不登录也可以查看,我们改为true,然后重启gitea容器即可。
在这里插入图片描述
改完重启后我们发现如果点击探索 就会自动跳转到登录页。

同时为了进一步限制只有本公司的人查看,我们可以关闭gitea注册功能,然后谁需要账号,就用管理员账号给分配,如何关闭看下条。


七、关闭gitea的注册功能

为了防止不是本公司的人注册自己搭建的gitea私服,我们可以关闭gitea注册功能,改为使用管理员账号分配账号的形式。

gitea似乎并没有gitlab那样的开启注册完毕 需要审核的功能

在这里插入图片描述
配置文件中DISABLE_REGISTRATION 字段就是禁用注册的功能,改为true 即可。另外一个ENABLE_CAPTCHA 其实是开启注册的时候展示验证码的功能,打开后,注册的时候就需要输入一个验证码。


总结

本文主要介绍什么是gitea,如何通过docker compose的方式去安装,如何开启https访问,以及如何绑定邮箱,开启注册邮箱验证等功能。


附录

针对gitea配置MySQL,gitea官方提供了docker方式的MySQL配置,一键部署,docker-compose 文件如下:

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:
      - ./gitea:/data
      - /etc/timezone:/etc/timezone:ro
      - /etc/localtime:/etc/localtime:ro
    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

核心配置是depends_on 配置里边的db ,根据自己的需要定制配置即可。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/51287.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

IDEA 模块不加载依旧是灰色 没有变成小蓝色的方块

Settings > Build, Execution, Deployment > Build Tools > Maven > Ignored Files下降对应的模块勾选掉 但通常在Maven的配置中,您会找到一个名为“ignoredFiles”的列表,其中包含被忽略的文件和目录。您可以通过取消选中所需的文件或目录…

详解Mybatis查询之resultType返回值类型问题【4种情况】

编译软件:IntelliJ IDEA 2019.2.4 x64 操作系统:win10 x64 位 家庭版 Maven版本:apache-maven-3.6.3 Mybatis版本:3.5.6 文章目录 引言一、查询单行数据返回单个对象二、查询多行数据返回对象的集合三、 查询单行数据返回Map[Key,…

【点云处理教程】01如何创建和可视化点云

一、说明 本文是系列教程,专门介绍点云处理的全流程,是一个入门工具。“点云处理”教程对初学者友好,我们将在其中简单地介绍从数据准备到数据分割和分类的点云处理管道。 第1条:点云处理简介文章2:在Python中从深度图…

手机python怎么用海龟画图,python怎么在手机上编程

大家好,给大家分享一下手机python怎么用海龟画图,很多人还不知道这一点。下面详细解释一下。现在让我们来看看! 1、如何python手机版创造Al? 如果您想在手机上使用Python来创建AI(人工智能)程序&#xff0…

Windows Server 2012 能使用的playwright版本

由于在harkua_bot里面使用到了playwright,我的服务器又是Windows Server 2012 R2,最新版playwright不支持Windows Server 2012 R2,支持Windows Server 2016以上,所以有了这个需求 https://cdn.npmmirror.com/binaries/playwright…

网络安全系统中的守护者:如何借助威胁情报 (TI) 提高安全性

在这篇哈巴尔网站上的推文中,我们将解释 TI 缩写背后的含义、为什么需要它、Positive Technologies 收集哪些网络威胁数据以及如何帮助企业预防网络威胁。我们将以四种情况为例,说明公司如何使用 PT Threat Intelligence Feeds 来发现恶意活动并预防攻击…

链表的算法

每日一句:二十岁的年纪,为什么不敢去折腾?哪怕最后失败,你也还有从头再来的资本。 正如乔布斯所说:你本就一无所有,没有理由不去追随你的内心。 目录 哈希表的简单介绍 有序表的简单介绍 有序表的固定操…

Unity 性能优化四:UI耗时函数、资源加载、卸载API

UI耗时函数 1.1 Canvas.SendWillRenderCanvases 这个函数是由于自身UI的更新,产生的耗时 1. 这里更新的是vertex 属性,比如 color、tangent、position、uv,修改recttransform的position、scale,rotation并不会导致顶点属性改变…

100个网络安全测试面试题

1、Burpsuite常用的功能是什么? 2、reverse_tcp和bind_tcp的区别? 3、拿到一个待检测的站或给你一个网站,你觉得应该先做什么? 4、你在渗透测试过程中是如何敏感信息收集的? 5、你平时去哪些网站进行学习、挖漏洞提交到…

uni-app云打包(android)(自有证书、云端证书、公共测试证书)

一、进入云打包入口 发行->原生App-云打包 二、证书选择 1、使用自有证书 ①进入香蕉云编(这里采用的证书从香蕉云编进行生成) 香蕉云编-app打包上架工具类平台 ②进入页面选择“生成签名证书”->"立即创建证书" ③选择“安卓证书生…

java商城系统和php商城系统有什么差异?如何选择?

java商城系统和php商城系统是两种常见的电子商务平台,它们都具有一定的优势和劣势。那么,java商城系统和php商城系统又有哪些差异呢? 一、开发难度 Java商城系统和PHP商城系统在开发难度方面存在一定的差异。Java商城系统需要使用Java语言进…

微服务模式:业务服务模式

无论是单体应用还是微服务,构建企业应用的业务逻辑/服务在更多方面上都有相似之处而不是差异。在两种方法中,都包含服务、实体、仓库等类。然而,也会发现一些明显的区别。在本文中,我将试图以概念性的方式强调这些区别&#xff0c…

opencv-24 图像几何变换03-仿射-cv2.warpAffine()

什么是仿射? 仿射变换是指图像可以通过一系列的几何变换来实现平移、旋转等多种操作。该变换能够 保持图像的平直性和平行性。平直性是指图像经过仿射变换后,直线仍然是直线;平行性是指 图像在完成仿射变换后,平行线仍然是平行线。…

深入解析Linux进程内存:VSS、RSS、PSS、USS及查看方式

VSS 虚拟耗用内存大小,是进程可以访问的所有虚拟内存的总量,包括进程独自占用的物理内存、和其他进程共享的内存、分配但未使用的内存。 RSS 驻留内存大小,是进程当前实际占用的物理内存大小,包括进程独自占用的物理内存、和其…

C#实现滑动拼图验证码

开发环境:C#,VS2019,.NET Core 3.1,ASP.NET Core 1、建立一个验证码控制器 新建两个方法Create和Check,Create用于创建验证码(返回2张图片和令牌),Check用于验证(验证图…

【iOS】KVC KVO 总结

文章目录 KVC1. KVC赋值原理 setValue:forKey:2. KVC取值原理 valueForKey:3. 注意4. KVC的批量存值和取值 KVO 使用1. KVO的介绍2. KVO监听的步骤注册监听监听实现移除监听例子 3. KVO的传值4. KVO注意5. KVO的使用场景 KVO原理1. KVO的本质是改变了setter方法的调用2. _NSSet…

Glow: Generative Flow with Invertible 1×1 Convolutions论文解析及实现(二)

Glow: Generative Flow with Invertible 11 Convolutions 代码github: https://github.com/rosinality/glow-pytorch添加链接描述 1 模型架构如下 1.1 左边图flow模型 Flow model ① ActNorm ② InvConv2dLU ③ AffineCoupling 1.2 右边模型结构Glow模型 Glow Model Block…

【Linux】-进程概念及进程状态(僵尸进程和孤儿进程)

💖作者:小树苗渴望变成参天大树🎈 🎉作者宣言:认真写好每一篇博客💤 🎊作者gitee:gitee✨ 💞作者专栏:C语言,数据结构初阶,Linux,C 动态规划算法🎄 如 果 你 …

更安全,更省心丨DolphinDB 数据库权限管理系统使用指南

在数据库产品使用过程中,为保证数据不被窃取、不遭破坏,我们需要通过用户权限来限制用户对数据库、数据表、视图等功能的操作范围,以保证数据库安全性。为此,DolphinDB 提供了具备以下主要功能的权限管理系统: 提供用户…

OpenMP

官方文档:OpenMP | LLNL HPC Tutorials OpenMP总览 统一内存访问:OpenMP、Pthreads 非统一内存访问:MPI OpenMP与Pthread OpenMP原理 串行区到达并行区后会派生多个线程,并行区代码执行完后进行线程合并,剩下主线程 编…