【shell脚本】打包,离线一键部署nginx(开机自启)、node、pm2、web项目,无需一个个部署环境

本文介绍

本文意在将开发环境部署的nginx、node、pm2以及项目打成tar包。再通过shell脚本在离线 实际环境一键部署,降低项目部署时间和难度

>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>离线安装包<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<

【安装包目录结构】shell脚本离线一键安装配置nginx(自启动)、node、pm2开机自启等功能

配置文件目录格式
本文代码目录结构如下:tar包含安装包、shell为安装文件脚本、install.se为主命令脚本执行nginx.se和node.se


  • 安装文件x86_64
    • tar
      • nginx.tar.gz
      • node.tar.gz
      • file.tar.gz
    • shell
      • nginx.se
      • node.se
      • file.se
    • install.se

linux x86_64、arm64样例包()

蓝奏云:x86_64
密码:4rgy
蓝奏云:arm64
密码:5v5p
在这里插入图片描述

# 解压后在linux上使用
chmod 755 ./install.se
sudo bash ./install.se

>>>>>>>>>>>>>>>>>>>>>>>>>>>>>安装包制作过程<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<

打包nginx

首先为了确保稳定性最好在同一架构的服务器(x86_64、arm64、x86…)上安装好nginx
安装过程可见https://blog.youkuaiyun.com/PlanAPlanB/article/details/141724021
安装完成后目录如下图:
在这里插入图片描述

进入conf中的nginx.conf,添加web资源配置。
以下为在、usr/local/yproject/www/中设置五个web资源分别为dist1、dist2、…,这样每次安装nginx后都会自动启动并在usr/local/yproject/www/中设置五个资源路径方便放置web资源。
【yproject/web】和【dist1…】可以更改为你想要自定义的目录,

    server {
        listen       17501;
        server_name  localhost;

        location / {
            root   ../yproject/www/dist1;
            index  index.html index.htm;
        }
}
server {
        listen       17502;
        server_name  localhost;

        location / {
            root   ../yproject/www/dist2;
            index  index.html index.htm;
        }
}
server {
        listen       17503;
        server_name  localhost;

        location / {
            root   ../yproject/www/dist3;
            index  index.html index.htm;
        }
    }
server {
        listen       17504;
        server_name  localhost;

        location / {
            root   ../yproject/www/dist4;
            index  index.html index.htm;
        }
    }
server {
        listen       17505;
        server_name  localhost;

        location / {
            root   ../yproject/www/dist5;
            index  index.html index.htm;
        }
    }

// 在/usr/local/目录通过tar -czvf 将nginx文件夹打包成tar.gz格式
// 记住打包路径./nginx.xxx/后面有" /"
tar -czvf nginx.tar.gz ./nginx.xxx/
// 之后你将获得一个名为nginx.tar.gz的二进制文件压缩包

【shell脚本】(./nginx.se)安装nginx并配置nginx开机自启(命令可以执行,但写法可能不太规范)

#!/bin/bash

# 检查是否以root用户运
if [ "$(id -u)" != "0" ]; then  
   echo "此脚本必须以root权限运行" 1>&2  
   exit 1  
fi

SCR_PATH=$(readlink -f "$0")
SCR_DIR=$(dirname "$SCR_PATH")


# 解压目录(留空则解压到当前目录)  
EXTRACT_NGINX_DIR="/usr/local/"
# tar.gz文件路径  
TAR_GZ_NGINX_FILE="$SCR_DIR/../tar/nginx.tar.gz"
# 定义要创建的文件名
filename="/etc/systemd/system/nginx.service"

# 开启nginx文件夹操作权限方便删除
chmod 777 "/usr/local/nginx"
# 开启nginx.service文件操作权限方便删除
chmod 777 "/etc/systemd/system/nginx.service"
#删除nginx文件夹
rm -rf "/usr/local/nginx"
#删除nginx.service文件
rm "/etc/systemd/system/nginx.service"
# 创建nginx文件夹
mkdir /usr/local/nginx

# 检查文件是否存在  
if [ ! -f "$TAR_GZ_NGINX_FILE" ]; then
    echo "文件 $TAR_GZ_NGINX_FILE 不存在!"
    exit 1
fi

# 解压tar.gz文件  
echo "正在解压 $TAR_GZ_NGINX_FILE 到 $EXTRACT_NGINX_DIR..."  
tar -xzvf "$TAR_GZ_NGINX_FILE" -C "$EXTRACT_NGINX_DIR"  

#      配置nginx自动启动
# 定义要添加到文件中的文字
text_to_add="
# 仅修改 /usr/local/nginx/sbin/nginx 这个路径即可(修改为你的nginx路

[Unit]
Description=nginx service
After=network.target

[Service]
Type=forking
ExecStart=/usr/local/nginx/sbin/nginx
ExecReload=/usr/local/nginx/sbin/nginx -s reload
ExecStop=/usr/local/nginx/sbin/nginx -s quit
PrivateTmp=true

[Install]
WantedBy=multi-user.target"

