更新时间:2026-04-22 GMT+08:00
分享

手动部署基础

在弹性云服务器上部署并运行多种编程语言的代码产物时,可参考本文设置环境、部署代码,确保应用程序能够顺利运行。

背景概览

在持续集成与持续部署(CI/CD)流程高度自动化的背景下,手动部署并未完全退出舞台,它在开发运维(DevOps)实践中仍具有多重意义:

  • 衡量自动化成效的基准:通过人工执行部署,能够直观发现流程中的效率瓶颈与质量风险,为优化自动化脚本提供明确方向。
  • 迈向自动化的实践桥梁:团队可以先将复杂的部署步骤以手动方式跑通,再逐步将其固化为自动化脚本,降低直接上自动化工具的门槛。
  • 应对突发状况的备用方案:当自动化流水线因故障或变更中断时,手动部署可作为紧急手段恢复服务,确保业务连续性。
  • 高风险操作的安全屏障:对于数据库变更、权限调整等敏感操作,保留人工审核与手动执行环节,可有效避免因自动化误操作导致的事故。
  • 深化团队理解的培训工具:让新成员或开发人员亲自动手部署,有助于他们快速理解服务器环境、依赖关系等底层知识,弥补自动化“黑盒”带来的认知盲区。

需要注意的是,手动部署同样存在明显不足:操作效率低、易引入人为错误、缺乏可追溯的版本记录,且在多人协作时容易形成信息孤岛。

因此,建议仅在项目初期、自动化失效或高危操作等场景下有限使用,生产环境的常态化部署仍应优先采用成熟的自动化工具。

部署构建

构建前,需要将开发完成的代码或构建好的产物传到弹性云服务器中,传输文件的方式参考上传文件到云服务器方式概览

以下构建实践仅供示例参考。

编程语言

构建实践

Java

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

Go

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

C++

创建一个简单的Hello World程序。

Python

以开源的DashGo项目,一个开箱即用的低代码WEB框架,基于Plotly Dash框架和Fac开源组件库开发。

Node

以开源项目MultiMind为例,一个基于Node.js开发的项目,能创建并对话一个独立AI 角色的 Web 应用。

Java

  1. 检查Java环境

    java -version

    回显如下,说明已安装了环境。若未安装,可执行以下命令安装。

    1. 更新包管理工具。

      使用dnf工具的系统(如CentOS 8等)

      sudo dnf update

      使用yum工具的系统(如CentOS 7等)

      sudo yum update

      使用apt工具的系统(如Ubuntu、Debian等)

      sudo apt update
    2. 搜索当前系统支持的OpenJDK安装包。

      使用dnf工具的系统(如CentOS 8等)

      sudo dnf search openjdk

      使用yum工具的系统(如CentOS 7等)

      sudo yum search openjdk

      使用apt工具的系统(如Ubuntu、Debian等)

      sudo apt search openjdk
    3. 安装Java。

      使用dnf工具的系统(如CentOS 8等)

      sudo dnf install -y java-1.8.0-openjdk-devel

      使用yum工具的系统(如CentOS 7等)

      sudo yum install -y java-1.8.0-openjdk-devel

      使用apt工具的系统(如Ubuntu、Debian等)

      sudo apt-get install -y openjdk-8-jdk
      • 若只需运行Java程序,安装java-1.8.0-openjdk 即可。
      • 若需开发Java 程序(编译、打包等),必须安装java-1.8.0-openjdk-devel,它通常会自动依赖并安装基础包。
    4. 验证Java安装情况,安装成功会显示版本信息。
      java -version

  2. 安装构建工具,一般使用Maven或Gradle。

  3. 使用Git克隆项目。

    git clone https://github.com/xkcoding/spring-boot-demo.git

    若无Git,可以执行sudo yum install -y git进行安装。

  4. 使用Maven构建项目,需要根据自己克隆项目的所在路径进入项目,示例中的项目在/root/spring-boot-demo/demo-template-thymeleaf中。

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

    回显如下,说明构建完成。

  5. 使用nohup在后台启动项目。

    sudo nohup java -jar target/demo-template-thymeleaf.jar > app.log 2>&1 &
    • nohup:避免进程在退出时收到挂起信号。
    • > app.log:将标准输出定向到app.log文件。
    • 2>&1:将错误输出重定向到app.log文件。
    • &:后台运行进程。

  6. 查看日志情况。

    sudo tail -f app.log

    回显如下,表示服务启动成功。

  7. 输入地址http://<弹性云服务器的IP地址>:8080/demo,访问项目。

