当前位置: 首页 > article >正文

GitLab搭建与使用(SSH和Docker)两种方式

前言

  • 目前公共的代码仓库有很多,比如:git、gitee等等仓库
  • 但是我们在公司中,还是要搭建属于本公司自己的一个代码仓库,原因有如下几点
    1. 代码私密性,我们公司开发的代码保密性肯定一级重要,那么我们放到公网上,放到别人的仓库里,保密性得不到保证
    2. 权限管理,虽然这些开源的代码仓库上也有权限管理,但是人数一旦多起来,就需要收费
  • 开源的仓库我们平时自己学习测试用一用即可。
  • GitLab在中国叫极狐:GitLab-10万企业使用的一站式DevOps平台_GitLab中文官网,下面我们分别演示如下两种搭建方式
    1. ssh中搭建
    2. 使用Docker镜像安装,如果没有学习过Docker的,那么可以查看Docker-初级安装及使用-CSDN博客,以及Docker-高级使用-CSDN博客,依次学习
  • 下面,我们在VMware虚拟机中演示
  • 注意:部署我们GitLab的服务器,在部署时EXTERNAL_URL的值尽量使用固定IP,或固定域名绑定,因为页面进行跳转的时候,会获取EXTERNAL_URL+/xxx/xxx进行跳转,如果IP改了,EXTERNAL_URL没改,那么会有很多跳转操作失败

一、在ssh中搭建与卸载

1、安装

  • 前置要求

    1. GitLab启动包含多个程序,比如nginx、postgresql、redis等程序,所以启动起来比较占用内存要求运行内存必须>4G,使用free -h命令可以查看系统可用内存,否则会启动不成功

      在这里插入图片描述

  1. 系统内核至少在3.10以上,使用uname -r命令可以查看系统内核版本

    在这里插入图片描述

  1. 一下命令皆在root权限中执行

  2. 服务器上80端口不能被占用

1.1、安装依赖

# 更新yum源
yum update -y
# 安装基础环境  基本自带,如果提示已经安装,则不需要管
yum install -y curl policycoreutils-python openssh-server perl
# 启动并打开开机自启 sshd
systemctl enable sshd
systemctl start sshd# 开放防火墙端口
firewall-cmd --permanent --add-service=http
firewall-cmd --permanent --add-service=https
firewall-cmd --permanent --add-service=ssh
firewall-cmd --reload

在这里插入图片描述

1.2、配置镜像

  • 过程时间可能比较长,请耐心等待(大概3-5分钟)…
curl -fsSL https://packages.gitlab.cn/repository/raw/scripts/setup.sh | /bin/bash

在这里插入图片描述

1.3、开始安装

  • 除非你在安装过程中制定了自定义密码,否则将随机生成一个密码并存出在etc/gitlab/initial_root_password文件中(出于安全原因,24小时候,此文件会被第一次gitlab-ctl reconfigure自动删除)
  • 因此若使用随机密码登录,建议安装成功初始登录成功之后,立即修改初始密码。使用此密码和用户名root登录
  • 安装过程,可能出现硬盘内存不够(可使用df -h来查看内存信息),然后给虚拟机硬盘扩容即可
  • 注意:安装过程可能较长,请耐心等待(确实挺久的,刷会抖音吧)
# 我这里安装的是jh的版本,你们可以安装 gitlab-ce 版本,注意下面命令也都要改成gitlab-ce
EXTERNAL_URL="http://你的虚拟机IP或域名" yum install -y gitlab-jh# 我执行的命令:EXTERNAL_URL="http://192.168.71.111" yum install -y gitlab-jh

直到看到如下界面,代表下载完成

在这里插入图片描述

1.4、GitLab常用命令

  • 启动所有gitlab组件:gitlab-ctl start
  • 停止所有gitlab组件:gitlab-ctl stop
  • 重启所有gitlab组件:gitlab-ctl restart
  • 查看服务状态:gitlab-ctl status
  • 启动服务(修改完下面文件后,先执行这个命令):gitlab-ctl reconfigure
  • 修改默认的配置文件:vi /etc/gitlab/gitlab.rb
  • 查看日志:gitlab-ctl tail

