服务器与架构运维手册
服务器与架构运维手册
title: 服务器与架构运维手册 tags: [知识提炼, 随笔提炼, 运维, 架构, Docker, "2026-05-08", "2026-05-11", "2026-06-02", "2026-07-27", "2026-08-18", "2026-08-21"] source: main/随笔/ created: 2026-08-30
服务器与架构运维手册
提炼自
main/随笔/共 6 篇日常随笔。来源日期见文首日期标签与文末「来源随笔汇总」。 自建服务器与多站点架构的一手实操:账号隔离、端口规划、Docker、框架选型、MCP 踩坑。
一、服务器账号职责隔离(安全基线)
三个账号各司其职,绝不混用:
| 账号 | 权限 | 用途 | 说明 |
|---|---|---|---|
deploy |
带 sudo,密钥 SSH | 运维账号,唯一登录入口 | 绝不跑业务代码 |
appuser |
完全无 sudo | 业务账号,所有项目以它运行 | 被入侵也不至于拿到 root |
root |
SSH 远程禁用 | 仅本地控制台 | 堵死最常见的爆破入口 |
落目录属:
mkdir -p /home/appuser/myapp && chown -R appuser:appuser /home/appuser/myapp
# 多项目按账号隔离
chown -R app-a:app-a /home/app-a/projA
二、端口集中规划
所有业务端口集中到 8650–9000 区间(实际落地 8650–8701),便于统一管理、防火墙放行与记忆 [[2026年08月18日的随笔]]
三、实际架构清单(2026-08 快照)
| 组件 | 实现 | 端口 / 备注 |
|---|---|---|
| Web 服务器 | Caddy(Docker,host 网络) | 80 / 443 |
bytecove-blog |
Spring Boot(PostgreSQL + Redis) | — |
yuechuji-api |
Python Flask | 8651 |
| WatchVault | .NET | 5000 ⚠️ 对外暴露,建议只监听 127.0.0.1 |
| swap | 2 个文件共 4 GB | — |
四、架构决策
Monorepo 多子站:pnpm workspaces + apps/*,每个子站独立 vite.config、独立 tailwind、独立样式;Vue 用 scoped,React 用 css-module,禁止全局公共主题包。
核心原则:业务隔离优先级高于代码复用——每个子站是独立产品,仅通过完整超链接跳转关联 [[2026年08月18日的随笔]]
框架选型踩坑:
- Spa 不适合 Agent 开发,要用 React + Next.js(Vercel 出品的 React 元框架)
- 看重 SEO 用 Nuxt3 / Next.js,每个 app 独立 SSR/SSG [[2026年08月18日的随笔]]
DNS 风险:全部子域名打到同一台服务器,靠 Nginx Host 虚拟主机区分站点 → 属单点架构,单机故障即全站不可用 [[2026年08月18日的随笔]]
五、Docker 实操链(Windows Docker Desktop 29.5.2 / WSL2)
docker run hello-world
docker pull eclipse-temurin:8-jdk
docker build -t my-java-app .
docker run --rm my-java-app
Dockerfile 编译 Java:WORKDIR /app → COPY Hello.java . → RUN javac Hello.java
镜像体积实测:eclipse-temurin:8-jdk 450 MB / postgres:18-alpine 409 MB / hello-world 25.9 kB
起 Postgres:docker run -d -p 5432:5432 -e POSTGRES_PASSWORD=root postgres:18-alpine [[2026年06月02日的随笔]]
MySQL 9:
docker run -d --name mysql \
-e MYSQL_ROOT_PASSWORD=123456 -e MYSQL_DATABASE=gdp_warehouse \
-e MYSQL_USER=mike -e MYSQL_PASSWORD=123456 \
-p 3306:3306 -v mysql_data:/var/lib/mysql \
mysql:9.0 --default-authentication-plugin=mysql_native_password
六、Docker vs 虚拟机:怎么选
| 场景 | 选择 | 理由 |
|---|---|---|
| 常规业务 | Docker | 轻量、启动快 |
| 政企涉密环境 | 虚拟机(VMware) | 容器共享内核,隔离等级不足;涉密需 CPU/内存硬件级隔离 [[2026年06月02日的随笔]] |
七、后端选型:PHP vs Spring Boot
| 框架 | 定位 | 适用 |
|---|---|---|
| PHP | Web 开发「瑞士军刀」,8.5 版性能与安全质变 | 中小企业 / 个人快速构建 |
| Spring Boot | 企业级「航空母舰」 | 复杂、高并发、高可用系统 |
本地起服务:php -S localhost:8000 [[2026年05月08日的随笔]]
八、前端基础速查
- Vue Router:
createRouter({ history: createWebHistory(), routes });滚动行为if (savedPosition) return savedPosition - pnpm 安装(Windows):
Invoke-WebRequest https://get.pnpm.io/install.ps1 -UseBasicParsing | Invoke-Expression,然后pnpm create vite - 识别网站用的什么框架:Vue → 控制台输入
Vue看是否定义,或查元素上的data-v-xxx属性;React → 看根节点的data-reactroot,或控制台输入React验证 [[2026年05月11日的随笔]]
九、MCP 协议踩坑
WatchVault.McpServer\Program.cs 的协议循环缺 initialize 响应分支(需补 5–10 行后重新 dotnet publish)。
不改的话这个 MCP 装不上、用不了——不是配置问题,是协议握手没实现 [[2026年08月18日的随笔]]
来源随笔汇总
- [[2026年05月08日的随笔]] — PHP vs Spring Boot 定位、pnpm 安装
- [[2026年05月11日的随笔]] — 前端框架识别技巧
- [[2026年06月02日的随笔]] — Docker 实操链、镜像体积、Docker vs VMware 选型、Vue Router
- [[2026年07月27日的随笔]] — MySQL 9 Docker 起法
- [[2026年08月18日的随笔]] — 账号隔离、端口规划、Monorepo 决策、架构踩坑、DNS 风险、MCP 坑
- [[2026年08月21日的随笔]] — 实际服务器架构清单(Caddy / Spring Boot / Flask / .NET / swap)