学习Docker 中 Gitlab 使用系列(一): 安装Gitlab
安装Gitlab
GitLab 分为 社区版(Community Edition,缩写为 CE)和 企业版(Enterprise Edition,缩写为 EE)。社区版是免费的,而企业版包含一些收费服务,一般来说个人开发者用社区版就足够了。
1、拉取镜像:
docker pull gitlab/gitlab-ce
不加版本号,则下载最新版;镜像大概有2G,耐心等待;下载完成之后,可以查看一下
2、创建备份目录
通常我们会将gitlab的配置(config),数据(data),日志(logs)文件夹放置docker之外,方便日后升级、迁移和备份;所以请先准备好这三个文件夹。
cd app
mkdir -p gitlab/config gitlab/data gitlab/logs
3、使用镜像创建gitlab-ce容器并启动
$ docker run --detach \
--hostname gitlab.example.com \
--publish 8443:443 --publish 8880:80 --publish 8222:22 \
--name gitlab \
--restart always \
--volume /app/gitlab/config:/etc/gitlab \
--volume /app/gitlab/logs:/var/log/gitlab \
--volume /app/gitlab/data:/var/opt/gitlab \
--privileged=true \
gitlab/gitlab-ce:latest
命令参数说明
- –hostname gitlab.xxx.com: 设置主机名或域名
- –publish 8443:443:将http:443映射到外部端口8443
- –publish 8880:80:将web:80映射到外部端口8880
- –publish 8222:22:将ssh:22映射到外部端口8222
- –name gitlab: 运行容器名
- –restart always: 自动重启
- –volume /app/gitlab/config:/etc/gitlab: 挂载config目录
- –volume /app/gitlab/logs:/var/log/gitlab: 挂载logs目录
- –volume /app/gitlab/data:/var/opt/gitlab: 挂载data目录
- –privileged=true 使得容器内的root拥有真正的root权限。否则,container内的root只是外部的一个普通用户权限
命令执行成功之后,可以使用下面的命令查看容器运行的状态:
docker ps
执行结果:
可以看到 GitLab 已经在运行了,有一个属性 STATUS 为 health: starting,说明 gitlab 的服务正在启动中,还没有启动完毕。等这个状态变成 healthy 时则说明已经部署完成,可以访问了。
4、访问gitlab
gitlab启动成功之后,在浏览器中输入访问地址:http://ip:8880,即可访问。
注意:
当项目上传之后,你会发现,无法在浏览器中打开项目文件,同时克隆地址也是不带端口的:
那是因为:gitlab在容器中的访问端口是80,而我们映射的端口是8880。
解决办法:修改gitlab的配置文件(/app/gitlab/config/gitlab.rb),如下
- 添加external_url参数,设值为 external_url ‘http://ip:8880’
- 同时设置nginx[‘listen_port’] = 8880
- 值得注意的是:unicorn[‘port’] 的值不能不能是8880,否则启动后一直是502
5、配置邮件服务器
在配置文件/app/gitlab/config/gitlab.rb中修改,邮件服务器的相关配置
###! **Use smtp instead of sendmail/postfix.**
gitlab_rails['smtp_enable'] = true # 开启SMTP功能
gitlab_rails['smtp_address'] = "smtp.mxhichina.com" #服务器地址
gitlab_rails['smtp_port'] = 465 #服务器端口,不可以选择587
gitlab_rails['smtp_user_name'] = "gitlab@xxx.com" #邮箱账号
gitlab_rails['smtp_password'] = "password/auth code" #邮箱密码,或授权码
gitlab_rails['smtp_domain'] = "smtp.mxhichina.com"
gitlab_rails['smtp_authentication'] = "login"
gitlab_rails['smtp_enable_starttls_auto'] = true
gitlab_rails['smtp_tls'] = true
gitlab_rails['gitlab_email_enabled'] = true
gitlab_rails['gitlab_email_from'] = 'gitlab@ai-alloy.com'#必须跟smtp_user_name一致
gitlab_rails['gitlab_email_display_name'] = 'Gitlab'
配置完成之后测试一下是否配置成功
$ docker exec gitlab gitlab-ctl reconfigure #让配置生效
$ docker exec -it gitlab bash # 开启 gitlab 的 bash 工具
$ gitlab-rails console production # 开启 gitlab-rails 工具
Notify.test_email('test_001@123.com', 'Message Subject', 'Message Body').deliver_now # 发送邮件进行测试
$ docker restart gitlab #重启gitlab
6、配置域名
- 配置域名
打开配置文件/app/gitlab/config/gitlab.rb
external_url 'http://192.168.xxx.xxx' # ip 形式
external_url 'http://xxx.com' # 域名形式
external_url 'http://gitlab.xxx.com' # 子域名
external_url 'http://www.xxx.com/gitlab'# 其他形式
- 配置nginx
upstream gitlab{
server 127.0.0.1:8880;
}
server {
listen 80;
server_name gitlab.xxx.com;
access_log /var/log/nginx/gitlab.example.com-access.log;
error_log /var/log/nginx/gitlab.example.com-error.log;
location / {
proxy_pass_header Server;
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Scheme $scheme;
proxy_pass http://gitlab;
}
}
7、升级
建议:升级之前,先备份一下congif、data、logs三个文件夹,以防万一。
- 停止并删除原来的gitlab容器,命令如下:
$ docker stop gitlab
$ docker rm -f gitlab
- 更新gitlab-ce镜像
$ docker pull gitlab/gitlab-ce
- 运行容器
$ docker run --detach \
--hostname gitlab.example.com \
--publish 8443:443 --publish 8880:80 --publish 8222:22 \
--name gitlab \
--restart always \
--volume /app/gitlab/config:/etc/gitlab \
--volume /app/gitlab/logs:/var/log/gitlab \
--volume /app/gitlab/data:/var/opt/gitlab \
--privileged=true \
gitlab/gitlab-ce:latest
学习过程中,参考了众多的资料:
https://juejin.im/post/5cc1df885188252d6c43fd91
https://blog.csdn.net/wangyy130/article/details/85633303
…