1. 前言
之前一直用的gitea,最近心血来潮想换到gitlab上去。
gitlab功能更多,占用资源更多,部署比gitea要麻烦不少,这里做个记录。
主要用途是个人使用,免费版的gitlab-ce就足够了。
gitlab的部署方式有很多,这里采用docker-compose的方式。
原因是:升级更方便,对于做了一些自定义配置的情况下,直接使用一条简单命令即可升级。
2.docker-compose
gitlab比gitea要更占用资源。
之前的gitea是直接部署在公网上的云服务器内,云服务器仅有2核4g,还跑了多个应用,再跑一个gitlab有点吃力。
最终考虑将gitlab部署在家里的服务器上。
家里的宽带有公网ip,但是运营商封禁了80、443、8080等常用端口,于是决定将入口放在云服务器上,从云服务器上转发流量到家里的服务器上。
最终的访问流程图:
Docker-compose文件:
web:
image: 'gitlab/gitlab-ce:13.8.4-ce.0'
restart: always
hostname: 'gitlab.bfmiaodi.cn'
environment:
GITLAB_OMNIBUS_CONFIG: |
external_url 'https://gitlab.bfmiaodi.cn'
gitlab_rails['gitlab_shell_ssh_port'] = 2200
gitlab_rails['smtp_enable'] = true
gitlab_rails['smtp_address'] = "smtp.exmail.qq.com"
gitlab_rails['smtp_port'] = 465
gitlab_rails['smtp_user_name'] = "admin@bfmiaodi.cn"
gitlab_rails['smtp_password'] = "yourpassword"
gitlab_rails['smtp_authentication'] = "login"
gitlab_rails['smtp_enable_starttls_auto'] = true
gitlab_rails['smtp_tls'] = true
gitlab_rails['gitlab_email_from'] = 'admin@bfmiaodi.cn'
gitlab_rails['smtp_domain'] = "exmail.qq.comi"
letsencrypt['enable'] = false
nginx['listen_port'] = 80
nginx['listen_https'] = false
nginx['real_ip_trusted_addresses'] = [ '192.168.8.0/24', 'x.x.x.x' ]
nginx['real_ip_header'] = 'X-Forwarded-For'
nginx['real_ip_recursive'] = 'on'
ports:
- '2280:80'
- '22443:443'
- '2200:22'
volumes:
- '/opt/apps/gitlab/config:/etc/gitlab'
- '/opt/apps/gitlab/logs:/var/log/gitlab'
- '/opt/apps/gitlab/data:/var/opt/gitlab'
邮箱使用的是腾讯企业邮箱,免费的配额足够使用了。
gitlab_rails['smtp_enable'] = true
gitlab_rails['smtp_address'] = "smtp.exmail.qq.com"
gitlab_rails['smtp_port'] = 465
gitlab_rails['smtp_user_name'] = "admin@bfmiaodi.cn"
gitlab_rails['smtp_password'] = "yourpassword"
gitlab_rails['smtp_authentication'] = "login"
gitlab_rails['smtp_enable_starttls_auto'] = true
gitlab_rails['smtp_tls'] = true
gitlab_rails['gitlab_email_from'] = 'admin@bfmiaodi.cn'
gitlab_rails['smtp_domain'] = "exmail.qq.comi"
前面经过了多层nginx转发,为了让gitlab识别用户正确的ip地址,需要在docker-compose中配置,其中x.x.x.x改成你的云服务器公网ip
nginx['real_ip_trusted_addresses'] = [ '192.168.8.0/24', 'x.x.x.x' ]
nginx['real_ip_header'] = 'X-Forwarded-For'
nginx['real_ip_recursive'] = 'on'
同时,在前面经过的每一层nginx都需要配置
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
3.云服务器的nginx中完整配置
http转https:
server {
listen 80;
server_name *.bfmiaodi.cn; #监听hw.bfmiaodi.cn域名
return 301 https://$host$request_uri;
}
https服务:
server {
listen 443;
server_name gitlab.bfmiaodi.cn;
ssl_certificate ../ssl/1_gitlab.bfmiaodi.cn_bundle.crt;
ssl_certificate_key ../ssl/2_gitlab.bfmiaodi.cn.key;
ssl_session_cache shared:SSL:1m;
ssl_session_timeout 5m;
#最大一次传输50M内容,超出报错413
client_max_body_size 50M;
ssl_ciphers HIGH:!aNULL:!MD5;
ssl_prefer_server_ciphers on;
location / {
proxy_pass http://xxx:2280; #转到家里2280服务
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
ssh端口转发:
stream { #stream模块,就跟http模块一样
upstream ssh {
server xxx:2200; #家里的地址
}
server { #里面可以有多个监听服务,配置监听端口和代理的ip和端口就可以进行tcp代理了
listen 2200;
proxy_pass ssh;
proxy_connect_timeout 1h;
proxy_timeout 1h;
}
}
4. 其他配置
- 去你的域名商那边添加dns解析到云服务器
- 去你的域名商那边申请ssl证书,一般都有免费的,配置在云服务器的nginx中
- 家里的宽带配置端口转发
5. 启动及升级
部署:
在docker-compose文件同级目录中执行 docker-compose up -d
开启:
在docker-compose文件同级目录中执行 docker-compose start
关闭:
在docker-compose文件同级目录中执行 docker-compose stop
升级:
- 停止服务: 在docker-compose文件同级目录中执行
docker-compose down
- 先备份之前的gitlab:
zip -r gitlab.210305.bak.zip /opt/apps/gitlab/*
- 将docker-compose文件中的
image: 'gitlab/gitlab-ce:13.8.4-ce.0'
最后的版本号改为最新的版本号 - 在docker-compose文件同级目录中执行
docker-compose up -d
6. 迁移之前的git数据
启动之后访问gitlab,做基本的配置。
设置中文可以看这个:https://gitlab.bfmiaodi.cn/root/gitlab
迁移git:
- 选择
新建项目
->导入项目
->Gitea
-
去之前的gitea服务器上创建一个令牌:
-
填写gitea地址以及令牌
-
开始导入
7.最后
搭建的成品 https://gitlab.bfmiaodi.cn/ (目前仅开放内网)
转载请注明出处:https://www.bfmiaodi.cn/archives/docker-compose部署gitlab