Linux离线配置docker及gitlab
一、Linux离线配置docker
1.1 下载docker安装包
(1)下载地址下载地址:https://download.docker.com/linux/static/stable/x86_64/
阿里云镜像网站:https://mirrors.aliyun.com/docker-ce/linux/static/stable/x86_64/

(2)解压与拷贝
解压并把文件复制到/usr/bin目录下:
tar -zxvf docker-28.1.0.tgz cp docker/* /usr/bin/
1.2 注册docker服务
在/etc/systemd/system/这个目录下下创建docker.service文件vim /etc/systemd/system/docker.service
将如下内容拷贝进去
[Unit] Description=Docker Application Container Engine Documentation=https://docs.docker.com After=network-online.target firewalld.service Wants=network-online.target [Service] Type=notify ExecStart=/usr/bin/dockerd ExecReload=/bin/kill -s HUP $MAINPID LimitNOFILE=infinity LimitNPROC=infinity LimitCORE=infinity Delegate=yes KillMode=process Restart=on-failure StartLimitBurst=3 StartLimitInterval=60s [Install] WantedBy=multi-user.target
1.3 启动docker
# 给docker.service赋权限 chmod +x /etc/systemd/system/docker.service # 重新加载systemd程序的配置文件 systemctl daemon-reload #启动docker服务 systemctl start docker # 使docker开机自启 systemctl enable docker # 查看docker服务状态 systemctl status docker

1.4 修改docker配置文件
docker安装后默认没有daemon.json这个配置文件,需要进行手动创建1、修改配置
vim /etc/docker/daemon.json
"registry-mirrors": ["https://192.498.89.232:89"],设置镜像加速 "data-root": "/var/lib/docker",Docker运行时使用的根路径,默认/var/lib/docker { "data-root": "/ldata/docker" "registry-mirrors": [ "https://docker.m.daocloud.io", "https://registry.docker-cn.com", "https://quay.mirrors.ustc.edu.cn", "https://hub-mirror.c.163.com/", "https://dockerhub.icu" ] }
例如将daemon.json里的data-root路径/var/lib/docker/修改为/ldata/docker
systemctl stop docker rsync -aqxP /var/lib/docker/ /ldata/docker
systemctl daemon-reload systemctl restart docker
docker -v

1.5 配置普通用户运行docker
docker运行需要sudo权限// 创建名为docker的组 groupadd docker // 将当前用户加入组docker gpasswd -a ${USER} docker // 重启docker服务 systemctl restart docker // (慎重)给所有用户添加访问和执行权限,一般不用执行 // chmod a+rw /var/run/docker.sock
1.6 Docker常用命令
# 查看容器状态 docker ps # 删除服务 docker rm -f 容器ID
二、docker离线安装gitlab
2.1 下载gitlab镜像
先在可以联网的linux上下载gitlab镜像# gitlab-ce为稳定版本,后面不填写版本则默认pull最新latest版本 docker pull gitlab/gitlab-ce # 或指定版本 docker pull gitlab/gitlab-ce:17.5.0-ce.0 # 查看镜像, docker images
保存镜像
// docker save -o gitlab.tar gitlab/gitlab-ce docker save -o gitlab.tar gitlab/gitlab-ce:17.5.0-ce.0
执行完命令,你会在当前目录获得一个gitlab.tar包
2.2 docker导入镜像
把下载的gitlab.tar压缩包拷到离线的linux机器上
# 执行命令,导入镜像 docker load -i gitlab.tar # 查看镜像 docker images
导入成功
2.3 docker启动gitlab容器并修改配置文件
-p参数代表端口映射,自定义gitlab端口为81(HTTP)、443(HTTPS)、22(ssh)
docker run -d \ -p 8080:80 -p 8083:443 -p 8082:22 \ --name gitlab \ # 容器名称 --restart unless-stopped \ # 容器自动重启 -v /home/gitlab/config:/etc/gitlab \ # 挂载本地目录到容器配置目录 -v /home/gitlab/log:/var/log/gitlab \ # 挂载本地目录到容器日志目录 -v /home/gitlab/data:/var/opt/gitlab \ # 挂载本地目录到容器数据目录 gitlab/gitlab-ce # 使用的镜像:版本
启动之后,需要修改配置
cd /home/gitlab/config
修改gitlab.rb文件,就是里面全是注释的文件,这个文件在你挂载的config目录,我上面挂载的是/home/gitlab/config
vim /home/gitlab/config/gitlab.rb
修改以下几个地方
# 这里修改的是你gitlab的登录地址,因为我不想用默认的80端口,所以我就自定义了8080端口,只要不是被占用的端口都可 external_url 'http://192.168.104.111:8080' # ssh主机端口 gitlab_rails['gitlab_ssh_host'] = '192.168.104.111' gitlab_rails['gitlab_shell_ssh_port'] = 8082 # 注意,如果用的默认80端口,则不需要修改,我这里用了8080端口,所以监听端口需要修改 nginx['listen_port'] = 8080
执行更新配置操作
gitlab-ctl reconfigure
gitlab-ctl start
修改完后,重启gitlab
docker restart gitlab
访问http://192.168.104.111:8080,这里启动Gitlab需要几分钟,耐心等待,我之前部署完一直是502,以为是有问题,其实是服务还没有完全起来。
2.4 修改管理员root密码
# 1.进入容器 docker ps docker exec -it [容器名] bash # 2.执行命令,执行这步命令耗时可能较长 gitlab-rails console # 3.查看有哪些用户 User.all # 4.修改用户密码 user = User.find_by_nsername(‘root’) // user = User.where(id:1).first user.password='12345678' user.password_confirmation='12345678' user.save! # 5.退出 exit
2.5 GitLab中文界面设置
登录GitLab后,在页面左上方的用户头像,选择“Settings”。
//或点击页面左上方的用户头像,选择“Preferences”。
进入Settings页面后,点击左侧导航栏中的“Preferences”选项。
在Preferences页面中,找到“Localization”区域,将“Language”选项修改为“简体中文”。
点击页面下方的“Save changes”按钮,保存语言设置。
三、rpm安装gitlab
3.1 下载gitlab的rpm安装包
GitLab有CE与EE两种版本,其中,CE指的是Community Edition(社区版),EE指的是Enterprise Edition(企业版)(1)下载地址
官网下载地址:https://packages.gitlab.com/gitlab/gitlab-ee
清华大学镜像网站:https://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/
由于我这里是CentOS7,x86_64的系统,所以选择*el7.x86_64.rpm
wget https://packages.gitlab.com/gitlab/gitlab-ee/packages/el/7/gitlab-ee-17.7.4-ee.0.el7.x86_64.rpm
(2)安装
rpm -ivh gitlab-ee-17.7.4-ee.0.el7.x86_64.rpm //yum localinstall gitlab-ee-17.7.4-ee.0.el7.x86_64.rpm
3.2 修改gitlab配置文件
用 gitlab 搭建的 git 私有服务器,占用空间不断增长,已高达 400G。仔细检查了一下,真正的库数据/var/opt/gitlab/git-data/repositories只有 7 个 G ,真正占用空间的是/var/opt/gitlab/prometheus/data,占用了将近 400G ,里面很多 80M 一个的大文件。
/var/opt/gitlab/prometheus/data
是 Prometheus 生成的监控数据文件,可参考文档Monitoring GitLab with Prometheus。
我们可以通过修改配置文件,停用该服务、降低占用或者换目录地址
vim /etc/gitlab/gitlab.rb
external_url 'http://192.168.104.111:8080' gitlab_rails['gitlab_ssh_host'] = '192.168.104.111' gitlab_rails['gitlab_shell_ssh_port'] = 8082 nginx['listen_port'] = 8080 prometheus['enable'] = false puma['enable'] = true puma['worker_timeout'] = 60 puma['worker_processes'] = 4
2、修改 gitlab 的存储路径,因为有些盘可能存储不够,需要切到存储余量大的路径
(1)vim /etc/gitlab/gitlab.rb
git_data_dirs({ "default" => {"path" => "/mnt/gitlab-data"} })
(2)复制数据目录
找到当前的数据目录,通常位于`/var/opt/gitlab`。使用`rsync`命令将数据目录复制到新的位置,例如`/mnt/new_storage/gitlab`:
sudo rsync -av /var/opt/gitlab /mnt/new_storage/
配置修改完执行以下命令
gitlab-ctl reconfigure gitlab-ctl restart
3.3 GitLab常用命令
// 开启、关闭与重启gitlab服务 gitlab-ctl start # start、stop、restart、status // 启用开机自启动 sudo systemctl enable gitlab-runsvdir.service // 禁用开机自启动 sudo systemctl disable gitlab-runsvdir.service // 重载配置文件(重新编译gitlab的配置) gitlab-ctl reconfigure // 验证配置文件 gitlab-ctl show-config // 查看日志 gitlab-ctl tail gitlab-ctl tail nginx/gitlab_access.log gitlab-ctl tail nginx/gitlab_error.log // 常用目录 日志地址:/var/log/gitlab/ # 对应各服务的打印日志 服务地址:/var/opt/gitlab/ # 对应各服务的主目录
3.4 Git常用命令
克隆代码到本地:git clone http://192.168.104.111:8080/dnn.git
一、常用命令:
git branch -a #查看下本地和远程分别有哪些分支 git branch dev #创建一个名称为dev的分支 git switch -c dev #创建名称为dev的分支并切换过去 git branch -d dev #删除一个名称为dev的分支 git checkout dev #切换到本地的dev分支(新版用switch而不用checkout) git fetch origin #获取远程分支 git checkout -b <本地分支> origin/ <远程分支> # 检出一个远程分支到本地 git remote set-head origin dev #将origin/HEAD指向其它分支 git remote add origin #添加远程连接 git remote rm origin #删除指定的远程连接 git add . #将代码暂存到暂存区(点前面有空格) git commit -m "代码提交" #提交代码到本地分支 git push origin dev #将代码push到gitlab上的dev分支,这样就能在gitlab中显示分支了 git pull origin main #将gitlab上的main代码,拉到本地 git merge test #需在dev分支下执行这段;可将test中的代码合并到dev中 git push --set-upstream origin <分支名> #将本地分支与远程分支关联(需要建本地分支并切换) git push origin --delete dev #删除gitlab上的dev分支
二、修改git配置文件
git config --global --edit(global是全局,local是本地)
//1. git push切换用户 # 本地仓库的用户身份配置(global是全局仓库的用户身份) git config --local user.name "xxx" git config --local user.email "xxx" //2. 配置https凭证存储免密(第一次输入密码后,凭证将被存储,之后将会免密) git config --global credential.helper store //3. 解决git status没有颜色(启用全局颜色设置) git config --global color.ui true # auto是自动,true是开启,flase是关闭 //或git config --global color.status always # branch
三、推送现有文件夹
git init --initial-branch=main #初始化Git仓库并设置初始分支为main git remote add origin http://192.168.104.111:8080/dnn.git #添加远程仓库 git add . git commit -m "Initial commit" git push --set-upstream origin main //git push -u origin main
3.5 解决错误
(1)error: unknown option `initial-branch=main'
从 Git 2.28 版本开始,才支持 --initial-branch 选项
执行如下命令或更新git版本
git init git checkout -b main //更新git版本 yum install git -y //或者源码安装 yum install curl-devel expat-devel gettext-devel openssl-devel zlib-devel wget https://mirrors.edge.kernel.org/pub/software/scm/git/git-2.49.0.tar.gz tar -zxf git-2.49.0.tar.gz cd git-2.49.0 make prefix=/usr/local/git all make prefix=/usr/local/git install
(2)systemctl start gitlab-runsvdir.service卡住不动
查看系统服务项
systemctl -t target
如果系统正常的话,所有任务应该是loaded active active,如果存在inactive dead选型,意味着有些服务出错了。
这时候使用
systemctl list-jobs
如果存在某个任务是running,则是该任务堵塞了其他所有服务。
此时就可以利用
systemctl stop pmcd.service
结束该任务。
然后重启gitlab即可。
3.6 偏好设置
(1)显示确切时间而非相对时间
自定义用于显示群组和项目概览页面以及用户配置文件上的活动时间的格式。您可以以以下格式显示时间:
-
相对格式,例如 30 minutes ago。
-
绝对格式,例如 September 3, 2022, 3:57 PM。
在GitLab UI上使用确切时间:
-
在左侧边栏,选择您的头像。
-
选择 偏好设置。
-
转到 时间偏好 部分。
-
清除 使用相对时间 复选框。
-
选择 保存变更。
end