私有化轻量级持续集成部署方案--04-私有代码仓库服务-Gitea
提示:本系列笔记全部存在于
Github,
可以直接在
Github 查看全部笔记
企业级最流行的私有代码仓库是 Gitlab
, 一开始我也打算部署 Gitlab
作为私有代码仓库。
但部署完 d 成后发现, Gitlab
资源占用太大了。优化之后也要占用 3g 内存,最后只好放弃这一方案。
随后发现了 Gitea
、Gogs
这两个轻量级的私有仓库,两个都是优秀的轻量级私有仓库。
后对它们进行了对比,发现 Gitea
是从 Gogs
项目 fork 出的项目。
官方给出了 fork 理由:https://blog.gitea.io/2016/12/welcome-to-gitea/,有兴趣的看看
也就是 Gitea
项目 是优于 Gogs
项目的,最后就选择了 Gitea
Gitea
虽然是轻量级,但也具有强大的功能,可以放心使用。
Gitea
数据库选择
Gitea
支持mysql
, postgres
, mssql
, tidb
、sqlite3
多种数据库。
最简单的是直接使用 sqlite3
,作为一个文档性数据库,不需要单独部署服务。
在此使用 postgres
数据库,现在 postgres
也是主流的数据库,很多企业都从 mysql
转向了 postgress
至于 postgress
与 mysql
之间的对比,有兴趣的朋友可以自行查询
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
服务中通过环境变量设置了 运行容器的 UID
、GID
,HTTP 监听端口、UI 上显示的克隆 URL。连接数据库、禁用注册等信息,至于还有其它参数,可以自行查询
Gitea
端口号映射了两个 3000、3001,分别是 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_URL、DOMAIN、 SSH_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 的文件。
私有化轻量级持续集成部署方案--04-私有代码仓库服务-Gitea的更多相关文章
- 私有化轻量级持续集成部署方案--06-私有镜像仓库-Harbor
提示:本系列笔记全部存在于 Github, 可以直接在 Github 查看全部笔记 针对私有镜像仓库的问题,Docker 官方提供了搭建仓库服务的镜像服务:registry,使用此镜像就可以部署私有仓 ...
- 私有化轻量级持续集成部署方案--07-私有NPM仓库-Verdaccio
提示:本系列笔记全部存在于 Github, 可以直接在 Github 查看全部笔记 对于个人来说,私有NPM仓库 作用性基本很小,但是对于企业,私有NPM仓库 可以保护代码暴露,具有很大的意义. 也是 ...
- 私有化轻量级持续集成部署方案--05-持续部署服务-Drone(上)
提示:本系列笔记全部存在于 Github, 可以直接在 Github 查看全部笔记 持续部署概述 持续部署是能以自动化方式,频繁而且持续性的,将软件部署到生产环境.使软件产品能够快速迭代. 在之前部署 ...
- 私有化轻量级持续集成部署方案--03-部署web服务(上)
提示:本系列笔记全部存在于 Github, 可以直接在 Github 查看全部笔记 这一篇主要讲述部署一个 Web 项目,项目是我曾经搞的一个 VUE 模板项目:https://github.com/ ...
- 私有化轻量级持续集成部署方案--02-Nginx网关服务
提示:本系列笔记全部存在于 Github, 可以直接在 Github 查看全部笔记 这一篇中使用 Nginx 部署网关中心,用来代理服务器中服务.网关中心有优点也有缺点,也可以不采用网关系统. 部署 ...
- 私有化轻量级持续集成部署方案--03-部署web服务(下)
提示:本系列笔记全部存在于 Github, 可以直接在 Github 查看全部笔记 配置接口代理 前后端分离情况下,前端请求后端接口最常用的一种方式就是使用反向代理,反向代理会让浏览器认为是同源路径, ...
- Devops 开发运维高级篇之Jenkins+Docker+SpringCloud微服务持续集成——部署方案优化
Devops 开发运维高级篇之Jenkins+Docker+SpringCloud微服务持续集成--部署方案优化 之前我们做的方案部署都是只能选择一个微服务部署并只有一台生产服务器,每个微服务只有一个 ...
- [dotnet core]落地微服务特色的DevOps管道,持续集成/部署到kubernetes。
目录 前言 目标 工具 - 最小的学习成本 方案 - 愿景 1. 持续集成 - CI 2. 持续部署 - CD 部署环境 1. 部署gitlab-runner 2. 注册gitlab-runner 搭 ...
- Centos7.4简单安装使用gitlab+maven+jenkins实现java代码的持续集成部署
1.工具的简单介绍 gitlab--源代码版本管理控制工具 maven--java代码编译构建工具 jenkins--基于java开发的自动化持续集成部署工具 sonar--代码质量管理工具 2.gi ...
随机推荐
- python 迭代器链式处理数据
pytorch.utils.data可兼容迭代数据训练处理,在dataloader中使用提高训练效率:借助迭代器避免内存溢出不足的现象.借助链式处理使得数据读取利用更高效(可类比操作系统的资源调控) ...
- Mybatis(万能map)
mybatis(万能map) 我们使用对象作为参数有一个缺点: 我们要在mapper.xml文件和测试中要把所有的字段都写出来,那么,假如一个对象有100个字段,那我们要把这些字段都写出来吗? 所以这 ...
- SSRF打认证的redis
redis客户端在向服务端传输数据用到的是RESP协议 客户端向Redis服务器发送一个仅由Bulk Strings组成的RESP Arrays. Redis服务器回复发送任何有效RESP数据类型作为 ...
- Centos下安装Maven私服Nexus
dockers安装Nexus,指定访问路径(默认为/:在使用Nginx做反向代理时,最好指定访问路径),并在容器外持久化数据,避免Nexus容器升级后数据丢失. 安装并启动 docker run -d ...
- Solon Web 开发,十三、WebSocket
Solon Web 开发 一.开始 二.开发知识准备 三.打包与运行 四.请求上下文 五.数据访问.事务与缓存应用 六.过滤器.处理.拦截器 七.视图模板与Mvc注解 八.校验.及定制与扩展 九.跨域 ...
- C# 文件对话框例子
OpenFileDialog控件的基本属性InitialDirectory:对话框的初始目录 Filter: 获取或设置当前文件名筛选器字符串,例如,"文本文件(*.txt)|*.txt|所 ...
- 【刷题-LeetCode】198 House Robber
House Robber You are a professional robber planning to rob houses along a street. Each house has a c ...
- Natasha 4.0 探索之路系列(二) "域"与插件
域与ALC 在 Natasha 发布之后有不少小伙伴跑过来问域相关的问题, 能不能兼容 AppDomain, 如何使用 AppDomain, 为什么 CoreAPI 阉割了 AppDomain 等一系 ...
- C++构造函数语义学(一)(基于C++对象模型)
如果一个类没有自己的构造函数,编译器会在需要的时候为其合成一个出来,俗称:合成默认构造函数.但是请注意是在需要的时候,并不是所有情况. 请看下面代码: 1 #include<iostream&g ...
- gorm链接mysql的初始化配置和连接池的使用
1. mysql的初始化配置 dsn := fmt.Sprintf("%s:%s@tcp(%s:%d)/%s?%s", user, passwd, host, port, db, ...