云计算百科
云计算领域专业知识百科平台

代码部署入门:从本地到服务器

代码部署入门:从本地到服务器

代码写完了,怎么部署到服务器上?

今天分享几种常用的部署方式,从简单到规范。

方式一:手动上传

最原始的方式,用scp或sftp上传。

scp上传:

# 上传单个文件
scp app.jar root@服务器IP:/opt/app/

# 上传整个目录
scp -r dist/ root@服务器IP:/var/www/

然后SSH上去启动:

ssh root@服务器IP
cd /opt/app
java -jar app.jar

简单粗暴,适合个人项目。

方式二:rsync同步

比scp更智能,只传输变化的文件:

rsync -avz –delete dist/ root@服务器IP:/var/www/mysite/

参数说明:

  • -a 归档模式,保留权限等
  • -v 显示详情
  • -z 压缩传输
  • –delete 删除目标端多余的文件

比scp快,适合文件多的项目。

方式三:简单部署脚本

把部署步骤写成脚本:

#!/bin/bash
# deploy.sh

SERVER="root@服务器IP"
APP_PATH="/opt/app"
JAR_NAME="myapp.jar"

echo "1. 打包…"
mvn clean package -DskipTests

echo "2. 上传…"
scp target/$JAR_NAME $SERVER:$APP_PATH/

echo "3. 重启服务…"
ssh $SERVER << 'EOF'
cd /opt/app
pid=$(pgrep -f myapp.jar)
if [ -n "$pid" ]; then
kill $pid
sleep 3
fi
nohup java -jar myapp.jar > app.log 2>&1 &
echo "启动完成"
EOF

echo "部署完成!"

以后部署只需要:

./deploy.sh

方式四:使用systemd管理

把应用注册成系统服务,方便管理。

创建服务文件:

sudo vim /etc/systemd/system/myapp.service

[Unit]
Description=My Application
After=network.target

[Service]
Type=simple
User=app
WorkingDirectory=/opt/app
ExecStart=/usr/bin/java -jar /opt/app/myapp.jar
Restart=always
RestartSec=10

[Install]
WantedBy=multi-user.target

启用服务:

sudo systemctl daemon-reload
sudo systemctl enable myapp
sudo systemctl start myapp

管理命令:

systemctl start myapp # 启动
systemctl stop myapp # 停止
systemctl restart myapp # 重启
systemctl status myapp # 查看状态
journalctl -u myapp -f # 查看日志

方式五:Docker部署

用Docker打包,环境一致性更好。

Dockerfile:

FROM openjdk:17-slim
WORKDIR /app
COPY target/myapp.jar app.jar
EXPOSE 8080
CMD ["java", "-jar", "app.jar"]

构建和运行:

# 本地构建镜像
docker build -t myapp:v1 .

# 保存镜像
docker save myapp:v1 | gzip > myapp.tar.gz

# 上传到服务器
scp myapp.tar.gz root@服务器IP:/opt/

# 服务器上加载运行
ssh root@服务器IP
docker load < myapp.tar.gz
docker run -d -p 8080:8080 –name myapp myapp:v1

前端项目部署

前端打包后是静态文件,上传到Nginx目录就行。

打包:

npm run build

上传:

rsync -avz –delete dist/ root@服务器IP:/var/www/mysite/

Nginx配置:

server {
listen 80;
server_name example.com;
root /var/www/mysite;

location / {
try_files $uri $uri/ /index.html;
}
}

部署脚本进阶版

加上备份和回滚功能:

#!/bin/bash
# deploy.sh

SERVER="root@服务器IP"
APP_PATH="/opt/app"
BACKUP_PATH="/opt/backup"
JAR_NAME="myapp.jar"
DATE=$(date +%Y%m%d_%H%M%S)

echo "1. 打包…"
mvn clean package -DskipTests

echo "2. 备份旧版本…"
ssh $SERVER "cp $APP_PATH/$JAR_NAME $BACKUP_PATH/${JAR_NAME}_$DATE"

echo "3. 上传新版本…"
scp target/$JAR_NAME $SERVER:$APP_PATH/

echo "4. 重启服务…"
ssh $SERVER "systemctl restart myapp"

echo "5. 健康检查…"
sleep 10
if curl -s http://服务器IP:8080/health | grep -q "UP"; then
echo "部署成功!"
else
echo "部署失败,正在回滚…"
ssh $SERVER "cp $BACKUP_PATH/${JAR_NAME}_$DATE $APP_PATH/$JAR_NAME"
ssh $SERVER "systemctl restart myapp"
fi

常见问题

Q:部署后启动失败?

  • 看日志:journalctl -u myapp -f
  • 检查端口:ss -tlnp | grep 8080
  • 检查权限
  • Q:服务启动很慢?

    参考前面的SpringBoot启动优化文章。

    Q:怎么做到零停机部署?

    需要负载均衡+滚动更新,后面可以单独讲。

    远程部署技巧

    我管理多个环境(开发、测试、生产),用星空组网把它们连起来,部署脚本里直接用虚拟IP:

    # 部署到测试环境
    scp target/myapp.jar root@10.26.1.10:/opt/app/

    # 部署到生产环境
    scp target/myapp.jar root@10.26.1.20:/opt/app/

    不用配VPN,在哪都能部署,很方便。

    部署方式选择

    场景推荐方式
    个人项目 scp + 脚本
    小团队 rsync + systemd
    正规项目 Docker + CI/CD
    大型项目 Kubernetes

    小结

    部署的核心步骤:

  • 打包(mvn package / npm build)
  • 上传(scp / rsync / docker push)
  • 启动(systemctl / docker run)
  • 验证(curl健康检查)
  • 从简单开始,慢慢规范化。

    有问题评论区交流~

    赞(0)
    未经允许不得转载:网硕互联帮助中心 » 代码部署入门:从本地到服务器
    分享到: 更多 (0)

    评论 抢沙发

    评论前必须登录!