1.5、启动GitLab

  • 我们要先使用gitlab-ctl reconfigure重新加载配置,再使用上面的命令gitlab-ctl start启动服务

    在这里插入图片描述

  • 注意:

    1. 首次启动后,完成后,我们访问http://虚拟机iP:80,然后会打开一个页面,上面会写,首次打开后完全启动会有几分钟的启动时间,上面写一个502,不要慌。等待即可,页面会自动刷新

      在这里插入图片描述

  1. 如果很久了,还没刷出来,那么我们使用gitlab-ctl tail命令,查看日志,是否有error字样等信息

  2. 当我们出现报错:badgateway: failed to receive response: dial unix /var/opt/gitlab/gitlab-rails/sockets/gitlab.socket: connect: connection refused时,可以检查宿主机ip:8080查看是否可以打开东西,如果可以则关闭掉,否则我们的gitlab页面会一直显示502

  3. 当页面刷新出来内容后,会需要我们进行登录,账号默认为root,密码则可以使用cat /etc/gitlab/initial_root_password命令,在打印内容中查看

  4. 当我们登录进去后,要先修改root用户密码,否则这个随机密码会在24小时候被删掉

在这里插入图片描述

2、卸载

  1. 停止GitLab服务
  2. 卸载GitLab包
  3. 清理相关文件和目录
  4. 检查剩余文件并删除

使用SSH安装会比较难卸载,我下面的步骤可能也会有遗漏没删除的目录,所以建议使用第二章的使用Docker安装,容器有单独的文件系统,要删除GitLab,只需删除容器即可。

# 停止GitLab
gitlab-ctl stop# 卸载软件包
yum remove gitlab-jh# 删除配置和数据文件
rm -rf /etc/gitlab
rm -rf /var/opt/gitlab
rm -rf /var/log/gitlab# 移除 GitLab 仓库
rm /etc/yum.repos.d/gitlab-jh.repo# 查看GitLab进程
ps aux | grep gitlab# 删掉第一个进程
kill -9 第一个进程ID# 自动清理不再需要的依赖包和系统资源
yum autoremove

二、在Docker中搭建

  • 我个人非常建议在Docker中安装,因为方便安装与管理,以及一键删除
  • 官网安装教程:极狐GitLab Docker 镜像 | 极狐GitLab
  • 如果使用Docker安装的话,内存一定要>6G,因为Docker也会占用内存空间
  • 我这里就不演示配置Docker镜像源什么操作了,有需要可以查看Docker-初级安装及使用

1、命令

  • 我这里直接执行run命令,如果本地没有镜像,则会自动安装命令中指定的镜像以及版本号拉取
  • 命令解析如下
    • -d:后台运行
    • -h:指定容器内的主机名
    • -p:指定端口映射,可以指定多个
    • --name:指定容器名称
    • --restart always:跟随Docker一起启动,无论容器因何原因停止,Docker 都会自动重启它
    • --volume:指定容器数据卷映射,可以指定多个
      • /var/opt/gitlab:用于存储应用程序数据。
      • /var/log/gitlab:用于存储日志。
      • /etc/gitlab:用于存储极狐GitLab 配置文件。
    • --shm-size:为容器设置共享内存大小为 256MB。
    • 镜像名:版本号
