前言
最近帮公司重新搭建了 Gitlab,中间遇到了一些坑,折腾了不少时间,在此记录供大家参考。
正文
安装 Docker CE
卸载旧版本
如果有使用旧版本的 Docker (称为 docker
或者 docker-engine
),请使用下列命令卸载。
1 2 3
| $ sudo apt-get remove docker \ docker-engine \ docker.io
|
安装前准备
Ubuntu 14.04
从 Ubuntu 14.04 开始,一部分内核模块移到了可选内核模块包 (linux-image-extra-*) ,以减少内核软件包的体积。正常安装的系统应该会包含可选内核模块包,而一些裁剪后的系统可能会将其精简掉。AUFS 内核驱动属于可选内核模块的一部分,作为推荐的 Docker 存储层驱动,一般建议安装可选内核模块包以使用 AUFS。
如果系统没有安装可选内核模块的话,可以执行下面的命令来安装可选内核模块包:
1 2 3 4 5
| $ sudo apt-get update
$ sudo apt-get install \ linux-image-extra-$(uname -r) \ linux-image-extra-virtual
|
使用 APT 安装
由于 apt 源使用 HTTPS 以确保软件下载过程中不被篡改。因此,我们首先需要添加使用 HTTPS 传输的软件包以及 CA 证书。
1 2 3 4 5 6 7
| $ sudo apt-get update
$ sudo apt-get install \ apt-transport-https \ ca-certificates \ curl \ software-properties-common
|
添加国内下载源(官方源在注释中)
首先为了确认所下载软件包的合法性,需要添加软件源的 GPG 密钥。
1 2 3 4 5
| $ curl -fsSL https://mirrors.ustc.edu.cn/docker-ce/linux/ubuntu/gpg | sudo apt-key add -
# 官方源 # $ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
|
然后,向 source.list 中添加 Docker 软件源:
1 2 3 4 5 6 7 8 9 10 11
| $ sudo add-apt-repository \ "deb [arch=amd64] https://mirrors.ustc.edu.cn/docker-ce/linux/ubuntu \ $(lsb_release -cs) \ stable"
# 官方源 # $ sudo add-apt-repository \ # "deb [arch=amd64] https://download.docker.com/linux/ubuntu \ # $(lsb_release -cs) \ # stable"
|
以上命令会添加稳定版本的 Docker CE APT 镜像源,如果需要测试或每日构建版本的 Docker CE 请将 stable 改为 test 或者 nightly。
安装 Docker CE
更新 apt 软件包缓存,并安装 docker-ce:
1 2 3
| $ sudo apt-get update
$ sudo apt-get install docker-ce
|
使用脚本自动安装
同时也可以选择使用下列脚本快速安装:
1 2
| $ curl -fsSL get.docker.com -o get-docker.sh $ sudo sh get-docker.sh --mirror Aliyun
|
执行脚本自动安装 Docker CE。
启动 Docker CE
1 2
| $ sudo systemctl enable docker $ sudo systemctl start docker
|
Ubuntu 14.04 请用下列命令启动:
1
| $ sudo service docker start
|
安装 Gitlab
我们使用 sameersbn/gitlab
Gitlab 镜像,Github 地址:https://github.com/sameersbn/docker-gitlab。
首先我们安装 docker-compose
:
1
| sudo pip install docker-compose -U
|
然后下载 sameersbn/gitlab
Gitlab 镜像的 docker-compose.yml
文件:
1
| wget https://raw.githubusercontent.com/sameersbn/docker-gitlab/master/docker-compose.yml
|
然后修改其中的配置,以下是我修改后的版本:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164
| version: '2'
services: redis: restart: always image: sameersbn/redis:4.0.9-1 command: - --loglevel warning volumes: # redis 储存空间挂载到外部 - /data/gitlab/redis:/var/lib/redis:Z
postgresql: restart: always image: sameersbn/postgresql:10 volumes: # postgresql 储存空间挂载到外部 - /data/gitlab/postgresql:/var/lib/postgresql:Z environment: - DB_USER=gitlab - DB_PASS=password - DB_NAME=gitlabhq_production - DB_EXTENSION=pg_trgm
gitlab: restart: always # 此处应注意修改为 9.2.5 版本,最新版通过 repo by URL 从其他仓库迁移过来的项目使用 create merge request 时会出现 503 bug image: sameersbn/gitlab:9.2.5 depends_on: - redis - postgresql ports: # 将容器中的 80、443、22 端口映射到宿主机 - "127.0.0.1:10080:80" - "127.0.0.1:10443:443" - "10022:22" volumes: # gitlab 储存空间挂载到外部 - /data/gitlab/gitlab:/home/git/data:Z environment: - DEBUG=false
- DB_ADAPTER=postgresql - DB_HOST=postgresql - DB_PORT=5432 - DB_USER=gitlab - DB_PASS=password - DB_NAME=gitlabhq_production
- REDIS_HOST=redis - REDIS_PORT=6379
- TZ=Asia/Kolkata - GITLAB_TIMEZONE=Kolkata
- GITLAB_HTTPS=false - SSL_SELF_SIGNED=false # 此处需要改为你访问 gitlab 的域名或者IP - GITLAB_HOST=xxx # 如果访问时使用 http 为 80,https 则为 443 - GITLAB_PORT=80 - GITLAB_SSH_PORT=10022 - GITLAB_RELATIVE_URL_ROOT= # 为了安全起见可以使用 pwgen -Bsv1 64 命令生成随机的 64 个字符串值替换下面三个变量的值 - GITLAB_SECRETS_DB_KEY_BASE=long-and-random-alphanumeric-string - GITLAB_SECRETS_SECRET_KEY_BASE=long-and-random-alphanumeric-string - GITLAB_SECRETS_OTP_KEY_BASE=long-and-random-alphanumeric-string # 需要设置一个默认的 root 用户邮箱,密码不填第一次登录会让你自己设置 - GITLAB_ROOT_PASSWORD= - [email protected]
- GITLAB_NOTIFY_ON_BROKEN_BUILDS=true - GITLAB_NOTIFY_PUSHER=false
- [email protected] - [email protected] - [email protected]
- GITLAB_BACKUP_SCHEDULE=daily - GITLAB_BACKUP_TIME=01:00 # 以下为 QQ 企业邮箱配置 - SMTP_ENABLED=true - SMTP_DOMAIN=exmail.qq.com - SMTP_HOST=smtp.exmail.qq.com - SMTP_PORT=465 - [email protected] - SMTP_PASS=password - SMTP_STARTTLS=true # SMTP_TLS 选项原始配置文件中没有,默认为 false,使用 QQ 企业邮箱一定要加上,否则无法发送邮件 - SMTP_TLS=true - SMTP_AUTHENTICATION=login
- IMAP_ENABLED=false - IMAP_HOST=imap.gmail.com - IMAP_PORT=993 - [email protected] - IMAP_PASS=password - IMAP_SSL=true - IMAP_STARTTLS=false
- OAUTH_ENABLED=false - OAUTH_AUTO_SIGN_IN_WITH_PROVIDER= - OAUTH_ALLOW_SSO= - OAUTH_BLOCK_AUTO_CREATED_USERS=true - OAUTH_AUTO_LINK_LDAP_USER=false - OAUTH_AUTO_LINK_SAML_USER=false - OAUTH_EXTERNAL_PROVIDERS=
- OAUTH_CAS3_LABEL=cas3 - OAUTH_CAS3_SERVER= - OAUTH_CAS3_DISABLE_SSL_VERIFICATION=false - OAUTH_CAS3_LOGIN_URL=/cas/login - OAUTH_CAS3_VALIDATE_URL=/cas/p3/serviceValidate - OAUTH_CAS3_LOGOUT_URL=/cas/logout
- OAUTH_GOOGLE_API_KEY= - OAUTH_GOOGLE_APP_SECRET= - OAUTH_GOOGLE_RESTRICT_DOMAIN=
- OAUTH_FACEBOOK_API_KEY= - OAUTH_FACEBOOK_APP_SECRET=
- OAUTH_TWITTER_API_KEY= - OAUTH_TWITTER_APP_SECRET=
- OAUTH_GITHUB_API_KEY= - OAUTH_GITHUB_APP_SECRET= - OAUTH_GITHUB_URL= - OAUTH_GITHUB_VERIFY_SSL=
- OAUTH_GITLAB_API_KEY= - OAUTH_GITLAB_APP_SECRET=
- OAUTH_BITBUCKET_API_KEY= - OAUTH_BITBUCKET_APP_SECRET=
- OAUTH_SAML_ASSERTION_CONSUMER_SERVICE_URL= - OAUTH_SAML_IDP_CERT_FINGERPRINT= - OAUTH_SAML_IDP_SSO_TARGET_URL= - OAUTH_SAML_ISSUER= - OAUTH_SAML_LABEL="Our SAML Provider" - OAUTH_SAML_NAME_IDENTIFIER_FORMAT=urn:oasis:names:tc:SAML:2.0:nameid-format:transient - OAUTH_SAML_GROUPS_ATTRIBUTE= - OAUTH_SAML_EXTERNAL_GROUPS= - OAUTH_SAML_ATTRIBUTE_STATEMENTS_EMAIL= - OAUTH_SAML_ATTRIBUTE_STATEMENTS_NAME= - OAUTH_SAML_ATTRIBUTE_STATEMENTS_FIRST_NAME= - OAUTH_SAML_ATTRIBUTE_STATEMENTS_LAST_NAME=
- OAUTH_CROWD_SERVER_URL= - OAUTH_CROWD_APP_NAME= - OAUTH_CROWD_APP_PASSWORD=
- OAUTH_AUTH0_CLIENT_ID= - OAUTH_AUTH0_CLIENT_SECRET= - OAUTH_AUTH0_DOMAIN=
- OAUTH_AZURE_API_KEY= - OAUTH_AZURE_API_SECRET= - OAUTH_AZURE_TENANT_ID=
|
注:请注意有注释的变量!
主要有以下几个关键点:
- 将 Redis、PostgreSQL、Gitlab 的储存空间挂载到外部;
sameersbn/gitlab
镜像的版本建议使用 10 以下,这里使用的 9.2.5。否则可能会有 bug;
- 设置
GITLAB_HOST
、GITLAB_PORT
,GITLAB_HOST 会在仓库地址中得到体现,如果你用域名访问此处就为域名,用 IP 访问此处为 IP。GITLAB_PORT 取决于访问 gitlab 的协议,http 为 80,https 则为 443;
- 设置一个 root 邮箱;
- 使用 QQ 企业邮箱发送邮件一定要加上
SMTP_TLS=true
, 否则邮件发送不了。其他邮箱配置请参考 Gitlab 官方配置。
在配置文件 docker-compose.yml
所在目录下执行下列命令启动 Gitlab:
1
| sudo docker-compose up -d
|
Nginx 配置
http 协议
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| upstream gitlab { server 127.0.0.1:10080; }
server { server_name git.xxx.xxx; listen 80;
location / { proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_pass http://gitlab; } }
|
https 协议
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
| upstream gitlab { server 127.0.0.1:10080; }
server { listen 80; server_name git.xxx.xxx; rewrite ^/(.*)$ https://git.xxx.xxx/$1 permanent; }
server { server_name git.xxx.xxx; listen 443 ssl; ssl on;
ssl_certificate /etc/nginx/xxx.crt; ssl_certificate_key /etc/nginx/xxx.key;
location / { proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_pass http://gitlab; } }
|
载入 Gitlab Nginx 配置
配置好相应的协议的配置文件,执行下列命令使其生效:
访问域名即可进入 gitlab 首页。
参考
- Ubuntu 安装 Docker CE
- sameersbn/docker-gitlab