简介:本文详细讲解如何将个人网站或企业应用部署到云服务器,涵盖云服务器选择、环境配置、代码上传、安全加固等全流程,适合开发者及企业用户参考。
当前主流云服务商(如阿里云、腾讯云、AWS等)均提供多种实例类型,需根据网站特性选择:
配置建议:初期可采用1核2G实例测试,正式上线前通过压力测试工具(如JMeter)验证性能,再根据QPS(每秒查询数)调整配置。
sudo apt update && sudo apt install nginx(安装Nginx)镜像优化:选择预装LAMP/LEMP环境的镜像可节省30分钟配置时间,但需注意检查预装软件版本是否与项目兼容。
Nginx配置示例:
server {listen 80;server_name example.com;root /var/www/html;index index.html;location / {try_files $uri $uri/ =404;}# 静态资源缓存配置location ~* \.(jpg|jpeg|png|css|js)$ {expires 30d;add_header Cache-Control "public";}}
关键参数说明:
worker_processes auto:自动匹配CPU核心数client_max_body_size 20M:防止大文件上传失败gzip on:启用压缩(节省30%带宽)安全配置步骤:
CREATE USER 'web_app'@'192.168.1.%' IDENTIFIED BY 'StrongPassword123!';GRANT ALL PRIVILEGES ON app_db.* TO 'web_app'@'192.168.1.%';
[mysqld]ssl-ca=/etc/mysql/ssl/ca.pemssl-cert=/etc/mysql/ssl/server-cert.pemssl-key=/etc/mysql/ssl/server-key.pem
PHP 8.2配置优化:
; php.ini 关键配置upload_max_filesize = 50Mpost_max_size = 50Mmemory_limit = 256Mopcache.enable=1opcache.memory_consumption=128
Node.js环境管理:
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.5/install.sh | bashnvm install 18.16.0
pm2 start app.js --name "web-app" -i 4 # 启动4个实例pm2 savepm2 startup # 设置开机自启
| 方式 | 适用场景 | 速度 | 安全性 |
|---|---|---|---|
| SFTP | 小型项目/手动部署 | 中 | 高 |
| Git Hook | 中小型团队/自动触发 | 快 | 中 |
| CI/CD管道 | 大型项目/持续交付 | 最快 | 最高 |
Git Hook部署示例:
# 在服务器创建裸仓库mkdir -p /opt/repos/web-app.gitcd /opt/repos/web-app.gitgit init --bare# 添加post-receive钩子cat > hooks/post-receive <<EOF#!/bin/bashTARGET="/var/www/web-app"GIT_DIR="/opt/repos/web-app.git"BRANCH="main"while read oldrev newrev refdoif [[ \$ref =~ refs/heads/\$BRANCH ]];thenecho "Ref \$ref received. Deploying \${BRANCH} branch to production..."git --work-tree=\$TARGET --git-dir=\$GIT_DIR checkout -f \$BRANCH# 执行构建命令cd \$TARGET && npm install && npm run buildelseecho "Ref \$ref received. Doing nothing: only the \${BRANCH} branch may be deployed on this server."fidoneEOFchmod +x hooks/post-receive
Dockerfile最佳实践:
# 多阶段构建示例(React应用)FROM node:18-alpine as builderWORKDIR /appCOPY package*.json ./RUN npm installCOPY . .RUN npm run buildFROM nginx:alpineCOPY --from=builder /app/build /usr/share/nginx/htmlCOPY nginx.conf /etc/nginx/conf.d/default.confEXPOSE 80
docker-compose.yml示例:
version: '3.8'services:web:image: my-web-app:latestports:- "80:80"depends_on:- dbdb:image: mysql:8.0environment:MYSQL_ROOT_PASSWORD: securepasswordMYSQL_DATABASE: app_dbvolumes:- db_data:/var/lib/mysqlvolumes:db_data:
# 基本规则设置sudo ufw default deny incomingsudo ufw default allow outgoingsudo ufw allow 22/tcp # SSHsudo ufw allow 80/tcp # HTTPsudo ufw allow 443/tcp # HTTPSsudo ufw allow 3307/tcp # MySQL(修改端口后)sudo ufw enable
# 安装Certbotsudo apt install certbot python3-certbot-nginx# 获取证书(自动修改Nginx配置)sudo certbot --nginx -d example.com -d www.example.com# 设置自动续期测试sudo certbot renew --dry-run
Prometheus+Grafana监控栈:
关键监控指标:
tail -f /var/log/nginx/error.logpm2 list或systemctl status app-servicenetstat -tulnp | grep LISTENmysql -u web_app -p -h 127.0.0.1 -P 3307sudo ufw status numberedgrep bind-address /etc/mysql/mysql.conf.d/mysqld.cnfls -la /var/www/html/assets/
# 假设当前运行在/var/www/html(绿色环境)# 创建蓝色环境sudo cp -r /var/www/html /var/www/html-blue# 部署新版本到蓝色环境# 修改Nginx配置切换(通过sed或配置管理工具)sudo sed -i 's|root /var/www/html;|root /var/www/html-blue;|g' /etc/nginx/sites-enabled/defaultsudo systemctl reload nginx
以阿里云为例:
备份策略:
日志管理:
/etc/logrotate.d/nginx
/var/log/nginx/*.log {dailymissingokrotate 14compressdelaycompressnotifemptycreate 0640 www-data admsharedscriptspostrotate[ -s /run/nginx.pid ] && kill -USR1 `cat /run/nginx.pid`endscript}
安全更新:
sudo apt update && sudo apt list --upgradable通过以上系统化的部署流程,开发者可实现从代码到云服务器的全链路自动化部署,同时兼顾安全性与可扩展性。实际部署时建议先在测试环境验证所有步骤,再逐步迁移到生产环境。