# 定义环境变量,后面可以使用$GITLAB_HOME来取值
export GITLAB_HOME=/srv/gitlabdocker run -d \-h gitlab-container \-p 443:443 -p 80:80 -p 22:22 \--name gitlab \--restart always \--volume $GITLAB_HOME/config:/etc/gitlab \--volume $GITLAB_HOME/logs:/var/log/gitlab \--volume $GITLAB_HOME/data:/var/opt/gitlab \--shm-size 256m \gitlab/gitlab-ce:latest# 如下是我的命令,我这里没用环境变量 上面-p 443:443是邮件端口我这里没用到,所以去掉了
docker run -d \-h gitlab.example.com \-p 80:80 -p 2222:22 \--name gitlab \--restart always \--volume /mydir/gitlab/config:/etc/gitlab \--volume /mydir/gitlab/logs:/var/log/gitlab \--volume /mydir/gitlab/data:/var/opt/gitlab \--shm-size 256m \gitlab/gitlab-ce:latest

在这里插入图片描述

2、配置

  • 上面配置完成后,虽然容器可以正常启动了,但是我们gitlab上创建项目的时候,生成项目的URL访问地址是按容器的hostname来生成的,也就是容器的id。作为gitlab服务器,我们需要一个固定的URL访问地址,于是需要配置gitlab.rb文件
  • 这个文件在容器内的/etc/gitlab中,但是我上面启动命令挂载到本地的/mydir/gitlab/config中,所以我们修改本地的文件即可
vim /mydir/gitlab/config/gitlab.rb# 配置http协议所使用的访问地址,不加端口号默认为80,这里是指定容器内gitlab的,我们上面启动命令监听的就是80,所以这里用80就行
external_url 'http://宿主机IP'# 配置ssh协议所使用的访问地址和端口
gitlab_rails['gitlab_ssh_host'] = '宿主机IP'
gitlab_rails['gitlab_shell_ssh_port'] = 22 # 上面监听的是容器内的22端口#保存配置文件并退出
:wq

在这里插入图片描述

在这里插入图片描述

3、访问页面

  • 我们在自己电脑浏览器访问http://宿主机IP:7777即可打开页面。

  • 如果打开以后显示502不要慌,GitLab第一次加载会进行初始化

  • 初始账号为root,密码在cat /mydir/gitlab/config/initial_root_password中(注意,前提条件是你运行命令中配置的容器卷目录/etc/gitlab是映射到本地的/mydir/gitlab/config中的)

    在这里插入图片描述

  • 最后在页面输入账号:root,密码你修改的密码即可

在这里插入图片描述

三、GitLab使用

  • 上面,我们使用两种方式皆进入页面了,下面我们主要讲解部分重要的页面操作

1、其他项

1.1、设置中文显示

  • 我们登录进页面后,会显示英文页面,我们可以在设置中设置为中文
1.1.1、Edit profile

在这里插入图片描述

1.1.2、Preferences

在这里插入图片描述

1.1.3、Localization->Language

右侧鼠标滚轮滚到下面查找

在这里插入图片描述

1.1.4、Save changes

在这里插入图片描述

1.1.5、F5刷新页面即可

在这里插入图片描述

2、用户

  • 如果你是首次使用随机生成的密码登录,那么你首先要做的就是修改当前登录用户密码,不然随机密码文件会在24小时被删掉,请看2.1小节
  • 如果公司的GitLab是放在内网中的(一般都是),那么可以不关闭注册功能,如果是放外网上的,那么要关闭这个功能请看2.2小节

2.1、修改当前登录用户密码

2.1.1、密码

在这里插入图片描述

2.1.2、输入新密码
  • 注意查看表单校验
  • 输入完成后点击 保存密码
  • 点击完成后,会自动重新退出登录,并且跳到登录页面重新登录

在这里插入图片描述

2.1.3、完成

在这里插入图片描述

2.2、禁用注册功能

2.2.1、点击管理员

在这里插入图片描述

2.2.2、左侧找到设置->通用

在这里插入图片描述

2.2.3、右侧找到注册限制

在这里插入图片描述

2.2.4、关闭注册功能

在这里插入图片描述

2.3、创建新用户

  • 要注册新用户,首先要登录管理员(root)账户
2.3.1、点击管理员

在这里插入图片描述

2.3.2、点击左侧菜单栏的概览->用户

在这里插入图片描述

2.3.3、右侧点击新用户

