ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

Ubuntu从装系统到跑服务:初始化、Docker、驱动与实战排错全攻略

Ubuntu从装系统到跑服务:初始化、Docker、驱动与实战排错全攻略 简介面向Ubuntu新手与进阶开发者的一份工具型教程文档覆盖系统安装、性能调优、开发环境与实战部署能为读者规划从零配置到容器化项目落地的完整学习路径兼顾入门与进阶需求。资源为单个docx文件压缩包仅21KB体积虽小却浓缩了安装分区方案、apt软件管理、systemd开机加速、htop监控、Docker引擎安装、Python虚拟环境、LAMP建站及Harbor私有仓库等核心操作。已有1124人学习下载适合日常使用或计划转向开发工作的Ubuntu用户。文档从官方ISO镜像制作启动盘讲起给出UEFI与传统BIOS的分区建议、常用apt命令与systemd服务优化等操作细节实战部分提供Web服务器搭建、Bash自动化清理备份脚本、Docker Compose编排WordPressMySQL等可直接参考的案例并附官方文档、社区教程以及依赖冲突、驱动兼容等避坑指引便于按需查阅和动手实践。1. Ubuntu 这份资源解决的核心问题从装完系统到跑起服务的完整链路很多人在 Ubuntu 上的体验是这样断层的用官方镜像装完系统开机后只会打开 Firefox想装个软件包报依赖错误想跑 Docker 提示权限不够想装 NVIDIA 驱动直接黑屏。这套教程和资源包的价值在于它把「安装 → 初始化 → 开发环境 → 实战项目 → 排错」串成了一条完整的操作链路而不是零散命令的拼凑。适合两类人第一次装 Ubuntu 的新手以及已经用了半年但总在环境配置上翻车的进阶用户。下面按我实际拆解的顺序逐章讲每一章都能照着敲。2. 系统安装与初始化分区、软件源、工具链三条线一次理顺拿官方 ISO 镜像做启动盘这一步不算难难的是进到安装界面之后怎么选。在 VMware 虚拟机里装或者物理机双系统装分区逻辑是一致的。下面这三段把最容易出问题的分区、软件源、软件管理讲透。2.1 分区方案选型/ 30GB、/home 留空、swap 给内存两倍的理由资源里给的分区推荐是/根分区30GB、/home 分配剩余空间、swap 设为内存大小的 2 倍。这个方案看起来简单背后有一个很实际的分工逻辑根分区装的是系统本体和软件/home 存的是用户数据两者分开后系统崩溃或者想重装时只需要格式化根分区/home 里的文档、代码、下载内容全部保留。如果你打算在这台机器上做开发我建议在分区阶段就把 /var/lib/docker 的挂载位置考虑进去把 Docker 数据目录单独放到数据盘。原因是 Docker 默认把镜像和容器数据写在根分区如果根分区只分了 30GB几张大镜像就能把它撑满后期再想迁移非常麻烦。常见做法是在 /home 下建一个 docker-data 目录挂载成独立分区等装完 Docker 后把存储目录指过去。swap 给内存两倍是传统经验值但 16GB 内存的机器已经很普遍两倍就是 32GB 的 swap 文件对 SSD 来说浪费空间。我一般这样调整内存大于 16GB 时给 8GB swap 就够用内存小于 8GB 才按两倍给。swap 的作用是内存溢出时的兜底不是越大越好过大反而让系统在内存吃紧时优先往外交换性能下降更明显。2.2 首次配置软件源镜像替换必须放在第一件事装完系统第一件事不是开浏览器而是执行资源里那两条命令sudo apt update sudo apt upgrade # 更新软件源缓存并升级已安装软件包 sudo apt install build-essential # 安装编译工具链 gcc、make、g 等注意 apt update 和 apt upgrade 之间的逻辑关系update 是刷新软件源的包索引它本身不安装任何东西upgrade 才是根据新的索引去升级现有软件包。如果跳过 update 直接 upgradeapt 会拿旧的索引去比对结果是什么都升不了或者提示部分软件包版本信息已过期。在国内网络环境下我建议在 update 之前先做软件源替换。默认的 archive.ubuntu.com 在部分地区连接很慢apt update 可能要卡几分钟甚至报错。可以把 /etc/apt/sources.list 里的源地址替换成国内镜像站的地址具体域名可以搜「Ubuntu 24.04 LTS 换国内源」替换方法各家镜像站都有说明。替换后同样先 update 再 upgrade索引刷新速度的区别非常明显。网络配置问题这时也会暴露出来如果 update 一直超时先用 ip a 确认网卡拿到了 IP再排查 DNS 配置。2.3 软件管理apt 命令组合和图形化工具的分工资源里给出的软件管理命令是三条核心apt search [软件名] # 在软件源中搜索包 apt install [软件名] # 安装指定包及其依赖 apt remove --purge [软件名] # 彻底卸载包连同配置文件一起删除这里有个容易被忽略的细节apt remove 只会删二进制文件配置文件会保留在 /etc 下只有加上 --purge 才会把配置文件一起清掉。我习惯在卸载自己装过的软件时都用 --purge因为残留的配置经常在下次安装同款软件时报奇怪冲突清理干净能省很多事。图形化方面Ubuntu Software 是日常装应用的主力适合装 Chromium、GIMP 这类桌面软件Synaptic 则偏向系统级包管理能看依赖树、锁定版本。我的建议是系统级依赖用命令行 apt日常桌面软件用 Ubuntu Software不要混用。混用的典型翻车是先用 Ubuntu Software 装了一个软件之后想在命令行里升级它apt 提示该包被其他包管理器持有需要先解锁才能动。3. 开发环境搭建Docker 用户组、Python 虚拟环境、NVIDIA 驱动三件套系统层面理顺之后开发环境是下一个大头。这一章讲资源里覆盖的三件套Docker 容器、Python 虚拟环境、NVIDIA 驱动与 CUDA都是高频场景也是翻车重灾区。3.1 Docker 引擎安装与用户组授权的常见做法资源里给的 Docker 安装命令是一行脚本curl -fsSL https://get.docker.com | sh # 一键安装 Docker 引擎 sudo usermod -aG docker $USER # 将当前用户加入 docker 组第一行通过 curl 下载官方安装脚本并交给 sh 执行-f 表示遇到 HTTP 错误直接失败-sSL 分别是静默、显示错误、跟随重定向。第二行 usermod -aG 把当前用户加入 docker 组-a 是追加-G 是指定附加组。执行完第二行后必须重新登录或者执行 newgrp docker否则当前会话里的用户组不会刷新直接运行 docker ps 还是会提示权限不足。这个方式依赖官方脚本在目标网络环境的可用性企业环境更稳妥的做法是先把官方仓库加进软件源再 apt install docker-ce。这里有一个很多人不知道的坑sudo usermod 执行成功后如果你马上在新终端里运行 docker 命令依然会报 permission denied。原因是终端会话开启时已经读取了用户组信息不会动态更新解决办法是注销重登或者退出终端重开。资源里其实隐含了这个细节只是没有单独标注实际踩坑率非常高。提示执行 usermod 后需要重新登录或 newgrp docker 刷新用户组否则当前终端仍报权限不足。装完后验证是否成功运行 docker run hello-world能看到 Hello from Docker! 输出就说明引擎和用户权限都正常。如果提示 Cannot connect to the Docker daemon优先检查 docker 服务状态 sudo systemctl status docker服务没起来就 sudo systemctl start docker 再试。3.2 Python 虚拟环境venv 的创建、激活与退出资源给出的 Python 虚拟环境命令是标准做法python -m venv myenv # 创建名为 myenv 的虚拟环境 source myenv/bin/activate # 激活虚拟环境venv 的原理是生成一份独立的 Python 解释器和 site-packages 目录之后的 pip 安装全部隔离在 myenv 里不会污染系统 Python。创建时有个前置条件Ubuntu 默认可能没装 python3-venv如果提示 ensurepip is not available要先 sudo apt install python3-venv否则这个命令会直接报错。激活后命令行前缀会出现 (myenv)代表当前 shell 用的不是系统 Python。这时执行 which python路径应该指向 myenv/bin/python如果指向的还是 /usr/bin/python说明激活没生效检查是不是在当前 shell 里执行的 source。退出虚拟环境用 deactivate 命令。我自己的习惯是把虚拟环境建在项目根目录下命名为 .venv配好 .gitignore 把它排除掉避免虚拟环境目录被提交进仓库。资源里没展开的一个点是虚拟环境里 pip 装包慢的问题。默认 pip 源在国外建议在虚拟环境内执行 pip config set global.index-url 指向国内 PyPI 镜像这个配置只对当前用户生效不会影响系统其他用户。3.3 显卡驱动ubuntu-drivers autoinstall 与 CUDA 的配合资源里提到驱动兼容问题用 sudo ubuntu-drivers autoinstall 解决。这条命令会自动检测当前机器的 GPU 型号然后安装推荐的专有驱动。对于 NVIDIA 显卡它会把驱动、nvidia-smi 工具链一起装好装完重启运行 nvidia-smi 能看到显卡型号、驱动版本、显存占用就说明驱动正常。查看显卡驱动状态这一条命令足够。需要注意一个顺序问题如果要跑 PyTorch 这类深度学习框架先装驱动再装 CUDA Toolkit。CUDA Toolkit 里带的驱动版本如果和已装的系统驱动版本不一致安装器会提示你 choose driver only 或者 complete installation这时候选不装驱动、只装 Toolkit 即可。常见的翻车是反过来操作先装 CUDA Toolkit 后装系统驱动结果驱动被覆盖nvidia-smi 报版本不匹配。判断驱动和 CUDA 是否匹配一条命令就能看出来nvidia-smi 显示的 CUDA Version 是系统驱动支持的最高 CUDA 版本只要这个数字大于等于你安装的 CUDA Toolkit 版本就说明匹配。如果小于说明驱动太旧需要先升级驱动。资源里扩展场景还提到两个方向一是 Ubuntu Core 用于 IoT 设备支持 OTA 更新和容器化应用二是 CUDA Toolkit PyTorch 搭建深度学习工作站这部分依赖本节驱动环境。普通用户知道有对应的官方工具链就够了不用急着上手。4. 实战项目LAMP 网站、自动化脚本与 Docker Compose 单机编排环境搭好后要跑项目这一章把资源里的三类实战拆开讲LAMP 建站、Bash 自动化脚本、Docker Compose 多服务编排。4.1 LAMP 搭建从零部署一个可访问的 Web 服务LAMP 是 Linux Apache MySQL PHP 的组合资源里用它来部署个人博客。安装命令是一行 aptsudo apt install apache2 mysql-server php libapache2-mod-php php-mysql装完后 Apache 默认站点根目录在 /var/www/html浏览器访问本机 IP 能看到默认欢迎页说明 Apache 正常。PHP 的生效依赖 libapache2-mod-php 这个模块它让 Apache 能把 .php 文件交给 PHP 解释器处理。安装完需要重启 Apache 才能加载新模块sudo systemctl restart apache2。MySQL 安装后默认 root 用户只允许本地 socket 连接直接运行 sudo mysql 就能进入不用密码。这时候建议执行 ALTER USER rootlocalhost IDENTIFIED WITH caching_sha2_password BY 新密码; 给 root 设个密码然后创建独立用户供 Web 应用使用不要用 root 跑 Web 应用。这是资源里没展开、但我实际部署时一定会做的一步。验证 PHP 是否正常在 /var/www/html 下写一个探针文件echo ?php phpinfo(); ? | sudo tee /var/www/html/test.php浏览器访问 http://你的IP/test.php能看到 PHP 版本和配置信息就说明 LAMP 链路通了。检查完记得删掉这个文件phpinfo 会暴露服务器配置放在公网上等于给自己留了个后门。4.2 自动化脚本日志清理与备份的 Bash 写法资源里提到用 Bash 脚本处理日志清理、备份等重复任务。这里给一个备份脚本的骨架#!/bin/bash BACKUP_DIR/home/user/backups # 备份存放目录 SOURCE_DIR/var/www/html # 要备份的源目录 DATE$(date %Y%m%d_%H%M%S) # 时间戳用于生成唯一文件名 tar czf $BACKUP_DIR/site_$DATE.tar.gz $SOURCE_DIR find $BACKUP_DIR -name *.tar.gz -mtime 7 -exec rm {} \; # 删除7天前的备份这段脚本先定义三个变量备份目录、源目录、时间戳格式。tar czf 生成带日期后缀的压缩包关键在最后一行的 find-mtime 7 匹配修改时间超过 7 天的文件-exec rm {} ; 删除匹配结果。这样备份目录不会无限增长。运行脚本前要确保有执行权限 chmod x backup.sh。想让它定时跑用 crontab -e 添加一行0 2 * * * /home/user/backup.sh含义是每天凌晨 2 点执行一次。判断脚本是否按预期运行先手动执行一次确认 tar 包生成再看看 /var/log/syslog 里 cron 的调用记录。第一次跑 crontab 时容易漏掉一个点脚本里用的路径必须是绝对路径否则 cron 的环境变量和交互式 shell 不一样相对路径会导出找不到命令的报错。4.3 Docker Compose 单机编排WordPress MySQL 的 yaml 与实际端口管控资源里给出了一个 docker-compose.yml 的简化版只有 web 和 db 两个服务。实际部署时我会加更多配置项version: 3 services: web: image: nginx:latest ports: - 80:80 container_name: web_nginx restart: unless-stopped db: image: mysql:8.0 environment: MYSQL_ROOT_PASSWORD: 123 MYSQL_DATABASE: wordpress MYSQL_USER: wp_user MYSQL_PASSWORD: wp_pass ports: - 3306:3306 volumes: - db_data:/var/lib/mysql volumes: db_data:与资源里的版本相比我加了 container_name 指定容器名、restart: unless-stopped 让容器崩溃后自动重启、volumes 持久化 MySQL 数据。这三项缺一不可没有 container_name容器名会随机生成没有 restart 策略服务器重启后所有容器全部停止没有 volumesMySQL 容器一删除数据就全没了。端口映射这里有一个安全细节值得单独说3306 端口不要随意暴露到外网。MySQL 默认账号密码都在环境变量里明文写着如果服务器有公网 IP3306 暴露出去等于把数据库裸奔。compose 文件里的 db 服务可以不映射端口只在 Docker 内网里被 web 服务访问这样外部访问不到数据库安全等级是直接质变。启动命令是 docker compose up -d-d 表示后台运行。查看运行状态用 docker compose ps查看日志用 docker compose logs web。如果 web 服务起不来最常见原因是 80 端口被宿主机上的 Apache 或其他服务占用运行 sudo ss -tlnp | grep :80 能看到占用进程先停掉冲突服务再 docker compose up -d。资源里还提到用 Harbor 搭建企业级镜像仓库这块属于内网环境下的进阶项单机开发用不上团队规模起来要统一管理镜像时再用 Harbor 替换默认的拉取地址也不迟。5. 避坑Ubuntu 日常使用高频故障的排查记录这一章是我拆完资源后整理的真实踩坑记录每条按现象、原因、解决的顺序写其中几条直接对应资源里提到的常见问题。5.1 依赖冲突apt 装包报 dependency error现象sudo apt install 某个软件包时终端不断提示 depends on xxx but it is not going to be installed即使 apt upgrade 也解决不了。原因软件源版本混杂比如手动加了第三方 PPAPPA 里的包依赖了当前发行版还没有的库版本apt 的自动解析能力不够陷入依赖死循环。解决资源里提到用 aptitude 替代 apt 处理这类问题。先 sudo apt install aptitude再运行 sudo aptitude install 软件包aptitude 会给出保留、降级、卸载等交互式解决方案选中拒绝升级某几个包一般能绕开冲突。如果是 PPA 导致的先 sudo add-apt-repository --remove PPA名称 删掉源再 sudo apt update 刷新回到 apt 正常安装。5.2 显卡驱动卸载不掉nvidia-smi 消失但驱动文件还在现象运行 sudo apt purge nvidia-driver-XXX 后输入 nvidia-smi 提示命令不存在但机器重启后黑屏或登录界面卡住。原因驱动卸载不彻底残留的 kernel 模块还在内核里加载或者卸载了驱动但没卸载 CUDA Toolkit 里的配套文件。解决在纯命令行界面CtrlAltF2里登录执行 sudo apt purge nvidia-* sudo apt autoremove 清理所有 nvidia 前缀包和自动残留依赖然后 reboot。重启后用 lsmod | grep nvidia 确认没有 nvidia 内核模块加载这时再重新安装驱动。我踩过这个坑后卸载驱动前都会先查 dpkg -l | grep nvidia 看装了哪些包一条一条确认再动手。5.3 环境变量配置错误PATH 改坏导致所有命令失效现象在 /etc/environment 里加了 export PATHxxx 后重启发现 sudo、ls、vim 全部提示 command not found连 apt 都用不了。原因环境变量文件里只允许写 PATH不允许写 export而且用 赋值时如果遗漏了原来的 $PATH会把系统默认路径整个覆盖掉。解决使用绝对路径 /usr/bin/vim 打开 /etc/environment 修改回来恢复 PATH 原本内容。这个问题在资源里没有细说但我建议改环境变量之前先 echo $PATH 把当前值完整复制下来改完一边用绝对路径的 bash 验证一边确认无问题再重启。修改 /etc/environment 时只用 PATH 语法不要加 export 前缀。5.4 SSH 无法连接客户机提示 Connection refused现象从本机 ssh userserver 连接远程 Ubuntu 服务器报 ssh: connect to host xxx port 22: Connection refusedping 能通说明网络链路正常。原因OpenSSH Server 没装或者装了但 sshd 服务没启动或者 UFW 防火墙没有放行 22 端口。解决先在服务器本机上执行 sudo apt install openssh-server再 sudo systemctl enable --now ssh 开启并设为开机自启。如果还是连不上运行 sudo ufw status 检查防火墙状态ufw allow OpenSSH 放行再试。排查顺序我固定是先看服务状态 sudo systemctl status ssh再看监听端口 sudo ss -tlnp | grep 22最后看防火墙三个检查点能定位 80% 的 SSH 连接问题。5.5 忘记登录密码进入恢复模式重置现象开机登录界面输入密码一直报错记不清自己改没改过密码。原因密码遗忘或者键盘布局异常导致输入的密码和预期不一致。解决重启机器在 GRUB 菜单里选择 Advanced options for Ubuntu进 recovery mode选择 root shell执行 mount -o remount,rw / 把根分区重新挂载为可写然后 passwd 用户名 输入新密码两次即可。注意 recovery mode 里的 root shell 默认是只读挂载必须先 remount 才能写文件。重置完 reboot 回到正常登录。5.6 中文输入法装不上搜狗输入法与 fcitx 的依赖问题现象安装搜狗输入法后fcitx 托盘图标不显示或者怎么按都切不到中文。原因搜狗输入法依赖 fcitx 框架但系统默认输入法框架是 ibus两者冲突或者 fcitx 的版本和搜狗要求的不一致导致输入法进程启动后无法加载。解决先卸载 ibussudo apt purge ibus再安装 fcitxsudo apt install fcitx然后在 /etc/environment 里补三行环境变量GTK_IM_MODULEfcitx、QT_IM_MODULEfcitx、XMODIFIERSimfcitx。注销重新登录后打开 fcitx 配置界面把搜狗输入法添加进输入法列表图标缺失的问题一般就解决了。6. 进阶验证用 systemd-analyze 和 htop 给系统做体检资源里提到开机加速和资源监控这两块合在一起就是一套系统体检流程。我平时拿到一台新机器会按下面的顺序过一遍。6.1 启动耗时分析systemd-analyze blame 是排查开机慢最直接的工具。运行后能看到每个服务的启动时间按降序排列耗时最长的服务排在最上面。常见的开机慢元凶是 NetworkManager-wait-online.service这个服务会等待网络完全就绪才继续启动在 DHCP 环境里可以禁用它sudo systemctl disable NetworkManager-wait-online.service。禁用前先确认网络配置不是静态 IP否则开机后网卡 IP 还没配好反而引发其他问题。6.2 资源监控与进程排查htop 比系统自带 top 好用按 F5 键能切换进程树视图看进程父子关系glances 是 htop 的升级替代还能看磁盘 IO、网络速率。安装方式是 sudo apt install htop glances。当服务器负载突然飙升时我先看 htop 里 CPU 占用最高的进程再用 ps -ef --sort-pcpu | head -20 确认进程完整信息最后决定是 kill 还是 systemctl restart 对应服务。6.3 用快照做后悔药最后分享一个多年养成的习惯每次大规模升级或者改系统级配置前先拍一个快照再动手。在物理机上用 Timeshift 做系统快照在虚拟机上用宿主机快照功能在纯净系统装完必需品后也拍一张。印象最深的一次是我给一台跑了半年的服务器换软件源并执行 apt upgrade结果升级过程断网导致 dpkg 中断系统处于半升级状态连 apt 都用不了。后来恢复快照重来把 apt upgrade 拆成小批包分次升级再没出过同样的问题。从那以后我每次改 /etc 配置或者执行大版本升级前都强制走一遍备份流程。这份资源把安装、开发环境、实战和避坑串成了完整链路照着上面的步骤做一遍你对 Ubuntu 的掌控程度会明显不一样。希望帮到你。本文还有配套的精品资源点击获取
返回列表