草庐IT

Gitea——私有git服务器搭建详细教程

Baret-H 2023-04-20 原文

本文将从源代码和docker安装两种方式带大家从0~1通过Gitea搭建一个私有git服务器

Gitea——私有git服务器搭建教程


什么是Gitea

Gitea 是一个开源社区驱动的轻量级代码托管解决方案,后端采用 Go 编写,采用 MIT 许可证.
官网https://gitea.io/zh-cn/

一、源代码安装方式

实验环境为MacOS系统,Windows系统以下操作大同小异

官方文档https://docs.gitea.io/zh-cn/install-from-source/

1. 前置环境要求

# 我的环境
zhongsiru@zhongsirudeMacBook-Air ~ % go version
go version go1.17.1 darwin/arm64
zhongsiru@zhongsirudeMacBook-Air ~ % node -v   
v14.17.6
zhongsiru@zhongsirudeMacBook-Air ~ % npm -v    
8.1.3
zhongsiru@zhongsirudeMacBook-Air ~ % mysql -V
mysql  Ver 8.0.27 for macos11 on x86_64 (MySQL Community Server - GPL)

2. 下载gitea

通过git将项目下载到$GOPATH/src目录下

git clone https://github.com/go-gitea/gitea

3. 构建运行

下载完成后用Goland打开,在项目根目录下使用以下命令安装各种前端依赖,下载好的依赖在项目根目录下生的node_modules目录中

npm install

然后通过以下目录构建后端代码

TAGS="bindata" make backend

构建完成后,会在项目根目录下生成gitea可执行文件,我们使用以下命令来启动项目

./gitea web

启动成功后我们访问本机的3000端口,可以看到如下界面:

这里我们配置我们所安装的mysql数据库和密码即可,这里的数据库名称需要我们提前创建一个数据库,这里创建的名称为gitea,此外还可以更改站点名称为自己想要的名称。

设置更新完后,点击安装即可,然后就进入到gitea的控制台,到此即安装配置成功。



二、Docker安装方式

实验环境为CentOS7.6服务器,可以使用任意云厂商或者centos虚拟机

官方文档:https://docs.gitea.io/zh-cn/install-with-docker/

1. Docker安装

官方文档Install Docker Engine on CentOS | Docker Documentation

# 1.移除以前docker相关包
sudo yum remove docker \
                  docker-client \
                  docker-client-latest \
                  docker-common \
                  docker-latest \
                  docker-latest-logrotate \
                  docker-logrotate \
                  docker-engine

# 2. 配置yum源
sudo yum install -y yum-utils
sudo yum-config-manager \
--add-repo \
http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

# 3. 安装docker
sudo yum install -y docker-ce docker-ce-cli containerd.io

# 4. 启动docker
systemctl enable docker --now

# 5. 配置阿里云加速
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
  "registry-mirrors": ["https://82m9ar63.mirror.aliyuncs.com"],
  "exec-opts": ["native.cgroupdriver=systemd"],
  "log-driver": "json-file",
  "log-opts": {
    "max-size": "100m"
  },
  "storage-driver": "overlay2"
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker

以上操作完成后,我们可以使用 systemctl status docker来查看 Docker 服务是否启动

2. Dokcer Compose安装

官方文档Install Docker Compose | Docker Documentation

# 1.安装docker compose
sudo curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose

# 2.赋予下载的docker-compose执行权限
sudo chmod +x /usr/local/bin/docker-compose

注意Docker Compose 存放在GitHub不太稳定,可以通过镜像网址高速安装。

  • 镜像网站:http://get.daocloud.io/
curl -L https://get.daocloud.io/docker/compose/releases/download/v2.2.2/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose
chmod +x /usr/local/bin/docker-compose

下载完成后可以输入docker-compose --version来查看是否安装成功

3. 安装启动gitea

我们通过docker compose的yaml配置文件来安装gitea,其中选用数据库mysql来存储gitea的数据文件。

创建docker-compose.yml文件,内容如下:

version: "3"

networks:
  gitea:
    external: false

services:
  server:
    image: gitea/gitea:1.15.9
    container_name: gitea
    environment:
      - USER_UID=1000
      - USER_GID=1000
      - DB_TYPE=mysql
      - DB_HOST=db:3306
      - DB_NAME=gitea
      - DB_USER=gitea
      - DB_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

编写完成后,我们通过以下命令再启动 Gitea

# 后台启动gitea
docker-compose up -d server

待启动成功,可以看到它启动在3000端口,然后我们通过服务器公网IP:3000即可访问到其web界面,注意服务器安全组规则要放行3000端口

其中数据库设置我们不需要更改,因为是根据上述docker-compose.yml文件中的数据库配置来读取的,我们需要更改ssh服务的域名为服务器的公网ip,通知基础url的前缀也更改为服务器的公网ip

然后创建一个管理员用户(zsr/123456)即可,然后点击安装

设置完成后,点击立即安装,然后即可进入如下界面

到此gitea的已经安装部署完成

4. 基本操作实例

我们来新建一个仓库:

然后我们将仓库克隆下来新增一个文件然后再推送回去:

