运维与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开发