在这里插入图片描述

2.3.4、填写表单内容

在这里插入图片描述

2.3.5、编辑设置新用户密码

在这里插入图片描述

在这里插入图片描述

2.3.6、先打开另一个浏览器访问GitLab

在这里插入图片描述

2.3.7、输入新密码

点击Update password后,会再次跳转登录页面,重新登录

在这里插入图片描述

2.3.8、登录进来后,依旧先修改中文

请查看第三章节的1.1小节(设置中文显示)

3、代码

3.1、创建群组

  • 创建仓库的前提要先创建群组

  • 群组就像是一个目录,一般一个公司会涉及到多个项目,然而多个项目可能会使用微服务,涉及到多个服务代码,那么就可以根据项目去分组

  • 菜单栏点击左侧群组导航,然后新建群组

    在这里插入图片描述

  • 然后在打开的页面再点击创建群组

  • 然后在表单中输入群组信息

    在这里插入图片描述

  • 然后再跳转的页面中点击创建项目,或左上角+点击创建项目

    在这里插入图片描述

3.2、页面创建仓库

3.2.1、点击左上角+号,创建仓库

在这里插入图片描述

3.2.2、创建空白项目

在这里插入图片描述

3.2.3、输入表单内容,创建项目

在这里插入图片描述

3.2.4、选择对应选项卡,查看对应操作命令
  • 我这里已经本地创建了一个SpringBoot项目了,目的要把这个项目提交上去

  • 然后我们先选择对应选项卡,执行对应操作的命令

  • 注意:根据下面命令执行可能会报错,具体命令请查看3.3.4

    在这里插入图片描述

3.2.5、执行操作步骤
  1. 上面命令执行可能会报错,如果报错,请按照下面第4步命令重新执行

  2. 进入要提交项目目录

  3. 右键,Git Bash Here,打开Git命令操作窗口

    在这里插入图片描述

  1. 依次执行下面命令

    # 生成.git文件
    git init# 指定远程仓库地址,这条命令要复制页面上对应那一条,对应到你的仓库地址URL
    git remote add origin http://192.168.71.111/da-mi/dami-user.git# 将未跟踪的文件添加到跟踪内
    git add .# 将跟踪的文件添加到本地暂存区,并且添加提交描述
    git commit -m "init"# 将暂存区的提交,同步到远程仓库的master分支上
    git push -u origin master
    

    在这里插入图片描述

  1. 最后,我们打开页面,刷新当前页面,即可查看到提交的代码

    在这里插入图片描述

3.3、赋予用户项目权限

  • 2.3小节我们创建了新用户,第3.2小节我们上传了我们的项目代码
  • 那么我们就要给新用户来赋予新项目的代码权限了,使其可以pull/push操作
  • 权限分为群组成员项目成员
    • 群组成员:代表用户可以查看这个组da-mi中所有项目
    • 项目成员:代表用户只能查看这个项目DaMi-User
3.3.1、打开另一个浏览器登录新用户账号

在这里插入图片描述

3.3.2、打开原来浏览器root账户,点击左下角管理员

在这里插入图片描述

3.3.3、左侧概览->项目

在这里插入图片描述

3.3.4、点击右侧项目名称

在这里插入图片描述

3.3.5、右侧会有两栏
  • 我们这里赋予项目权限,只针对这一个项目
  • 点击项目成员右侧的管理权限

在这里插入图片描述

3.3.6、然后点击邀请成员
  • 我下面这两个用户拥有da-mi组的权限,所以也拥有组内所有项目的权限

在这里插入图片描述

3.3.7、下拉框中选择新用户名(可多选)

在这里插入图片描述

3.3.8、角色我们一般赋予开发者

在这里插入图片描述

3.3.9、如果有日期限制选择到期时间

在这里插入图片描述

3.3.10、点击邀请后,自动刷新页面,查看项目成员信息

在这里插入图片描述

3.3.11、另一个浏览器新用户刷新页面,点击左侧项目,右侧选择成员查看操作项目

