服务器部署应用全流程指南

张开发
2026/4/12 21:22:17 15 分钟阅读

分享文章

服务器部署应用全流程指南
这是一个非常全面的问题。在服务器上部署服务涉及多个层面从环境准备到持续运维。以下是一个完整的部署流程指南涵盖传统方式和现代容器化方案一、部署前准备1. 服务器环境准备# 更新系统 sudo apt update sudo apt upgrade -y # Ubuntu/Debian sudo yum update -y # CentOS/RHEL # 安装基础工具 sudo apt install -y curl wget git vim htop net-tools2. 安全加固# 创建非root用户 sudo adduser deployer sudo usermod -aG sudo deployer # 配置SSH密钥登录禁用密码登录 # 编辑 /etc/ssh/sshd_config: # PasswordAuthentication no # PubkeyAuthentication yes # 配置防火墙 sudo ufw default deny incoming sudo ufw default allow outgoing sudo ufw allow ssh sudo ufw allow http sudo ufw allow https sudo ufw enable二、应用部署方式方式一传统部署适合简单应用以 Python Django 应用为例# 1. 安装依赖 sudo apt install -y python3-pip python3-venv nginx supervisor # 2. 创建应用目录 mkdir -p /var/www/myapp cd /var/www/myapp # 3. 克隆代码并创建虚拟环境 git clone https://github.com/yourrepo/myapp.git . python3 -m venv venv source venv/bin/activate pip install -r requirements.txt # 4. 配置 GunicornWSGI服务器 # 创建 /etc/supervisor/conf.d/myapp.conf: [program:myapp] directory/var/www/myapp command/var/www/myapp/venv/bin/gunicorn -w 4 -b 127.0.0.1:8000 myapp.wsgi:application autostarttrue autorestarttrue userdeployer stderr_logfile/var/log/myapp.err.log stdout_logfile/var/log/myapp.out.log # 5. 配置 Nginx 反向代理 # /etc/nginx/sites-available/myapp: server { listen 80; server_name your-domain.com; location / { proxy_pass http://127.0.0.1:8000; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; } location /static/ { alias /var/www/myapp/static/; } } sudo ln -s /etc/nginx/sites-available/myapp /etc/nginx/sites-enabled/ sudo nginx -t sudo systemctl restart nginx方式二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 [gunicorn, -w, 4, -b, 0.0.0.0:8000, myapp.wsgi:application]# docker-compose.yml version: 3.8 services: app: build: . ports: - 8000:8000 environment: - DATABASE_URLpostgresql://user:passdb:5432/mydb depends_on: - db - redis db: image: postgres:15 environment: POSTGRES_DB: mydb POSTGRES_USER: user POSTGRES_PASSWORD: pass volumes: - postgres_data:/var/lib/postgresql/data redis: image: redis:7-alpine nginx: image: nginx:alpine ports: - 80:80 - 443:443 volumes: - ./nginx.conf:/etc/nginx/nginx.conf - ./ssl:/etc/nginx/ssl depends_on: - app volumes: postgres_data:部署命令# 安装 Docker curl -fsSL https://get.docker.com | sh sudo usermod -aG docker deployer # 部署应用 git clone https://github.com/yourrepo/myapp.git cd myapp docker-compose up -d --build # 查看日志 docker-compose logs -f app三、生产环境关键配置1. 环境变量管理# 使用 .env 文件不要提交到Git # .env.production DEBUGFalse SECRET_KEYyour-secret-key-here DATABASE_URLpostgresql://... REDIS_URLredis://localhost:6379/0 # 或使用 Docker Secrets / Kubernetes Secrets2. SSL/TLS 证书Lets Encrypt# 安装 certbot sudo apt install certbot python3-certbot-nginx # 自动获取并配置证书 sudo certbot --nginx -d your-domain.com -d www.your-domain.com # 自动续期 sudo systemctl enable certbot.timer3. 日志与监控# docker-compose 中添加日志收集 services: app: logging: driver: json-file options: max-size: 10m max-file: 3 # 可选添加 Prometheus Grafana 监控 prometheus: image: prom/prometheus volumes: - ./prometheus.yml:/etc/prometheus/prometheus.yml grafana: image: grafana/grafana ports: - 3000:3000四、CI/CD 自动化部署GitHub Actions 示例# .github/workflows/deploy.yml name: Deploy to Production on: push: branches: [main] jobs: deploy: runs-on: ubuntu-latest steps: - uses: actions/checkoutv3 - name: Deploy to Server uses: appleboy/ssh-actionmaster with: host: ${{ secrets.HOST }} username: deployer key: ${{ secrets.SSH_KEY }} script: | cd /var/www/myapp git pull origin main docker-compose down docker-compose up -d --build docker system prune -f五、部署检查清单检查项状态✅ 服务器安全加固防火墙、SSH密钥✅ 应用依赖完整安装✅ 环境变量正确配置✅ 数据库迁移执行✅ 静态文件收集✅ 域名解析正确✅ SSL证书配置✅ 反向代理配置✅ 日志轮转配置✅ 监控告警设置✅ 自动备份策略✅ 健康检查端点六、故障排查常用命令# 查看服务状态 sudo systemctl status nginx docker-compose ps # 查看日志 sudo journalctl -u myapp -f docker-compose logs -f --tail100 # 网络检查 netstat -tlnp curl -v http://localhost:8000/health # 资源监控 htop df -h docker stats

更多文章