LuoSong
LuoSong
Published on 2023-09-16 / 122 Visits
0
0

Docker搭建GitLab

GitLab安装(Docker)

写在前面

GitLab特性:开源、功能强大、易用、安全

GitLab依赖其独有的特性,更加适用于需要私有性的团体和个人。对于团队,笔者认为GitLab可以更好的管理和保护代码资产。于个人而言将代码放入私有代码仓库更加的灵活。不论对于团队还是个人有一点是非常重要的,那就是数据备份!数据备份!数据备份!

本次为 Linux + Docker 安装,笔者认为直接安装会影响到本地环境。

相关版本:gitlab-ce:16.2.3 Docker 24.0.5

前提条件:

1.服务器或虚拟机能够单独提供给GitLab的内存在4G及以上,不然页面只会报错,无法正常使用,当然能够深度调优也是可以的(GitLab太吃内存了)。
2.在服务器或虚拟机安装好Docker。

简单过一下Docker

安装====
apt-get update
apt-get install ca-certificates curl gnupg lsb-release #必要软件
curl -fsSL https://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg #安装证书
echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://mirrors.aliyun.com/docker-ce/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
apt-get update
apt-get install docker-ce docker-ce-cli containerd.io #安装Docker
docker version #成功后弹出版本号等信息
卸载====
apt-get remove docker docker-engine docker.io containerd runc #移除旧版本
rm -rf /var/lib/docker
rm -rf /var/lib/containerd
操作====
docker pull [image]:[TAG] #拉取对应版本镜像,不填TAG默认:[latest]
docker images #查看所有镜像
docker ps -a #查看所有容器服务
docker rmi (-f) [image]:[TAG] #(强制)删除对应镜像
docker rm (-f) [container] #(强制)删除容器服务

获取GitLab镜像

docker pull gitlab-ce:16.2.3 可能需要科学上网

运行GitLab服务

docker run \ # 容器运行
-itd \ # -i:以交互模式运行容器,通常与-t同时使用;-d:后台运行容器,并返回容器ID,也即启动守护式容器;-t:为容器重新分配一个伪输入终端,通常与-i同时使用;
--publish 10000:22 \ # 代理容器内22端口到物理机10000端口
--publish 10100:80 \ # 代理容器内80端口到物理机10100端口
--publish 10200:443 \ # 代理容器内443端口到物理机10200端口
--name gitlab-ce \ # 容器名
--restart always \ # 始终重启,指在docker重启时该容器是否一并重启
--privileged=true \ # 赋予权限
--volume /docker-data/gitlab/config:/etc/gitlab \ # 容器卷挂载
--volume /docker-data/gitlab/logs:/var/log/gitlab \ # 容器卷挂载
--volume /docker-data/gitlab/data:/var/opt/gitlab \ # 容器卷挂载
gitlab-ce:16.2.3 # 镜像及版本,根据自己docker images出来的填写

复制修改后执行(无注释)

docker run \
-itd \
--publish 10000:22 \
--publish 10100:80 \
--publish 10200:443 \
--name gitlab-ce \
--restart always \
--privileged=true \
--volume /docker-data/gitlab/config:/etc/gitlab \
--volume /docker-data/gitlab/logs:/var/log/gitlab \
--volume /docker-data/gitlab/data:/var/opt/gitlab \
gitlab-ce:16.2.3

执行后返回一个容器ID即执行成功

docker-compose.yaml

version: "3.6"

services:
  gitlab:
    image: gitlab/gitlab-ce:17.3.1-ce.0
    container_name: gitlab-ce
    restart: on-failure:3
    ports:
      - '10000:22'
      - '10100:80'
      - '10200:443'
    volumes:
      - /docker-data/gitlab-16.11.8/config:/etc/gitlab
      - /docker-data/gitlab-16.11.8/logs:/var/log/gitlab
      - /docker-data/gitlab-16.11.8/data:/var/opt/gitlab
    privileged: true
    hostname: www.youcats.cn
    network_mode: bridge
    environment:
      - GITLAB_SKIP_UNMIGRATED_DATA_CHECK=true

部分优化

vim /docker-data/gitlab/configgitlab.rb

nginx['worker_processes'] = 2
nginx['listen_port'] = 443
nginx['ssl_certificate'] = '/var/opt/gitlab/youcats.cn/youcats.cn_bundle.crt'
nginx['ssl_certificate_key'] = '/var/opt/gitlab/youcats.cn/youcats.cn.key'
letsencrypt['enable'] = false
postgresql['max_worker_processes'] = 1
postgresql['shared_buffers'] = "64MB"
sidekiq['concurrency'] = 1
puma['worker_processes'] = 1
prometheus['enable'] = false
prometheus_monitoring['enable'] = false
alertmanager['enable'] = false
node_exporter['enable'] = false
redis_exporter['enable'] = false
postgres_exporter['enable'] = false
pgbouncer_exporter['enable'] = false
gitlab_exporter['enable'] = false
#grafana['enable'] = false
sidekiq['metrics_enabled'] = false
patroni['postgresql']['max_worker_processes'] = 2

外部Nginx代理服务

运行好GitLab容器服务后,即可通过物理机IP+10100访问服务,需要等待一段时间启动。

另外可以用外部Nginx代理GitLab服务

vim /docker-data/gitlab/configgitlab.rb

external_url 'https://www.example.com/gitlab'
nginx['listen_port'] = 443

外部Nginx配置(443->10200->443(容器))

# gitlab 使用域名为了让个人页面正常使用
upstream https://www.example.com { # 在server外一层,设置上游服务,建议和域名一致,包括(https://www.)否则可能出现个人中心无法访问的情况
	server 127.0.0.1:10200;
}
server { # 443,加密访问
	...
	# gitlab
	location /gitlab { # gitlab.rb中写的https://www.example.com/gitlab
	# 非域名而是配置的 upstream !
	proxy_pass https://www.example.com;
	#OPTIONS 直接返回204
	if ($request_method = 'OPTIONS') {
		return 204;
	}
	proxy_http_version 1.1;
	proxy_set_header Upgrade $http_upgrade;
	proxy_set_header Connection "upgrade";
	}
}

重启容器访问 https://www.example.com/gitlab 即可访问服务

邮箱配置

各个邮箱配置大同小异,笔者时网易邮箱@163.com,请自行百度这么开启对应的POP/SMTP/IMAP服务和服务接入地址等信息

gitlab_rails['smtp_enable'] = true
gitlab_rails['smtp_address'] = "smtp.163.com"
gitlab_rails['smtp_port'] = 465
gitlab_rails['smtp_user_name'] = "******@163.com" # 代理发送邮箱
gitlab_rails['smtp_password'] = "******" # 密码邮箱POP/SMTP/IMAP接入码
gitlab_rails['smtp_domain'] = "163.com"
gitlab_rails['smtp_authentication'] = "login"
gitlab_rails['smtp_enable_starttls_auto'] = false
gitlab_rails['smtp_tls'] = true
gitlab_rails['gitlab_email_enabled'] = true
gitlab_rails['gitlab_email_from'] = "******@163.com" # 代理发送邮箱
user['git_user_email'] = "GitLab"

升级

升级路径参考网址结果 版本升级顺序

  • 先备份

  • 设置权限为777 chmod -R 777 备份数据目录

  • 将config目录权限设置为600 chmod -R 600 备份数据目录/config

END

或许应该考虑一下是不是需要自己搭建私有代码仓库服务? 再会!


Comment