在这里插入图片描述

相关文章:

GitLab搭建与使用(SSH和Docker)两种方式

前言 目前公共的代码仓库有很多,比如:git、gitee等等仓库但是我们在公司中,还是要搭建属于本公司自己的一个代码仓库,原因有如下几点 代码私密性,我们公司开发的代码保密性肯定一级重要,那么我们放到公网上&#xff0c…...

Linux数据库篇、第零章_MySQL30周年庆典活动

MySQL考试报名网站 Oracle Training and Certification | Oracle 中国 活动时间 2025年 MySQL的30周年庆典将于2025年举行。MySQL于1995年首次发布,因此其30周年纪念日是2025年。为了庆祝这一里程碑,MySQL将提供免费的课程和认证考试,活动…...

Windows ABBYY FineReader 16 Corporate 文档转换、PDF编辑和文档比较

作为一名合格的工人,日常工作肯定离不开PDF文件,所以今天给大家找来了一款全新的PDF处理工具,保证能给你带来不一样的体验。 软件介绍 这是一个全能型的PDF处理器,集优秀的文档转换、PDF编辑和文档比较等功能于一身,…...

设计模式简述(十九)桥梁模式

桥梁模式 描述基本组件使用 描述 桥梁模式是一种相对简单的模式,通常以组合替代继承的方式实现。 从设计原则来讲,可以说是单一职责的一种体现。 将原本在一个类中的功能,按更细的粒度拆分到不同的类中,然后各自独立发展。 基本…...

【每日一题 | 2025年5.5 ~ 5.11】搜索相关题

个人主页:Guiat 归属专栏:每日一题 文章目录 1. 【5.5】P3717 [AHOI2017初中组] cover2. 【5.6】P1897 电梯里的尴尬3. 【5.7】P2689 东南西北4. 【5.8】P1145 约瑟夫5. 【5.9】P1088 [NOIP 2004 普及组] 火星人6. 【5.10】P1164 小A点菜7. 【5.11】P101…...

C语言速成之08循环语句全解析:从基础用法到高效实践

C语言循环语句全解析:从基础用法到高效实践 大家好,我是Feri,12年开发经验的程序员。循环语句是程序实现重复逻辑的核心工具,掌握while、do-while、for的特性与适用场景,能让代码更简洁高效。本文结合实战案例&#xf…...

多模态大语言模型arxiv论文略读(六十九)

Prompt-Aware Adapter: Towards Learning Adaptive Visual Tokens for Multimodal Large Language Models ➡️ 论文标题:Prompt-Aware Adapter: Towards Learning Adaptive Visual Tokens for Multimodal Large Language Models ➡️ 论文作者:Yue Zha…...

云计算-容器云-部署CICD-jenkins连接gitlab

安装 Jenkins 将Jenkins部署到default命名空间下。要求完成离线插件的安装,设置Jenkins的登录信息和授权策略。 上传BlueOcean.tar.gz包 [root@k8s-master-node1 ~]#tar -zxvf BlueOcean.tar.gz [root@k8s-master-node1 ~]#cd BlueOcean/images/ vim /etc/docker/daemon.json…...

精讲C++四大核心特性:内联函数加速原理、auto智能推导、范围for循环与空指针进阶

前引:在C语言长达三十余年的演进历程中,每一次标准更新都在试图平衡性能与抽象、控制与安全之间的微妙关系。从C11引入的"现代C"范式开始,开发者得以在保留底层控制能力的同时,借助语言特性大幅提升代码的可维护性与安全…...

【HarmonyOS 5】鸿蒙中常见的标题栏布局方案

【HarmonyOS 5】鸿蒙中常见的标题栏布局方案 一、问题背景: 鸿蒙中常见的标题栏:矩形区域,左边是返回按钮,右边是问号帮助按钮,中间是标题文字。 那有几种布局方式,分别怎么布局呢?常见的思维…...

