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
或许应该考虑一下是不是需要自己搭建私有代码仓库服务? 再会!