手动部署基础

更新时间:2025-02-28 02:34:28

本文帮助用户将不同编程语言(Java、Go、Python、C++、Node.js)的代码产物在阿里云 ECS 上部署并运行。

手动部署在 CI/CD 中的角色

手动部署在自动化实践中扮演多重角色:

  • 作为自动化基准:通过暴露效率瓶颈/质量问题推动优化。

  • 过渡桥梁:渐进式脚本开发并集成到CI/CD工具。

  • 应急方案:临时替代崩溃的自动化流程。

  • 关键环节守门员:保留高危操作的人工审批与数据验证。

  • 培训载体:通过手动配置服务器/故障恢复帮助团队理解底层逻辑。

重要

过渡阶段需强化错误处理机制,应急操作后须同步更新自动化配置,人工介入应限定于高风险场景,培训需配合文档防止经验断层。

手动部署的优缺点分析

优点

  • 无需搭建自动化工具链,启动门槛低,适合快速验证小型项目原型。

  • 允许开发人员灵活调整流程(如跳过测试步骤),直接操作服务器响应紧急变更。

  • 全程人工介入确保操作透明可控,便于及时排查问题。

  • 同时作为自动化失效时的应急方案,尤其适用于低频部署或安全合规要求严格的敏感系统(如金融/政务场景)。

缺点

  • 人工重复操作效率低下且难以扩展多环境需求。

  • 环境差异(如本地依赖版本)和人为失误(配置错误、漏测)易引发部署结果不稳定,甚至生产事故。

  • 缺乏版本记录和回滚机制可能导致部署追溯困难;团队协作中易形成知识孤岛,并行任务易受资源冲突制约,阻碍持续交付能力。

手动部署实践

传输代码或产物到ECS实例

在部署构建前,需要将开发完成的代码或构建好的产物高效、安全地传输到ECS实例中,ECS提供了多种方式传输文件,以确保传输过程的可靠性和便捷性。具体操作,请参见选择传输文件的方式

多语言环境配置与构建实践

Java
Go
C++
Python
Node

环境配置

  1. 完成Java环境的配置。具体操作,请参见部署Java环境

  2. 安装构建工具。

    Java Web项目推荐使用MavenGradle作为构建工具。

部署与运行

以开源项目spring-boot-demo中的demo-template-thymeleaf模块作为案例。

  1. 运行以下命令,使用Git克隆项目。

    sudo git clone https://github.com/xkcoding/spring-boot-demo.git
  2. 运行以下命令,使用Maven构建项目。

    sudo cd spring-boot-demo/demo-template-thymeleaf
    sudo mvn clean package

    得到如下输出,则构建完成。

    image

  3. 运行以下命令,使用nohup在后台启动项目。

    sudo nohup java -jar target/demo-template-thymeleaf.jar > app.log 2>&1 &
    • nohup:防止进程在退出时接收到挂起信号。

    • > app.log:将标准输出重定向到 app.log 文件中。

    • 2>&1:将错误输出也重定向到 app.log

    • &:将进程放入后台运行。

  4. 运行以下命令,查看日志。

    sudo tail -f app.log

    在日志中有如下输出,则服务启动成功。

    image

  5. 在浏览器中访问http://<你的ECS公共IP>:8080/demo,访问项目页面。

环境配置

  1. 运行以下命令,安装Go编译器。

    # 以Go 1.23.6为例。
    
    # 下载go安装包
    sudo wget https://go.dev/dl/go1.23.6.linux-amd64.tar.gz
    # 解压
    sudo tar -zxvf go1.23.6.linux-amd64.tar.gz -C /usr/local/
    # 配置环境变量
    sudo echo 'export PATH=$PATH:/usr/local/go/bin' >> ~/.bash_profile && source ~/.bash_profile
  2. 运行以下命令,验证Go版本。

    go version

    得到如下输入,Go环境配置完成。

    image

构建与运行

以开源的go-admin,一个基于Gin + Vue + Element UI、Arco DesignAnt Design 的前后端分离权限管理系统脚手架项目作为案例,

  1. 运行以下命令,创建开发目录。

    # 创建开发目录
    sudo mkdir goadmin
    sudo cd goadmin
  2. 运行以下命令,获取项目前后端源码。

    重要

    两个项目必须放在同一文件夹下

    # 获取后端代码
    sudo git clone https://github.com/go-admin-team/go-admin.git
    
    # 获取前端代码
    sudo git clone https://github.com/go-admin-team/go-admin-ui.git
服务端启动
  1. 运行以下命令,更新项目依赖并构建项目。

    # 进入 go-admin 后端项目
    sudo cd ./go-admin
    # 更新整理依赖
    sudo go mod tidy
    # 编译项目
    sudo go build
  2. 部署MySQL数据库。具体操作,请参见部署MySQL数据库

  3. 运行以下命令,新建数据库,数据库名为go_admin

    sudo create database go_admin;
  4. 运行以下命令,修改配置文件。

    # 修改配置 
    # 文件路径  go-admin/config/settings.yml
    sudo vim ./config/settings.yml

    配置文件中,可修改服务启动端口号,以及数据库相关参数。

    image

  5. 运行以下命令,初始化数据库。

    sudo ./go-admin migrate -c config/settings.yml

    控制台输入数据库基础数据初始化成功,数据初始化完成。

    image

  6. 运行以下命令,启动go-admin服务。

    sudo ./go-admin server -c config/settings.yml -a true

    控制台输出服务运行地址,即服务启动成功。

    image

前端启动
  1. 运行以下命令,安装依赖。

    sudo npm install --registry=https://registry.npmmirror.com
  2. 运行以下命令,启动前端服务。

    sudo npm run dev

    控制台得到如下输出,则服务启动成功。

    image

  3. 在浏览器中访问<实例公网IP>:9527。打开如下页面,则服务部署成功,跟随页面指引完成系统配置即可开始使用。

    image

