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


    提示:本系列笔记全部存在于 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#

    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 的网关代理。

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

    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 属性就可以。

    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 的文件。

  • 相关阅读:
    TensorFlow轻松入门(一)(更新中)
    STM32G030F6P6 芯片实验 (二)
    PD3.1详解 第三章(EPR)扩展消息详解
    CentOS命令大全
    【深蓝学院】移动机器人运动规划--第5章 最优轨迹生成--作业
    设计模式之抽象工厂模式
    173. 二叉搜索树迭代器
    产品经理,要有怎样的思维方式?
    9.7-一定要开始学了
    xctf攻防世界 MISC薪手进阶区
  • 原文地址:https://www.cnblogs.com/yan7/p/15881081.html