Docker部署配置Gitlab

news2025/1/19 10:33:49

Docker部署配置Gitlab

  • 1 参考文档
  • 2 Gitlab相关介绍
    • 2.1 Gitlab
    • 2.2 Git和SVN的区别
    • 2.3 Git、Gitlab、GitHub的简单区别
  • 3 搭建Gitlab仓库
    • 3.1 拉取镜像
    • 3.2 启动容器
  • 4 修改配置文件并配置邮箱
    • 4.1 开放linux端口
    • 4.2 设置IP、端口
    • 4.3 配置邮箱
    • 4.4 让配置生效
  • 5 管理员登录Gitlab
  • 6 创建用户
  • 7 创建组
  • 8 创建项目
  • 9 Gitlab 数据备份
    • 9.1 备份相关配置
    • 9.2 手动备份
    • 9.3 定时备份
    • 9.4 异地容灾将备份文件同步到其他服务器
    • 9.5 恢复备份
  • 10 Gitlab 版本升级
  • 附录1 GitLab常用命令汇总
  • 附录2 Git 命令行常用指令的使用

1 参考文档

参考1:Gitlab 仓库搭建(详细版)
参考2:搭建 gitlab 私有仓库

2 Gitlab相关介绍

2.1 Gitlab

Gitlab是一个用于仓库管理系统的开源项目,使用Git作为代码管理工具,并在此基础上搭建起来的web服务。Gitlab有乌克兰程序员DmitriyZaporozhetsValerySizov开发,它由Ruby写成。后来,一些部分用Go语言重写,现今并在国内外大中型互联网公司广泛使用。gitlab-ce是它的社区版gitlab-ee是企业版,是收费的

2.2 Git和SVN的区别

Git是一个开源的分布式版本控制系统,用于敏捷高效地处理任何或小或大的项目。Git 是 Linus Torvalds 为了帮助管理 Linux 内核开发而开发的一个开放源码的版本控制软件。

它没有中央服务器,每个人的电脑就是一个完整的版本库,这样工作的时候就不需要联网了,因为版本都是在自己的电脑上。既然每个人的电脑都有一个完整的版本库,那多个人如何协作呢?比如说自己在电脑上改了文件A,其他人也在电脑上改了文件A,这时,你们两之间只需把各自的修改推送给对方,就可以互相看到对方的修改了。

SVN:是一个开放源代码的版本控制系统,通过采用分支管理系统的高效管理,简而言之就是用于多个人共同开发同一个项目,实现共享资源,实现最终集中式的管理。集中管理方式在一定程度上看到其他开发人员在干什么,而管理员也可以很轻松掌握每个人的开发权限。

但是相较于其优点而言,集中式版本控制工具缺点很明显:

  • 服务器单点故障
  • 容错性差

2.3 Git、Gitlab、GitHub的简单区别

  1. Git是一种基于命令的版本控制系统,全命令操作,没有可视化界面。
  2. Gitlab是一个基于Git实现的在线代码仓库软件,提供web可视化管理界面,通常用于企业团队内部协作开发。
  3. Github是一个基于Git实现的在线代码托管仓库,亦提供可视化管理界面,同时免费账户和提供付费账户,提供开放和私有的仓库,大部分的开源项目都选择Github作为代码托管仓库。

GitlabGitHub的区别

相同点:

  • 二者都是基于web的Git仓库,在很大程度上Gitlab是仿照GitHub来做的;
  • 它们都提供了分享开源项目的平台,为开发团队提供了存储、分享、发布和合作开发项目的中心化云存储的场所。

不同点:

  • GitHub如果要使用私有仓库,是需要付费的【现已免费】。Gitlab可以在上面创建私人的免费仓库。

Gitlab可以让开发团队对他们的代码仓库拥有更多的控制,相比于GitHub,它有不少的特色:

  • 允许免费设置仓库权限;
  • 允许用户选择分享一个project的部分代码;
  • 允许用户设置project的获取权限,进一步的提升安全性;
  • 可以设置获取到团队整体的改进进度;
  • 通过innersourceing让不在权限范围内的人访问不到该资源。
  • 从代码私有性方面来看有时公司并不希望员工获取到全部的代码,这个时候Gitlab无疑是更好的选择。但是对于开源项目而言,GitHub依然是代码托管的首选。