Docker 部署 - Crawl4AI 文档 (v0.5.x)

Docker 部署 - Crawl4AI 文档 (v0.5.x) 快速入门 🚀 拉取并运行基础版本: # 不带安全性的基本运行 docker pull unclecode/crawl4ai:basic docker run -p 11235:11235 unclecode/crawl4ai:basic# 带有 API 安全性启用的运行 docker run -p 11235:1123…...

QuecPython+Aws:快速连接亚马逊 IoT 平台

提供一个可接入亚马逊 Iot 平台的客户端,用于管理亚马逊 MQTT 连接和影子设备。 初始化客户端 Aws class Aws(client_id,server,port,keep_alive,ssl,ssl_params)参数: client_id (str) - 客户端唯一标识。server (str) - 亚马逊 Iot 平台服务器地址…...

内存安全暗战:从 CVE-2025-21298 看 C 语言防御体系的范式革命

引言 2025 年 3 月,当某工业控制软件因 CVE-2025-21298 漏洞遭攻击,导致欧洲某能源枢纽的电力调度系统瘫痪 37 分钟时,全球网络安全社区再次被拉回 C 语言内存安全的核心战场。根据 CISA 年度报告,68% 的高危漏洞源于 C/C 代码&a…...

SpringCloud Gateway知识点整理和全局过滤器实现

predicate(断言): 判断uri是否符合规则 • 最常用的的就是PathPredicate,以下列子就是只有url中有user前缀的才能被gateway识别,否则它不会进行路由转发 routes:- id: ***# uri: lb://starry-sky-upmsuri: http://localhost:9003/predicate…...

全球实物文件粉碎服务市场洞察:合规驱动下的安全经济与绿色转型

一、引言:从纸质堆叠到数据安全的“最后一公里” 在数字化转型浪潮中,全球企业每年仍产生超过1.2万亿页纸质文件,其中包含大量机密数据、客户隐私及商业敏感信息。据QYResearch预测,2031年全球实物文件粉碎服务市场规模将达290.4…...

冒泡排序的原理

冒泡排序是一种简单的排序算法,它通过重复地遍历待排序的列表,比较相邻的元素并交换它们的位置来实现排序。具体原理如下: 冒泡排序的基本思想 冒泡排序的核心思想是通过相邻元素的比较和交换,将较大的元素逐步“冒泡”到列表的…...

Day22 Kaggle泰坦尼克号训练实战

​ 作业 自行学习参考如何使用kaggle平台,写下使用注意点,并对下述比赛提交代码 kaggle泰坦里克号人员生还预测 一、流程 思路概述 数据加载 :读取泰坦尼克号的训练集和测试集。数据预处理 :处理缺失值、对分类变量进行编码、…...

深入浅出之STL源码分析7_模版实例化与全特化

1.引言 显示实例话和全特化的区别,之前我们在讨论类模版的时候,讨论过,他俩不是同一个概念,类模版中你如果全特化了,还是需要实例化才能生成代码,但是对于函数模版,这个是不同的,函…...

CAPL -实现SPRMIB功能验证

系列文章目录 抑制肯定响应消息指示位(SPRMIB) 二十一、CANdelaStudio深入-SPRMIB的配置 文章目录 系列文章目录一、SPRMIB是什么?二、SetSuppressResp(long flag)三、GetSuppressResp 一、SPRMIB是什么? 正响应:表示…...

2025 Mac常用软件安装配置

1、homebrew 2、jdk 1、使用brew安装jdk: brew install adoptopenjdk/openjdk/adoptopenjdk8 jdk默认安装位置在 /Library/Java/JavaVirtualMachines/adoptopenjdk-8.jdk/Contents/Home 目录。 2、配置环境变量: vim ~/.zshrc# Jdk export JAVA_HOM…...

容器技术 20 年:颠覆、重构与重塑软件世界的力量