环境配置

运行以下命令,安装C++编译相关的构建工具。

#  Ubuntu/Debian 
sudo apt update
sudo apt install build-essential
#  CentOS/RHEL
sudo yum groupinstall "Development Tools"

创建C++源文件

使用文本编辑器(如 nanovimtouch)创建一个新的 C++ 文件。例如,创建一个简单的 Hello World 程序。

// hello.cpp
#include <iostream>

int main() {
    std::cout << "Hello, World!" << std::endl;
    return 0;
}

编译与运行

  1. 运行以下命令,编译程序。

    sudo g++ hello.cpp -o hello

    上述命令会生成一个名为 hello 的可执行文件。

  2. 运行以下命令,运行编译好的程序。

    sudo ./hello

    得到如下输出,则运行成功。

    image

  3. 如果项目较大,可以考虑使用 MakefileCMake 等构建系统来管理编译过程。

    1. 创建一个名为 Makefile 的文件。并写入如下内容。

      all: hello
      
      hello: hello.cpp
          g++ hello.cpp -o hello
      
      clean:
          rm -f hello
    2. 使用make命令来编译和生成可执行文件。

部署运行

以开源的Qexo项目,一个快速、强大、美观的在线静态博客编辑器为案例。

  1. 配置Python环境。具体操作,请参见部署Python环境

  2. 运行以下命令,使用Git获取Qexo源码。

    sudo git clone https://github.com/Qexo/Qexo.git
  3. 运行以下命令,安装项目所需依赖。

    sudo pip3 install -r requirements.txt
  4. 部署MySQL数据库。具体操作,请参见部署MySQL数据库

  5. 运行以下命令,新建Qexo数据库,数据库名为qexo_ecs

    create database qexo_ecs;
  6. 在项目根目录下,运行以下命令,打开配置文件。

    sudo cp configs.example.py configs.py
    sudo vim configs.py

    在配置文件中,添加以下配置。请替换配置中数据库IP,数据库用户名以及密码。

    import pymysql
    pymysql.install_as_MySQLdb()
    DOMAINS = ["127.0.0.1", "yoursite.com", "localhost"]
    DATABASES = {
        'default': {
                'ENGINE': 'django.db.backends.mysql',
                'NAME': 'qexo',
                'USER': 'root',
                'PASSWORD': '${db_pwd}',
                'HOST': '127.0.0.1',
                'PORT': '3306',
                'OPTIONS': {
                    "init_command": "SET sql_mode='STRICT_TRANS_TABLES'"
                }
        }
    }
    
  7. 运行以下命令,启动服务。

    sudo python3 manage.py makemigrations
    sudo python3 manage.py migrate
    sudo python3 manage.py runserver 0.0.0.0:8000 --noreload
  8. 实例安全组放通实例8000端口。具体操作,请参见添加安全组规则

  9. 浏览器中访问<实例公网IP>:8000。打开如下页面,则服务部署成功,跟随页面指引完成系统配置即可开始使用。

    image

在本文中,以开源项目vue-naive-admin,一个基于 Vue3 + Vite + Pinia + Unocss + Naive UI 的轻量级后台管理模板为案例,项目前端后端均为Node.js 构建。

后端
  1. 配置NodeJS环境。具体操作,请参见部署Node.js环境

  2. 运行以下命令,获取项目后端源码。

    sudo git clone https://github.com/zclzone/isme-nest-serve.git
  3. 运行以下命令,安装依赖。

    sudo npm i
  4. 部署MySQL数据库。具体操作,请参见部署MySQL数据库

  5. 运行以下命令,新建isme数据库。

    create database isme;
  6. 运行以下命令,初始化项目数据库。

     mysql -u[db username] -p[db pwd] isme < init.sql
  7. 运行以下命令,打开配置文件,并修改数据库连接信息。

    sudo vim .env
  8. 在配置文件中,修改服务端口,数据库相关参数。

    # 服务端口
    APP_PORT=8085
    
    # DB
    DB_HOST=localhost
    DB_PORT=3306
    DB_USER=[db username]
    DB_PWD=[db password]
    DB_DATABASE=isme
    DB_SYNC=true  # 是否开启同步,生产环境请设置成 false
    
    # Redis
    REDIS_URL=redis://default:123456@localhost:6379
    
    # JWT
    JWT_SECRET="d0!doc15415B0*4G0`"
    
    # 是否预览环境
    IS_PREVIEW=false 
  9. 运行以下命令,启动服务。

    sudo npm run start:dev

    控制台输出运行日志,则服务启动成功。

    image

前端
  1. 运行以下命令,获取前端项目源码。

    sudo git clone -b 2.x https://github.com/zclzone/vue-naive-admin.git
  2. 运行以下命令,安装项目依赖。

    sudo cd vue-naive-admin/
    sudo npm i
  3. 运行以下命令,启动项目。

    sudo npm run dev

    控制台输出访问路径,即项目启动成功。

    image

  4. 在浏览器中访问http://<实例的公网IP>:3200。得到如下页面则项目部署成功。

    image

系统性能监控与日志分析

image

完成系统配置与构建之后,需要对系统指标进行监控以及对系统日志进行采集、分析与告警。阿里云提供了完善的系统监控与日志分析解决方案,请参见如下文档配置系统监控、告警与日志分析。

  • 本页导读 (1)
  • 手动部署在 CI/CD 中的角色
  • 手动部署的优缺点分析
  • 手动部署实践
  • 传输代码或产物到ECS实例
  • 多语言环境配置与构建实践
  • 系统性能监控与日志分析