3 搭建Gitlab仓库

使用docker方式安装配置Gitlab。前面2.1介绍了gitlab-ceGitlab的社区版,所以安装也是以gitlab-ce为准。

3.1 拉取镜像

docker pull gitlab/gitlab-ce

3.2 启动容器

  1. 创建相关文件夹
    如果不创建,挂载时会自动创建。
    在这里插入图片描述
  2. 启动容器
docker run -itd  \
 -p 9980:80 \
 -p 9922:22 \
 -v /opt/soft/docker/gitlab/etc:/etc/gitlab  \
 -v /opt/soft/docker/gitlab/log:/var/log/gitlab \
 -v /opt/soft/docker/gitlab/opt:/var/opt/gitlab \
 --restart always \
 --privileged=true \
 --name gitlab \
 gitlab/gitlab-ce
  1. 命令解释:
-i	 以交互模式运行容器,通常与 -t 同时使用命令解释
-t	 为容器重新分配一个伪输入终端,通常与 -i 同时使用
-d	 后台运行容器,并返回容器ID
-p 9980:80	将容器内80端口映射至宿主机9980端口,这是访问gitlab的端口
-p 9922:22	将容器内22端口映射至宿主机9922端口,这是访问ssh的端口
-v /opt/soft/docker/gitlab/etc:/etc/gitlab	将容器/etc/gitlab目录挂载到宿主机/opt/soft/docker/gitlab/etc目录下,若宿主机内此目录不存在将会自动创建,其他两个挂载同这个一样
--restart always	容器自启动
--privileged=true	让容器获取宿主机root权限
--name gitlab	设置容器名称为gitlab
gitlab/gitlab-ce	镜像的名称,这里也可以写镜像ID

4 修改配置文件并配置邮箱

注意:这里是把4.3放到4.2后面配置,然后再操作4.4。原因是希望在4.4中统一修改端口,如果4.34.2分开配置,会容易遗漏修改4.4中的端口,从而在clone项目时,导致链接中没有端口的bug

4.1 开放linux端口

先开放gitlab使用的linux端口。

  1. 开放服务器端口
firewall-cmd --zone=public --add-port=9980/tcp --permanent
firewall-cmd --zone=public --add-port=9922/tcp --permanent
  1. 重启防火墙
firewall-cmd --reload
  1. 查询有哪些端口是开启的
firewall-cmd --list-port

4.2 设置IP、端口

以下操作均在容器中执行

  1. 进入容器
docker exec -it gitlab /bin/bash
  1. 修改配置文件
vi /etc/gitlab/gitlab.rb

在开头加入以下内容:

注意:external_url 的地址后面不能加端口,否则即使部署成功也无法访问。

#gitlab访问地址,可以写域名。如果端口不写的话默认为80端口
external_url 'http://192.168.3.220'
#ssh主机ip
gitlab_rails['gitlab_ssh_host'] = '192.168.3.220'
#ssh连接端口
gitlab_rails['gitlab_shell_ssh_port'] = 9922
#时区
gitlab_rails['time_zone'] = 'Asia/Shanghai'
#开启备份功能
gitlab_rails['manage_backup_path'] = true
#备份文件的权限
gitlab_rails['backup_archive_permissions'] = 0644
#保存备份 60 天
gitlab_rails['backup_keep_time'] = 5184000

在这里插入图片描述

4.3 配置邮箱

邮箱是企业进行工作中的通知,交互必不可少的部分,gitlab同样支持邮箱的配置,方便对一些操作有邮件的提醒。

  1. 开启smtp功能
    去邮箱的提供商开启SMTP服务。

注意事项:一定要搞清楚邮件服务的端口到底是哪个,不然配置完后测试邮件发送会提示链接超时,也可以在docker部署的gitlab容器内 telnet IP 端口 来判断邮箱的地址和端口是否正确,如果正确则不报错,后面也会给出具体的配置。

QQ邮箱SMTP 服务器地址及端口:
在这里插入图片描述


163邮箱SMTP 服务器地址及端口
在这里插入图片描述


  1. 进入gitlab容器内部修改配置
