一、云服务器选型与准备
1.1 服务器选型原则
选择云服务器需综合考虑稳定性、性能和成本。建议选择提供弹性扩展能力的计算实例,根据项目负载选择合适配置(通常2核4G起步)。对于高可用场景,建议选择多可用区部署方案。
1.2 服务器获取与初始化
通过主流云控制台创建实例时,建议:
- 选择CentOS 8或Ubuntu 20.04 LTS系统
- 配置安全组规则开放必要端口(22/80/443/3306等)
- 创建具有sudo权限的专用部署用户
二、基础环境搭建
2.1 Java运行环境配置
# 安装OpenJDK 11(推荐LTS版本)sudo yum install -y java-11-openjdk-devel# 配置JAVA_HOME环境变量echo 'export JAVA_HOME=/usr/lib/jvm/java-11-openjdk' >> ~/.bashrcecho 'export PATH=$JAVA_HOME/bin:$PATH' >> ~/.bashrcsource ~/.bashrc# 验证安装java -versionjavac -version
2.2 MySQL数据库部署
# 安装MySQL 8.0社区版sudo yum install -y mysql-community-server# 启动服务并设置开机自启sudo systemctl enable --now mysqld# 安全初始化sudo mysql_secure_installation# 创建应用数据库(示例)mysql -u root -p <<EOFCREATE DATABASE app_db CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;CREATE USER 'app_user'@'%' IDENTIFIED BY 'SecurePass123!';GRANT ALL PRIVILEGES ON app_db.* TO 'app_user'@'%';FLUSH PRIVILEGES;EOF
2.3 Web服务器配置
# 安装Nginx稳定版sudo yum install -y nginx# 配置反向代理(示例配置)cat > /etc/nginx/conf.d/app.conf <<EOFserver {listen 80;server_name your-domain.com;location / {root /var/www/html;try_files \$uri \$uri/ /index.html;}location /api {proxy_pass http://localhost:8080;proxy_set_header Host \$host;proxy_set_header X-Real-IP \$remote_addr;}}EOF# 测试配置并启动sudo nginx -tsudo systemctl enable --now nginx
2.4 Node.js环境搭建
# 使用nvm管理多版本Node.jscurl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.5/install.sh | bashsource ~/.bashrc# 安装LTS版本nvm install --lts# 验证安装node -vnpm -v
三、项目构建与打包
3.1 后端项目构建
对于Maven项目:
<!-- pom.xml 关键配置示例 --><build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId><configuration><executable>true</executable></configuration></plugin></plugins></build>
构建命令:
mvn clean package -DskipTests# 生成的可执行jar包位于target目录
3.2 前端项目构建
Vue/React项目配置示例:
// vue.config.js 示例module.exports = {publicPath: process.env.NODE_ENV === 'production' ? '/static/' : '/',productionSourceMap: false,configureWebpack: {output: {filename: 'js/[name].[contenthash:8].js',chunkFilename: 'js/[name].[contenthash:8].js'}}}
构建命令:
npm installnpm run build# 生成的静态资源位于dist目录
四、自动化部署方案
4.1 文件传输方案
推荐使用rsync替代scp实现增量同步:
# 安装rsyncsudo yum install -y rsync# 后端部署示例rsync -avz --progress target/app.jar user@server:/opt/app/# 前端部署示例rsync -avz --delete dist/ user@server:/var/www/html/
4.2 服务管理脚本
创建部署脚本deploy.sh:
#!/bin/bashAPP_NAME="app-service"JAR_PATH="/opt/app/app.jar"LOG_PATH="/var/log/$APP_NAME.log"case "$1" instart)nohup java -jar $JAR_PATH >> $LOG_PATH 2>&1 &echo "$APP_NAME started";;stop)pkill -f $JAR_PATHecho "$APP_NAME stopped";;restart)$0 stopsleep 3$0 start;;status)if pgrep -f $JAR_PATH > /dev/null; thenecho "$APP_NAME is running"elseecho "$APP_NAME is stopped"fi;;*)echo "Usage: $0 {start|stop|restart|status}"exit 1esac
五、高级部署技巧
5.1 零停机部署
采用蓝绿部署策略:
- 准备两个相同环境的服务器组(蓝组/绿组)
- 通过负载均衡器切换流量
- 使用Nginx的upstream模块实现平滑切换
5.2 容器化部署方案
Docker部署示例:
# 后端DockerfileFROM openjdk:11-jre-slimVOLUME /tmpARG JAR_FILE=target/*.jarCOPY ${JAR_FILE} app.jarENTRYPOINT ["java","-jar","/app.jar"]# 构建镜像docker build -t app-backend .# 运行容器docker run -d -p 8080:8080 --name backend app-backend
5.3 监控告警配置
建议集成以下监控方案:
- 基础监控:CPU/内存/磁盘使用率
- 应用监控:JVM堆内存/GC次数/接口响应时间
- 日志监控:错误日志实时告警
六、常见问题解决方案
6.1 端口冲突处理
# 检查端口占用ss -tulnp | grep :8080# 终止占用进程kill -9 <PID>
6.2 文件权限问题
# 修改目录所有者sudo chown -R user:user /opt/app# 设置正确权限sudo chmod -R 755 /opt/app
6.3 数据库连接失败
检查项:
- 防火墙是否放行3306端口
- MySQL是否绑定0.0.0.0
- 用户权限是否配置正确
总结:通过标准化部署流程和自动化工具链的建立,可以显著提升项目交付效率和质量。建议将部署脚本纳入版本控制,配合CI/CD流水线实现全自动化部署。对于生产环境,建议采用容器编排平台(如Kubernetes)实现更高级的部署策略和弹性伸缩能力。