# 克隆仓库
zhongsiru@zhongsirudeMacBook-Air Desktop % git clone http://139.198.40.248:3000/zsr/hello.git
Cloning into 'hello'...
warning: You appear to have cloned an empty repository.

# 进入本地仓库目录
zhongsiru@zhongsirudeMacBook-Air Desktop % cd hello 

# 新增hello.txt文件
zhongsiru@zhongsirudeMacBook-Air hello % vim hello.txt
zhongsiru@zhongsirudeMacBook-Air hello % ls
hello.txt

# 将变更添加到暂存区
zhongsiru@zhongsirudeMacBook-Air hello % git add .

# 将暂存区的内容添加到本地仓库
zhongsiru@zhongsirudeMacBook-Air hello % git commit -m "添加hello.txt"
[master (root-commit) 1f46f0e] 添加hello.txt
 1 file changed, 1 insertion(+)
 create mode 100644 hello.txt

# 推送到远程仓库(要输入用户名和密码)
zhongsiru@zhongsirudeMacBook-Air hello % git push origin master
Username for 'http://139.198.40.248:3000': zsr
Password for 'http://zsr@139.198.40.248:3000': 
Enumerating objects: 3, done.
Counting objects: 100% (3/3), done.
Writing objects: 100% (3/3), 230 bytes | 230.00 KiB/s, done.
Total 3 (delta 0), reused 0 (delta 0), pack-reused 0
remote: . Processing 1 references
remote: Processed 1 references in total
To http://139.198.40.248:3000/zsr/hello.git
 * [new branch]      master -> master

上述命令操作完成后,我们回到gitea web页面,即可看到变更

5. ssh配置

上述我们推送到远程仓库要输入用户名和密码进行校验,这是十分麻烦的,我们可以配置ssh实现免密登陆:

1️⃣ 首先在本机生成公钥

# 进入到.ssh目录
cd ~/.ssh

# 生成密钥对
ssh-keygen -t rsa -C "邮箱"

# 查看公钥内容
cat id_rsa.pub

2️⃣ gitea中添加公钥

在gitea web界面的ssh配置页面新增一个ssh密钥,复制上面生成的公钥粘贴进去即可

添加完成后如下所示

此时如果我们修改hello.txt的内容再重新推送到gitea仓库,就不需要输入密码了

如果我们采用ssh的方式克隆下来呢?

我们复制这个ssh地址来看看:

发现还让我们输密码,我们不是刚刚配置的ssh吗?我们仔细看这个ssh地址:

git@139.198.40.248:zsr/hello.git

在服务器公网ip后面直接接了zsr用户名,没有接任何端口,也就是想当于走了默认端口22,等价于服务器公网ip:22也就是要登陆服务器的操作,这当然是需要密码的,我们应该是登陆服务器内部gitea容器的操作,因此我们需要修改gitea的一些配置:

在docker-compose.yml文件中,由于我们将gitea的data目录挂在到本季的gitea目录中,因此我们需要进入该目录中来修改相关配置,需要修改/gitea/gitea/conf/app.ini文件

由于我们将主机的222端口映射到gitea容器中的22端口,因此我们将app.ini中的ssh_portssh_listen_port修改为222端口

修改完成后我们通过docker-compose restart命令重启一下gitea容器

然后再次访问web界面,可以看到ssh地址已经变更,在服务器的公网ip后接了222端口(注意服务器安全组要放行222端口),也就相当于访问服务器内部gitea容器的22端口

此时我们再通过ssh进行克隆,然后修改文件再推送回去

这次期间任何流程无需再需要输入密码进行验证,到此ssh配置已经完毕。