docker exec -it gitlab /bin/bash

建议先在容器内 telnet IP 端口 来确定邮件的SMTP服务能否链接上。

  1. 修改配置文件
vi /etc/gitlab/gitlab.rb

QQ邮箱:【注意端口】推荐,因为163邮箱可能会出现telnet端口不通的问题。

经测试,QQ的英文邮箱和数字邮箱可以共用同一个授权码。

gitlab_rails['smtp_enable'] = true
gitlab_rails['smtp_address'] = 'smtp.qq.com'
gitlab_rails['smtp_port'] = 587
gitlab_rails['smtp_user_name'] = '发件邮箱'
gitlab_rails['smtp_password'] = '第三方登录授权码'
gitlab_rails['smtp_domain'] = 'smtp.qq.com'
gitlab_rails['smtp_authentication'] = 'login'
gitlab_rails['smtp_enable_starttls_auto'] = true
gitlab_rails['smtp_tls'] = false
gitlab_rails['smtp_pool'] = '发件邮箱'

gitlab_rails['gitlab_email_enabled'] = true
gitlab_rails['gitlab_email_from'] = '发件邮箱'
# gitlab_rails['gitlab_email_display_name'] = 'Example'

163邮箱:【注意端口】

gitlab_rails['smtp_enable'] = true
gitlab_rails['smtp_address'] = 'smtp.163.com'
gitlab_rails['smtp_port'] = 25
gitlab_rails['smtp_user_name'] = '发件邮箱'
gitlab_rails['smtp_password'] = '第三方登录授权码'
gitlab_rails['smtp_domain'] = 'smtp.163.com'
gitlab_rails['smtp_authentication'] = 'login'
gitlab_rails['smtp_enable_starttls_auto'] = true
gitlab_rails['smtp_tls'] = false
gitlab_rails['smtp_pool'] = '发件邮箱'

gitlab_rails['gitlab_email_enabled'] = true
gitlab_rails['gitlab_email_from'] = '发件邮箱'
# gitlab_rails['gitlab_email_display_name'] = 'Example'

以上两个厂商的邮箱配置已验证,可用。

4.4 让配置生效

4.2、4.3都配置完毕后再执行4.4的步骤。

  1. 让配置生效
gitlab-ctl reconfigure

输入命令后,会执行一系列操作,直到最后出现:gitlab Reconfigured!

  1. 修改gitlab.yaml 文件
vi /opt/gitlab/embedded/service/gitlab-rails/config/gitlab.yml

默认为80端口,修改端口号为之前配置的端口
在这里插入图片描述

  1. 重启gitlab服务
gitlab-ctl restart
  1. 测试
    执行gitlab-rails console进入控制台交互界面,然后在控制台提示符后输入下面内容发送一封测试邮件,测试完成后exit()退出。
gitlab-rails console
# 示例
Notify.test_email('229xxxx@qq.com', 'GitLab email', 'Hellow world').deliver_now

在这里插入图片描述

  1. 退出容器
exit;

5 管理员登录Gitlab

  1. 查找管理员(root)的密码,进入容器
docker exec -it gitlab /bin/bash
  1. 查看初始密码
cat /etc/gitlab/initial_root_password

在这里插入图片描述

  1. 登录
    账号:root
    密码:【上一步查看的密码】

  2. 修改超级管理员的密码
    在这里插入图片描述

  3. 关闭用户自动注册功能
    以root权限登录,在Gitlab的主菜单上,选择Menu—》Admin,如下所示:
    在这里插入图片描述
    之后,选择Settings—》General—》Sign-up restrictions,点击右边的Expand,如下所示:
    在这里插入图片描述
    在弹出的页面中,取消掉Sign-up enabled选项前面的勾,然后点击底部的Save changes后,就可以使得我们的配置生效了。这样在登录的时候,就无法实现自动注册了。如下所示:
    在这里插入图片描述

6 创建用户

  1. 在首页找到管理员,如图所示:
    在这里插入图片描述
  2. 点击小人图标
    在这里插入图片描述
  3. 找到Users,创建用户:
    在这里插入图片描述
  4. 填写相关信息
    注意:需要填写一下email,用于给被创建用户发送初始登录密码。
    在这里插入图片描述

