搭建git

gitlab、gitbit、gogs、gitee、github都是git代码的托管平台。
gitlab相比较于其他而言,其虽然体量大,配置要求较高,但是可以自己做很多的容灾配置。且所在的几家公司都是搭建私有的gitlab。所以以gitlab为原型
image.png
gitllab起步就是4核CPU、4G内存
gitlab分为企业版和社区版,社区版本免费,但是功能相对较少,企业版本收费,可在安装后通过激活码激活。
image.png
gitlab是用Ruby写的,Go语言重构,所以架构会设计到这些语言的层面
相关的安装文档都在此处
https://docs.gitlab.com/ee/
image.png

gitlab的文档建议1000人左右的使用者只需要单实例,2000及以上级别的使用者需要集群搭建
image.png

CentOS7安装单实例gitlab

因为docker的理念是生命周期的短暂、一个容器只有一个服务,所以我不用docker镜像直接安装,而是使用RPM包安装
https://about.gitlab.com/install/#centos-7

  • 架构模型
    image.png
  • Redis
    临时缓存
  • Gitaly
    RPC调用
  • PostgreSQL
    数据存储
  • Sidekiq
    消息队列
  • Promtheus+Gradfana
    服务治理

后续也可以自己挂载PostgreSQL

  • 安装依赖
    1.打开http、https、ssh,可以不做
sudo yum install -y curl policycoreutils-python openssh-server perl
# Enable OpenSSH server daemon if not enabled: sudo systemctl status sshd
sudo systemctl enable sshd
sudo systemctl start sshd

# Check if opening the firewall is needed with: sudo systemctl status firewalld
sudo firewall-cmd --permanent --add-service=http
sudo firewall-cmd --permanent --add-service=https
sudo systemctl reload firewalld

2.安装Postfix支持发送电子邮件,可以不做

sudo yum install postfix
sudo systemctl enable postfix
sudo systemctl start postfix
  • 安装gitlab包(安装社区版ce)
    3.添加Gitlab包存储库
# 企业版
curl https://packages.gitlab.com/install/repositories/gitlab/gitlab-ee/script.rpm.sh | sudo bash
# 社区版
curl https://packages.gitlab.com/install/repositories/gitlab/gitlab-ce/script.rpm.sh | sudo bash

image.png
image.png
4.安装社区版

sudo EXTERNAL_URL="http://gitlab.jtao.com" yum install -y gitlab-ce

image.png
安装完成,才发现域名写错了....
1.修改下配置文件,根据需要修改域名和email。
2.修改git自带的nginx
相关搭建问题看最后的问题总结
vim /opt/gitlab/embedded/service/gitlab-rails/config/gitlab.yml
gitlab-ctl restart
image.png
git的服务进程
image.png
image.png

  • 访问gitlab
    gitlab.jtao.work
    如下图 不会重定向
    image.png

设置git

image.png
登陆之后账号通过/etc/gitlab/initial_root_password的文件登陆gitlab,进入后台设置

  • 建议先设置成中文方便管理

安全

  • 限制注册
    一般需要设置限制注册和注册需要经过管理员批准
    或者默认的地址类型邮箱才可注册
  • 限制网络请求
    image.png

https设置

ssl有加密和签名不可抵赖的作用

  • 申请域名证书
  • Nginx反向代理
    1.设置监听的端口80强转443
    2.设置443端口转发及证书设置
server {
    listen 80;
# server_name gitlab.jtao.com
    server_name yourdomain.com; #需要将yourdomain.com替换成证书绑定的域名。
    rewrite ^(.*)$ https://$host$1; #将所有HTTP请求通过rewrite指令重定向到HTTPS。
    location / {
        index index.html index.htm;
    }
}

server {
    listen 443 ssl;
    #配置HTTPS的默认访问端口为443。
    #如果未在此处配置HTTPS的默认访问端口,可能会造成Nginx无法启动。
    #如果您使用Nginx 1.15.0及以上版本,请使用listen 443 ssl代替listen 443和ssl on。
    server_name yourdomain.com; #需要将yourdomain.com替换成证书绑定的域名。
    root html;
    index index.html index.htm;
    ssl_certificate cert/cert-file-name.pem;  #需要将cert-file-name.pem替换成已上传的证书文件的名称。
    ssl_certificate_key cert/cert-file-name.key; #需要将cert-file-name.key替换成已上传的证书私钥文件的名称。
    ssl_session_timeout 5m;
    ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
    #表示使用的加密套件的类型。
    ssl_protocols TLSv1.1 TLSv1.2 TLSv1.3; #表示使用的TLS协议的类型。
    ssl_prefer_server_ciphers on;
    location / {
        root html;  #站点目录。
        index index.html index.htm;
    }
}
  • 设置gitlab配置
    /etc/gitlab/gitlab.rb
    修改为
    external_url "https://gitlab.example.com"
    letsencrypt['enable'] = false
    image.png
    重启gitlab服务
    image.png
    此时gitlab域名下已经是https而主站点没有设置还是http
    image.png

搭载PostgreSQL

//TODO

集群部署git

//TODO

Admin高容错设置

//TODO

gitlab卸载

image.png







问题

跨域

我是使用git.jtao.work三级域名重定向转到www.jtao.work:xxxxx
但是gitlab会有跨域问题
image.png

  • 解决
    1.DNS解析前缀通过服务商直接解析
    image.png
    2.直接使用全局nginx代理域名
    image.png
    3.编辑gitlab自带nginx和配置文件
    vim /etc/gitlab/gitlab.rb
    image.png
    vim ~git/nginx/conf/gitlab-http.conf
    image.png
    vim /opt/gitlab/embedded/service/gitlab-rails/config/gitlab.yml
    image.png
    4.重启gitlab
    gitlab-ctl restart

这个家伙很懒,啥也没有留下😋