服务器如何部署应用

3 阅读1分钟

引子:部署应用的方式很多,基本上可以分别从裸机部署,docker容器,大型的jenkins,k8s部署,部署平台宝塔,1panel等的使用。此篇为裸机部署,最简单开始,适合个人。

基础版,裸机部署

首先裸机部署指的就是直接部署到宿主机的进程。这种最小白,通常搭配脚本实现。不需要太多的知识。需要在服务器安装git,拉取项目代码后

1.打包应用,如我这边有一个go服务,使用打包命令

go build -ldflags "-w -s" -trimpath .

得到autopub-server服务

2.编写脚本文件 server.sh

正因为直接部署在宿主机,可以写脚本kill.如果后面docker部署,那么这脚本就不对,进程在容器内部,然后端口被docker代理了。需要用别的方式。

#!/bin/bash
app='autopub-server'
cmd=$1

if [[ -z "$cmd" ]]; then
  echo "Usage: $0 start|restart|stop"
  exit 1
fi

startup(){
  nohup ./$app > info.log 2>&1 &
  echo "$app started with PID $!"
}

pids=$(ps -ef | grep -v grep | grep "$app" | awk '{print $2}')

case "$cmd" in
  start)
    if [[ -z "$pids" ]]; then
      startup
    else
      echo "$app is already running! PIDs: $pids"
    fi
    ;;
    
  restart)
    if [[ -n "$pids" ]]; then
      for pid in $pids; do
        kill -9 "$pid" && echo "Killed PID $pid"
      done
      sleep 1  # 给进程终止留出时间
    fi
    startup
    ;;
    
  stop)
    if [[ -n "$pids" ]]; then
      for pid in $pids; do
        kill -9 "$pid" && echo "Killed PID $pid"
      done
      echo "$app stopped"
    else
      echo "$app is not running"
    fi
    ;;
    
  *)
    echo "Invalid command: $cmd"
    exit 1
    ;;
esac

3.启动

./server.sh start

后面准备做一个vscode插件,实现自动拉代码,自动打包,自动启动。