7 创建组

Gitlab上创建项目时,由于新项目的创建必须依赖于一个组,因此,我们在创建项目前,先创建组。
进入Gitlab主页面后,点击Overview中的Groups选项,然后点击右边的New group,选择新创建一个组,如下所示:
在这里插入图片描述
输入组的名称和描述,组的URL会随着组名称的输入而自动出现,在组的权限处,我们选择Private,并取消掉下方允许用户访问的请求,配置完成后如下所示:

在这里插入图片描述
点击最下方的Create Group,就可以完成组的创建了。

8 创建项目

项目的创建与组的创建过程类似,都是输入项目名称,选择组的名称,项目描述以及权限等。

建议直接在组下创建项目,有三种方式:创建空项目、根据模板创建、从其他代码仓库迁移,根据个人情况选择:
在这里插入图片描述

9 Gitlab 数据备份

9.1 备份相关配置

可以在/etc/gitlab/gitlab.rb中修改Gitlab默认的备份配置。

  1. 进入Gitlab容器内部
docker exec -it gitlab /bin/bash
  1. 编辑 gitlab.rb
    因已在3.3 修改配置文件 环节已经配置好了,此处不再重新更改,可以直接跳过本步骤。
vi /etc/gitlab/gitlab.rb
#指定备份后数据存放的路径、权限、时间配置
gitlab_rails['manage_backup_path'] = true              开启备份功能
gitlab_rails['backup_path'] = "/home/gitlab-backup"        指定备份的路径
gitlab_rails['backup_archive_permissions'] = 0644        备份文件的权限
gitlab_rails['backup_keep_time'] = 5184000             备份保留时间【60天】

修改完成之后使用下面命令重载配置文件即可。

gitlab-ctl reconfigure

9.2 手动备份

  1. 进入Gitlab容器内部
docker exec -it gitlab /bin/bash
  1. 执行备份命令
    使用一条命令即可创建完整的Gitlab备份。
gitlab-rake gitlab:backup:create

执行完备份命令后会在/var/opt/gitlab/backups目录下创建一个压缩包,这个压缩包就是Gitlab的备份文件了,名称里的 15.11.0 是Gitlab的版本号。
在这里插入图片描述

  1. 其他文件
    注意:执行备份命令后除了生成的备份文件外,在备份时会提示 gitlab.rbgitlab-secrets.json是敏感文件,需要手动备份。
    在这里插入图片描述

9.3 定时备份

参考1:docker gitlab定时备份与异地同步备份文件

  • dockergitlab的定时备份实际上是基于linux的。
  • 利用crontab定时执行任务,cron服务是Linux的内置服务,但是其不会自动开机启动。

步骤

  1. 创建执行备份脚本
    gitlab挂载的linux的配置目录下。
    在这里插入图片描述
    etc目录下继续创建目录gitlab-backup-config
    在这里插入图片描述
    gitlab-backup-config下创建执行备份的脚本。
vim gitlab_backup.sh
#!/bin/bash
case "$1" in
    "start")
        docker exec gitlab gitlab-rake gitlab:backup:create
        ;;
esac  
  1. 授权文件
chmod 777 gitlab_backup.sh
  1. 新建定时计划,定时执行

目标:实现每天1点、13点各进行一次自动备份,即每12小时备份一次。

使用crontab -e进入定时任务编辑界面,新增如下内容:

00 1,13 * * * sh /opt/soft/docker/gitlab/etc/gitlab-backup-config/gitlab_backup.sh start

当前表示每天1点、13d点开始执行 - 前面规则可以改
分 时 日 月 周 命令
第1列表示分钟,1~59,每分钟用*表示
第2列表示小时,1~23,(0表示0点)
第3列表示日期,1~31
第4列表示月份,1~12
第5列表示星期,0~6(0表示星期天)
第六列表示要运行的命令。
比如每天13:00、16:00生成:
0 13 * * * sh backup.sh start

  1. 重启crond
systemctl restart crond
  1. 查看定时任务执行日志
    参考1:liunx查看定时任务日志
    linux下cron执行的日志位置:/var/log
查看实时日志:tail -f cron 或者 more cron

9.4 异地容灾将备份文件同步到其他服务器

