用Git管理你的服务器配置文件与自动化脚本:版本控制、变更追溯、团队协作与安全回滚的运维之道
更多服务器知识,尽在hostol.com
咱们在和服务器打交道的日子里,是不是经常要和各种各样的配置文件(Nginx的、Apache的、PHP的、防火墙的……)还有自己辛辛苦苦写下的自动化脚本打交道?那你有没有遇到过这样的“抓狂”时刻:
- 为了上线一个新功能,小心翼翼改了个配置文件,结果手一抖,网站“Duang”一下就挂了,冷汗直流,半天想不起来之前是啥样的?
- 勤勤恳恳地备份配置文件,服务器上堆满了
nginx.conf.bak20250530
,nginx.conf.bak20250530_final
,nginx.conf.bak20250530_really_final
……找个特定版本比大海捞针还难? - 团队里好几个人都要改配置,结果张三改了李四不知道,王五又给覆盖了,最后乱成一锅粥?
- 好不容易写了个牛X的自动化脚本,迭代了几个版本后,突然发现还是上上个版本最稳定,想找回来却发现“芳踪难觅”?
如果这些场景让你“膝盖中箭”,那么恭喜你,今天Hostol就要为你引荐一位能帮你彻底摆脱这些困扰的“超级代码管家”——Git!没错,就是那个开发者们天天挂在嘴边的版本控制神器!“等等,”你可能会说,“Git不是管代码的吗?跟我们运维有啥关系?” 关系大了去了!对于我们服务器上那些至关重要的、以文本形式存在的配置文件和脚本来说,Git同样是保障它们安全、有序、可追溯的“定海神针”!准备好了吗?让我们一起探索Git在运维领域的“独门心法”!
为啥要请Git这位“管家”出山?—— 它带来的“超能力”可不少!
你可能会想,我平时改配置,复制粘贴备份一下不也行吗?何必折腾Git这么个“大家伙”?少年,此言差矣!一旦你体验过Git带来的“超能力”,就再也回不去了:
- 版本控制与历史追溯 (变更追溯):你的“时光机”与“黑匣子” 每一次你对配置文件的修改(哪怕只改了一个字母),Git都能帮你完整地记录下来:谁改的?什么时候改的?改了哪些地方?如果你在提交(Commit)时写了清晰的备注,还能知道“为什么这么改”。这就像给你的配置文件配备了一台“时光机”,可以随时“穿越”回任何一个历史版本;同时它也是个“黑匣子”,记录了每一次“飞行数据”,出了问题方便追根溯源。再也不用靠那堆
.bak
文件猜谜了! - 安全回滚 (安全回滚):一键“反悔”,轻松救场 “手滑”改错配置,服务起不来了?别慌!有了Git,你可以从容地找到上一个稳定运行的版本,一键“回滚”(Revert或Reset),让一切恢复如初。这简直就是运维界的“后悔药”,关键时刻能救命!
- 分支管理 (Branching):安全的“沙盒实验室” 想尝试一个新的Nginx配置方案,或者给自动化脚本加个实验性功能,但又怕影响线上稳定?Git的分支功能就是你的“沙盒实验室”!你可以创建一个新的“分支”(Branch),在这个分支上随心所欲地修改、测试,完全不影响主线上稳定运行的配置。等测试成熟了,再把这个分支的修改“合并”(Merge)回主线。这就像在平行宇宙里做实验,安全又高效!
- 团队协作 (团队协作):告别“单打独斗”,拥抱“集体智慧” 如果是一个团队共同维护服务器,Git更是不可或缺。大家可以把配置仓库(Repository)托管在像GitHub、GitLab、Gitea(可以自建)这样的平台上。每个人在自己的本地修改,然后通过“推送”(Push)和“拉取”(Pull)来同步代码。更棒的是,可以用“合并请求”(Merge Request / Pull Request)机制,让团队成员在代码合并到主线前进行审查(Code Review),大大减少了出错的概率,提升了配置质量。
- 审计与合规:有据可查,责任清晰 所有的变更都有记录,这对于安全审计和满足合规性要求非常有帮助。谁在什么时候做了什么改动,一目了然。
- 自动化部署的基石:很多现代化的运维自动化工具(如Ansible, Jenkins, GitLab CI/CD)都能直接从Git仓库拉取配置和脚本,实现配置的自动化部署和更新。Git是DevOps实践流程中的重要一环。
怎么样,是不是感觉Git这位“管家”的超能力还挺诱人的?
搭建你的“配置指挥中心”——Git环境初始化
心动不如行动!咱们来看看怎么把Git请进我们的服务器配置管理中。
1. “指挥中心”选址:Git仓库放哪里?
你有几个选择:
- 选项一:托管在中央代码平台(推荐!): 把你的配置仓库托管在像GitHub, GitLab, Bitbucket这样的公共代码托管平台(它们都提供免费的私有仓库额度),或者自建一个Gitea、GitLab CE这样的私有Git服务器。这是团队协作的最佳选择,有漂亮的Web界面方便管理和审查。记住,配置文件可能包含敏感信息,务必使用私有仓库!
- 选项二:在专用的“管理服务器”上自建裸仓库: 如果你不想用第三方平台,可以在一台内部的管理服务器上创建一个“裸仓库”(Bare Repository),团队成员通过SSH协议向这个仓库推送和拉取。
- 选项三:直接在每台服务器上初始化(不推荐用于集中管理,但适合单人学习): 理论上你可以在服务器的
/etc
目录(极其不推荐,风险太高!)或者特定的应用配置目录(如/etc/nginx/
)直接初始化一个Git仓库。但这种方式不利于多服务器的统一管理和版本同步,更适合个人在单机上对少量配置进行版本控制的探索。
Hostol建议: 为了安全、便捷和未来的扩展性,强烈推荐使用一个中央的、**私有的**Git仓库(比如GitHub私有库或自建Gitea)。
2. 服务器上的准备工作
- 安装Git: 大部分Linux发行版都自带Git,或者可以通过包管理器轻松安装。
# Debian/Ubuntu sudo apt update && sudo apt install git -y # CentOS/RHEL/AlmaLinux/Rocky sudo dnf install git -y # 或者 sudo yum install git -y
- 创建本地配置“工作区”: 在你的服务器上(或者你本地用于管理配置的机器上),创建一个专门的目录来存放从中央仓库克隆下来的配置文件。比如:
mkdir -p /opt/server_configs_repo # 或者放在用户家目录下,比如 ~/git_repos/server_configs cd /opt/server_configs_repo
- 克隆中央仓库:
git clone git@github.com:yourusername/your-private-server-configs.git . # 或者用HTTPS方式,但这可能需要你每次push/pull都输入密码,不如SSH密钥方便 # git clone https://github.com/yourusername/your-private-server-configs.git .
(那个.
表示克隆到当前目录。) - 规划仓库目录结构: 在你的Git仓库里,最好也分门别类地组织配置文件,比如:
server_configs_repo/ ├── nginx/ │ ├── conf.d/ │ └── sites-available/ │ └── my_website.conf ├── apache2/ │ └── sites-available/ ├── scripts/ │ ├── backup.sh │ └── deploy_app.sh ├── postfix/ │ └── main.cf └── .gitignore # 这个文件很重要!后面说
运维“Git三板斧”:日常配置管理的“舞蹈动作”
环境搭好了,接下来就是咱们系统管理员的日常“Git之舞”了。记住这几个核心舞步,你就能优雅地管理配置了。
舞步一:git pull
—— “同步一下,看看风向!”
在开始对任何配置文件进行修改之前,务必、一定、肯定要先从中央仓库拉取最新的改动! 就像开会前先同步一下会议纪要,避免你基于过时的信息做决策。
cd /opt/server_configs_repo # 进入你的配置仓库工作目录
git pull origin main # 假设你的主分支是main,远程是origin
这能确保你的本地工作区是最新的,避免不必要的合并冲突。
舞步二:修改 -> git add
-> git commit
—— “我改好了,记一笔!”
- 修改文件: 用你喜欢的编辑器(
nano
,vim
等)去修改/opt/server_configs_repo
目录下的配置文件。 git add <文件名或目录名>
(暂存改动): 告诉Git,“这个文件的改动,我等会儿要一起提交”。git add nginx/sites-available/my_website.conf # 或者,如果你确定当前目录下所有改动都要提交(要小心,别add了不想提交的!) # git add .
git commit -m "清晰的提交信息"
(正式提交): 把暂存的改动正式记录到你的本地仓库历史中。提交信息(commit message)写得好不好,直接体现了你的专业素养! 一定要清晰、简洁地说明这次改动是“做了什么”以及“为什么这么做”。git commit -m "Nginx: 为my_website.com增加SSL证书配置并启用HTTP/2" # 或者更详细的多行提交信息 (用 git commit 不带-m会打开编辑器让你写)
舞步三:git push
—— “搞定收工,同步到中央!”
本地提交完成后,把这些改动推送到中央仓库,让团队其他成员(或者你其他服务器上的同步脚本)也能看到和获取到。
git push origin main # 再次假设主分支是main
关键的“最后一公里”:如何把Git里的配置应用到服务器“现实世界”?
Git仓库里的配置文件只是“蓝图”,它并不会自动跑到服务器上那些真正生效的路径(比如/etc/nginx/sites-available/
)。这是运维使用Git与纯软件开发最大的不同点之一,我们必须有一个“部署”或“应用”的步骤。
有几种常见的方法,从简单到复杂:
- A. 手动复制 + 重载服务 (最直接,适合单机或少量机器): 在你服务器上
git pull
更新了本地仓库后,手动把修改过的文件复制到它应该在的系统路径,然后重载相关服务。cd /opt/server_configs_repo git pull origin main sudo cp nginx/sites-available/my_website.conf /etc/nginx/sites-available/ sudo nginx -t # 测试Nginx配置是否正确 sudo systemctl reload nginx
- B. 简单的部署脚本 (推荐入门使用): 可以在你的Git仓库里放一个部署脚本(比如
deploy_configs.sh
),这个脚本负责把仓库里的相关文件复制或软链接到系统中的正确位置,并负责测试配置、重载服务。每次git pull
之后,执行一下这个脚本。 deploy_configs.sh 示例 (极简版,实际要更完善):#!/bin/bash CONFIG_REPO_PATH="/opt/server_configs_repo" echo "Deploying Nginx configs..." sudo cp ${CONFIG_REPO_PATH}/nginx/sites-available/* /etc/nginx/sites-available/ # 可能还需要创建软链接到 sites-enabled if sudo nginx -t; then sudo systemctl reload nginx echo "Nginx reloaded successfully." else echo "ERROR: Nginx config test failed! Not reloading." exit 1 fi # ...可以继续添加其他服务的部署逻辑... echo "Config deployment finished."
然后给它执行权限chmod +x deploy_configs.sh
,之后就可以git pull && ./deploy_configs.sh
了。 - C. 符号链接 (Symbolic Links - 需极度小心!): 理论上,你可以把系统里的实际配置文件(比如
/etc/nginx/nginx.conf
)直接符号链接到你Git仓库里的对应文件。这样,只要你git pull
了,线上的配置就“自动”更新了。但这种做法风险很高! 如果你拉取了一个有问题的配置,服务可能立刻就挂了,而且回滚也需要先在Git里回滚再重新让链接生效。除非你对整个流程和风险有绝对的把握,否则不推荐新手这么做,特别是对于核心服务的配置文件。 - D. 配置管理工具 (Ansible, Puppet, Chef, SaltStack - 专业团队的选择): 这才是大规模、多服务器环境下的“王者之道”。这些工具可以直接从你的Git仓库拉取配置“剧本”(Playbook/Manifest/Recipe/State),然后以幂等(idempotent,多次执行结果一致)的方式,把配置应用到成百上千台服务器上,并确保它们都处于你期望的状态。这是更高级的玩法,也是DevOps实践的核心部分。
Hostol建议: 对于个人或小团队,从“手动复制”开始理解流程,然后尽快过渡到使用“简单的部署脚本”。当你管理的服务器多起来,或者追求更高级的自动化和一致性时,就应该学习并引入配置管理工具了。
分支的智慧:在“平行时空”里大胆尝试
前面提到过分支,这是Git的一大“法宝”。想象一下,你想给Nginx尝试一个新的限流配置,但又不确定会不会影响现有业务。怎么办?
- 创建并切换到新分支:
git checkout -b feature/nginx-rate-limiting # 创建一个叫这个名字的新分支,并切换过去
- 在新分支上修改和测试: 在这个分支上,你可以大胆地修改Nginx配置,然后通过你的部署脚本(最好也有测试环境让你应用这个分支的配置)进行测试。无论你怎么改,都不会影响到
main
(主)分支上那个稳定运行的配置。 - 合并回主分支: 当你在这个分支上把新功能调通了,测试也没问题了,就可以把它合并回
main
分支了。git checkout main # 先切回主分支 git pull origin main # 确保主分支是最新 git merge feature/nginx-rate-limiting # 把你的功能分支合并进来 git push origin main # 推送到远程
如果在GitHub/GitLab这样的平台上,更推荐的做法是:把你的功能分支推送到远程 (git push origin feature/nginx-rate-limiting
),然后在平台上创建一个“合并请求”(Pull Request / Merge Request)。这样团队其他成员可以审查你的改动,讨论通过后再由你(或负责人)点击合并按钮。这大大提升了代码质量和团队协作效率。
敏感信息怎么办?—— 给你的“机密文件”上把锁
服务器配置文件里,有时候免不了会有一些敏感信息,比如数据库密码、API密钥等。这些东西,绝对、绝对、绝对不能直接以明文形式提交到Git仓库里! 哪怕是私有仓库,也有潜在的泄露风险(比如开发者电脑被黑,或者内部人员权限管理不当)。
那怎么办呢?有几种常见的处理方式:
- 1.
.gitignore
文件: 在你的仓库根目录下创建一个名为.gitignore
的文件,把那些包含敏感信息的文件名(比如secrets.ini
,.env
)或者符合特定模式的文件(比如所有*.pem
私钥文件)写进去,每行一个。Git就会自动忽略这些文件,不会把它们加入版本控制。 - 2. 配置文件模板化 + 外部注入: 这是更推荐的做法。
- 在Git仓库里放一个配置文件的“模板”(比如
database.conf.template
),里面用占位符(如DB_PASSWORD={{MYSQL_PASSWORD}}
)代替敏感信息。 - 在服务器的某个安全位置(比如一个权限设置为只有特定用户可读的
.env
文件,并且这个.env
文件本身被.gitignore
忽略掉),存放真实的敏感值。 - 你的部署脚本在从Git仓库拉取配置模板后,读取这个
.env
文件里的真实值,替换掉模板里的占位符,生成最终的配置文件,然后再把它放到系统生效的路径。
- 在Git仓库里放一个配置文件的“模板”(比如
- 3. 使用专门的密钥管理工具: 对于更复杂的场景,可以使用像HashiCorp Vault、Ansible Vault、或者云服务商提供的密钥管理服务(如AWS Secrets Manager, Azure Key Vault)来集中、安全地管理你的所有敏感凭据。应用程序或部署脚本在需要时,通过安全的API去这些服务里获取。这是更高级也更安全的方案。
Hostol建议: 对于入门,先学会用好.gitignore
,并结合“配置文件模板化 + .env
文件”的方式。当你的系统规模和复杂度上来后,再逐步引入专门的密钥管理工具。
“哎呀,搞砸了!”—— Git的“后悔药”怎么吃?
人有失手,马有失蹄。万一你推送了一个有问题的配置,导致线上服务异常,Git的“时光倒流”大法就能救你一命!
git log
:查看历史记录,找到“案发前”的那个版本。 它会列出所有的提交记录,每条记录都有一个唯一的哈希值(commit hash)。git revert <commit_hash>
(推荐,更安全): 这条命令会创建一个新的提交,这个新提交的内容刚好是用来“撤销”掉你指定的那条“坏提交”所做的所有更改。它不会修改已有的提交历史,只是在历史的顶端追加了一个“反向操作”。git reset --hard <commit_hash>
(谨慎使用!): 这条命令会把你的本地分支的“指针”(HEAD)强行指回到你指定的那个历史提交,并且把你本地工作区的文件也恢复到那个时候的状态,之后的所有提交记录(在你本地)就“消失”了。如果你已经把“坏提交”推送到了远程,用reset
后想再push
会遇到麻烦(需要git push --force
,这通常是团队协作中的大忌,因为它会改写共享的历史)。所以,除非你非常清楚自己在做什么,并且这是你个人分支或者还没推送到远程,否则优先考虑revert
。
重要: 在Git里回滚了配置之后,别忘了还要把这个“正确”的配置重新应用到你的服务器上(比如重新执行你的部署脚本)!Git仓库里的代码变了,服务器上跑的配置可不会自动跟着变哦!
从“配置满天飞,备份靠手掰”的“石器时代”,到用Git实现版本控制、变更追溯、安全回滚、团队协作的“信息时代”,是不是感觉运维工作的“逼格”和“掌控感”都瞬间提升了好几个Level?没错,Git不仅仅是开发者的专属工具,它同样能为我们系统管理员和运维工程师带来巨大的便利和保障。虽然初上手可能需要一点点学习成本,去理解它的那些概念(仓库、分支、提交、合并、拉取、推送……),但相信我,一旦你真正把它用起来,并融入到你的日常工作中,你就会发现,以前那些让你头疼不已的配置管理难题,都变得如此从容和优雅。Hostol希望这篇“代码管家”入门指南,能为你打开一扇通往更专业、更高效运维世界的大门。勇敢地迈出第一步,让Git成为你管理服务器配置与脚本的得力助手
相关文章:
用Git管理你的服务器配置文件与自动化脚本:版本控制、变更追溯、团队协作与安全回滚的运维之道
更多服务器知识,尽在hostol.com 咱们在和服务器打交道的日子里,是不是经常要和各种各样的配置文件(Nginx的、Apache的、PHP的、防火墙的……)还有自己辛辛苦苦写下的自动化脚本打交道?那你有没有遇到过这样的“抓狂”…...

【数据库】关系数据库标准语言-SQL(金仓)下
4、数据查询 语法: SELECT [ALL | DISTINCT] <目标列表达式> [,<目标列表达式>] … FROM <表名或视图名>[, <表名或视图名> ] … [ WHERE <条件表达式> ] [ GROUP BY <列名1> [ HAVING <条件表达式> ] ] [ ORDER BY <…...

Vue3+SpringBoot全栈开发:从零实现增删改查与分页功能
前言 在现代化Web应用开发中,前后端分离架构已成为主流。本文将详细介绍如何使用Vue3作为前端框架,SpringBoot作为后端框架,实现一套完整的增删改查(CRUD)功能,包含分页查询、条件筛选等企业级特性。 技术栈介绍 前端࿱…...

小黑大语言模型应用探索:langchain智能体构造源码demo搭建1(初步流程)
导入工具包 rom langchain_core.tools import BaseTool from typing import Sequence, Optional, List from langchain_core.prompts import BasePromptTemplate import re from langchain_core.tools import tool from langchain_core.prompts.chat import (ChatPromptTempla…...

极客时间:用 FAISS、LangChain 和 Google Colab 模拟 LLM 的短期与长期记忆
每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗?订阅我们的简报,深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同,从行业内部的深度分析和实用指南中受益。不要错过这个机会,成为AI领…...

leetcode hot100刷题日记——35.子集
解答: 方法一:选or不选的dfs(输入视角) 思路:[1,2,3]的全部子集可以看成是对数组的每一位数字做选择。 eg.空集就是一个数字都不选,[1,2]就是1,2选,3不选。 class Solution { pub…...

MybatisPlus(含自定义SQL、@RequiredArgsConstructor、静态工具类Db)
大家在日常开发中应该能发现,单表的CRUD功能代码重复度很高,也没有什么难度。而这部分代码量往往比较大,开发起来比较费时。 因此,目前企业中都会使用一些组件来简化或省略单表的CRUD开发工作。目前在国内使用较多的一个组件就是…...
React 组件异常捕获机制详解
1. 错误边界(Error Boundaries)基础 在React应用开发中,组件异常的有效捕获对于保证应用稳定性至关重要。React提供了一种称为"错误边界"的机制,专门用于捕获和处理组件树中的JavaScript错误。 错误边界是React的一种…...

手眼标定:九点标定、十二点标定、OpenCV 手眼标定
因为一直使用6轴协作机器人,且主要应用是三维视觉,平常的手眼标定基本都是基于OpenCV来计算的,听说有九点标定和十二点标定,顺便了解下。 目录 1.九点标定1.1 基本原理1.2 关于最小二乘法1.3 具体示例 2.十二点标定3.OpenCV 手眼标…...

[总结]前端性能指标分析、性能监控与分析、Lighthouse性能评分分析
前端性能分析大全 前端性能优化 LightHouse性能评分 性能指标监控分析 浏览器加载资源的全过程性能指标分析 性能指标 在实现性能监控前,先了解Web Vitals涉及的常见的性能指标 Web Vitals 是由 Google 推出的网页用户体验衡量指标体系,旨在帮助开发者量…...

React-native的新架构
本文总结: 文章主要介绍了 React Native 的新架构,包括以下几个方面的内容:📱✨ 如何抹平 iOS 和 Android 样式差异,提升跨平台一致性; 分析了旧架构中存在的问题,如通信瓶颈、启动慢、维护复杂等&#x…...
【Android】MT6835 + MT6631 WiFi进入Meta模式出现WiFi_HQA_OpenAdapter failed
问题描述 WiFi进入Meta异常,出现WiFi_HQA_OpenAdapter failed [ 12.694501] mtk_wmtd_worker: [name:wlan_drv_gen4m_6835&][wlan][710]wlanProbeSuccessForLowLatency:(INIT INFO) LowLatency(ProbeOn) [ 12.699854] ccci_fsm: [name:ccci_md_all&][ccci1/fsm]M…...

Git 全平台安装指南:从 Linux 到 Windows 的详细教程
目录 一、Git 简介 二、Linux 系统安装指南 1、CentOS/RHEL 系统安装 2、Ubuntu/Debian 系统安装 3、Windows 系统安装 四、安装后配置(后面会详细讲解,现在了解即可) 五、视频教程参考 一、Git 简介 Git 是一个开源的分布式版本控制系…...

Tree 树形组件封装
整体思路 数据结构设计 使用递归的数据结构(TreeNode)表示树形数据每个节点包含id、name、可选的children数组和selected状态 状态管理 使用useState在组件内部维护树状态的副本通过deepCopyTreeData函数进行深拷贝,避免直接修改原始数据 核…...

AI书签管理工具开发全记录(五):后端服务搭建与API实现
文章目录 AI书签管理工具开发全记录(四):后端服务搭建与API实现前言 📝1. 后端框架选型 🛠️2. 项目结构优化 📁3. API路由设计 🧭分类管理书签管理 4. 数据模型定义 💾分类模型&…...

netTAP 100:在机器人技术中将 POWERLINK 转换为 EtherNet/IP
工业机器人服务专家 年轻的 More Robots 公司成立仅一年多,但其在许多应用领域的专业技术已受到广泛欢迎。这是因为More Robots提供 360 度全方位服务,包括从高品质工业机器人和协作机器人到咨询和培训。这包括推荐适合特定任务或应用的机器人࿰…...

多模态大语言模型arxiv论文略读(九十八)
Accelerating Pre-training of Multimodal LLMs via Chain-of-Sight ➡️ 论文标题:Accelerating Pre-training of Multimodal LLMs via Chain-of-Sight ➡️ 论文作者:Ziyuan Huang, Kaixiang Ji, Biao Gong, Zhiwu Qing, Qinglong Zhang, Kecheng Zhe…...

EXCEL--累加,获取大于某个值的第一个数
一、函数 LET(data,A1:A5,cumSum,SCAN(0,data,LAMBDA(a,b,ab)),idx,MATCH(TRUE,cumSum>C1,0),INDEX(data,idx)) 二、函数拆解 1、LET函数:LET(name1, value1, [name2, value2, ...], calculation) name1, name2...:自定义的变量名(需以字…...
【vscode】切换英文字母大小写快捷键如何配置
按 ⌘(Command) Shift P 打开命令面板搜索 "Transform to Uppercase" 或 "Transform to Lowercase" 点击Transform to Uppercase 命令后的齿轮图标 进入设置页面 然后就可以进行配置了 比如我是mac电脑, 切换大写可以配置为 shift alt…...
vue笔记-路由
文章目录 createWebHistory的使用router-linkrouter-link颜色是黑色,正常应该是蓝色router-link 跳转了但是不展示 其他 vue这个题目还是太大,路由单独拆出来。 createWebHistory的使用 推荐在vue-router4中使用。 1、导入。 import { createRouter, c…...

本地部署 DeepSeek R1(最新)【从下载、安装、使用和调用一条龙服务】
文章目录 一、安装 Ollama1.1 下载1.2 安装 二、下载 DeepSeek 模型三、使用 DeepSeek3.1 在命令行环境中使用3.2 在第三方软件中使用 一、安装 Ollama 1.1 下载 官方网址:Ollama 官网下载很慢,甚至出现了下载完显示 无法下载,需要授权 目…...
域名解析怎么查询?有哪些域名解析查询方式?
在互联网的世界里,域名就像是我们日常生活中的门牌号,帮助我们快速定位到想要访问的网站。而域名解析则是将这个易记的域名转换为计算机能够识别的IP地址的关键过程。当我们想要了解一个网站的域名解析情况,或者排查网络问题时,掌…...

win主机如何结束正在执行的任务进程并重启
最近遇到一个问题,一个java入库程序经常在运行了几个小时之后消息无法入库,由于已经没有研发人员来维护这个程序了,故此只能每隔一段时间来重启这个程序以保证一直有消息入库。 但是谁也不能保证一直有人去看这个程序,并且晚上也不…...

maven中的maven-resources-plugin插件详解
前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站 一、插件定位与核心功能 maven-resources-plugin是Maven构建工具的核心插件之一,主要用于处理项目中的资源文件(如…...

ROS云课基础篇-01-Linux-250529
ROS云课基础篇收到了很多反馈,正面评价比例高,还有很多朋友反馈需要写更具体一点。 ROS云课基础篇极简复习-C、工具、导航、巡逻一次走完-CSDN博客 于是,有了这篇以及之后的案例,案例均已经测试过8年,但没有在博客公…...
通俗易懂解析:@ComponentScan 与 @MapperScan 的异同与用法
在 Spring 和 MyBatis 集成开发中,ComponentScan 和 MapperScan 是两个核心注解,但它们的用途和工作机制截然不同。本文将通过通俗的语言和示例代码,带您轻松掌握它们的区别和使用方法。 一、基础概念 ComponentScan:Spring 的“通…...

深入了解 C# 异步编程库 AsyncEx
在现代应用程序开发中,异步编程已经成为提升性能和响应能力的关键,尤其在处理网络请求、I/O 操作和其他耗时任务时,异步编程可以有效避免阻塞主线程,提升程序的响应速度和并发处理能力。C# 提供了内建的异步编程支持(通…...
NodeJS全栈开发面试题讲解——P1Node.js 基础与核心机制
✅ 1.1 Node.js 的事件循环原理?如何处理异步操作? 面试官您好,我理解事件循环是 Node.js 的异步非阻塞编程核心。 Node.js 构建在 V8 引擎与 libuv 库之上。虽然 Node.js 是单线程模型,但它通过事件循环(event loop&a…...

Vulhub靶场搭建(Ubuntu)
前言:Vulhub 是一个开源的漏洞靶场平台,全称是 Vulhub: Vulnerable Web Application Environments,主要用于学习和复现各类 Web 安全漏洞。它的核心特征是通过 Docker 环境快速搭建出带有特定漏洞的靶场系统,适合渗透测试学习者、…...

C++:参数传递方法(Parameter Passing Methods)
目录 1. 值传递(Pass by Value) 2. 地址传递(Pass by Address) 3. 引用传递(Pass by Reference) 数组作为函数参数(Array as Parameter) 数组作为函数返回值 什么是函数ÿ…...