跳到主要内容

运维与DevOps

构建自动化的软件交付流水线

DevOps技术栈

基础设施
├── Linux系统管理
├── 网络基础
└── 云服务 (AWS/阿里云)

容器化
├── Docker
├── Kubernetes
└── Docker Compose

CI/CD
├── GitHub Actions
├── GitLab CI
├── Jenkins
└── ArgoCD

监控运维
├── Prometheus + Grafana
├── ELK Stack
└── Ansible

Linux基础命令

# 文件操作
ls -la # 列出文件详情
cd /path/to/dir # 切换目录
mkdir -p dir1/dir2 # 创建多级目录
cp -r source dest # 复制目录
mv old new # 移动/重命名
rm -rf dir # 删除目录

# 文本处理
cat file.txt # 查看文件
head -n 20 file.txt # 前20行
tail -f log.txt # 实时查看日志
grep "pattern" file # 搜索文本
awk '{print $1}' file # 提取第一列

# 进程管理
ps aux # 查看进程
top # 资源监控
kill -9 PID # 强制终止进程
nohup command & # 后台运行

# 网络
curl -X GET url # HTTP请求
netstat -tlnp # 查看端口
ssh user@host # 远程连接
scp file user@host:path # 远程复制

Docker容器化

Dockerfile

# 基础镜像
FROM python:3.11-slim

# 设置工作目录
WORKDIR /app

# 复制依赖文件
COPY requirements.txt .

# 安装依赖
RUN pip install --no-cache-dir -r requirements.txt

# 复制应用代码
COPY . .

# 暴露端口
EXPOSE 8000

# 启动命令
CMD ["python", "app.py"]

Docker常用命令

# 镜像操作
docker build -t myapp:v1 . # 构建镜像
docker images # 列出镜像
docker pull nginx # 拉取镜像
docker push myapp:v1 # 推送镜像

# 容器操作
docker run -d -p 8080:80 nginx # 运行容器
docker ps # 查看运行中容器
docker ps -a # 查看所有容器
docker logs container_id # 查看日志
docker exec -it container_id bash # 进入容器
docker stop container_id # 停止容器
docker rm container_id # 删除容器

# 清理
docker system prune # 清理无用资源

Docker Compose

# docker-compose.yml
version: '3.8'

services:
web:
build: .
ports:
- "8000:8000"
environment:
- DATABASE_URL=postgresql://db:5432/mydb
depends_on:
- db
- redis
volumes:
- ./app:/app

db:
image: postgres:15
environment:
POSTGRES_DB: mydb
POSTGRES_USER: user
POSTGRES_PASSWORD: password
volumes:
- postgres_data:/var/lib/postgresql/data

redis:
image: redis:7-alpine
ports:
- "6379:6379"

volumes:
postgres_data:
# Compose命令
docker-compose up -d # 启动服务
docker-compose down # 停止服务
docker-compose logs -f # 查看日志
docker-compose ps # 查看状态

GitHub Actions CI/CD

# .github/workflows/ci.yml
name: CI/CD Pipeline

on:
push:
branches: [main]
pull_request:
branches: [main]

jobs:
test:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4

- name: Set up Python
uses: actions/setup-python@v5
with:
python-version: '3.11'

- name: Install dependencies
run: |
python -m pip install --upgrade pip
pip install -r requirements.txt

- name: Run tests
run: pytest tests/

build:
needs: test
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4

- name: Build Docker image
run: docker build -t myapp:${{ github.sha }} .

- name: Login to Registry
run: echo "${{ secrets.REGISTRY_TOKEN }}" | docker login -u ${{ secrets.REGISTRY_USER }} --password-stdin

- name: Push image
run: docker push myapp:${{ github.sha }}

deploy:
needs: build
runs-on: ubuntu-latest
if: github.ref == 'refs/heads/main'
steps:
- name: Deploy to server
uses: appleboy/ssh-action@master
with:
host: ${{ secrets.SERVER_HOST }}
username: ${{ secrets.SERVER_USER }}
key: ${{ secrets.SSH_PRIVATE_KEY }}
script: |
docker pull myapp:${{ github.sha }}
docker stop myapp || true
docker rm myapp || true
docker run -d --name myapp -p 8000:8000 myapp:${{ github.sha }}

Kubernetes基础

# deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: myapp
spec:
replicas: 3
selector:
matchLabels:
app: myapp
template:
metadata:
labels:
app: myapp
spec:
containers:
- name: myapp
image: myapp:v1
ports:
- containerPort: 8000
resources:
limits:
memory: "256Mi"
cpu: "500m"
livenessProbe:
httpGet:
path: /health
port: 8000
initialDelaySeconds: 10
periodSeconds: 5
---
apiVersion: v1
kind: Service
metadata:
name: myapp-service
spec:
selector:
app: myapp
ports:
- port: 80
targetPort: 8000
type: LoadBalancer
# K8s常用命令
kubectl apply -f deployment.yaml # 应用配置
kubectl get pods # 查看Pod
kubectl get services # 查看服务
kubectl logs pod-name # 查看日志
kubectl exec -it pod-name -- bash # 进入Pod
kubectl scale deployment myapp --replicas=5 # 扩缩容

学习路线图

第1阶段:基础 (2-3个月)
├── Linux系统管理
├── Shell脚本编程
├── 网络基础知识
└── Git版本控制

第2阶段:容器化 (2-3个月)
├── Docker使用
├── Docker Compose
├── 镜像优化
└── 容器网络

第3阶段:CI/CD (2-3个月)
├── GitHub Actions
├── 自动化测试
├── 自动化部署
└── 代码质量检查

第4阶段:云原生 (持续)
├── Kubernetes
├── 服务网格
├── 可观测性
└── GitOps

本章小结

  • Linux:运维基础技能
  • Docker:应用容器化
  • CI/CD:自动化流水线
  • K8s:容器编排管理

→ 继续阅读:42-区块链与Web3开发