服务端2月17日 14:53
Docker Desktop 怎么用?安装配置和常见问题Docker Desktop 是在 Mac 和 Windows 上用 Docker 最省事的方式——装一个应用就拥有完整的 Docker 环境,不需要折腾虚拟机或 Linux 双系统。但它不只是个安装包,里面的 WSL2 集成、Kubernetes 支持、资源管理有些门道值得了解。
## Docker Desktop 里装了什么
Docker Desktop 不是 Docker Engine 的 GUI 包装——它是一个完整的开发环境:
| 组件 | 作用 |
|------|------|
| Docker Engine | 容器运行时 |
| Docker CLI | 命令行工...服务端2月17日 14:54
Docker 反向代理该用 Nginx 还是 Traefik?部署和自动发现对比Docker 部署反向代理的核心问题是:容器 IP 每次重启都会变,手动配 upstream 不现实。Nginx 需要手动更新配置,Traefik 能自动发现容器。选哪个取决于你的场景。
## Nginx:手动配置但性能最强
### 基本反向代理
```yaml
# docker-compose.yml
services:
nginx:
image: nginx:1.25
ports:
- "80:80"
- "443:443"
volumes:
- ./nginx/conf.d:/etc/nginx/conf.d:r...服务端2月17日 14:54
Docker 容器怎么监控?Prometheus + Grafana 完整方案容器出问题了,`docker stats` 只能看到 CPU 和内存——磁盘 IO、网络、进程状态全不知道。完整的监控系统需要指标采集、存储、可视化、告警四层。
## Docker 监控的四层架构
```
容器 → 采集器 → 存储后端 → 可视化
cAdvisor Prometheus Grafana
Node Loki
Exporter
```
- **采集层**:从容器和宿主机收集指标数据
- **存储层**:时序数据库存指标,日志库存日志
- **可视化层**:Dashboard 展示趋势、图表
- **告...服务端2月17日 14:54
Docker 容器日志怎么聚合?ELK、Loki 和 EFK 怎么选容器一多,日志分散在各处——`docker logs` 只能看单个容器的输出,排查问题要一个一个翻。日志聚合把所有容器的日志集中到一个地方,搜索、过滤、告警一站搞定。
## Docker 日志驱动:日志的入口
Docker 支持多种日志驱动,决定容器日志的去向:
```bash
# 查看当前日志驱动
docker info --format '{{.LoggingDriver}}'
# 默认是 json-file
```
```yaml
# docker-compose.yml 全局配置
services:
app:
logging:
driver: js...服务端2月17日 14:54
Docker 容器配置怎么管理?环境变量、挂载和配置中心怎么选Docker 容器的配置管理不是把配置写死在镜像里——那样每次改配置都得重新构建。正确做法是配置与镜像分离,容器启动时注入配置,运行时能动态更新。这篇讲清楚 Docker 环境下四种配置管理方式的适用场景和实现方法。
## 环境变量:最简单的配置注入
适合少量、扁平的配置项(数据库地址、端口、开关):
```yaml
# docker-compose.yml
services:
app:
image: myapp:latest
environment:
- DB_HOST=postgres
- DB_PORT=5432
- L...服务端2月17日 18:52
TypeORM 查询该用 find 还是 QueryBuilder?三种方式适用场景对比TypeORM 查询数据有三条路:`find` 系列方法、`QueryBuilder`、原生 SQL。很多人上来就用 QueryBuilder,其实 80% 的查询 `find` 就够了——更简洁、类型安全、不容易出错。这篇把三种方式的适用边界和常见坑讲清楚。
## find:日常查询的首选
### 基础查询
```typescript
// 查所有
const users = await userRepository.find();
// 按 ID 查一条
const user = await userRepository.findOne({ where: { id: 1 } ...服务端2月17日 18:01
Next.js 状态管理该用哪个方案?Server Component 到 Zustand 怎么选Next.js App Router 引入了 Server Components 后,状态管理的思路和纯 SPA 完全不同。很多数据根本不需要客户端状态——服务端直接获取、渲染、返回 HTML,客户端零 JS 开销。只有真正需要交互的数据才用客户端状态管理。
## 先问:这个状态真的需要客户端管理吗?
| 场景 | 方案 | 需要 JS 吗 |
|------|------|-----------|
| 页面初始数据 | Server Component 直接 fetch | 不需要 |
| 用户个人信息 | Server Component + cookies | 不需要 |
| ...服务端2月17日 18:19
Next.js 错误处理全指南:error.tsx、global-error 和 API 错误分层方案Next.js 应用出错时,用户看到的不能是一个白屏或一堆报错代码。App Router 提供了分层错误处理机制——从组件级到全局级,每一层都有专门的文件处理。搞清这些层级,就能让错误发生时用户仍然能看到有意义的提示,而不是整个应用崩溃。
## 错误处理层级
```
组件内 try/catch → 处理可预期的业务错误
↓ 未捕获
error.tsx → 路由级 Error Boundary
↓ 仍未捕获
global-error.tsx → 全局兜底(根 layout 也崩了)
```
从内到外,每一层兜住上一层没处理的错误。
## erro...服务端2月17日 18:21
Next.js 缓存全解析:四层缓存机制和失效策略实战Next.js 的缓存机制是它的性能杀手锏,也是最容易让人困惑的部分。一个 `fetch` 请求可能被缓存 5 秒也可能永久缓存,取决于一行配置。搞不清缓存层级,就会出现"数据改了但页面没更新"的诡异问题。
## 四层缓存,各有各的失效机制
```
请求进来
→ 请求记忆(同一渲染周期内的去重)
→ 数据缓存(fetch 结果持久化)
→ 路由缓存(Router Cache,客户端缓存)
→ 完整路由缓存(构建时静态化)
```
从上到下,缓存粒度从细到粗。任何一层命中都不会继续往下查。
## 第一层:请求记忆(Request Memoization)
同一个 ...服务端2月17日 18:23
Next.js App Router vs Pages Router:核心区别和渐进式迁移指南Next.js 13 引入的 App Router 不是 Pages Router 的替代品——它是一套全新的架构,基于 React Server Components,改变了数据获取、渲染和路由的整个思维方式。迁移不是改个目录名那么简单。
## 核心区别一表看懂
| 维度 | Pages Router | App Router |
|------|-------------|------------|
| 目录 | `pages/` | `app/` |
| 路由文件 | `pages/about.js` | `app/about/page.tsx` |
| API 路由 | `p...