机器环境
安装GitLab显示502很大程度上是因为CPU、内存耗尽导致
VMware安装最低2个CPU,2G内存,如果允许最好是4G.
简单运行
如果想简单的运行一下看看,可以执行这个命令:
docker run -d -p 3000:80 twang2218/gitlab-ce-zh:11.1.4
可以将 11.1.4
换成你所需要的版本标签。
启动后就可以通过主机的 3000
端口看到运行结果了,比如用的是本机 Docker 的话,访问:http://localhost:3000 即可。
测试结束后,彻底清除容器可以用命令:
docker rm -fv <容器ID>
这样可以停止、删除容器,并清除数据。
使用 Docker Compose
正常部署时,可以使用 Docker Compose 来配置启动。建立一个 docker-compose.yml,内容如下:
version: '2'
services:
gitlab:
image: 'twang2218/gitlab-ce-zh:11.1.4'
restart: unless-stopped
hostname: 'gitlab.example.com'
environment:
TZ: 'Asia/Shanghai'
GITLAB_OMNIBUS_CONFIG: |
external_url 'http://gitlab.example.com'
gitlab_rails['time_zone'] = 'Asia/Shanghai'
# 需要配置到 gitlab.rb 中的配置可以在这里配置,每个配置一行,注意缩进。
# 比如下面的电子邮件的配置:
# gitlab_rails['smtp_enable'] = true
# gitlab_rails['smtp_address'] = "smtp.exmail.qq.com"
# gitlab_rails['smtp_port'] = 465
# gitlab_rails['smtp_user_name'] = "xxxx@xx.com"
# gitlab_rails['smtp_password'] = "password"
# gitlab_rails['smtp_authentication'] = "login"
# gitlab_rails['smtp_enable_starttls_auto'] = true
# gitlab_rails['smtp_tls'] = true
# gitlab_rails['gitlab_email_from'] = 'xxxx@xx.com'
ports:
- '80:80'
- '443:443'
- '22:22'
volumes:
- config:/etc/gitlab
- data:/var/opt/gitlab
- logs:/var/log/gitlab
volumes:
config:
data:
logs:
注意,先在本地创建目录config、data、logs.
然后使用命令 docker-compose up -d 来启动,停止服务使用 docker-compose down。
如果你的服务器有域名,将上面的 gitlab.example.com 替换为实际域名。
实验时,也可以直接修改 /etc/hosts 方便测试。比如:
127.0.0.1 gitlab.example.com
使用 Docker 命令启动
直接使用 docker 命令要比使用 docker-compose 繁琐一些,但是可以达到一样的效果。
首先,Docker 容器数据应该存储于卷中,在这里我们使用最简单的本地命名卷:
- gitlab-config 存储 GitLab 配置信息
- gitlab-data 存储数据库
- gitlab-logs 存储日志
然后,我们需要创建自定义网络,从而让容器运行于独立的网络中,区别于默认网桥。
docker network create gitlab-net
准备好后,开始运行 Gitlab 容器:
docker run -d \
--hostname gitlab.example.com \
-p 80:80 \
-p 443:443 \
-p 22:22 \
--name gitlab \
--restart unless-stopped \
-v gitlab-config:/etc/gitlab \
-v gitlab-logs:/var/log/gitlab \
-v gitlab-data:/var/opt/gitlab \
--network gitlab-net \
twang2218/gitlab-ce-zh:11.1.4
如果需要进入容器修改配置文件,可以用 docker exec 命令进入容器:
$ docker exec -it gitlab bash
root@09f6e32c528c:/# vi /etc/gitlab/gitlab.rb
root@09f6e32c528c:/# gitlab-ctl reconfigure
Starting Chef Client, version 12.12.15
resolving cookbooks for run list: ["gitlab"]
如需停止服务,直接运行 docker stop gitlab。
如需卸载服务及相关内容,可以执行:
docker stop gitlab
docker rm gitlab
docker network rm gitlab-net
docker volume rm gitlab-config gitlab-datagitlab-logs
Dockerfile
#####################
# Building Stage #
#####################
FROM gitlab/gitlab-ce:11.1.4-ce.0 as builder
ENV GITLAB_DIR=/opt/gitlab/embedded/service/gitlab-rails
ENV GITLAB_GIT_ZH=https://gitlab.com/xhang/gitlab.git
# Reference:
# * https://gitlab.com/gitlab-org/omnibus-gitlab/blob/master/config/software/gitlab-rails.rb
# * https://gitlab.com/gitlab-org/gitlab-ce/blob/master/.gitlab-ci.yml
RUN set -xe \
&& echo " # Preparing ..." \
&& export DEBIAN_FRONTEND=noninteractive \
&& export SSL_CERT_DIR=/etc/ssl/certs/ \
&& export GIT_SSL_CAPATH=/etc/ssl/certs/ \
&& curl -sL https://deb.nodesource.com/setup_8.x | bash - \
&& curl -sS https://dl.yarnpkg.com/debian/pubkey.gpg | apt-key add - \
&& echo "deb https://dl.yarnpkg.com/debian/ stable main" | tee /etc/apt/sources.list.d/yarn.list \
&& apt-get update \
&& apt-get install -yqq lsb-release patch nodejs python build-essential yarn cmake
RUN set -xe \
&& echo " # Generating translation patch ..." \
&& cd /tmp \
&& git clone ${GITLAB_GIT_ZH} gitlab \
&& cd gitlab \
&& export IGNORE_DIRS=':!qa :!spec :!features :!.gitignore :!.gitlab :!locale :!app/assets/ :!vendor/assets/' \
&& git diff --diff-filter=d v11.1.4..v11.1.4-zh -- . ${IGNORE_DIRS} > ../zh_CN.diff \
&& echo " # Patching ..." \
&& patch -d ${GITLAB_DIR} -p1 < ../zh_CN.diff \
&& echo " # Copy assets files ..." \
&& git checkout v11.1.4-zh \
&& cp -R locale ${GITLAB_DIR}/ \
&& mkdir -p ${GITLAB_DIR}/app \
&& cp -R app/assets ${GITLAB_DIR}/app/ \
&& mkdir -p ${GITLAB_DIR}/vendor \
&& cp -R vendor/assets ${GITLAB_DIR}/vendor/
RUN set -xe \
&& echo " # Regenerating the assets" \
&& cd ${GITLAB_DIR} \
&& cp config/gitlab.yml.example config/gitlab.yml \
&& cp config/database.yml.postgresql config/database.yml \
&& cp config/secrets.yml.example config/secrets.yml \
&& rm -rf public/assets \
&& export NODE_ENV=production \
&& export RAILS_ENV=production \
&& export SETUP_DB=false \
&& export USE_DB=false \
&& export SKIP_STORAGE_VALIDATION=true \
&& export WEBPACK_REPORT=true \
&& export NO_COMPRESSION=true \
&& export NO_PRIVILEGE_DROP=true \
&& export NODE_OPTIONS=--max-old-space-size=4086 \
&& yarn install --frozen-lockfile \
&& bin/bundle install --frozen \
&& bin/rake gettext:compile \
&& bin/rake gitlab:assets:compile
RUN set -xe \
&& echo " # Cleaning ..." \
&& yarn cache clean \
&& rm -rf log \
tmp \
config/gitlab.yml \
config/database.yml \
config/secrets.yml \
.secret \
.gitlab_shell_secret \
.gitlab_workhorse_secret \
app/assets \
node_modules \
&& find /usr/lib/ -name __pycache__ | xargs rm -rf \
&& rm -rf /tmp/gitlab /tmp/*.diff /root/.cache /var/lib/apt/lists/*
######################
# Production Stage #
######################
FROM gitlab/gitlab-ce:11.1.4-ce.0 as production
RUN set -xe \
&& export DEBIAN_FRONTEND=noninteractive \
&& apt-get update \
&& apt-get install -yqq locales tzdata \
&& locale-gen en_US.UTF-8 \
&& rm -rf /var/lib/apt/lists/*
ENV LANG=en_US.UTF-8 LANGUAGE=en_US:en LC_ALL=en_US.UTF-8
ENV TZ=Asia/Shanghai
ENV GITLAB_VERSION=v11.1.4
ENV GITLAB_DIR=/opt/gitlab/embedded/service/gitlab-rails
ENV GITLAB_GIT_ZH=https://gitlab.com/xhang/gitlab.git
ENV GITLAB_GIT_COMMIT_UPSTREAM=v11.1.4
ENV GITLAB_GIT_COMMIT_ZH=v11.1.4-zh
COPY --from=builder ${GITLAB_DIR}/app ${GITLAB_DIR}/app
COPY --from=builder ${GITLAB_DIR}/public ${GITLAB_DIR}/public
COPY --from=builder ${GITLAB_DIR}/config/application.rb ${GITLAB_DIR}/config/application.rb
COPY --from=builder ${GITLAB_DIR}/config/initializers ${GITLAB_DIR}/config/initializers
COPY --from=builder ${GITLAB_DIR}/config/locales ${GITLAB_DIR}/config/locales
COPY --from=builder ${GITLAB_DIR}/lib/gitlab ${GITLAB_DIR}/lib/gitlab
COPY --from=builder ${GITLAB_DIR}/locale ${GITLAB_DIR}/locale