Go

  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

    若wget下载报错可以考虑使用Go语言中文网镜像。

    sudo wget https://golang.google.cn/dl/go1.23.6.linux-amd64.tar.gz

  2. 验证Go版本。

    go version

    回显如下,表示Go配置完成。

  3. 创建开发目录。

    mkdir goadmin && cd goadmin

  4. 获取项目源码,放到同一个目录路径下,此处以/root/goadmin路径为例。

    # 获取后端代码
    git clone https://github.com/go-admin-team/go-admin.git  
    # 获取前端代码
    git clone https://github.com/go-admin-team/go-admin-ui.git

    若无Git,可以执行sudo yum install -y git进行安装。

  5. 启动服务端。

    1. 更新项目依赖并构建项目。
      # 进入 go-admin 后端项目
      sudo cd ./go-admin
      # 更新整理依赖
      go mod tidy 
      # 编译项目
      go build

      执行超时时可以尝试执行如下命令进行配置:

      # 设置代理为 goproxy.cn
      export GOPROXY=https://goproxy.cn,direct  
      # 设置校验和数据库为国内可访问的地址 
      export GOSUMDB=sum.golang.google.cn  
      # 验证是否设置成功 
      go env | grep -E 'GOPROXY|GOSUMDB'

      设置成功后可以再次执行原有编译命令即可。

    2. 部署MySQL数据库,详情可参考Linux系统中部署MySQL数据库
    3. 进入数据库。
      sudo mysql -uroot -p

      回车后输入密码。

    4. 新建名为go_admin的数据库,创建成功后退出数据库。
      create database go_admin;
    5. 修改配置文件,文件路径/root/goadmin/go-admin/config/settings.yml。
      sudo vim ./config/settings.yml

      如下图所示,可根据实际情况修改端口号、数据库等参数,此处示例中,需要修改数据库部分user、password、dbname为之前步骤中配置的数据库的用户名、密码以及数据库名go_admin。

    6. 初始化数据库,在go-admin路径下执行该命令,本文中为/root/goadmin/go-admin路径。
      sudo ./go-admin migrate -c config/settings.yml

      回显中显示 数据库基础数据初始化成功,表示数据初始化完成。

    7. 启动go-admin服务。
      sudo ./go-admin server -c config/settings.yml -a true

      控制台回显如下,可见访问地址,表示服务启动成功。

  6. 启动客户端。

    1. 进入前端项目路径。
      sudo cd ./go-admin-ui
    2. 安装依赖。
      npm install --registry=https://registry.npmmirror.com --legacy-peer-deps

      若提示无npm包,可参考如下命令安装。

      curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.7/install.sh | bash
      source ~/.bashrc
      nvm install --lts
    3. 启动前端服务。
      npm run dev

      回显如下,表示服务启动成功。

      若提示报错Error:error:0308010C:digital envelope routines::unsupported,可执行以下命令兼容旧算法。

      export NODE_OPTIONS=--openssl-legacy-provider
    4. 在浏览器访问http://<弹性云服务器公网IP>:9527。回显如下,表示服务部署成功,根据指引配置系统后即可使用。

C++

  1. 安装C++相关的构建工具。

    sudo yum install -y gcc gcc-c++ make

    使用以下命令检查是否安装成功。

    g++ --version

    回显如下表示安装成功。

  2. 使用文本编辑器创建C++文件。

    // hello.cpp
    #include <iostream> 
    int main() {
         std::cout << "Hello, World!" << std::endl;
         return 0; 
    }

  3. 编译程序。

    sudo g++ hello.cpp -o hello

  4. 运行编译好的程序。

    sudo ./hello

    回显如下,表示运行成功

  5. (可选)项目较大时,可考虑使用Makefile和CMake等构建系统管理编译,以Makefile为例。

    创建一个名为Makefile的文件,写入如下内容。
    all: hello
    
    hello: hello.cpp
        g++ hello.cpp -o hello
    
    clean:
        rm -f hello
    • Makefile文件中的格式中需要使用Tab键,如以上内容中,第四行、第七行命令前需要使用Tab键。
    • Makefile文件的目录树如下:
    my_cpp_project/ 
    ├── Makefile 
    └── hello.cpp

