#!/bin/bash #进入项目目录 #cd /Users/wucongxing/Desktop/work/php/hospital-applets-api || exit cd /data/www/hospital-applets-api || exit #nginx_upstrame="/Users/wucongxing/Desktop/test/hospital-upstream.conf" nginx_upstrame="/etc/nginx/upstream/hospital-upstream.conf" #echo nginx_upstrame #确定可使用端口 online_port=0 reload_port=0 ports_list=(9508 9509) for i in "${ports_list[@]}"; do ports_count=$(lsof -i:$i | wc -l) if [[ $ports_count -eq 0 ]]; then # 未占用 可使用 reload_port=$i fi if [[ $ports_count -ne 0 ]]; then # 占用 需重启 online_port=$i fi done if [[ $online_port == 0 ]]; then reload_port=${ports_list[1]} else echo "当前端口 $online_port 使用中" echo "重启使用端口 $reload_port" fi if [[ $reload_port == 0 ]]; then echo '部署失败, 未获取到可用端口' exit 1; fi # 定义负载 upstrame=" upstream hospital { server 127.0.0.1:$reload_port; } " echo "$upstrame" > $nginx_upstrame #获取可用端口镜像数量 image=$(docker images "hospital-applets-api-$reload_port" | wc -l) if [[ $image -eq 1 ]];then # 无可用端口镜像 # 可用端口构建镜像 echo '可用端口构建镜像' docker build -t "hospital-applets-api-$reload_port" . else # 存在可用端口镜像,删除镜像容器 docker rm "hospital-applets-api-$reload_port" echo '可用端口构建镜像' docker build -t "hospital-applets-api-$reload_port" . fi echo '启动新端口容器' docker run --name "hospital-applets-api-$reload_port" --restart=always -d -p "$reload_port":9501 -v /var/log/hospital-applets-api/:/opt/www/runtime/logs "hospital-applets-api-$reload_port":latest echo '重启nginx' nginx -s reload if [[ $online_port -ne 0 ]]; then echo '停止原端口容器' docker stop "hospital-applets-api-$online_port" echo '删除原端口容器' docker rm "hospital-applets-api-$online_port" echo '删除原端口镜像' docker rmi "hospital-applets-api-$online_port" fi echo "构建成功"