# 检查文件是否存在,如果不存在则创建它nginx.service,开机自启动服务
if [ ! -f "$filename" ]; then
    echo "File $filename does not exist, creating it..."
    touch "$filename"
fi
  
# 将服务参数添加进/etc/systemd/system/nginx.service
echo "$text_to_add" >> "$filename"
  
echo "Text added to $filename successfully."
# 授权
chmod 755 /etc/systemd/nginx.service
chmod 777 /usr/local/nginx/sbin/nginx.service
#设置开机自启动

systemctl daemon-reload

systemctl enable nginx

systemctl start nginx

echo "NGINX完成:17501"


// 执行命令,注意在root用户下使用
sudo bash ./nginx.se

打包node pm2

官网下载并安装配置(此处不再叙述): https://nodejs.org/zh-cn/download/prebuilt-binaries

// 安装完成后通过查看是否安装完成
node -v
npm -v

安装pm2,可在github、npm下载。

如果你的pm2是在github上下载下来的将npm2需要需要npm i安装依赖,并放在【node/lib/node_modules/】中,并在【/usr/local/node/bin】执行:

ln -s ../lib/node_modules/pm2/bin/pm2 pm2
ln -s ../lib/node_modules/pm2/bin/pm2-dev pm2-dev
ln -s ../lib/node_modules/pm2/bin/pm2-docker pm2-docker
ln -s ../lib/node_modules/pm2/bin/pm2-runtime pm2-runtime
//在/usr/local/目录通过tar -czvf 将node二进制代码打包成tar.gz格式,打包路径为(./node.xxx/),将node里面内容打进包而避免将node文件夹也打入包
tar -czvf node.tar.gz ./node.xxx/
// 之后你将获得一个名为node.tar.gz的二进制文件压缩包

【shell脚本./node.se】安装node并配置pm2环境命令

#!/bin/bash

# 检查是否以root用户运
if [ "$(id -u)" != "0" ]; then  
   echo "此脚本必须以root权限运行" 1>&2  
   exit 1  
fi
# 获取当前文件目录
SCR_PATH=$(readlink -f "$0")
SCR_DIR=$(dirname "$SCR_PATH")

# tar.gz文件路径  
TAR_GZ_NODE_FILE="$SCR_DIR/../tar/node.tar.gz"
# 解压目录(留空则解压到当前目录)  
EXTRACT_NODE_DIR="/usr/local/"

#开启node文件夹权限方便删除
chmod 777 "/usr/local/node"
rm -rf "/usr/local/node"

#创建node文件夹
mkdir /usr/local/node

# 检查文件是否存在  
if [ ! -f "$TAR_GZ_NODE_FILE" ]; then  
    echo "文件 $TAR_GZ_NODE_FILE 不存在!"
    exit 1
fi

# 解压node tar.gz文件  
echo "正在解压 $TAR_GZ_NODE_FILE 到 $EXTRACT_NODE_DIR..."  
tar -xzvf "$TAR_GZ_NODE_FILE" -C "$EXTRACT_NODE_DIR"  

# 如果#node在/etc/profile中存在则说明已经安装,否则添加环境变量
if grep -q '#node' /etc/profile; then
    echo "node 已在 /etc/profile 中存在。" 
else  
    echo "将 TEXT_TO_NODE_ADD 添加到 /etc/profile..."  
    echo '
#node
export NODE_HOME=/usr/local/node/bin/
export PATH=$PATH:$NODE_HOME:/usr/local/bin/
' >> /etc/profile
fi 


 # 可选:立即应用更改,需要重新登录或source /etc/profile  
source /etc/profile
. /etc/profile
echo $NODE_HOME 
echo "应用更改"

# pm2设置软连接全局可访问
ln -s /usr/local/node/bin/pm2 /usr/local/bin/pm2
# 开启pm2权限
chmod 777 /usr/local/node/bin/pm2

echo "NODE完成"


部署web和node文件资源(根据自身情况编写,此处不再赘述)

此处部署web资源和node资源
web资源可放置在【/usr/local/yproject/www/dist1/】里面或dist2、dist3…等,然后systemctl restart nginx重启nginx
node程序自启动如下

// 执行文件
pm2 start 【你的node主文件】.js
// 保存
pm2 save
// 设置开机自启
pm2 startup

项目由均可采用shell脚本方式执行,此处不再赘述,方式如上nginx和node脚本类似

一键执行全部脚本

如果只需要安装nginx或node的话只执行上面shell文件即可,如果需要全部安装可在写执行文件,如下:

#!/bin/bash

# 检查是否以root用户运
if [ "$(id -u)" != "0" ]; then  
   echo "此脚本必须以root权限运行" 1>&2  
   exit 1  
fi
#获取当前文件位置
SCR_PATH=$(readlink -f "$0")
SCR_DIR=$(dirname "$SCR_PATH")
#安装node和pm2
sudo bash "$SCR_DIR/shell/node.se"
安装nginx,开启自启动和默认/usr/local/yproject/www/dist1 17501...端口
sudo bash "$SCR_DIR/shell/nginx.se"


systemctl status nginx


echo "完成"


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

PlanAPlanB

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值