有关Gitea——私有git服务器搭建详细教程的更多相关文章

  1. ruby - 为什么我可以在 Ruby 中使用 Object#send 访问私有(private)/ protected 方法? - 2

    类classAprivatedeffooputs:fooendpublicdefbarputs:barendprivatedefzimputs:zimendprotecteddefdibputs:dibendendA的实例a=A.new测试a.foorescueputs:faila.barrescueputs:faila.zimrescueputs:faila.dibrescueputs:faila.gazrescueputs:fail测试输出failbarfailfailfail.发送测试[:foo,:bar,:zim,:dib,:gaz].each{|m|a.send(m)resc

  2. ruby - 使用 ruby​​ 和 savon 的 SOAP 服务 - 2

    我正在尝试使用ruby​​和Savon来使用网络服务。测试服务为http://www.webservicex.net/WS/WSDetails.aspx?WSID=9&CATID=2require'rubygems'require'savon'client=Savon::Client.new"http://www.webservicex.net/stockquote.asmx?WSDL"client.get_quotedo|soap|soap.body={:symbol=>"AAPL"}end返回SOAP异常。检查soap信封,在我看来soap请求没有正确的命名空间。任何人都可以建议我

  3. ruby - 具有身份验证的私有(private) Ruby Gem 服务器 - 2

    我想安装一个带有一些身份验证的私有(private)Rubygem服务器。我希望能够使用公共(public)Ubuntu服务器托管内部gem。我读到了http://docs.rubygems.org/read/chapter/18.但是那个没有身份验证-如我所见。然后我读到了https://github.com/cwninja/geminabox.但是当我使用基本身份验证(他们在他们的Wiki中有)时,它会提示从我的服务器获取源。所以。如何制作带有身份验证的私有(private)Rubygem服务器?这是不可能的吗?谢谢。编辑:Geminabox问题。我尝试“捆绑”以安装新的gem..

  4. ruby-on-rails - 启动 Rails 服务器时 ImageMagick 的警告 - 2

    最近,当我启动我的Rails服务器时,我收到了一长串警告。虽然它不影响我的应用程序,但我想知道如何解决这些警告。我的估计是imagemagick以某种方式被调用了两次?当我在警告前后检查我的git日志时。我想知道如何解决这个问题。-bcrypt-ruby(3.1.2)-better_errors(1.0.1)+bcrypt(3.1.7)+bcrypt-ruby(3.1.5)-bcrypt(>=3.1.3)+better_errors(1.1.0)bcrypt和imagemagick有关系吗?/Users/rbchris/.rbenv/versions/2.0.0-p247/lib/ru

  5. ruby-on-rails - s3_direct_upload 在生产服务器中不工作 - 2

    在Rails4.0.2中,我使用s3_direct_upload和aws-sdkgems直接为s3存储桶上传文件。在开发环境中它工作正常,但在生产环境中它会抛出如下错误,ActionView::Template::Error(noimplicitconversionofnilintoString)在View中,create_cv_url,:id=>"s3_uploader",:key=>"cv_uploads/{unique_id}/${filename}",:key_starts_with=>"cv_uploads/",:callback_param=>"cv[direct_uplo

  6. ruby - 用 Ruby 编写一个简单的网络服务器 - 2

    我想在Ruby中创建一个用于开发目的的极其简单的Web服务器(不,不想使用现成的解决方案)。代码如下:#!/usr/bin/rubyrequire'socket'server=TCPServer.new('127.0.0.1',8080)whileconnection=server.acceptheaders=[]length=0whileline=connection.getsheaders想法是从命令行运行这个脚本,提供另一个脚本,它将在其标准输入上获取请求,并在其标准输出上返回完整的响应。到目前为止一切顺利,但事实证明这真的很脆弱,因为它在第二个请求上中断并出现错误:/usr/b

  7. ruby-on-rails - 在 Rails 中调试生产服务器 - 2

    您如何在Rails中的实时服务器上进行有效调试,无论是在测试版/生产服务器上?我试过直接在服务器上修改文件,然后重启应用,但是修改好像没有生效,或者需要很长时间(缓存?)我也试过在本地做“脚本/服务器生产”,但是那很慢另一种选择是编码和部署,但效率很低。有人对他们如何有效地做到这一点有任何见解吗? 最佳答案 我会回答你的问题,即使我不同意这种热修补服务器代码的方式:)首先,你真的确定你已经重启了服务器吗?您可以通过跟踪日志文件来检查它。您更改的代码显示的View可能会被缓存。缓存页面位于tmp/cache文件夹下。您可以尝试手动删除

  8. postman接口测试工具-基础使用教程 - 2

    1.postman介绍Postman一款非常流行的API调试工具。其实,开发人员用的更多。因为测试人员做接口测试会有更多选择,例如Jmeter、soapUI等。不过,对于开发过程中去调试接口,Postman确实足够的简单方便,而且功能强大。2.下载安装官网地址:https://www.postman.com/下载完成后双击安装吧,安装过程极其简单,无需任何操作3.使用教程这里以百度为例,工具使用简单,填写URL地址即可发送请求,在下方查看响应结果和响应状态码常用方法都有支持请求方法:getpostputdeleteGet、Post、Put与Delete的作用get:请求方法一般是用于数据查询,

  9. 在VMware16虚拟机安装Ubuntu详细教程 - 2

    在VMware16.2.4安装Ubuntu一、安装VMware1.打开VMwareWorkstationPro官网,点击即可进入。2.进入后向下滑动找到Workstation16ProforWindows,点击立即下载。3.下载完成,文件大小615MB,如下图:4.鼠标右击,以管理员身份运行。5.点击下一步6.勾选条款,点击下一步7.先勾选,再点击下一步8.去掉勾选,点击下一步9.点击下一步10.点击安装11.点击许可证12.在百度上搜索VM16许可证,复制填入,然后点击输入即可,亲测有效。13.点击完成14.重启系统,点击是15.双击VMwareWorkstationPro图标,进入虚拟机主

  10. git使用常见问题(提交代码,合并冲突) - 2

    文章目录git常用命令(简介,详细参数往下看)Git提交代码步骤gitpullgitstatusgitaddgitcommitgitpushgit代码冲突合并问题方法一:放弃本地代码方法二:合并代码常用命令以及详细参数gitadd将文件添加到仓库:gitdiff比较文件异同gitlog查看历史记录gitreset代码回滚版本库相关操作远程仓库相关操作分支相关操作创建分支查看分支:gitbranch合并分支:gitmerge删除分支:gitbranch-ddev查看分支合并图:gitlog–graph–pretty=oneline–abbrev-commit撤消某次提交git用户名密码相关配置g

随机推荐