> ## Documentation Index
> Fetch the complete documentation index at: https://docs.akria.net/llms.txt
> Use this file to discover all available pages before exploring further.

# 生产环境 | Deployment Guide

> 个人服务部署指南和操作步骤

# 🚀 部署指南 | Deployment Guide

本文档提供在 K3s 集群上部署服务的详细步骤和操作指南。

<Warning>
  部署前请确保已阅读 [YAML 规范](/technical/infra-deploy/yaml-best-practices)，确保配置文件符合标准。
</Warning>

## 📋 前置准备 | Prerequisites

<Steps>
  <Step title="访问集群">
    确保已配置 `kubectl` 并能够访问 K3s 集群。
  </Step>

  <Step title="选择命名空间">
    根据服务类型选择合适的命名空间（npm / infra / apps / monitoring）。
  </Step>

  <Step title="准备配置文件">
    准备符合规范的 YAML 配置文件。
  </Step>
</Steps>

## 🚀 快速部署 | Quick Deployment

### 部署基础设施服务

```bash theme={null}
# 部署 PostgreSQL 数据库
kubectl apply -f manifests/infra/postgres/db.yaml

# 部署 Nginx Proxy Manager
kubectl apply -f manifests/infra/npm/npm.yaml

# 部署 Grafana 监控
kubectl apply -f manifests/infra/grafana/grafana.yaml
```

### 部署业务应用

```bash theme={null}
# 部署 Ghost 博客
kubectl apply -f manifests/apps/ghost/ghost.yaml

# 部署 n8n 自动化工作流
kubectl apply -f manifests/apps/n8n/n8n.yaml
```

<Tip>
  建议先部署基础设施服务（数据库、网关），再部署依赖这些服务的业务应用。
</Tip>

## 📊 查看服务状态 | Check Service Status

### 查看 Pod 状态

```bash theme={null}
# 查看所有命名空间的 Pod
kubectl get pods -A

# 查看特定命名空间的 Pod
kubectl get pods -n apps
kubectl get pods -n infra
```

### 查看服务状态

```bash theme={null}
# 查看所有命名空间的服务
kubectl get svc -A

# 查看特定服务的详细信息
kubectl describe svc <service-name> -n <namespace>
```

### 查看部署状态

```bash theme={null}
# 查看所有部署
kubectl get deployments -A

# 查看特定部署的详细信息
kubectl describe deployment <deployment-name> -n <namespace>
```

## 🔍 故障排查 | Troubleshooting

<AccordionGroup>
  <Accordion title="Pod 无法启动" icon="exclamation-triangle">
    ```bash theme={null}
    # 查看 Pod 日志
    kubectl logs <pod-name> -n <namespace>

    # 查看 Pod 详细信息
    kubectl describe pod <pod-name> -n <namespace>
    ```
  </Accordion>

  <Accordion title="服务无法访问" icon="network-wired">
    ```bash theme={null}
    # 检查 Service 配置
    kubectl get svc -n <namespace>

    # 检查 Ingress 配置
    kubectl get ingress -n <namespace>
    ```
  </Accordion>

  <Accordion title="资源不足" icon="gauge">
    ```bash theme={null}
    # 查看节点资源使用情况
    kubectl top nodes

    # 查看 Pod 资源使用情况
    kubectl top pods -A
    ```
  </Accordion>
</AccordionGroup>

## 🏷️ 命名空间使用指南 | Namespace Usage

### npm 命名空间

用于部署流量网关和管理服务：

```bash theme={null}
kubectl apply -f manifests/infra/npm/ -n npm
```

### infra 命名空间

用于部署基础设施服务（数据库、缓存等）：

```bash theme={null}
kubectl apply -f manifests/infra/postgres/ -n infra
kubectl apply -f manifests/infra/redis/ -n infra
```

### apps 命名空间

用于部署业务应用：

```bash theme={null}
kubectl apply -f manifests/apps/ghost/ -n apps
kubectl apply -f manifests/apps/n8n/ -n apps
```

### monitoring 命名空间

用于部署监控系统：

```bash theme={null}
kubectl apply -f manifests/infra/grafana/ -n monitoring
```

## 📝 部署检查清单 | Deployment Checklist

部署前请确认：

* [ ] 配置文件符合 [YAML 规范](/technical/infra-deploy/yaml-best-practices)
* [ ] 已选择正确的命名空间
* [ ] 资源限制已合理配置
* [ ] 健康检查探针已配置
* [ ] 服务依赖关系已考虑（如数据库先于应用部署）
* [ ] 配置文件已通过语法检查

## 🔄 更新和回滚 | Update and Rollback

### 更新服务

```bash theme={null}
# 更新部署配置
kubectl apply -f manifests/apps/ghost/ghost.yaml

# 查看更新状态
kubectl rollout status deployment/<deployment-name> -n <namespace>
```

### 回滚服务

```bash theme={null}
# 查看部署历史
kubectl rollout history deployment/<deployment-name> -n <namespace>

# 回滚到上一个版本
kubectl rollout undo deployment/<deployment-name> -n <namespace>

# 回滚到指定版本
kubectl rollout undo deployment/<deployment-name> --to-revision=2 -n <namespace>
```

## 📚 相关文档 | Related Documentation

<CardGroup cols={2}>
  <Card title="基础设施概览" icon="server" href="/technical/infra-deploy/infrastructure-overview">
    了解集群架构和服务访问方式
  </Card>

  <Card title="YAML 规范" icon="file-code" href="/technical/infra-deploy/yaml-best-practices">
    学习配置文件的标准格式
  </Card>

  <Card title="团队协作" icon="users" href="/guides/team-collab/welcome">
    了解开发流程和 Git 工作流
  </Card>

  <Card title="快速开始" icon="play" href="/guides/website-overview/quickstart">
    快速上手项目部署
  </Card>
</CardGroup>

<Note>
  遇到问题？查看我们的 [开发指南](/guides/website-overview/development) 或通过 GitHub Issues 联系团队。
</Note>
