.net Core 系统 架构回忆录----Docker部署 git
github,gitlab,gitee的区别
github 是一个基于git实现在线代码托管的仓库,向互联网开放,企业版要收钱。
gitee 即码云,是 oschina 免费给企业用的,不用自己搭建环境。
gitlab 类似 github,一般用于在企业内搭建git私服,要自己搭环境。
第一,github针对企业要收费,那当然是不同意,毕竟都想节约资金,那就还能使用gitee,或者gitlab了。
第二,但是码云虽然是免费的,而且不用自己搭环境,但是企业中把项目放在别人的服务器上,始终没有安全感。
第三,因此,衍生出了gitlab,就是用于企业搭私服,而且还是在自己的服务器上。
资源占用
作为 Git 托管服务器使用时,Gitea 资源占用明显要低得多。
静态硬盘占用上,Gitea 核心是一个 100 MiB 上下的可执行文件,外加上作为必要依赖的 Git(如果内置 SQLite 不够的话也需要单独部署一个 MySQL 或者 PostgreSQL 做数据库),而 GitLab 光 Docker image 大小就 GiB 级了。
内存方面,这里 Gitea 日常占用内存通常在几百 MiB 浮动,而 GitLab 的 Docker 容器目前内存占用是 GB级别的。GitLab CPU 占用率(相对于一个核心计算)日常待机在 35% 上下,而 Gitea 通常是 0.2% 左右。(这些都是日常无负载状态下的情况)
网站配置
Gitea 大部分配置都要通过修改 app.ini
并重启 Gitea 服务器来应用,后台管理面板基本没有可修改的配置,不能进行配置热修改。
GitLab 部分网络相关的配置(域名,端口,代理,邮箱等)需要修改 gitlab.rb
并重启 GitLab,剩下的大多选项都是在管理员面板里通过 Web UI 进行热修改并及时生效。
对于要稳定运行的 Git 托管服务器来说,Gitea 每次修改配置后想要生效都要离线一段时间,好在 Gitea 启动很快,我这里从启动到能正常访问大概只要 10 秒钟(数据库跑在另一个容器里,没有计算它的启动时间),而 GitLab 启动一次要一分多钟,但由于 GitLab 大部分配置都是热修改,除了最开始部署时需要修改配置,运行中基本没有重启的需求。
消息通知
GitLab 与 Gitea 都能配置邮件消息通知。
GitLab 每个用户都能设置自己接受的通知,或者完全拒绝邮件通知,设置的粒度可以细分到组/项目级别,管理员还能通过管理后台对用户手动群发邮件通知。
Gitea 的用户无法控制自己接受的通知,只能由管理员配置通知的类型,而且也只能进行全局范围的配置,无法细分到用户身上,而且所有通知都是 Gitea 的自动通知,管理员无法发送自定义通知。
存储库导入与镜像
Gitea 和 GitLab 也都支持导入第三方 Git 仓库,特别是提供了原生的迁移 GitHub 仓库的办法,可以连带着 Issue、PR 等其他数据一同导入进来。
CI/CD
谈 Gitea 与 GitLab 的区别,那肯定少不了 CI/CD 这个重头戏。
Gitea 没有提供内置的 CI/CD 支持,但是可以用 Gitea 提供的 API 与其他 CI 集成,目前推荐的比较多的似乎是是自部署 Drone CI,但也可以与 Travis CI 这类现成的 CI 集成。
Gitea 与 CI 的集成我没有亲自尝试过,但可以参考上面 gitea.com 里现成的例子。我本来想尝试部署 JetBrains TeamCity,但 Gitea 目前的 API 并不足以与 TeamCity 集成,这在后续版本中可能会改进。
而 GitLab 原生就集成了一套强大的 CI 功能,而且就像 GitHub Action 与 GitHub 那样,它与 GitLab 有着极为紧密的结合。
GitLab 用于执行 GitLab CI 的程序叫做 GitLab Runner。
总结:
人少 gitea,人多 gitlab。
没钱 gitea,有钱 gitlab。
gitea 轻量化,如果仅仅是代码仓库,小团队协作使用,建议 gitea 。
gitlab 全家桶大而全,对资源的要求也更高。
环境处理
#1:防火墙是否开启,开启了可以直接关闭,如果不能关闭,就把所需的端口进行开放 systemctl status firewalld #2:开放指定端口(因为22一般被sshd服务占据,所以这里用222端口) firewall-cmd --zone=dmz --add-port=8087/tcp --permanent firewall-cmd --zone=dmz --add-port=443/tcp --permanent firewall-cmd --zone=dmz --add-port=22/tcp --permanent firewall-cmd --zone=dmz --add-port=222/tcp --permanent firewall-cmd --reload #刷新 firewall-cmd --zone=dmz --list-ports
#搜索镜像
docker search gitlab
#1:拉取gitlab镜像 docker pull gitlab/gitlab-ce
等待下载完成。
#2:生成挂载目录 mkdir -p /home/gitlab/etc/gitlab mkdir -p /home/gitlab/var/log mkdir -p /home/gitlab/var/opt
#检查镜像是否拉取成功
docker images
#3:启动容器(用的时候调整下命令,为了便于查看,有换行符) docker run -d -p 443:443 -p 8087:80 -p 222:22 --name gitlab-dev --restart always --privileged=true -v /home/gitlab/etc/gitlab:/etc/gitlab -v /home/gitlab/var/log:/var/log/gitlab -v /home/gitlab/var/opt:/var/opt/gitlab gitlab/gitlab-ce
主要参数说明:
-d: 后台启动
-p 8087:80 : -p端口映射,将容器的80端口映射到宿主机的8087,也就是说当你安装成功后通过IP:8087可以访问gitlab
--name gitlab 给你的容器命名为gitlab 方便后续操作,毕竟通过容器ID进行操作过于麻烦
-v /home/mappingdata/gitlab/config:/etc/gitlab 文件映射-将容器内部的/etc/gitlab映射到宿主机的/home/mappingdata/gitlab/config
最后 gitlab/gitlab-ce 你是根据那个镜像启动的该容器(也就是你上面拉取的gitlab的镜像名)
此时访问对应ip是有界面了,如果网络不可用或者502,就再等个几分钟,此时容器尚未启动完全
调整gitlab配置
1.配置克隆项目时所需
vim /home/gitlab/etc/gitlab/gitlab.rb # 配置http协议所使用的访问地址,不加端口号默认为80 external_url 'http://ip' # 配置ssh协议所使用的访问地址和端口 gitlab_rails['gitlab_ssh_host'] = 'ip' gitlab_rails['gitlab_shell_ssh_port'] = 222 # 此端口是run时22端口映射的222端口 # 重启gitlab容器 docker restart gitlab-dev
#配置超时设置 gitlab_rails['webhook_timeout'] = 90 gitlab_rails['git_timeout']=90
2.root所需
如果访问ip 时直接进入界面,这个时候根本不知道root密码,进行如下操作:
查看root的初始密码:
docker exec -it 容器名字或容器ID grep 'Password:' /etc/gitlab/initial_root_password
然后登陆 root用户 再次修改密码即可
使用root + 刚刚查询到的初始密码 登录
登录后 修改密码,创建新代码仓储。
可以删除部分 不常用的 组件
1. gitlab几乎占内存50%,需要修改配置文件,进行优化 2. vi gitlab.rb 注意:所有修改需要掉注释,在注释的情况下默认是服务器上的所有线程。 减少数据库缓存 postgresql['shared_buffers'] = "64MB" 减少数据库并发数 postgresql['max_worker_processes'] = 1 减少sidekiq并发数 sidekiq['concurrency'] = 1 减少进程数 unicorn['worker_processes'] = 1 nginx['worker_processes'] = 2 减少超时时间 unicorn['worker_timeout'] = 10 减少数据库缓存 postgresql['shared_buffers'] = "64MB" 将worker内存上限设置小一点 unicorn['worker_memory_limit_min'] = "100 * 1 << 20" unicorn['worker_memory_limit_max'] = "220 * 1 << 20" 禁用prometheus prometheus_monitoring['enable'] = false 3. 修改生效 gitlab-ctl reconfigure gitlab-ctl restart docker生效方式: 重载配置:docker exec -it gitlab gitlab-ctl reconfigure 重启:docker exec -it gitlab gitlab-ctl restart 查看内存:docker stats 也可以直接停止 docker stop xxx , 启动 docker start xxx 重启容器 4.查看docker进程使用内存 docker stats 按住Ctrl C
即可退出展示
--all , -a :显示所有的容器,包括未运行的。
--format :指定返回值的模板文件。
--no-stream :展示当前状态就直接退出了,不再实时更新。
--no-trunc :不截断输出。
5.gitlab操作常用命令 # 查看 gitlab 帮助信息 gitlab-ctl help # 查看 gitlab 配置信息 gitlab-ctl show-config # 查看 gitlab 状态 gitlab-ctl status # 停止 gitlab 所有组件 gitlab-ctl stop # 查看 postgresql 日志 gitlab-ctl tail postgresql
安装gitlab 最少8G 内存 因为 直接吃 4个G 进去