简介:本文为新手开发者提供云服务器部署项目的完整指南,涵盖服务器选型、环境配置、项目部署、安全维护等关键环节,通过分步讲解和代码示例帮助快速实现项目上线。
云服务器(ECS)通过虚拟化技术提供弹性计算资源,相比传统物理服务器具有三大优势:
典型应用场景包括Web应用、API服务、数据库集群等。以阿里云ECS为例,其提供的突发性能实例(t6)适合轻量级应用,计算优化型(c6)适合高并发场景。
新手部署应重点关注以下参数:
示例配置单:
实例类型:ecs.c6.large(2核4G)操作系统:CentOS 7.9 64位公网带宽:5Mbps(按流量计费)系统盘:40GB ESSD云盘数据盘:100GB ESSD云盘
安全组相当于虚拟防火墙,需配置以下规则:
入方向:- 协议:TCP,端口:22,来源:指定IP(限制SSH访问)- 协议:TCP,端口:80/443,来源:0.0.0.0/0- 协议:ICMP,来源:0.0.0.0/0(可选)出方向:允许所有
创建专用部署用户并配置sudo权限:
# 添加用户adduser deployer# 设置密码passwd deployer# 配置sudo权限visudo /etc/sudoers# 添加行:deployer ALL=(ALL) NOPASSWD:ALL
以Node.js为例的安装流程:
# 使用nvm管理多版本curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.1/install.sh | bashsource ~/.bashrcnvm install --ltsnode -v # 应输出v16.x+
MySQL 8.0安装示例:
# 添加MySQL YUM源wget https://dev.mysql.com/get/mysql80-community-release-el7-6.noarch.rpmrpm -ivh mysql80-community-release-el7-6.noarch.rpmyum install mysql-community-serversystemctl start mysqld# 获取临时密码grep 'temporary password' /var/log/mysqld.log# 安全配置mysql_secure_installation
# 生成SSH密钥ssh-keygen -t ed25519 -C "deploy@yourdomain.com"# 添加公钥到Git平台cat ~/.ssh/id_ed25519.pub# 克隆代码git clone git@github.com:yourname/project.gitcd project# 安装依赖(Node.js示例)npm install --production
创建.env文件并设置敏感信息:
DB_HOST=localhostDB_USER=app_userDB_PASS=secure_passwordJWT_SECRET=random_string
# 安装PM2npm install pm2 -g# 启动应用pm2 start app.js --name "my-app"# 保存进程列表pm2 save# 设置开机自启pm2 startup# 查看状态pm2 status
配置示例(/etc/nginx/conf.d/myapp.conf):
server {listen 80;server_name yourdomain.com;location / {proxy_pass http://127.0.0.1:3000;proxy_set_header Host $host;proxy_set_header X-Real-IP $remote_addr;}# 静态资源缓存location ~* \.(jpg|jpeg|png|css|js)$ {expires 30d;access_log off;}}
# 安装htopyum install htop -y# 监控命令示例top -b -n 1 | head -10 # 查看CPU/内存iostat -x 1 # 磁盘IO监控netstat -tulnp # 端口监听检查
配置rsyslog集中日志:
# /etc/rsyslog.conf 添加*.* /var/log/myapp.log# 重启服务systemctl restart rsyslog
yum update -y/etc/security/limits.conf限制尝试次数mysqldump每日备份数据库/var/log/secure追踪管理操作| 现象 | 可能原因 | 解决方案 |
|---|---|---|
| 502错误 | 后端服务未启动 | 检查PM2状态,查看应用日志 |
| 连接超时 | 安全组未放行 | 确认安全组规则包含目标端口 |
| 403错误 | Nginx权限问题 | 检查静态资源目录权限(755) |
| CPU 100% | 内存泄漏 | 使用pm2 monit分析进程 |
npx clinic.js doctor进行全链路诊断ab -n 1000 -c 100 http://yourdomain.com/进行压力测试Docker部署示例:
FROM node:16-alpineWORKDIR /appCOPY package*.json ./RUN npm install --productionCOPY . .EXPOSE 3000CMD ["node", "app.js"]
构建并运行:
docker build -t myapp .docker run -d -p 3000:3000 --name myapp myapp
GitHub Actions工作流示例:
name: Deployon: [push]jobs:deploy:runs-on: ubuntu-lateststeps:- uses: actions/checkout@v2- name: Install dependenciesrun: npm install- name: Deploy to serveruses: appleboy/ssh-action@masterwith:host: ${{ secrets.SERVER_IP }}username: deployerkey: ${{ secrets.SSH_PRIVATE_KEY }}script: |cd ~/projectgit pullnpm install --productionpm2 reload my-app
通过系统化的部署流程和工具链,新手开发者可在3小时内完成从服务器选购到项目上线的完整过程。建议后续深入学习Terraform等IaC工具实现基础设施自动化,掌握Prometheus监控体系构建,逐步向DevOps工程师转型。