# 搭建 GitLab 私有服务器

DarkM 项目使用 GitLab 作为私有 Git 服务器,用于代码管理和版本控制。


# 📋 环境要求

配置 最低要求 推荐配置
CPU 2 核 4 核 +
内存 4GB 8GB+
硬盘 10GB 50GB+ SSD
操作系统 Ubuntu 18.04+ Ubuntu 20.04 LTS
Docker 19.03+ 20.10+

# 🚀 安装方式

# 方式一:Docker 安装(推荐)

# 1. 创建目录结构

# 创建 GitLab 数据目录
sudo mkdir -p /srv/gitlab/{config,logs,data}

# 设置权限
sudo chmod -R 755 /srv/gitlab
1
2
3
4
5

# 2. 启动 GitLab 容器

docker run --detach \
  --hostname gitlab.woowis.com \
  --publish 443:443 \
  --publish 80:80 \
  --publish 2222:22 \
  --name gitlab \
  --restart always \
  --volume /srv/gitlab/config:/etc/gitlab \
  --volume /srv/gitlab/logs:/var/log/gitlab \
  --volume /srv/gitlab/data:/var/opt/gitlab \
  --shm-size 256m \
  gitlab/gitlab-ce:latest
1
2
3
4
5
6
7
8
9
10
11
12

参数说明:

参数 说明
--hostname GitLab 服务器域名
--publish 443:443 HTTPS 端口
--publish 80:80 HTTP 端口
--publish 2222:22 SSH 端口(映射到 2222)
--volume 数据持久化目录
--shm-size 共享内存大小(防止 OmniBus 进程失败)

# 3. 查看启动状态

# 查看容器状态
docker ps | grep gitlab

# 查看启动日志
docker logs -f gitlab

# 等待启动完成(约 2-3 分钟)
1
2
3
4
5
6
7

# 4. 获取初始密码

# 查看初始 root 密码
sudo docker exec -it gitlab grep 'Password:' /etc/gitlab/initial_root_password
1
2

输出示例:

# WARNING: THIS VALUE IS NEVER VISIBLE AGAIN
Password: xKj8vN2mP9qL4wR7
1
2

# 方式二:Ubuntu 包安装

# 1. 安装依赖

sudo apt-get update
sudo apt-get install -y curl openssh-server ca-certificates postfix
1
2

# 2. 添加 GitLab 仓库

# 下载并安装 GitLab 仓库配置
curl -sS https://packages.gitlab.com/install/repositories/gitlab/gitlab-ce/script.deb.sh | sudo bash
1
2

# 3. 安装 GitLab CE

# 设置 GitLab 外部 URL
export GITLAB_EXTERNAL_URL=http://gitlab.woowis.com

# 安装 GitLab CE
sudo EXTERNAL_URL="$GITLAB_EXTERNAL_URL" apt-get install -y gitlab-ce
1
2
3
4
5

# 4. 配置 GitLab

# 编辑配置文件
sudo vim /etc/gitlab/gitlab.rb
1
2

关键配置项:

# 外部访问 URL
external_url 'http://gitlab.woowis.com'

# SSH 端口
gitlab_rails['gitlab_shell_ssh_port'] = 2222

# Nginx 配置
nginx['listen_port'] = 80
nginx['listen_https'] = false

# 时区设置
gitlab_rails['time_zone'] = 'Asia/Shanghai'

# 邮件配置(可选)
gitlab_rails['smtp_enable'] = true
gitlab_rails['smtp_address'] = "smtp.example.com"
gitlab_rails['smtp_port'] = 587
gitlab_rails['smtp_user_name'] = "gitlab@example.com"
gitlab_rails['smtp_password'] = "password"
gitlab_rails['smtp_domain'] = "example.com"
gitlab_rails['smtp_authentication'] = "login"
gitlab_rails['smtp_enable_starttls_auto'] = true
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22

# 5. 重新配置并启动

# 重新配置 GitLab
sudo gitlab-ctl reconfigure

# 重启 GitLab
sudo gitlab-ctl restart

# 查看状态
sudo gitlab-ctl status
1
2
3
4
5
6
7
8

# 🔧 配置优化

# 1. 修改 SSH 端口

由于 22 端口可能被占用,建议修改为 2222:

# 编辑 sshd_config
sudo vim /etc/ssh/sshd_config

# 添加或修改
Port 22
Port 2222
1
2
3
4
5
6

# 2. 配置 HTTPS(推荐)

# 使用 Let's Encrypt 免费证书

# 编辑 GitLab 配置
sudo vim /etc/gitlab/gitlab.rb

# 添加 HTTPS 配置
external_url 'https://gitlab.woowis.com'
nginx['redirect_http_to_https'] = true
letsencrypt['enable'] = true
letsencrypt['contact_emails'] = ['admin@woowis.com']
1
2
3
4
5
6
7
8

重新配置:

sudo gitlab-ctl reconfigure
1

# 使用自有证书

# 证书文件路径
nginx['ssl_certificate'] = "/etc/gitlab/ssl/gitlab.woowis.com.crt"
nginx['ssl_certificate_key'] = "/etc/gitlab/ssl/gitlab.woowis.com.key"
nginx['ssl_ciphers'] = "ECDHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES128-GCM-SHA256"
nginx['ssl_protocols'] = "TLSv1.2 TLSv1.3"
1
2
3
4
5

