工作站与博客环境
本文由 AI 根据我在服务器上的实际操作记录和三份自动化脚本整理生成,主要用于之后再次部署时参考。
请务必在使用前自行检查命令、版本号和配置是否符合当前环境,避免因系统更新或个人环境差异导致问题。
一、整体目标与脚本概览
在一台 Ubuntu 24.04.3 LTS 服务器上,我为自己常用的几个场景写了三份自动化脚本,用来快速完成以下工作:
- GPU 环境:
- 禁用
nouveau - 安装并锁定 Nvidia 驱动
- 安装 CUDA /
nvidia-cuda-toolkit - 安装并配置
nvidia-container-toolkit,让 Docker 能使用 GPU
- 禁用
- AI 服务:
- 使用 Docker 运行 GPU 版 Ollama,可选自动拉取 Qwen3 系列模型
- 博客环境:
- 安装
nvm和 Node LTS - 安装 Hexo
- 初始化和部署 Hexo 博客
- 安装
对应的三个脚本分别是:
install_nvidia_cuda_container.sh
禁用 nouveau、锁定当前内核、自动安装推荐的 Nvidia 驱动、安装 CUDA 工具链和nvidia-container-toolkit,并完成基础测试。run_ollama.sh
使用 Docker 运行 GPU 版 Ollama 容器,并提供交互式选项,一键拉取常用的 Qwen3 系列模型。setup_hexo_blog.sh
安装nvm+ Node LTS +hexo-cli,创建或重建 Hexo 博客目录,安装依赖并配置 Git 部署。
下面分别介绍这三个脚本的设计思路、关键步骤和使用方式。
二、GPU 环境脚本:install_nvidia_cuda_container.sh
2.1 设计目标
这份脚本的目标是将「从零准备 GPU 环境」的一整套操作自动化,主要包括:
- 禁用开源驱动
nouveau,避免与官方 Nvidia 驱动冲突; - 不再强制安装新内核,而是:
- 识别当前正在使用的内核版本;
- 尝试锁定与该版本相关的内核包,降低未来升级导致驱动失配的概率;
- 使用
ubuntu-drivers自动检测并安装「推荐」的 Nvidia 驱动,而不是写死某个版本(比如nvidia-driver-535); - 安装
nvidia-cuda-toolkit,提供基础 CUDA 工具链(含nvcc); - 安装并配置
nvidia-container-toolkit,让 Docker 容器可以访问 GPU; - 最后进行三项测试:
- 宿主机上的
nvidia-smi; - 宿主机上的
nvcc --version; - Docker 容器内的
nvidia-smi。
- 宿主机上的
这些步骤对应了我在手动操作时的主要流程,但用更通用、更安全的方式实现(比如用 ubuntu-drivers devices 自动选驱动)。
2.2 关键步骤拆解
脚本的主要逻辑如下。
- 禁用 nouveau 并更新 initramfs
创建或覆盖
/etc/modprobe.d/blacklist-nouveau.conf;写入:
1
2blacklist nouveau
options nouveau modeset=0执行
sudo update-initramfs -u,让配置在下次启动时生效。
这样可以避免系统加载开源的 nouveau 模块,给后续官方驱动提供干净的环境。
- 安装基础编译工具
- 执行
sudo apt-get update; - 安装
build-essential(包含 gcc / g++ 等),为部分驱动或编译场景做准备。
- 确认并锁定当前内核版本(不安装新内核)
- 使用
uname -r读取当前正在运行的内核版本,例如6.8.0-87-generic; - 对以下可能存在的包进行检测并加 hold(如果存在就
apt-mark hold):linux-image-<当前内核版本>linux-headers-<当前内核版本>linux-modules-extra-<当前内核版本>
这样做的目的是:尽量保持「当前内核 + 当前驱动」这一组合的稳定,不追求自动升级;未来如果需要升级内核,再手动解除 hold 并重新规划。
- 自动检测并安装推荐的 Nvidia 驱动
- 如果系统已有
ubuntu-drivers:- 执行
ubuntu-drivers devices,打印可用驱动; - 用
awk从输出中解析带recommended标记的驱动包名(例如nvidia-driver-535); - 如果解析成功,则自动执行
sudo apt-get install -y <推荐驱动包>。
- 执行
- 如果系统没有安装
ubuntu-drivers:- 先安装
ubuntu-drivers-common; - 再重复上述检测逻辑。
- 先安装
- 如果始终解析不到推荐驱动:
- 脚本只会给出提示,让你之后手动执行
ubuntu-drivers devices并根据输出自行选择驱动安装。
- 脚本只会给出提示,让你之后手动执行
通过这种方式,脚本不写死驱动版本,而是配合 Ubuntu 官方的推荐策略,使脚本更适合未来系统的升级。
- 安装 CUDA 工具链(nvidia-cuda-toolkit)
直接通过 apt 安装:
1
sudo apt-get install -y nvidia-cuda-toolkit
然后尝试对常见的 CUDA 工具包名执行
apt-mark hold:cuda-toolkit-12-0cuda-toolkit-12.0
即便当前系统中不一定存在这些包名,脚本也会使用 || true 避免因此中断。
- 安装并配置 NVIDIA Container Toolkit
- 安装
curl和gnupg2; - 从 NVIDIA 官方源下载并导入 GPG key,写入
/usr/share/keyrings/nvidia-container-toolkit-keyring.gpg; - 添加
libnvidia-container的 apt 软件源,并绑定刚才的 keyring; - 执行
sudo apt-get install -y nvidia-container-toolkit; - 使用
sudo nvidia-ctk runtime configure --runtime=docker配置 Docker Runtime; - 重启 Docker 服务。
完成这一步后,Docker 就具备了 --gpus all 访问 GPU 的能力。
- 测试与验证
- 宿主机上测试
nvidia-smi,确认驱动加载正常; - 宿主机上测试
nvcc --version,确认 CUDA 编译器安装成功; - 如果系统已安装 Docker:
- 用
nvidia/cuda:12.6.0-base-ubuntu24.04镜像在容器内运行nvidia-smi,检查容器内能否看到 GPU。
- 用
脚本最后会提示「建议重启系统」。
2.3 脚本完整内容与使用方式
脚本内容(可以保存为 install_nvidia_cuda_container.sh):
1 |
|
使用方式:
1 | chmod +x install_nvidia_cuda_container.sh |
重启后建议手动执行一次:
1 | nvidia-smi |
确认驱动和 CUDA 工具链工作正常。
三、Ollama 部署脚本:run_ollama.sh
3.1 设计目标
这份脚本用来自动化如下操作:
- 确认 Docker 已安装;
- 拉取最新的 GPU 版 Ollama 镜像;
- 停止并删除已有的
ollama容器(如果存在),避免命名冲突; - 启动一个新的 Ollama 容器:
- 开启 GPU 支持;
- 使用 Docker 卷
ollama挂载到容器内/root/.ollama,用于持久化模型数据; - 映射 11434 端口;
- 提供交互选项,一键拉取常用的 Qwen3 系列模型(
qwen3-vl:8b/qwen3-vl:30b/qwen3-coder:30b)。
这样,在已经配置好 GPU + Docker 环境的前提下,只需运行脚本,就可以快速得到一个可用的 Ollama 服务。
3.2 脚本逻辑说明
核心步骤如下:
- 检查 Docker 是否安装
- 通过
command -v docker检查 Docker 命令是否存在; - 如果不存在,则提示先安装 Docker 并退出脚本(避免后续错误)。
- 拉取 Ollama 镜像
执行:
1
sudo docker pull ollama/ollama:latest
始终确保使用的是最新版镜像。
- 清理已有
ollama容器(如果存在)
- 通过
sudo docker ps -a --format '{{.Names}}' | grep -w ollama检查; - 如果找到同名容器,先
docker stop,再docker rm,错误不导致脚本中断。
- 启动新的 Ollama 容器
使用命令:
1
2
3
4
5
6sudo docker run -d \
--gpus=all \
-v ollama:/root/.ollama \
-p 11434:11434 \
--name ollama \
ollama/ollama:latest参数说明:
--gpus=all:启用 GPU;-v ollama:/root/.ollama:使用名为ollama的 Docker 卷保存模型和配置;-p 11434:11434:暴露 Ollama 默认 API 端口;--name ollama:固定容器名。
- 可选:拉取 Qwen3 系列模型
- 提示是否自动拉取模型;
- 如果用户选择
y:- 依次执行:
ollama pull qwen3-vl:8bollama pull qwen3-vl:30bollama pull qwen3-coder:30b
- 依次执行:
- 如果选择
n或直接回车,则仅提示后续可以手动执行这些命令。
3.3 脚本完整内容与使用方式
脚本内容(保存为 run_ollama.sh):
1 |
|
使用示例:
1 | chmod +x run_ollama.sh |
完成后可以:
- 通过
sudo docker logs ollama查看运行日志; - 通过
http://<服务器IP>:11434调用 Ollama API。
四、Hexo 博客脚本:setup_hexo_blog.sh
4.1 设计目标
这份脚本把「搭建 Hexo 博客」过程中重复的步骤自动化,主要包括:
- 安装
nvm(如果未安装); - 通过
nvm安装 Node LTS 并设为默认版本; - 全局安装
hexo-cli; - 创建或重建博客目录(默认
$HOME/hexo); - 初始化 Hexo(如需要),安装项目依赖;
- 安装
hexo-deployer-git插件; - 配置 Git 全局用户名和邮箱(若尚未配置);
- 提示并辅助修改
_config.yml中的deploy配置; - 自动执行
hexo clean和hexo generate,并提供选项是否立即执行hexo deploy。
4.2 脚本逻辑说明
- 安装并加载 nvm
- 如果
~/.nvm目录存在,认为已经安装过 nvm,跳过安装; - 否则,通过官方脚本安装 nvm;
- 设置
NVM_DIR并source "$NVM_DIR/nvm.sh",确保后续在当前脚本环境中可以直接使用nvm命令。
- 安装 Node LTS 并设为默认
执行:
1
2
3nvm install --lts
nvm use --lts
nvm alias default "lts/*"打印当前
node -v和npm -v做确认。
- 全局安装
hexo-cli
通过 npm 全局安装:
1
npm install -g hexo-cli
- 创建或重新初始化 Hexo 博客目录
- 使用变量
BLOG_DIR="$HOME/hexo"; - 若目录已存在:
- 询问是否删除并重建;
- 如果选择删除,则
rm -rf并重新创建; - 如果保留,则不再执行
hexo init,只进入该目录并继续后续步骤。
- 若目录不存在:
- 创建目录并执行
hexo init .初始化项目。
- 创建目录并执行
- 安装项目依赖和
hexo-deployer-git
- 在博客目录执行
npm install,安装package.json中的依赖; - 执行
npm install hexo-deployer-git --save,添加 Git 部署插件。
- 配置 Git 全局用户信息(如未设置)
- 如果
git config --global user.email未设置,则写入默认值your_email@example.com; - 如果
git config --global user.name未设置,则写入默认值YourName; - 后续应手动修改为自己的邮箱和用户名。
- 提示编辑
_config.yml的 deploy 部分
脚本打印一个示例配置:
1
2
3
4deploy:
type: git
repo: git@your.git.repo:your/blog.git
branch: main询问是否现在打开
_config.yml进行编辑;如果选择
y,则用${EDITOR:-vim}打开配置文件;否则提示稍后手动编辑。
- 构建并可选执行
hexo deploy
- 执行
hexo clean和hexo generate; - 询问是否现在执行
hexo deploy:- 如果选择执行,出错时会提示检查
_config.yml和 Git 权限; - 如果跳过,则提示后续可以在博客目录手动执行
hexo clean && hexo generate && hexo deploy。
- 如果选择执行,出错时会提示检查
- theam
4.3 脚本完整内容与使用方式
脚本内容(保存为 setup_hexo_blog.sh):
1 |
|
使用方式:
1 | chmod +x setup_hexo_blog.sh |
执行过程中注意:
- 将脚本中的
your_email@example.com和YourName换成自己的 Git 配置; - 在编辑
_config.yml时,把deploy.repo换成自己的仓库地址,branch换成实际使用的分支。
五、推荐使用顺序(只围绕三个脚本)
如果你只关心这三份脚本,那么在一台新服务器上的典型执行顺序可以简化为:
GPU 环境准备
上传并执行 GPU 脚本:
1
2
3chmod +x install_nvidia_cuda_container.sh
./install_nvidia_cuda_container.sh
sudo reboot重启后验证:
1
2nvidia-smi
nvcc --version
安装 Docker(不在本文脚本中)
按 Ubuntu 官方文档或自己写的
install_docker.sh安装 Docker;测试 GPU 容器:
1
sudo docker run --rm --gpus all nvidia/cuda:12.6.0-base-ubuntu24.04 nvidia-smi
启动 Ollama 服务
上传并执行
run_ollama.sh:1
2chmod +x run_ollama.sh
./run_ollama.sh按提示选择是否自动拉取 Qwen3 系列模型;
访问
http://<服务器IP>:11434测试。
搭建 Hexo 博客
上传并执行
setup_hexo_blog.sh:1
2chmod +x setup_hexo_blog.sh
./setup_hexo_blog.sh在脚本提示阶段完成:
- Git 用户名 / 邮箱的确认;
_config.yml中deploy仓库的设置;
此后即可通过:
1
hexo clean && hexo generate && hexo deploy
更新博客。
六、结语
这三份脚本浓缩的是我在搭建环境时真正「可重复」的步骤,它们分别负责:
- GPU 驱动 + CUDA + Docker GPU Runtime 的基础环境;
- Ollama 服务及常用模型的快速拉起;
- Hexo 博客的 Node 环境、项目初始化与 Git 部署配置。
相比逐条翻查 bash_history,直接维护这几份脚本要省心得多。未来如果发行版、驱动或工具链有变化,可以在这几份脚本上迭代,而不必从头回忆所有命令。
最后再强调一次:
本文由 AI 结合当前脚本内容自动生成说明,细节难免会随着时间过时。在正式执行前,请务必:
- 先阅读脚本本身;
- 检查其中的版本号、软件源和命令是否仍然适用于当时的 Ubuntu 版本;
- 在非关键环境中先做一次测试。
