# 搭建 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
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
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
2
3
4
5
6
7
# 4. 获取初始密码
# 查看初始 root 密码
sudo docker exec -it gitlab grep 'Password:' /etc/gitlab/initial_root_password
1
2
2
输出示例:
# WARNING: THIS VALUE IS NEVER VISIBLE AGAIN
Password: xKj8vN2mP9qL4wR7
1
2
2
# 方式二:Ubuntu 包安装
# 1. 安装依赖
sudo apt-get update
sudo apt-get install -y curl openssh-server ca-certificates postfix
1
2
2
# 2. 添加 GitLab 仓库
# 下载并安装 GitLab 仓库配置
curl -sS https://packages.gitlab.com/install/repositories/gitlab/gitlab-ce/script.deb.sh | sudo bash
1
2
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
2
3
4
5
# 4. 配置 GitLab
# 编辑配置文件
sudo vim /etc/gitlab/gitlab.rb
1
2
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
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
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
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
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
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
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
2
3
4
5
# 👥 用户和组管理
# 1. 创建用户
Web 界面:
- 登录 GitLab(http://gitlab.woowis.com)
- 使用 root 账号登录
- 进入 Admin Area → Users
- 点击 New user
- 填写用户信息
命令行:
# 创建用户
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
3
4
5
6
7
8
9
10
11
12
13
14
# 2. 创建组
- 点击 New group
- 选择 Create group
- 填写组信息:
- Group name: DarkM
- Group slug: darkm
- Visibility: Private
# 3. 创建项目
- 进入组页面
- 点击 New project
- 选择 Create blank project
- 填写项目信息:
- 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
2
3
4
5
# 添加 SSH 密钥到 GitLab
- 登录 GitLab
- 点击右上角头像 → Edit profile settings
- 选择 SSH Keys
- 粘贴公钥内容
- 点击 Add key
# 测试 SSH 连接
# 测试连接
ssh -T -p 2222 git@gitlab.woowis.com
# 成功输出
Welcome to GitLab, @alex!
1
2
3
4
5
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
2
3
4
5
6
7
8
9
10
11
# 导入现有项目
- 在 GitLab 点击 New project
- 选择 Import project
- 选择导入方式:
- 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
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
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
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
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
2
3
4
5
6
7
8
# 3. 推送失败(权限不足)
问题: fatal: Could not read from remote repository
解决:
- 确认 SSH 密钥已添加
- 确认用户有项目权限
- 检查项目可见性设置
# 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
2
3
4
5
6
7
8
9
10
11
# 📚 相关文档
# 🔗 参考链接
- GitLab 官方文档 (opens new window)
- GitLab Docker 镜像 (opens new window)
- GitLab 备份与恢复 (opens new window)
- GitLab CI/CD (opens new window)
最后更新: 2022-08-07
← 工作量评估 搭建 Nuget 服务器 →