Python

此处以CentOS 8.0为例。

  1. 执行以下命令查看python版本,要求安装3.10以上版本。

    python --version

    回显如下表示已具备python环境,若报错,需要配置Python环境,参考搭建Python环境

    若环境中已经有了其他版本的Python,可以考虑使用pyenv管理安装多版本Python。

    1. 安装pyenv。
      sudo yum groupinstall -y "Development Tools" 
      sudo yum install -y openssl-devel bzip2 bzip2-devel readline-devel sqlite sqlite-devel libffi-devel xz-devel
      git clone https://gitee.com/mirrors/pyenv.git ~/.pyenv
    2. 配置环境变量,将其配置到启动配置文件中即可长期生效。
      export PATH="$HOME/.pyenv/bin:$PATH" 
      eval "$(pyenv init --path)" 
      eval "$(pyenv init -)"
    3. 使环境变量生效。
      source ~/.bashrc
    4. 查看可安装的Python版本。
      pyenv install -l | grep -E '^[^a-zA-Z]+$'
    5. 安装Python,以3.12.1为例。
      pyenv install 3.12.1

    6. 查看当前版本。
      pyenv version

    7. 使用特定版本的python后再次查看。
      pyenv local 3.12.1

    8. (可选)如需将使用的python固定到shell命令中,并同步固定同版本的pip时,可使用如下命令:
      find / -name python
      find / -name pip

      如上图所示,将找到的/bin/python、/bin/pip文件创建软链接指向/usr/local/bin中。

      ln -s /root/.pyenv/versions/3.12.1/bin/python /usr/local/bin/python
      ln -s /root/.pyenv/versions/3.12.1/bin/pip /usr/local/bin/pip

      查看并确定已经配置好快捷命令。

      which python 
      which pip

    若没有Development Tools组包,可以执行以下命令直接安装:
    sudo yum install gcc gcc-c++ make

  2. 获取DashGo源码。

    git clone https://gitee.com/luojiaaoo/DashGo.git

  3. 进入DashGo目录,安装项目所需依赖,Linux操作系统使用requirements_linux.txt文件。

    cd DashGo/
    python -m pip install -r requirements_linux.txt

  4. 部署MySQL数据库,详情可参考Linux系统中部署MySQL数据库
  5. 在进入项目目录下的src目录,初始化数据库表结构和admin管理员数据。

    cd src/ 
    python -c "from database.sql_db.conn import create_rds_table; create_rds_table()"
    python -c "from database.sql_db.conn import init_rds_data; init_rds_data()"

  6. 安装Gunicorn,并启动服务。

    pip install gunicorn
    gunicorn --capture-output -w 4 -b 0.0.0.0:8090 app:server

    回显如下,表示处于监听中。

    若安装成功后提示没有gunicorn命令,可以使用以下命令刷新缓存后再次执行。

    hash -r

  7. 弹性云服务器安全组放通8090端口,详情可参考添加安全组规则
  8. 浏览器中访问http://<弹性云服务器公网IP>:8090,回显如下表示部署成功。

Node

以CentOS 8.0为例。

  1. 配置NodeJS环境,要求部署Node.js 18.x或更高版本,npm 9.x或更高版本。

    参考手工部署Node.js,推荐使用nvm配置部署,本次安装的是v22.5.0的版本。

  2. 获取源码。

    git clone https://gitee.com/cnt-code/multi-mind.git

  3. 进入项目目录。

    cd multi-mind

  4. 安装依赖

    npm install

  5. 启动服务

    npm start

  6. 浏览器中访问http://<弹性云服务器公网IP>:3002,回显如下表示服务部署成功。

相关文档