gitlab ce不提供windows安装包。所以,在windows机器上最简洁的安装方式是使用docker。网上找到的gitlab docker安装步骤比较简单。所以,写了一个完整版本,方便不太熟悉的人。
2021/2/17 第一版
Windows 10 Pro 版本号 20H2 版本 19042.631
Docker desktop 3.10
gitliab-ce 13.8.4
参考文档 https://docs.microsoft.com/zh-cn/windows/wsl/install-win10
需要先启用"适用于 Linux 的 Windows 子系统"可选功能,然后才能在 Windows 上安装 Linux 分发。
以管理员身份打开 PowerShell 并运行:
dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart
若要更新到 WSL 2,需要运行 Windows 10。对于 x64 系统:版本 1903或更高版本,采用内部版本18362或更高版本。
若要检查 Windows 版本及内部版本号,选择 Windows 徽标键 + R,然后键入"winver",选择"确定"。(或者在 Windows 命令提示符下输入ver
命令)。
安装 WSL 2 之前,必须启用"虚拟机平台"可选功能。计算机需要虚拟化功能才能使用此功能。
以管理员身份打开 PowerShell 并运行:
dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart
重新启动计算机,以完成 WSL 安装并更新到 WSL 2。
a. 下载最新包:适用于 x64 计算机的 WSL2 Linux 内核更新包
b. 运行上一步中下载的更新包。双击以运行 - 系统将提示你提供提升的权限,选择"是"以批准此安装。)
安装完成后,请继续执行下一步。
打开 PowerShell,然后在安装新的 Linux 发行版时运行以下命令,将 WSL 2 设置为默认版本:
wsl --set-default-version 2
如果是希望使用linux,此步骤之后是从[Microsoft Store]安装需要的linux版本。本文使用docker运行gitlab,不需要一个Linux作为基础。
如果在vmware虚拟机中安装,要确定虚拟机配置的CPU虚拟化被选中。计算机请检查bios打开的CPU的虚拟化执行hi。
通过[Microsoft Store]安装windows terminal
. Windows 终端可启用多个选项卡(在多个 Linux 命令行、Windows 命令提示符、PowerShell 和 Azure CLI 等之间快速切换)。
gitlab-ce要求最低不低于4g,默认wsl使用一半的系统内存和cpu。建议确保机器内存不低于4核、8G。可以通过wsl设置增加wsl占用内存。
确保CPU的虚拟化支持已经打开。物理机在BIOS中,虚拟机在虚拟机设置中。
默认dock文件会被安装到系统盘。为了安全和维护,准备另外一个windows分区,例如 E:。
使用wsl2支持docker desktop,所以参考windows 10 Home docker 安装说明
下载页面
https://hub.docker.com/editions/community/docker-ce-desktop-windows/ 下载 Docker Desktop Installer.exe
目前docker desktop版本 3.1.0
双击 Docker Desktop Installer.exe
执行installer.
确保 Configuration
页的Install required windows components for WSL2
被选中。
继续执行后续步骤.
安装结束,点击 Close and logout
结束安装并注销当前用户登录.
Docker Desktop 版本号 3.1.0
执行docker version
,查询版本信息
PS C:\Users\user> docker version
Client: Docker Engine - Community
Cloud integration: 1.0.7
Version: 20.10.2
...
OS/Arch: windows/amd64
...
Server: Docker Engine - Community
Engine:
Version: 20.10.2
...
OS/Arch: linux/amd64
...
docker desktop的使用手册:https://docs.docker.com/docker-for-windows/
查看docker状态
> wsl --list -v
NAME STATE VERSION
* docker-desktop Running 2
docker-desktop-data Running 2
如果希望把docker数据文件移出系统盘,执行下列步骤。
如果不需要,可以跳过此步骤。
如果希望把wsl的其他Linux发布移出系统盘,步骤一样。
参考了这两篇文章
https://flyingmana.wordpress.com/2020/05/18/move-wsl2-instance-to-different-drive/
https://www.sitepoint.com/wsl2/
wsl命令参考
https://docs.microsoft.com/en-us/windows/wsl/reference
a. 在Windows Powershell terminal,输入wsl --list -v
查看所有已安装的linux系统
PS E:\> wsl --list -v
NAME STATE VERSION
* docker-desktop Running 2
docker-desktop-data Running 2
b. 创建数据备份目录,并把docker数据导出到目录中。tar文件名可以任意。
PS E:\> mkdir dockerbackup
PS E:\> cd .\dockerbackup\
PS E:\dockerbackup> wsl --export docker-desktop ./docker-desktop.tar
PS E:\dockerbackup> wsl --export docker-desktop-data ./docker-desktop-data.tar
wsl export会导致docker停止。
c. 注销已经导出的wsl分发。
wsl --unregister docker-desktop
wsl --unregister docker-desktop-data
d. 重新导入docker的分发
创建新的wsl目录
PS E:\dockerbackup> mkdir \wslDistros\docker-desktop
PS E:\dockerbackup> mkdir \wslDistros\docker-desktop-data
重新导入docker分发
wsl --import docker-desktop E:\wslDistros\docker-desktop ./docker-desktop.tar
wsl --import docker-desktop-data E:\wslDistros\docker-desktop-data ./docker-desktop-data.tar
e. 重启docker
所有操作使用windows terminal,使用cmd窗口。powershell窗口使用vi命令会有一些奇怪结果,没有深入研究云隐。
官方安装文档
https://docs.gitlab.com/omnibus/docker/
在命令行中输入:
docker pull gitlab/gitlab-ce:13.8.4-ce.0
等待镜像拉取完成。如果不在乎版本,可以直接用docker pull gitlab/gitlab-ce
获取最新版本。本次安装使用了目前最新的13.8.4 docker image。如果官方docker官方库下载过满,可以参考附录设置国内镜像源。
下载完成后,可以用docker image ls
和docker image inspect gitlab/gitlab-ce
查看image信息。
PS C:> docker image ls
REPOSITORY TAG IMAGE ID CREATED SIZE
gitlab/gitlab-ce 13.8.4-ce.0 17b865cb8390 5 days ago 2.15GB
这个image id和docker hub上版本id是不一样。不要按照这个id去找对应版本。
进入gitlab docker的linux terminal的方法
docker exec -it gitlab /bin/bash
然后就可以执行需要的命令,之后用exit
退出。
例如,查看gitlab版本号
cat /opt/gitlab/embedded/service/gitlab-rails/VERSION
wsl2 docker有volume和bind mount两种管理数据目录的方式。多数资料推荐volume方式。volume实际保存在docker-desktop-data中。
创建三个数据卷
> docker volume create gitlab-data-vol
> docker volume create gitlab-log-vol
> docker volume create gitlab-config-vol
GitLab主要有三个重要的数据分别是data、config、log,所以创建了三个数据卷,后面GitLab服务都是挂在在这几个目录下面的。
安装具体的gitlab镜像到上面创建的volume下面
docker run --detach
--publish 443:443 --publish 80:80 --publish 22:22
--name gitlab
--restart always
--volume gitlab-config-vol:/etc/gitlab
--volume gitlab-log-vol:/var/log/gitlab
--volume gitlab-data-vol:/var/opt/gitlab
gitlab/gitlab-ce:13.8.4-ce.0
如果不指定镜像版本,命令会默认找latest版本,如指定gitlab/gitlab-ce
会下载安装gitlab/gitlab-ce:latest
多行命令,需要指定行尾的续行符,powershell是`
, cmd窗口是^
, linux是\
powershell完整命令如下
docker run --detach `
--publish 443:443 --publish 80:80 --publish 22:22 `
--name gitlab `
--restart always `
--volume gitlab-config-vol:/etc/gitlab `
--volume gitlab-log-vol:/var/log/gitlab `
--volume gitlab-data-vol:/var/opt/gitlab `
gitlab/gitlab-ce:13.8.4-ce.0
如果没有预先pull过,run命令会自动下载镜像。
docker run参数解释
-d, --detach Run container in background and print container ID
--name string Assign a name to the container
指定容器的名字gitlab
-v, --volume list Bind mount a volume
绑定创建的三个卷到容器内指定目录
-p, --publish list Publish a container's port(s) to the host
容器到主机的端口映射,开放http、https、ssh
--restart string Restart policy to apply when a container exits (default "no")
设置为自动启动always
安装完成后我们通过docker ps -a 命令查看我们安装的docker镜像 ,这样就是正确启动起来了。
> docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
ac509f2410e9 gitlab/gitlab-ce:13.8.4-ce.0 "/assets/wrapper" 15 minutes ago Up 15 minutes (healthy) 0.0.0.0:22->22/tcp, 0.0.0.0:80->80/tcp, 0.0.0.0:443->443/tcp gitlab
这个时候已经可以在本机用127.0.0.1访问gitlab页面了。如果防火墙设置正确,没有其他服务占用这几个端口,应该可以从外部用IP或者域名访问gitlab。
如果机器上需要设置不同端口,首先要修改docker run命令的端口映射,t同时修改gitlab配置。
配置GitLab在局域网中访问的Url以及端口,这个主要是方便局域网中进行浏览器的访问,这个过程主要是通过修改容器内GitLab服务来实现的,具体来说是修改GitLab默认的配置文件gitlab.rb来进行的。其他修改配置操作不揍类似。具体的步骤如下:
a. 进入容器内执行命令
docker exec -it gitlab /bin/bash
这里的gitlab是我们之前容器中启动的镜像GitLab的唯一名称
b. 使用vi编辑器打开gitlib.rb:
vi /etc/gitlab/gitlab.rb
c. 修改gitlab.rb中的http和ssh地址
这两个地址影响gitlab页面给出的地址,比如:project clone链接的地址等。
# http(s)访问的url和端口
external_url 'http://192.168.149.129/'
# ssh访问的地址,ssh端口另有配置项
gitlab_rails['gitlab_ssh_host'] = '192.168.149.129'
d. vi保存并退出
:wq
e. 让修改后的配置生效并重启gitlab
gitlab-ctl reconfigure
gitlab-ctl restart
f. 退出容器bash
exit
以后的操作步骤不在详细介绍vi命令,只写gitlab.rb应该修改哪些选项。
邮件配置参考 gitlab SMTP settings
页面中给出了很多常用邮件服务器的配置模板,包括国内的阿里、腾讯等。
下面的配置在/etc/gitlab/gitlab.rb。
Aliyun Enterprise Mail with TLS (阿里企业邮箱)
gitlab_rails['smtp_enable'] = true
gitlab_rails['smtp_address'] = "smtp.qiye.aliyun.com"
gitlab_rails['smtp_port'] = 465
gitlab_rails['smtp_user_name'] = "username@your domain"
gitlab_rails['smtp_password'] = "password"
gitlab_rails['smtp_domain'] = "your domain"
gitlab_rails['smtp_authentication'] = "login"
gitlab_rails['smtp_enable_starttls_auto'] = false
gitlab_rails['smtp_tls'] = true
国内邮箱检查严格,一般要求from和邮箱账号必须相同。
# If your SMTP server does not like the default 'From: gitlab@localhost' you
# can change the 'From' with this setting.
gitlab_rails['gitlab_email_from'] = 'username@your domain'
gitlab_rails['gitlab_email_reply_to'] = 'noreply@your domain'
上面your domain应该是公司邮箱域名,username@your domain是真实邮件地址。reply地址可以根据情况写成username@your domain或者noreply@your domain。
修改完成后,执行gitlab-ctl reconfigur
在bash状态,可以执行下面命令验证是否配置正确。
执行gitlab-rails console
进入gitlab console。然后,运行下面命令发送一个测试邮件。记着把’[email protected]’替换成真实邮箱。
Notify.test_email('[email protected]', 'Message Subject', 'Message Body').deliver_now
Disable all outgoing email
如果想完全禁用gitlab邮件功能,可以修改如下设置。这个修改会把通知邮件、密码重置邮件等全都禁掉。
在/etc/gitlab/gitlab.rb
添加或者修改下面行:
gitlab_rails['gitlab_email_enabled'] = false
然后,gitlab-ctl reconfigure
使修改生效。
下面的操作步骤由于自己创建证书,会遇到浏览器或者杀毒软件提示证书不安全。忽略警告后可以正常操作。
如果已经有正式授权的证书,可以网上自行搜索配置步骤。原理相同,操作可以简单很多。
本部分参考了 https://www.jianshu.com/p/4111534b339f
a. 进入容器内执行命令
docker exec -it gitlab /bin/bash
b. 建立认证目录
mkdir -p /etc/gitlab/ssl
chmod 700 /etc/gitlab/ssl
c. 建立证书
没有域名,所以使用ip地址完成操作。
i. 创建 Private Key
openssl genrsa -des3 -out /etc/gitlab/ssl/192.168.149.129.key 2048
记住此处输入的密码(Pass phrase)
ii. 生成 Certificate Request
openssl req -new -key /etc/gitlab/ssl/192.168.149.129.key -out /etc/gitlab/ssl/192.168.149.129.csr
Enter Country Name US
Enter State or Province Full Name
Enter City Name
Enter Organization Name
Enter Company Name
Enter Organizational Unit Name
Enter server hostname i.e. URL 192.168.149.129
Enter Admin Email Address
Skip Challenge Password (Hit Enter)
Skip Optional Company Name (Hit Enter)
注: 第一步和第二部可以合并成一条命令
openssl req -nodes -newkey rsa:2048 -keyout gitlab.domain.com.key -out gitlab.domain.com.csr
iii. 移除Private Key 中的密码短语
cp -v /etc/gitlab/ssl/192.168.149.129.{key,original}
openssl rsa -in /etc/gitlab/ssl/192.168.149.129.original -out /etc/gitlab/ssl/192.168.149.129.key
rm -v /etc/gitlab/ssl/192.168.149.129.original
iv. 创建证书
openssl x509 -req -days 1460 -in /etc/gitlab/ssl/192.168.149.129.csr -signkey /etc/gitlab/ssl/192.168.149.129.key -out /etc/gitlab/ssl/192.168.149.129.crt
v. 移除证书请求文件
rm -v /etc/gitlab/ssl/192.168.149.129.csr
vi. 设置文件权限
chmod 600 /etc/gitlab/ssl/192.168.149.129.*
d. gitlab 配置更改/etc/gitlab/gitlab.rb
external_url 'https://192.168.149.129'
# gitlab 网站https:
nginx['redirect_http_to_https'] = true
e. 复制证书到gitlab目录:
cp /etc/gitlab/ssl/etc/gitlab/ssl/192.168.149.129.crt /etc/gitlab/trusted-certs/
f. gitlab重新配置+更新:
gitlab-ctl reconfigure
gitlab-ctl restart
g. 注意事项
gitlab如何找到对应的证书?
/etc/gitlab/gitlab.rb 配置的external_url 如果是https://gitlab.domain.com 那么gitlab会自动去找/etc/gitlab/ssl/ 目录中的gitlab.domain.com.crt 和gitlab.domain.com.key 文件,所以如果需要更换external_url,可以采取如下办法:
将原先的crt和key文件改名为新的external_url 对应的域名,或者直接通过配置指定证书和key文件的路径
nginx['ssl_certificate'] = "/etc/gitlab/ssl/gitlab.domain.com.crt"
nginx['ssl_certificate_key'] = "/etc/gitlab/ssl/gitlab.domain.com.key"
浏览器登录 http://192.168.149.129/
管理员用户登录
禁止用户自己注册
[Admin Area] - [Settings] - [General] - [Sign-up restrictions]
禁用[Sign-up enabled]
选择git客户端访问的方式
[Admin Area] - [Settings] - [General] - [Visibility and access controls]
可以设置 [Enabled Git access protocols]
选择ssh和http(s), 或者其一
project limit
[Admin Area] - [Settings] - [General] - [Account and limit]
减少[Default projects limit]
docker desktop会在运行期间,不断的增加log,造成docker的虚拟盘不断增大。
默认文件位于
\wsl$\docker-desktop-data\version-pack-data\community\docker\containers%containerID%%containerID%.log
为了限制log大小,有两个方案:
"log-driver": "json-file",
"log-opts": {
"max-size": "100m",
"max-file": "3"
}
对于已经创建的docker上面的配置不起作用,必须修改docker自己的配置。
a. 修改 \wsl$\docker-desktop-data\version-pack-data\community\docker\containers%containerID%\hostconfig.json 添加或者修改
"LogConfig": {
"Type": "json-file",
"Config": {
"max-file": "4",
"max-size": "50m"
}
},
b. 重新启动docker
参数的说明参考
https://docs.docker.com/config/containers/logging/local/
https://docs.docker.com/config/containers/logging/json-file/
https://docs.docker.com/config/containers/logging/configure/
gitlab docker数据备份和还原还未进行测试
https://docs.docker.com/docker-for-windows/install-windows-home/
https://docs.docker.com/storage/volumes/#backup-restore-or-migrate-data-volumes
对于使用 Windows 10 的用户,在任务栏托盘 Docker 图标内右键菜单选择 Settings,打开配置窗口后在左侧导航菜单选择 Docker Engine,在右侧像下边一样编辑 json 文件,之后点击 Apply & Restart 保存后 Docker 就会重启并应用配置的镜像地址了。
{
"registry-mirrors": [
"https://hub-mirror.c.163.com",
"https://mirror.ccs.tencentyun.com",
"https://mirror.baidubce.com"
]
}
国内可用源列表请自行查找。上面是网易、腾讯、百度提供的镜像。
$ docker ps // 查看所有正在运行容器
$ docker stop containerId // containerId 是容器的ID
$ docker ps -a // 查看所有容器
$ docker ps -a -q // 查看所有容器ID
$ docker stop $(docker ps -a -q) // stop停止所有容器
$ docker rm $(docker ps -a -q) // remove删除所有容器
docker中文资料
https://yeasy.gitbook.io/docker_practice/
gitlab docker部署官方文档
https://docs.gitlab.com/omnibus/docker/
docker安装官方文档
https://docs.docker.com/docker-for-windows/install/
https://docs.docker.com/docker-for-windows/install-windows-home/
https://docs.docker.com/docker-for-windows/wsl/
wsl文件操作的文章
https://www.sitepoint.com/wsl2/