未实践,操作过程参考docker gitlab定时备份与异地同步备份文件

  1. 两台服务器都安装 rsync
yum -y install rsync
  1. 在gitlab所在服务器创建脚本

脚本位置和9.3的gitlab_backup.sh同在gitlab-backup-config下。

vim rsync.sh

脚本内容:

#!/bin/bash
rsync -arvuz /opt/soft/docker/gitlab/opt/backups/ root@192.168.0.26:/data/backups/

上面ip改为你要备份到哪个异地服务器

  1. 授权脚本文件
chmod 777 rsync.sh
  1. 操作支持免密访问异地服务器
ssh-keygen -t rsa
  1. 默认enter按下去就可以,然后公钥传输到异地服务器
scp -p .ssh/id_rsa.pub root@192.168.0.26:/root/.ssh/authorized_keys
  1. 增加定时任务
crontab -e

设置比gitlab定时备份晚30分钟

30 1,13 * * * sh /opt/soft/docker/gitlab/etc/gitlab-backup-config/rsync.sh start
  1. 重启crond
systemctl restart crond
  1. 查看定时任务执行日志
    参考1:liunx查看定时任务日志
    linux下cron执行的日志位置:/var/log
查看实时日志:tail -f cron 或者 more cron

9.5 恢复备份

还原需要新旧版本gitlab版本相同,还原的gitlab与原gitlab版本不一致会不成功。

gitlab备份文件的恢复需要将备份的文件放置到备份目录下,然后执行恢复命令。

  1. 进入Gitlab容器内部
docker exec -it gitlab /bin/bash
  1. 执行备份恢复命令
    注意:BACKUP是大写的,还有要有操作备份文件的权限。
gitlab-rake gitlab:backup:restore BACKUP=1682825771_2023_04_30_15.11.0

如果遇到是否继续,选择继续【yes】。
在这里插入图片描述

10 Gitlab 版本升级

参考:Gitlab的备份、恢复、版本升级和数据迁移的思路
如果版本跨度较大,比如11.0.x上12.x.x,待实践。

  1. 进入Gitlab容器内部
docker exec -it gitlab /bin/bash
  1. 停止Gitlab服务
    使用一条命令即可创建完整的Gitlab备份。
gitlab-ctl stop
  1. 退出容器
exit
  1. 停止gitlab容器,并删除
docker stop gitlab

docker rm gitlab
  1. 启动高版本的容器
    参照3.2 启动容器
  2. 进入容器查看版本
cat /opt/gitlab/embedded/service/gitlab-rails/VERSION

在这里插入图片描述

  1. 登录网站访问是否正常

附录1 GitLab常用命令汇总

#查看服务状态
gitlab-ctl status
使用控制台实时查看日志
# 查看所有的logs; 按 Ctrl-C 退出
gitlab-ctl tail
# 拉取/var/log/gitlab下子目录的日志
gitlab-ctl tail gitlab-rails
# 拉取某个指定的日志文件
gitlab-ctl tail nginx/gitlab_error.log
#启动关闭gitlab	
gitlab-ctl start      
gitlab-ctl stop                                #停止            
gitlab-ctl status                              #查看状态
gitlab-ctl restart                             #重启
gitlab-ctl reconfigure			   #更新配置文件
gitlab-ctl help                                #帮助
gitlab-rake gitlab:check SANITIZE=true --trace	检查gitlab
#gitlab 默认的日志文件存放在/var/log/gitlab 目录下
gitlab-ctl tail                                #查看所有日志
#禁止 Gitlab 开机自启动
systemctl disable gitlab-runsvdir.service 
#启用 Gitlab 开机自启动
systemctl enable gitlab-runsvdir.service

附录2 Git 命令行常用指令的使用

