参考:
GitLab 官方文档
docker-gitlab,通过 docker-compose 快速安装 GitLab
rake,是 Rails 的工具,类似 ruby 中常用的的 make。通过 Rakefile 文件指定 Rake 任务后,通过 bundle exec rake xx RAILS_ENV=production
执行。
可以通过 封装好的库 安装:
wget https://raw.githubusercontent.com/sameersbn/docker-gitlab/master/docker-compose.yml
这个文件的内容如下:
version: '2'
services:
redis:
restart: always
image: sameersbn/redis:latest
command:
- --loglevel warning
volumes:
- /srv/docker/gitlab/redis:/var/lib/redis:Z
postgresql:
restart: always
image: sameersbn/postgresql:9.6-2
volumes:
- /srv/docker/gitlab/postgresql:/var/lib/postgresql:Z
environment:
- DB_USER=gitlab
- DB_PASS=password
- DB_NAME=gitlabhq_production
- DB_EXTENSION=pg_trgm
gitlab:
restart: always
image: sameersbn/gitlab:10.7.4
depends_on:
- redis
- postgresql
ports:
- "10080:80" # 改为你想使用的本机端口
- "10022:22"
volumes:
- /srv/docker/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 # 可以改为 Asia/Beijing,Rails 中不支持 Shanghai
- GITLAB_TIMEZONE=Kolkata # 可以改为 Beijing,Rails 中不支持 Shanghai
- GITLAB_HTTPS=false # 如果需要使用 HTTPS,需要设为 true
- SSL_SELF_SIGNED=false # 如果需要使用自己签名的证书,需要设为 true
- GITLAB_HOST=localhost # 改为自己的域名,我的是 https://gitlab.kikakika.com
- GITLAB_PORT=10080 # 改为自己的端口号
- GITLAB_SSH_PORT=10022
- GITLAB_RELATIVE_URL_ROOT=
- 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
- GITLAB_ROOT_PASSWORD=
- GITLAB_ROOT_EMAIL=
- GITLAB_NOTIFY_ON_BROKEN_BUILDS=true
- GITLAB_NOTIFY_PUSHER=false
- GITLAB_EMAIL=notifications@example.com
- GITLAB_EMAIL_REPLY_TO=noreply@example.com
- GITLAB_INCOMING_EMAIL_ADDRESS=reply@example.com
- GITLAB_BACKUP_SCHEDULE=daily
- GITLAB_BACKUP_TIME=01:00
# SMTP 用于发送邮件(忘记密码、通知等)
- SMTP_ENABLED=false
- SMTP_DOMAIN=www.example.com
- SMTP_HOST=smtp.gmail.com
- SMTP_PORT=587
- SMTP_USER=mailer@example.com
- SMTP_PASS=password
- SMTP_STARTTLS=true
- SMTP_AUTHENTICATION=login
# IMAP 用于接收邮件
- IMAP_ENABLED=false
- IMAP_HOST=imap.gmail.com
- IMAP_PORT=993
- IMAP_USER=mailer@example.com
- IMAP_PASS=password
- IMAP_SSL=true
- IMAP_STARTTLS=false
# 用于通过 GitHub 等平台授权登录
- 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=
为 GITLAB_SECRETS_OTP_KEY_BASE、GITLAB_SECRETS_DB_KEY_BASE 和 GITLAB_SECRETS_SECRET_KEY_BASE 创建至少 64 个字符长度的随机字符串(也可以先使用默认值),用途如下:
docker-compose up
等待几分钟,在看到服务启动信息后,就可以访问 GitLab 了,默认是 10080 端口:
gitlab_1 | 2018-05-16 13:08:52,219 INFO success: gitaly entered RUNNING state, process has stayed up for > than 1 seconds (startsecs)
gitlab_1 | 2018-05-16 13:08:52,219 INFO success: sidekiq entered RUNNING state, process has stayed up for > than 1 seconds (startsecs)
gitlab_1 | 2018-05-16 13:08:52,219 INFO success: unicorn entered RUNNING state, process has stayed up for > than 1 seconds (startsecs)
gitlab_1 | 2018-05-16 13:08:52,219 INFO success: gitlab-workhorse entered RUNNING state, process has stayed up for > than 1 seconds (startsecs)
gitlab_1 | 2018-05-16 13:08:52,219 INFO success: cron entered RUNNING state, process has stayed up for > than 1 seconds (startsecs)
gitlab_1 | 2018-05-16 13:08:52,219 INFO success: nginx entered RUNNING state, process has stayed up for > than 1 seconds (startsecs)
gitlab_1 | 2018-05-16 13:08:52,219 INFO success: sshd entered RUNNING state, process has stayed up for > than 1 seconds (startsecs)
安装后,首次登陆时,会提示更改 root 用户的密码。改完后登陆即可。
也可以 参考这里 使用 GitLab 安装
Step 1. 启动 postgresql 容器
docker run --name gitlab-postgresql -d \
--env 'DB_NAME=gitlabhq_production' \
--env 'DB_USER=gitlab' --env 'DB_PASS=password' \
--env 'DB_EXTENSION=pg_trgm' \
--volume /srv/docker/gitlab/postgresql:/var/lib/postgresql \
sameersbn/postgresql:9.6-2
Step 2. 启动 redis 容器
docker run --name gitlab-redis -d \
--volume /srv/docker/gitlab/redis:/var/lib/redis \
sameersbn/redis:latest
Step 3. 启动 gitlab 容器
docker run --name gitlab -d \
--link gitlab-postgresql:postgresql --link gitlab-redis:redisio \
--publish 10022:22 --publish 10080:80 \
--env 'GITLAB_PORT=10080' --env 'GITLAB_SSH_PORT=10022' \
--env 'GITLAB_SECRETS_DB_KEY_BASE=long-and-random-alpha-numeric-string' \
--env 'GITLAB_SECRETS_SECRET_KEY_BASE=long-and-random-alpha-numeric-string' \
--env 'GITLAB_SECRETS_OTP_KEY_BASE=long-and-random-alpha-numeric-string' \
--volume /srv/docker/gitlab/gitlab:/home/git/data \
sameersbn/gitlab:10.7.3
默认情况下,GitLab 允许用户在网站上自由注册。最好关闭。通过 你的 GitLab 域名/api/v4/application/settings
可以看到所有参数,其中 signup_enabled 为 true 时允许用户自由注册。
关闭方法:登录 root 用户,进入 /admin/application_settings
Admin Area,找到“注册限制”,取消“Sign-up enabled”即可。
GitLab 是一个代码托管软件,因此当 Docker 容器停止/删除时,不希望丢失代码。为避免丢失任何数据,应该将 Volume 挂载到这里:
/home/git/data
注意,如果你使用的是 docker-compose 安装方法,这会自动挂载。
SELinux 用户还需要更改挂载点的安全上下文,以便与 selinux 良好地配合。
mkdir -p /srv/docker/gitlab/gitlab
sudo chcon -Rt svirt_sandbox_file_t /srv/docker/gitlab/gitlab
通过在 docker run
命令中指定 -v
选项,可以在 docker 中挂载卷:
docker run --name gitlab -d \
--volume /srv/docker/gitlab/gitlab:/home/git/data \
sameersbn/gitlab:10.7.3
GitLab 支持 PostgreSQL 和 MySQL,但是建议用 PostgreSQL。
GitLab 镜像支持使用外部的 PostgreSQL 服务器。通过环境变量实现。
CREATE ROLE gitlab with LOGIN CREATEDB PASSWORD 'password';
CREATE DATABASE gitlabhq_production;
GRANT ALL PRIVILEGES ON DATABASE gitlabhq_production to gitlab;
此外,从 GitLab 8.6.0 开始,pg_trgm
扩展也应该被 gitlabhq_production 数据库加载。
现在,可以启动 GitLab 应用程序了。
假设 PostgreSQL 服务器主机地址是 192.168.1.100
:
docker run --name gitlab -d \
--env 'DB_ADAPTER=postgresql' --env 'DB_HOST=192.168.1.100' \
--env 'DB_NAME=gitlabhq_production' \
--env 'DB_USER=gitlab' --env 'DB_PASS=password' \
--volume /srv/docker/gitlab/gitlab:/home/git/data \
sameersbn/gitlab:10.7.3
可以将此 gitlab 镜像与数据库所需的 postgresql 容器关联起来。postgresql 服务器容器的别名应该在与 gitlab 镜像链接时设置为 postgresql。
如果链接了 postgresql 容器,则仅使用链接自动检索 DB_ADAPTER,DB_HOST 和 DB_PORT 设置。可能仍然需要你设置其他数据库连接参数,例如 DB_NAME,DB_USER,DB_PASS 等。
sameersbn/postgresql 镜像说明了与 postgresql 容器的链接,可以直接使用。在生产中使用 postgresql 镜像时,应该为 postgresql 数据存储装入卷。详细信息请参阅 docker-postgresql 的 README。
首先,从 docker 索引中提取 postgresql 镜像。
docker pull sameersbn/postgresql:9.6-2
对于数据持久性,可以为 postgresql 创建一个存储并启动容器。
SELinux 用户还需要更改挂载点的安全上下文,以便与 selinux 良好地配合。
mkdir -p /srv/docker/gitlab/postgresql
sudo chcon -Rt svirt_sandbox_file_t /srv/docker/gitlab/postgresql
完整的运行命令如下:
docker run --name gitlab-postgresql -d \
--env 'DB_NAME=gitlabhq_production' \
--env 'DB_USER=gitlab' --env 'DB_PASS=password' \
--env 'DB_EXTENSION=pg_trgm' \
--volume /srv/docker/gitlab/postgresql:/var/lib/postgresql \
sameersbn/postgresql:9.6-2
上面命令会创建名为 gitlabhq_production 的数据库,同时创建名为 gitlab 且密码为 password 的用户。
现在,可以启动 GitLab 应用程序了。
docker run --name gitlab -d --link gitlab-postgresql:postgresql \
--volume /srv/docker/gitlab/gitlab:/home/git/data \
sameersbn/gitlab:10.7.3
下面几个镜像,可以自动从 postgresql 容器中获取 DB_NAME,DB_USER 和 DB_PASS 变量,因为它们是在 postgresql 容器的 docker run
命令中指定的。
参考 这里。
GitLab 使用 redis 数据库存储键值数据。可以通过环境变量指定到 Redis 服务器的连接。
已从镜像中移除。请使用下面两种方式。
需要在启动 GitLab 镜像时通过环境变量指定外部 Redis 服务器的相关信息。
假设 redis 服务器的地址是 192.168.1.100
:
docker run --name gitlab -it --rm \
--env 'REDIS_HOST=192.168.1.100' --env 'REDIS_PORT=6379' \
sameersbn/gitlab:10.7.3
可以将此 gitlab 镜像与 redis 容器链接以满足 gitlab 的 redis 要求。在与 gitlab 镜像链接时,redis 服务器容器的别名应该设置为 redisio。
sameersbn/redis 镜像已经说明了与 redis 容器的链接,可以直接使用。详细信息请参阅 docker-redis 的 README。
首先,从 docker 仓库中提取 redis 镜像:
docker pull sameersbn/redis:latest
启动 redis 容器:
docker run --name gitlab-redis -d \
--volume /srv/docker/gitlab/redis:/var/lib/redis \
sameersbn/redis:latest
现在,可以启动 GitLab 应用程序了:
docker run --name gitlab -d --link gitlab-redis:redisio \
sameersbn/gitlab:10.7.3
在启动 GitLab 镜像时,应使用环境变量指定邮件配置。该配置默认使用 gmail 发送电子邮件,并要求指定有效的用户名和密码才能登录 gmail 服务器。
如果使用的是 Gmail,则只需要执行以下操作:
docker run --name gitlab -d \
--env '[email protected]' --env 'SMTP_PASS=PASSWORD' \
--volume /srv/docker/gitlab/gitlab:/home/git/data \
sameersbn/gitlab:10.7.3
所有可用的 SMTP 参数,可以查看 Available Configuration Parameters。
如果需要配置其他邮箱(例如 腾讯企业邮箱),可以 参考这里。
从 8.0.0 开始,GitLab 支持在评论 issue 时发送电子邮件。
要启用此功能,需要提供 IMAP 配置参数,以允许 GitLab 连接到你的邮件服务器并阅读邮件。此外,如果你的传入电子邮件地址与 IMAP_USER 不同,可能需要指定 GITLAB_INCOMING_EMAIL_ADDRESS。
如果你的电子邮件提供商支持电子邮件 子地址,那么应该在电子邮件地址的用户部分之后添加 +%{key}
占位符,例如 GITLAB_INCOMING_EMAIL_ADDRESS=reply+%{key}@example.com
。请通过 这里 以了解此功能的要求。
如果使用的是 Gmail,那么只需要执行以下操作:
docker run --name gitlab -d \
--env '[email protected]' --env 'IMAP_PASS=PASSWORD' \
--env 'GITLAB_INCOMING_EMAIL_ADDRESS=USER+%{key}@gmail.com' \
--volume /srv/docker/gitlab/gitlab:/home/git/data \
sameersbn/gitlab:10.7.3
通过 app:rake
命令,可以执行 GitLab 的 rake 任务。例如收集 GitLab 及其所依赖的系统的信息:
docker run --name gitlab -it --rm [OPTIONS] \
sameersbn/gitlab:10.7.3 app:rake gitlab:env:info
也可以通过 docker exec
在已经启动的 GitLab 实例上运行 rake 任务。例如:
docker exec --user git -it gitlab bundle exec rake gitlab:env:info RAILS_ENV=production
同样,可以将原始仓库导入到 GitLab 项目实例中:
docker run --name gitlab -it --rm [OPTIONS] \
sameersbn/gitlab:10.7.3 app:rake gitlab:import:repos
或者
docker exec -it gitlab sudo -HEu git bundle exec rake gitlab:import:repos RAILS_ENV=production
For a complete list of available rake tasks please refer https://github.com/gitlabhq/gitlabhq/tree/master/doc/raketasks or the help section of your gitlab installation.
有关可用 rake 任务的完整列表,请参阅 https://github.com/gitlabhq/gitlabhq/tree/master/doc/raketasks 或 gitlab 安装的帮助部分。
附:请避免在正在运行的 gitlab 实例上通过 rake 任务进行备份和恢复操作。
要在 docker-compose 中使用 app:rake
命令,请使用以下命令:
# For stopped instances
docker-compose run --rm gitlab app:rake gitlab:env:info
docker-compose run --rm gitlab app:rake gitlab:import:repos
# For running instances
docker-compose exec --user git gitlab bundle exec rake gitlab:env:info RAILS_ENV=production
docker-compose exec gitlab sudo -HEu git bundle exec rake gitlab:import:repos RAILS_ENV=production
可以使用 SSL 进行保护对 gitlab 应用程序的访问,以防止未经授权访问存储库中的数据。尽管 CA 认证的 SSL 证书允许通过 CA 进行验证,但只要每个客户采取一些额外步骤来验证网站的身份,自签名证书也可以提供相同级别的信任验证。
如果使用了负载均衡器(如 hipache,haproxy 或 nginx),则跳转到下面的使用 HTTPS 和负载均衡器部分。
要通过 SSL 保护你的应用程序,需要两个东西:
STEP 1: 创建服务器私钥
openssl genrsa -out gitlab.key 2048
STEP 2: 创建证书签名请求(CSR,certificate signing request)
openssl req -new -key gitlab.key -out gitlab.csr
STEP 3: 使用私钥和 CSR 签署证书
openssl x509 -req -days 3650 -in gitlab.csr -signkey gitlab.key -out gitlab.crt
这个自签名的 SSL 证书可以使用 10 年。
生成更强大的 DHE 参数:
openssl dhparam -out dhparam.pem 2048
在上面生成的四个文件中,我们需要在 gitlab 服务器上安装 gitlab.key
,gitlab.crt
和 dhparam.pem
文件。CSR 文件不是必需的,只是用于安全地备份文件(以防再次需要)。
gitlab 应用程序配置为查找 SSL 证书的默认路径位于 /home/git/data/certs
,但可以使用 SSL_KEY_PATH,SSL_CERTIFICATE_PATH 和 SSL_DHPARAM_PATH 配置选项更改此默认路径。
如果您从上面记得,/home/git/data
路径是数据存储的路径,这意味着我们必须在 /srv/docker/gitlab/gitlab/
中创建 certs/
目录并将文件复制到其中。作为安全措施,我们将更新 gitlab.key
文件的权限,以便所有者可读。
mkdir -p /srv/docker/gitlab/gitlab/certs
cp gitlab.key /srv/docker/gitlab/gitlab/certs/
cp gitlab.crt /srv/docker/gitlab/gitlab/certs/
cp dhparam.pem /srv/docker/gitlab/gitlab/certs/
chmod 400 /srv/docker/gitlab/gitlab/certs/gitlab.key
现在,还剩最后一步。
通过将 GITLAB_HTTPS
选项设置为 true 可以启用 HTTPS 支持。此外,使用自签名 SSL 证书时,还需要将 SSL_SELF_SIGNED
选项设置 为true。假设我们正在使用自签名证书:
docker run --name gitlab -d \
--publish 10022:22 --publish 10080:80 --publish 10443:443 \
--env 'GITLAB_SSH_PORT=10022' --env 'GITLAB_PORT=10443' \
--env 'GITLAB_HTTPS=true' --env 'SSL_SELF_SIGNED=true' \
--volume /srv/docker/gitlab/gitlab:/home/git/data \
sameersbn/gitlab:10.7.3
在此配置中,通过纯 HTTP 协议进行的任何请求都将自动重定向到使用 HTTPS 协议。但是,使用负载均衡时,这不是最佳选择。
如果浏览器支持 HSTS,请确保你的用户只能通过 HTTPS 访问您的服务器。当用户第一次来到时,它会看到服务器的标题,该标题声明从现在开始只能通过 HTTPS 访问该站点多长时间 - 这就是 HSTS 最大时间值。
可以通过 NGINX_HSTS_MAXAGE 配置该值。默认值是 31536000 秒。如果要禁用已发送的 HSTS MAXAGE 值,请将其设置为 0。
docker run --name gitlab -d \
--env 'GITLAB_HTTPS=true' --env 'SSL_SELF_SIGNED=true' \
--env 'NGINX_HSTS_MAXAGE=2592000' \
--volume /srv/docker/gitlab/gitlab:/home/git/data \
sameersbn/gitlab:10.7.3
将 NGINX_HSTS_ENABLED 设置为 false 可以关闭 HSTS。
开启负载均衡后,流量路径为:
HTTPS -> Nginx 负载均衡 -> HTTP -> GitLab
此时需要配置两个地方:
proxy_pass
将流量反向代理到 GitLab 监听的 HTTP 端口:upstream gitlab {
server localhost:10080 fail_timeout=0;
}
# 监听 HTTPS 流量
server {
listen 443 ssl;
server_name gitlab.kikakika.com;
## 用户最大可以上传的文件大小
client_max_body_size 20m;
ssl on;
ssl_certificate /etc/nginx/ssl/fullchain.cer;
ssl_certificate_key /etc/nginx/ssl/kikakika.key;
ssl_session_timeout 5m;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2; # Dropping SSLv3, ref: POODLE
location / {
# 如果开启了 HTTPS,需要关闭 gzip 压缩来避免 BREACH 攻击
gzip off;
proxy_read_timeout 300;
proxy_connect_timeout 300;
proxy_redirect off;
# Host 必须要设置,用于 external_url 参数,没有的话,部分跳转页面会跳到默认的 localhost:10080
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto https;
proxy_set_header X-Frame-Options SAMEORIGIN;
proxy_pass http://gitlab;
}
}
# 执行 HTTP 到 HTTPS 的重定向
server {
listen 80;
server_name gitlab.kikakika.com;
return 301 https://$host$request_uri;
}
- GITLAB_HTTPS=true
- SSL_SELF_SIGNED=false
- GITLAB_HOST=https://gitlab.kikakika.com
- GITLAB_PORT=443
像 nginx、haproxy、hipache 这样的负载均衡器通过普通的 http 与后端应用程序进行通信,因此不需要安装 SSL 密钥和证书,也不应该安装在容器中。SSL 配置必须在负载均衡器上完成。
但是,使用负载均衡器时,必须将 GITLAB_HTTPS 设置为 true。此外,如果使用自签名 SSL 证书,则需要将 SSL_SELF_SIGNED 选项设置为 true。
有了这个,应该配置负载均衡器以支持处理 HTTPS 请求。有关该主题的信息,可以参阅 将 SSL/HTTPS 与 HAProxy 结合使用。
在使用负载均衡器时,可能需要确保负载均衡器自动执行 HTTP 到 HTTPS 的重定向。
总之,在使用负载均衡器时,docker 命令会查找大部分内容,如下所示(the docker command would look for the most part something like this):
docker run --name gitlab -d \
--publish 10022:22 --publish 10080:80 \
--env 'GITLAB_SSH_PORT=10022' --env 'GITLAB_PORT=443' \
--env 'GITLAB_HTTPS=true' --env 'SSL_SELF_SIGNED=true' \
--volume /srv/docker/gitlab/gitlab:/home/git/data \
sameersbn/gitlab:10.7.3
如果使用的是 CA 签发的证书,删除上面命令的 --env 'SSL_SELF_SIGNED=true'
选项。
如果 GitLab 以 422 HTTP Error
响应任何类型的 POST 请求(登录,OAUTH,更改设置等),请考虑将其添加到你的反向代理配置中:
proxy_set_header X-Forwarded-Ssl on; (nginx format)
这里针对的是自行签署的 SSL 证书。如果使用的是 CA 认证证书,则直接看后面的部分。
这部分更多的是客户端配置,以便为客户增加一定的信心,使他们认为与他们认为的人沟通。
只需将服务器证书添加到其可信证书列表中即可完成。在 ubuntu 上,通过将 gitlab.crt
文件复制到 /usr/local/share/ca-certificates/
并执行 update-ca-certificates 来完成。
同样,这是客户端配置,这意味着每个将与服务器通信的人都应该在他们的机器上执行此配置。简而言之,在所有开发人员中分发 gitlab.crt
文件,并要求他们将其添加到受信任的 SSL 证书列表中。不这样做会导致看起来像这样的错误:
git clone https://git.local.host/gitlab-ce.git
fatal: unable to access 'https://git.local.host/gitlab-ce.git': server certificate verification failed. CAfile: /etc/ssl/certs/ca-certificates.crt CRLfile: none
你可以在网络浏览器上做同样的事情。在这里可以找到为 Firefox 安装根证书的说明。chrome 只要确保在证书管理器对话框的“权限”选项卡下安装证书即可。
如果 GitLab CI 服务器使用自签名 SSL 证书,那么应该确保 GitLab CI 服务器证书在 GitLab 服务器上受信任,以便它们能够相互通话。
镜像配置为默认查找位于 /home/git/data/certs/ca.crt
的受信任 SSL 证书,但可以使用 SSL_CA_CERTIFICATES_PATH 配置选项更改此路径。
将 ca.crt
文件复制到数据存储上的 certs 目录中。ca.crt
文件应包含您要信任的所有服务器的根证书。关于 GitLab CI,这将是 docker-gitlab-ci 容器自述文件中描述的 gitlab_ci.crt
文件的内容。
默认情况下,我们自己的服务器证书 gitlab.crt
被添加到可信证书列表中。
添加 OmniAuth 服务后,用户可以通过 GitHub、微信等登录 GitLab。
https://github.com/sameersbn/docker-gitlab#available-configuration-parameters
所有的参数都可以在这里查找对应的解释,例如 GITLAB_PORT、GITLAB_TIMEZONE、DB_HOST
GitLab 定义了一个 rake 任务来为 gitlab 安装备份。备份包括所有 git 存储库,上传的文件以及可能预期的 sql 数据库。
在进行备份之前,请确保容器已停止并被移除以避免容器名称冲突:
docker stop gitlab && docker rm gitlab
执行 rake 任务创建备份:
docker run --name gitlab -it --rm [OPTIONS] \
sameersbn/gitlab:10.7.3 app:rake gitlab:backup:create
备份将在上面第 2 节第一部分的 数据存储 对应的备份文件夹中创建。可以使用 GITLAB_BACKUP_DIR 配置参数更改备份的位置。
附:备份也可以使用 docker exec
在正在运行的实例上生成,如 Rake Tasks 部分所述。但是,为了避免不必要的副作用,建议不要在正在运行的实例上运行备份和还原操作。
使用 docker-compose 时,可以使用以下命令执行备份:
docker-compose run --rm gitlab app:rake gitlab:backup:create
执行还原之前,请确保容器已停止并被移除以避免容器名称冲突。
docker stop gitlab && docker rm gitlab
如果这是一个全新的数据库,那么首先需要准备数据库:
docker run --name gitlab -it --rm [OPTIONS] \
sameersbn/gitlab:10.7.3 app:rake db:setup
执行 rake 任务来恢复备份。需要在 -it
交互模式下运行容器:
docker run --name gitlab -it --rm [OPTIONS] \
sameersbn/gitlab:10.7.3 app:rake gitlab:backup:restore
所有可用备份的列表将以反向时间顺序显示。选择要恢复的备份并继续。
要避免用户在还原操作中进行交互,请使用 rake 任务的 BACKUP 参数指定备份的时间戳。
docker run --name gitlab -it --rm [OPTIONS] \
sameersbn/gitlab:10.7.3 app:rake gitlab:backup:restore BACKUP=1417624827
使用 docker-compose 时,可以使用以下命令执行还原:
docker-compose run --rm gitlab app:rake gitlab:backup:restore # List available backups
docker-compose run --rm gitlab app:rake gitlab:backup:restore BACKUP=1417624827 # Choose to restore from 1417624827
可以使用 GITLAB_BACKUP_SCHEDULE 配置选项设置每天,每周或每月自动进行备份(对应 daily、weekly 或 monthly)。
每日备份在 GITLAB_BACKUP_TIME 创建,默认为每天 04:00。每周备份与每日备份同时创建。每月备份每月一日与每日备份同时创建。
默认情况下,启用自动备份时,备份将保留 7 天。在禁用自动备份时,备份会保留无限期。此行为可以通过 GITLAB_BACKUP_EXPIRY 选项进行配置。
将所有裸露的 git 存储库复制到数据存储库的 repositories/
目录,然后执行 gitlab:import:repos
rake 任务,如下所示:
docker run --name gitlab -it --rm [OPTIONS] \
sameersbn/gitlab:10.7.3 app:rake gitlab:import:repos
注意日志,并且你的存储库应该可用于新的 gitlab 容器。
可以通过下面命令拉取最新的镜像,然后重启。可以升级所有镜像:
docker-compose pull
或升级指定的镜像:
docker-compose pull gitlab
重启:
docker-compose up
server {
listen 443 ssl;
server_name gitlab.kikakika.com;
## 用户最大可以上传的文件大小
client_max_body_size 20m;
ssl on;
ssl_certificate /etc/nginx/ssl/fullchain.cer;
ssl_certificate_key /etc/nginx/ssl/kikakika.key;
ssl_session_timeout 5m;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2; # Dropping SSLv3, ref: POODLE
location / {
# 如果开启了 HTTPS,需要关闭 gzip 压缩来避免 BREACH 攻击
gzip off;
proxy_pass http://gitlab;
}
}
GitLab 部分设置如下:
- GITLAB_HTTPS=true
- SSL_SELF_SIGNED=false
- GITLAB_HOST=https://gitlab.kikakika.com
- GITLAB_PORT=443
HTTP/1.1 302 Found
Server: nginx/1.14.0
Date: Wed, 23 May 2018 07:36:23 GMT
Content-Type: text/html; charset=utf-8
Content-Length: 103
Connection: keep-alive
Cache-Control: no-cache
Location: https://localhost:10080/users/sign_in
X-Content-Type-Options: nosniff
X-Frame-Options: DENY
X-Request-Id: caac687b-4cd3-4952-a962-fefab3fca54d
X-Runtime: 0.101189
X-Ua-Compatible: IE=edge
X-Xss-Protection: 1; mode=block
Strict-Transport-Security: max-age=31536000;
<html><body>You are being <a href="https://localhost:10080/users/sign_in">redirecteda>.body>html>
server {
listen 443 ssl;
server_name gitlab.kikakika.com;
## 用户最大可以上传的文件大小
client_max_body_size 20m;
ssl on;
ssl_certificate /etc/nginx/ssl/fullchain.cer;
ssl_certificate_key /etc/nginx/ssl/kikakika.key;
ssl_session_timeout 5m;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2; # Dropping SSLv3, ref: POODLE
location / {
# 如果开启了 HTTPS,需要关闭 gzip 压缩来避免 BREACH 攻击
gzip off;
proxy_read_timeout 300;
proxy_connect_timeout 300;
proxy_redirect off;
# Host 必须要设置,用于 external_url 参数,没有的话,部分跳转页面会跳到默认的 localhost:10080
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto https;
proxy_set_header X-Frame-Options SAMEORIGIN;
proxy_pass http://gitlab;
}
}