前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >私有化轻量级持续集成部署方案--04-私有代码仓库服务-Gitea

私有化轻量级持续集成部署方案--04-私有代码仓库服务-Gitea

作者头像
莫问今朝
发布2022-03-08 17:25:26
9830
发布2022-03-08 17:25:26
举报
文章被收录于专栏:博客园博客园

提示:本系列笔记全部存在于 Github, 可以直接在 Github 查看全部笔记

企业级最流行的私有代码仓库是 Gitlab, 一开始我也打算部署 Gitlab作为私有代码仓库。

但部署完成后发现, Gitlab 资源占用太大了。优化之后也要占用 3g 内存,最后只好放弃这一方案。

随后发现了 GiteaGogs 这两个轻量级的私有仓库,两个都是优秀的轻量级私有仓库。

后对它们进行了对比,发现 Gitea 是从 Gogs 项目 fork 出的项目。 官方给出了 fork 理由:https://blog.gitea.io/2016/12/welcome-to-gitea/,有兴趣的看看

也就是 Gitea项目 是优于 Gogs 项目的,最后就选择了 Gitea

Gitea 虽然是轻量级,但也具有强大的功能,可以放心使用。

https://docs.gitea.io/zh-cn/

Gitea

数据库选择

Gitea 支持mysql , postgres, mssql, tidbsqlite3 多种数据库。 最简单的是直接使用 sqlite3,作为一个文档性数据库,不需要单独部署服务。

在此使用 postgres 数据库,现在 postgres 也是主流的数据库,很多企业都从 mysql 转向了 postgress

至于 postgressmysql 之间的对比,有兴趣的朋友可以自行查询

DockerFile

代码语言:javascript
复制
version: '3.9'
# 创建自定义网络
networks:
  gitea:
    name: gitea
    driver: bridge

services:
  ## 数据库服务
  db:
    image: postgres:latest
    container_name: gitea_db
    restart: always
    networks:
      - gitea # 加入到gitea网络
    ports:
      - 3003:5432
    environment:
      - POSTGRES_USER=gitea # PGSQL默认用户
      - POSTGRES_PASSWORD=gitea # PGSQL默认密码
      - POSTGRES_DB=gitea # PGSQL默认数据库
    volumes:
      - /volumes/gitea/db:/var/lib/postgresql/data
  #gitea服务
  server:
    image: gitea/gitea:latest
    container_name: gitea_server
    restart: always
    networks:
      - gitea # 加入到gitea网络
    ports:
      - '3000:3000' # HTTP服务端口
      - '3001:22' # SSH服务器端口
    environment:
      - USER_UID=1000 # 运行容器使用的 UID  UID和GID是用于匿名数据卷挂载,
      - USER_GID=1000 # 运行容器使用的 GID
      - APP_NAME=gitea
      - PROTOCOL=http # 服务使用的访问协议
      - HTTP_PORT=3000 # HTTP 侦听端口 默认为3000
      - SSH_PORT=22 # 克隆 URL 中显示的 SSH 端口
      - DOMAIN=82.157.55.94:3000 # UI显示的 HTTP克隆URL
      - LANDING_PAGE=explore
      - ROOT_URL=http://82.157.55.94:3000 # 服务器的对外 URL
      - DB_TYPE=postgres # 数据库类型
      - DB_HOST=db # 数据库连接地址, 使用network形式连接, serverName或者 containerName
      - DB_NAME=gitea # 数据库名称
      - DB_USER=gitea # 数据库连接用户
      - DB_PASSWD=gitea # 数据库连接密码

      - DISABLE_REGISTRATION=true # 禁用用户注册,启用后只允许管理员添加用户
      - SHOW_REGISTRATION_BUTTON=false # 是否显示注册按钮
      - REQUIRE_SIGNIN_VIEW=true # 是否所有页面都必须登录后才可访问

    volumes:
      - /volumes/gitea/server/data:/data
      - /volumes/gitea/server/config:/etc/config
      - /volumes/gitea/server/timezone:/etc/timezone:ro
      - /volumes/gitea/server/localtime:/etc/localtime:ro
    depends_on:
      - db

Dockerfile 配置文件中部署了两个容器: 一个是 Postgres(数据库)服务,一个是 Gitea服务。

使用 networks 添加了一个自定义网络。 两个容器都加入这个自定义网络中,使用自定义网络进行通讯。

PS: Docker 中, 提供了一个 network 模块。同属于一个 network 下的容器可以使用 容器名称服务名称 直接通讯。