git status 	#上次提交后是否对文件再做了修改项目
git add . 		#添加所有的变动
git checkout -b 文件夹名称 		#创建本地分支并切换分支 git checkout -b pr/ffr
git commit -m “描述”			 #提交修改 git commit -m “修改什么”
git merge origin/develop “本地分支” 		#合并origin/develop上别人所做的修改到自己的本地分支 git merge origin/develop pr/ffr
git push origin “本地分支” #推送本地分支到远程,并建立联系 git push origin pr/ffr
git rebase -i 编号 #合并多次提交,将前几次的提交合并为一次
git checkout 分支名 #切换分支 git checkout pr/FFR-color git cherckout develop
git pull #更新当前分支的状态
git branch #列出本地分支
git branch -a #列出本地分支与远程分支
git branch -D 分支名 #删除分支(目前仅用于删除本地分支)
git remote -v #可以查看远程仓库信息
git branch 分支名 #仅仅创建 一个新分支,并不会自动切换到新分支中去
git rebase --abort #退出git rebase
git reset 提交编号 #git rebase -i 提交编号,之后出现错误,可以回退到之前未合并时的日志状态
git commit --amend -m “描述” #修改上一次的提交的描述
git stash #暂存上一次的修改,准备切换到其他的分支
git stash pop #还原上一次的修改,将暂存的修改加入到新的分支

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/532459.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【输变电线路 JL-8C/12反时限电流继电器 报警信号、切除故障 JOSEF约瑟】

系列型号 JL-8C/11反时限电流继电器; JL-8C/12反时限电流继电器; JL-8C/12X反时限电流继电器; JL-8C/21-1反时限电流继电器; JL-8C/21-2反时限电流继电器; JL-8C/21-3反时限电流继电器; JL-8C/21-4反…

在线域名批量查询工具-在什么网站可以挖到老域名

怎么能挖掘到好域名 挖掘到好域名对于网站的建设和SEO排名是非常重要的,因为好的域名可以提高网站的置信度,增加自然引荐的数量,并且可以在搜索引擎排名中获得优势。下面介绍一些优秀的老域名挖掘方法,以及一种常用、免费的老域名…

verflow属性的常用值详解

什么是overflow 在CSS中,overflow是“溢出”的意思,该属性规定当内容溢出元素框时发生的事情,设置内容是否会被修剪,溢出部分是否会被隐藏;例如当属性值设置为“visible”则内容不会被修剪,为“hidden”则内…

PVT(Pyramid Vision Transformer)学习记录

引言与启发 自从ViT之后,关于vision transformer的研究呈井喷式爆发,从思路上分主要沿着两大个方向,一是提升ViT在图像分类的效果;二就是将ViT应用在其它图像任务中,比如分割和检测任务上,这里介绍的PVT&a…

【云原生】k8s 如何运行 Container?

文章目录 引语1、什么是 Pod1.1 简介1.2 Pod 怎样管理多个容器?1.3 如何使用 Pod? 2、Pod 基本操作2.1 查看 Pod2.2 创建 Pod2.3 删除 pod2.4 进入 Pod 中容器2.5 查看 Pod 日志2.6 查看 Pod 的描述信息 3、Pod 运行多个容器3.1 创建 Pod3.2 查看指定容器…

浅谈编译器对构造函数和拷贝构造的优化

一、前言 ①我们先看一段程序&#xff0c;传值传参和传引用传参 #include <iostream> using namespace std;class D { public:D(int a0)//构造:_a(a){cout << "D(int a0)" << endl;}D(const D& d)//拷贝{_a d._a;cout << "D(con…

域名到期时间查询网站-免费版的翼龙老域名挖掘

批量域名过期查询软件 随着互联网的不断发展&#xff0c;域名越来越重要&#xff0c;特别是对于那些热爱SEO优化的网站管理员来说&#xff0c;域名的重要性无法忽视。而对于那些热衷于SEO优化的用户来说&#xff0c;域名过期查询可能是一个必不可少的工具&#xff0c;它可以用…

数据结构初阶--链表OJⅡ

目录 前言相交链表思路分析代码实现 环形链表思路分析代码实现 环形链表Ⅱ思路分析代码实现 复制带随机指针的链表思路分析代码实现 前言 本篇文章承接上篇博客&#xff0c;继续对部分经典链表OJ题进行讲解 相交链表 先来看题目描述 思路分析 这道题我们还是首先来判断一…

蓝牙耳机怎么挑选?小编分享2023畅销蓝牙耳机排行榜