# 3. 备份配置

# 创建备份目录
sudo mkdir -p /backup/gitlab

# 执行备份
sudo gitlab-backup create

# 备份文件位置
ls -lh /var/opt/gitlab/backups/
1
2
3
4
5
6
7
8

自动备份(Cron):

# 编辑 crontab
sudo crontab -e

# 每天凌晨 2 点备份
0 2 * * * /opt/gitlab/bin/gitlab-backup create CRON=1
1
2
3
4
5

# 👥 用户和组管理

# 1. 创建用户

Web 界面:

  1. 登录 GitLab(http://gitlab.woowis.com)
  2. 使用 root 账号登录
  3. 进入 Admin Area → Users
  4. 点击 New user
  5. 填写用户信息

命令行:

# 创建用户
sudo gitlab-rails console

# 在 Rails 控制台中
user = User.new(
  name: 'Alex Han',
  username: 'alex',
  email: 'alex@woowis.com',
  password: 'password123',
  password_confirmation: 'password123',
  admin: false,
  skip_confirmation: true
)
user.save!
1
2
3
4
5
6
7
8
9
10
11
12
13
14

# 2. 创建组

  1. 点击 New group
  2. 选择 Create group
  3. 填写组信息:
    • Group name: DarkM
    • Group slug: darkm
    • Visibility: Private

# 3. 创建项目

  1. 进入组页面
  2. 点击 New project
  3. 选择 Create blank project
  4. 填写项目信息:
    • Project name: DarkM
    • Project slug: darkm
    • Visibility: Private
    • Initialize repository with a README: ✓

# 🔑 SSH 密钥配置

# 生成 SSH 密钥

# 生成 SSH 密钥对
ssh-keygen -t ed25519 -C "alex@woowis.com"

# 查看公钥
cat ~/.ssh/id_ed25519.pub
1
2
3
4
5

# 添加 SSH 密钥到 GitLab

  1. 登录 GitLab
  2. 点击右上角头像 → Edit profile settings
  3. 选择 SSH Keys
  4. 粘贴公钥内容
  5. 点击 Add key

# 测试 SSH 连接

# 测试连接
ssh -T -p 2222 git@gitlab.woowis.com

# 成功输出
Welcome to GitLab, @alex!
1
2
3
4
5

# 📦 项目迁移

# 从其他 Git 服务器迁移

# 克隆原仓库
git clone --mirror http://old-server.com/darkm.git

# 进入仓库目录
cd darkm.git

# 添加新的 GitLab 远程
git remote add gitlab git@gitlab.woowis.com:darkm/darkm.git

# 推送到 GitLab
git push --mirror gitlab
1
2
3
4
5
6
7
8
9
10
11

# 导入现有项目

  1. 在 GitLab 点击 New project
  2. 选择 Import project
  3. 选择导入方式:
    • Git by URL
    • GitHub
    • Bitbucket
    • Upload directory
    • Tar file

# 🔗 与 DarkM 集成

# 配置 Git 凭证

# 保存 Git 凭证
git config --global credential.helper store

# 首次克隆时会提示输入用户名密码
git clone http://gitlab.woowis.com/darkm/darkm.git
1
2
3
4
5

# 配置 Git 用户信息

# 设置全局用户名
git config --global user.name "Alex Han"

# 设置全局邮箱
git config --global user.email "alex@woowis.com"
1
2
3
4
5

# 使用 GitLab CI/CD

在项目根目录创建 .gitlab-ci.yml

stages:
  - build
  - test
  - deploy

variables:
  DOTNET_CLI_TELEMETRY_OPTOUT: "true"

build:
  stage: build
  script:
    - dotnet restore
    - dotnet build -c Release

test:
  stage: test
  script:
    - dotnet test

deploy:
  stage: deploy
  script:
    - echo "Deploy to server"
  only:
    - master
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

# 🔍 常见问题

# 1. GitLab 启动失败

问题: gitlab-ctl reconfigure 卡住或失败

解决:

# 查看日志
sudo gitlab-ctl tail

# 检查内存
free -h

# 增加共享内存(Docker)
docker update --shm-size 512m gitlab
1
2
3
4
5
6
7
8

# 2. SSH 连接失败

问题: ssh: connect to host gitlab.woowis.com port 2222: Connection refused

解决:

# 检查 SSH 端口
sudo netstat -tlnp | grep 2222

# 检查防火墙
sudo ufw allow 2222/tcp

# 测试连接
ssh -v -T -p 2222 git@gitlab.woowis.com
1
2
3
4
5
6
7
8

# 3. 推送失败(权限不足)

问题: fatal: Could not read from remote repository

解决:

  1. 确认 SSH 密钥已添加
  2. 确认用户有项目权限
  3. 检查项目可见性设置

# 4. 内存不足

问题: GitLab 占用内存过高

解决:

# 编辑 gitlab.rb
sudo vim /etc/gitlab/gitlab.rb

# 限制 Puma 工作进程
puma['worker_processes'] = 2

# 限制 Sidekiq
sidekiq['max_concurrency'] = 10

# 重新配置
sudo gitlab-ctl reconfigure
1
2
3
4
5
6
7
8
9
10
11

# 📚 相关文档


# 🔗 参考链接


最后更新: 2022-08-07