Postgres 服务中通过环境变量设置了默认的数据库、用户名称和用户密码信息。

Gitea 服务中通过环境变量设置了 运行容器的 UIDGID,HTTP 监听端口、UI 上显示的克隆 URL。连接数据库、禁用注册等信息,至于还有其它参数,可以自行查询

Gitea 端口号映射了两个 30003001,分别是 HTTP访问和 SSH 访问,不过现在基本上都使用 HTTP , SSH` 可以使用参数禁用

在配置文件中有一个 depends_on 属性,这个属性是控制部署顺序的。意思是 Gitea 部署依赖 postgres 部署

使用这个配置安装成功后,会成功部署两个容器和创建一个 network,成功后可以进行访问Gitea

安装引导

第一次访问会进入安装向导页面,该页面是用于设置安装配置信息,

向导页面会带入 environment 中填写的设置,很多信息不需要进行设置。

不过其中有一个 管理员账号设置

这个是设置管理员的。如果不设置管理员,默认第一个注册用户将自动成为管理员,

但是在禁止注册的情况下必须设置管理员

设置管理员后点击安装,便会使用当前页面配置进行安装 Gitea。安装完毕后会自动跳转到主页

推送代码

成功之后可以创建一个仓库将之前的 web 项目推送到此仓库。

PS 图中 HTTP 显示的 IP 地址是部署时 DOMAIN 属性设置的那个。

网关代理

配置网关

下一步就配置 Gitea 的网关代理。

首先还是配置网关,网关配置就不再介绍

代码语言:javascript
复制
server {
    #SSL 访问端口号为 443
    listen 443 ssl http2;
    #填写绑定证书的域名
    server_name gitea.mwjz.live;
    #日志
    error_log /var/log/nginx/gitea/error.log;
    access_log /var/log/nginx/gitea/access.log;
    #证书文件
    ssl_certificate /etc/nginx/conf.d/ssl/gitea/gitea.mwjz.live_bundle.crt;
    #证书密钥文件
    ssl_certificate_key /etc/nginx/conf.d/ssl/gitea/gitea.mwjz.live.key;

    ssl_ciphers SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!3DES:!aNULL:!MD5:!ADH:!RC4;
    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
    ssl_prefer_server_ciphers on;
    location / {
        proxy_pass http://10.0.24.12:3000;
    }
}

配置完网关后,还需要配置 Gitea 服务中的配置。

此时重新部署的话会很麻烦,所以可以修改 Gitea 的配置文件修改置

配置文件是 /data/gitea/conf/app.ini。只需要修改此配置文件中 ROOT_URLDOMAINSSH_DOMAIN,随后重启容器就可以

作为一个强迫症,我还会将 Portainer 可视化工具中的环境变量进行改动。

Portainer 可视化工具是支持修改配置然后重启部署

PS: 注意,直接改动 Portainer 可视化工具中环境变量是不行。环境变量所设置的配置已经写入了文件。

设置上传大小限制

Nginx 有一个上传文件大小限制,上传大于限制大小的文件会返回 403 错误,其大小限制默认值为 1MB

所以默认当使用 网关(Nginx) push 到 Gitea,如果文件大于 1MB 就会报错。

解决这个问题,只需要修改 网关(Nginx)client_max_body_size 属性就可以。

代码语言:javascript
复制
server {
    #SSL 访问端口号为 443
    listen 443 ssl http2;
    #填写绑定证书的域名
    server_name gitea.mwjz.live;
    #上传大小限制
    client_max_body_size 100M;
    #日志
    error_log /var/log/nginx/gitea/error.log;
    access_log /var/log/nginx/gitea/access.log;
    #证书文件
    ssl_certificate /etc/nginx/conf.d/ssl/gitea/gitea.mwjz.live_bundle.crt;
    #证书密钥文件
    ssl_certificate_key /etc/nginx/conf.d/ssl/gitea/gitea.mwjz.live.key;

    ssl_ciphers SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!3DES:!aNULL:!MD5:!ADH:!RC4;
    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
    ssl_prefer_server_ciphers on;
    location / {
        proxy_pass http://10.0.24.12:3000;
    }
}

修改并重启 网关(Nginx) 后就可以上传大于 1MB 的文件。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2022-02-21 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Gitea
    • 数据库选择
      • DockerFile
        • 安装引导
          • 推送代码
            • 网关代理
              • 配置网关
              • 设置上传大小限制
          相关产品与服务
          容器服务
          腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
          领券
          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档