目录 容器技术发展史 虚拟化技术向容器技术转变 Docker的横空出世 容器编排技术与Kubernetes 微服务的出现与Istio 工业标准的容器运行时 容器技术与 DevOps 的深度融合​ 无服务架构推波助澜 展望未来发展方向 从 20 世纪硬件虚拟化的笨重,到操作系统虚拟…...

cmake:test project

本文主要探讨cmake在测试和项目中的应用。 add_test add_test(NAME <name> COMMAND <command> [<arg>...] [CONFIGURATIONS <config>...] [WORKING_DIRECTORY <dir>] [COMMAND_EXPAND_LISTS])  add_test(NAME test_uni COMMAND $<TARGET_F…...

C++开发过程中的注意事项详解

目录 C++开发过程中的注意事项详解 一、内存管理:避免泄漏与资源浪费 1.1 使用智能指针管理动态内存 1.2 避免手动内存管理的陷阱 1.3 利用RAII机制管理资源 1.4 容器与内存分配 二、安全性:防御攻击与未定义行为 2.1 输入验证与安全编码 2.2 使用安全的通信协议 2…...

OpenWrt开发第8篇:树莓派开发板做无线接入点

文/指尖动听知识库-谷谷 文章为付费内容,商业行为,禁止私自转载及抄袭,违者必究!!! 文章专栏:Openwrt开发-基于Raspberry Pi 4B开发板 树莓派开发板作为无线接入点的时候,可以通过电脑和手机打开WiFi功能搜索到相应打开的WiFi; 1 通过Web操作界面开启wifi 1...

Leetcode (力扣)做题记录 hot100(42,104,226,101)

力扣第42题&#xff1a;接雨水 42. 接雨水 - 力扣&#xff08;LeetCode&#xff09; 左边遍历一次记录左侧最大值 右边同理&#xff0c;最后遍历一次 左侧右侧最小值减去当前值即可。 class Solution {public int trap(int[] height) {int n height.length;int[] leftMax …...

第六天:Java数组

数组 数组概述 数组是相同类型数据的有序集合。数组中的元素可以是任意数据类型&#xff0c;包括基本类型和引用类型数组描述是相同类型的若干个数据&#xff0c;按照一定的先后顺序排列组合而成。数组下标从0开始。 数组声明与创建 数组的声明 int[] nums;//声明一个数组…...

李沐动手深度学习(pycharm中运行笔记)——09.softmax回归+图像分类数据集+从零实现+简洁实现

09.softmax回归图像分类数据集从零实现简洁实现&#xff08;与课程对应&#xff09; 目录 一、softmax回归 1、回归 vs 分类 2、经典分类数据集&#xff1a; 3、从回归到分类——均方损失 4、从回归到多类分类——无校验比例 5、从回归到多类分类——校验比例 6、softmax和…...

Kubernetes生产实战(二十):容器大镜像拉取优化指南

在 Kubernetes 中优化大容器镜像的拉取速度&#xff0c;需要结合 镜像构建策略、集群网络架构 和 运行时配置 多方面进行优化。以下是分步解决方案&#xff1a; 一、镜像构建优化&#xff1a;减小镜像体积 1. 使用轻量级基础镜像 替换 ubuntu、centos 为 alpine、distroless …...

Qt获取CPU使用率及内存占用大小

Qt 获取 CPU 使用率及内存占用大小 文章目录 Qt 获取 CPU 使用率及内存占用大小一、简介二、关键函数2.1 获取当前运行程序pid2.2 通过pid获取运行时间2.3 通过pid获取内存大小 三、具体实现五、写在最后 ​ 一、简介 近期在使用软件的过程中发现一个有意思的东西。如下所示&a…...

8. HTML 表单基础

表单是网页开发中与用户交互的核心组件,用于收集、验证和提交用户输入的数据。本文将基于提供的代码素材,系统讲解 HTML 表单的核心概念、常用控件及最佳实践。 一、表单的基本结构 一个完整的 HTML 表单由以下部分组成: <form action="/submit" method=&quo…...