一键部署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
- tar
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 "完成"