蓝牙耳机怎么挑选&#xff1f;蓝牙、音质、续航、佩戴是蓝牙耳机选购时最重要的四大维度&#xff0c;这几年随着技术的成熟体验有了很大改善&#xff0c;但挑选的时候仍然要仔细对比&#xff0c;不然容易踩雷。小编根据销量整理了蓝牙耳机排行榜&#xff0c;一起看看最受消费者…

水务行业数智化招标采购系统建设解决方案

水务行业数智化采购解决方案 国家“十四五”规划和2035年远景目标纲要&#xff1a;提升产业链供应链现代化水平。加快数字化发展&#xff0c;推动产业数字化&#xff0c;数字产业化&#xff0c;以数字化转型整体驱动生产方式、生活方式和治理方式变革。利用数字技术重构价值链…

kafka-Producer Sender 源码分析

说明 本文基于 kafka 2.7 编写。author blog.jellyfishmix.com / JellyfishMIX - githubLICENSE GPL-2.0 Sender 类属性 public class Sender implements Runnable {private final Logger log;/*** Sender 具体用的是 KafkaClient 接口的实现类 NetworkClient, 为 Sender 提…

【算法】经典背包问题

作者&#xff1a;指针不指南吗 专栏&#xff1a;算法篇 &#x1f43e;或许会很慢&#xff0c;但是不可以停下来&#x1f43e; 文章目录 引入Dp1.01背包2.完全背包3.多重背包4.分组背包 acwing 背包问题——学习笔记 01背包、完全背包、多重背包、分组背包 引入Dp Dp问题&#…

[SUCTF 2018]GetShell

有个文件上传&#xff0c;给了部分源码 if($contentsfile_get_contents($_FILES["file"]["tmp_name"])){$datasubstr($contents,5);foreach ($black_char as $b) {if (stripos($data, $b) ! false){die("illegal char");}} } 可以知道有…

黑白照片如何变彩色?黑白照变彩色的秘诀分享。​

黑白照片如何变彩色&#xff1f;将黑白照片变成彩色可以给照片增添生动的视觉效果和真实感&#xff0c;使得人物、场景更加具体形象&#xff0c;让人们更容易与之产生共鸣和情感联系&#xff0c;此外&#xff0c;通过给黑白老照片添加颜色&#xff0c;还可以打破时间和空间的限…

社区分享|JumpServer引领我走向开源天地

编者注&#xff1a;以下内容基于山东青岛的JumpServer社区用户JonnyJ的社区分享整理而成。 “接触到JumpServer之后&#xff0c;我从一个开源受益者逐渐成长为开源的贡献者。其实我们每个人都可以成为开源贡献者&#xff0c;不局限于软件产品&#xff0c;哪怕只是你的一段共享…

K8S集群+kubeadm+flannel+docker+harbor实例

目录 第一章.环境准备 1.1.部署架构图 1.2.节点要求 1.3.部署软件 1.4.修改主机名 1.5.所有节点修改hosts文件 1.6.关闭防火墙规则&#xff0c;关闭selinux&#xff0c;关闭swap交换 1.7.调整内核参数 第二章.部署K8S集群 2.1.所有节点安装docker 2.2.所有节点安装ku…

KVM管理-快照

KVM管理-快照 创建快照 为虚拟机vm1创建一个快照 [rootmyserver ~]# virsh snapshot-create-as vm1 vm1.snap Domain snapshot vm1.snap created快照只能使用qcow2创建&#xff0c;raw格式一般无法创建快照 查看磁盘镜像信息 [rootmyserver ~]# qemu-img info /var/lib/lib…

方案设计——食物测温仪方案

食物测温仪&#xff0c;在食物烹饪时&#xff0c;温度和时间至关重要&#xff0c;所以食物测温仪孕育而生&#xff0c;当用户使用时只需将食物测温仪的探头插入食物中&#xff0c;即刻能得到当前食物温度数据&#xff0c;不必用经验判断。做为一款食物测温仪&#xff0c;运用场…

Spring Boot :统一功能处理

在用户登陆验证的业务中&#xff0c;如果只是使用Spring AOP的话&#xff0c;session无法获取的&#xff0c;还有各种参数&#xff08;request等&#xff09;很难获取&#xff0c;这时候Spring拦截器就发挥了重大的作用了。 1.Spring 拦截器 创建拦截器分俩步&#xff1a;1.创…