当前位置: 首页 > news >正文

Ubuntu 系统.sh脚本一键部署内网Java服务(组件使用docker镜像,宕机自启动)

#!/bin/bash# 更新系统并安装必要的依赖
sudo apt update
sudo apt install -y apt-transport-https ca-certificates curl software-properties-common# 安装 Docker
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"
sudo apt update
sudo apt install -y docker-ce# 启动并设置 Docker 自启动
sudo systemctl start docker
sudo systemctl enable docker# 1. 下载 MySQL 镜像并启动
MYSQL_ROOT_PASSWORD="root_password"
MYSQL_DATABASE="test_db"
MYSQL_USER="test_user"
MYSQL_PASSWORD="test_password"
SQL_FILE="/path/to/your/init.sql"  # 请替换为您的 SQL 文件路径# 启动 MySQL 容器,分配 2GB 内存
sudo docker run --name mysql -e MYSQL_ROOT_PASSWORD=$MYSQL_ROOT_PASSWORD -e MYSQL_DATABASE=$MYSQL_DATABASE -e MYSQL_USER=$MYSQL_USER -e MYSQL_PASSWORD=$MYSQL_PASSWORD --restart unless-stopped -m 2g -d mysql:latest# 等待 MySQL 启动
sleep 30# 运行 SQL 文件
sudo docker exec -i mysql mysql -u$MYSQL_USER -p$MYSQL_PASSWORD $MYSQL_DATABASE < $SQL_FILE# 2. 下载并启动 JDK,分配 2GB 内存
sudo docker run --name openjdk --restart unless-stopped -m 2g -d openjdk:latest# 3. 下载并启动 Redis,分配 2GB 内存
sudo docker run --name redis --restart unless-stopped -m 2g -d redis:latest# 4. 下载并启动 RabbitMQ,分配 2GB 内存
sudo docker run --name rabbitmq -e RABBITMQ_DEFAULT_USER=test_user -e RABBITMQ_DEFAULT_PASS=test_password --restart unless-stopped -m 2g -d rabbitmq:management# 5. 下载并启动 MongoDB,分配 2GB 内存,并创建测试数据库
MONGO_INITDB_ROOT_USERNAME="test_user"
MONGO_INITDB_ROOT_PASSWORD="test_password"
MONGO_INITDB_DATABASE="test_db"
MONGO_INITDB_COLLECTION="test_collection"
MONGO_INITDB_DATA_FILE="/path/to/your/init_data.js"  # 请替换为您的初始化数据文件路径# 启动 MongoDB 容器
sudo docker run --name mongodb -e MONGO_INITDB_ROOT_USERNAME=$MONGO_INITDB_ROOT_USERNAME -e MONGO_INITDB_ROOT_PASSWORD=$MONGO_INITDB_ROOT_PASSWORD -e MONGO_INITDB_DATABASE=$MONGO_INITDB_DATABASE --restart unless-stopped -m 2g -d mongo:latest# 等待 MongoDB 启动
sleep 30# 运行初始化数据文件
if [ -f "$MONGO_INITDB_DATA_FILE" ]; thensudo docker exec -i mongodb mongo -u $MONGO_INITDB_ROOT_USERNAME -p $MONGO_INITDB_ROOT_PASSWORD --authenticationDatabase admin $MONGO_INITDB_DATABASE < $MONGO_INITDB_DATA_FILE
elseecho "在 $MONGO_INITDB_DATA_FILE 中未找到初始化数据文件,请确保您已添加 MongoDB 初始化数据的 JavaScript 文件。"
fi# 6. 下载并启动 Nginx,分配 2GB 内存
sudo docker run --name nginx --restart unless-stopped -m 2g -p 80:80 -d nginx:latest# 7. 创建前端和后端文件夹
mkdir -p ~/vue-app
mkdir -p ~/java-app# 8. 创建 Nginx 配置文件
NGINX_CONF="/etc/nginx/conf.d/default.conf"
echo "server {listen       80;server_name  localhost;location / {proxy_pass http://java-app:9999;  # 转发到 Java 应用proxy_set_header Host \$host;proxy_set_header X-Real-IP \$remote_addr;proxy_set_header X-Forwarded-For \$proxy_add_x_forwarded_for;proxy_set_header X-Forwarded-Proto \$scheme;}location /frontend/ {root /usr/share/nginx/html;  # 指向前端构建的静态文件目录index index.html index.htm;  # 默认文件try_files \$uri \$uri/ /frontend/index.html;  # 处理 SPA 路由}
}" | sudo tee $NGINX_CONF# 9. 使用 Docker 启动 Java 应用(假设有一个 Dockerfile 在 ~/java-app/)
# 请确保您的 Java 应用程序的 Dockerfile 已经在 ~/java-app 目录中
cd ~/java-app# 这里假设您有一个 Dockerfile
if [ -f Dockerfile ]; thensudo docker build -t my-java-app .sudo docker run --name java-app --restart unless-stopped -m 2g -d -p 9999:9999 my-java-app
elseecho "在 ~/java-app 目录中未找到 Dockerfile,请确保您已添加 Java 应用程序的 Dockerfile。"
fi# 设置所有容器自启动
sudo docker update --restart unless-stopped mysql
sudo docker update --restart unless-stopped openjdk
sudo docker update --restart unless-stopped redis
sudo docker update --restart unless-stopped rabbitmq
sudo docker update --restart unless-stopped mongodb
sudo docker update --restart unless-stopped nginx
sudo docker update --restart unless-stopped java-app# 10. 重新加载 Nginx 配置
sudo docker exec nginx nginx -s reload# 11. 提示用户将前端构建文件复制到 Nginx 提供的目录
echo "请将前端构建输出的文件复制到 /usr/share/nginx/html 目录中,以便通过 Nginx 提供服务。"
echo "例如:sudo cp -r /path/to/vue-app/dist/* /usr/share/nginx/html/"echo "所有服务已安装并启动成功,所有组件在故障时将自动重启,且每个组件限制为 2GB 内存!"

   // init_data.js 示例内容db.test_collection.insertMany([{ name: "Test Data 1", value: "Value 1" },{ name: "Test Data 2", value: "Value 2" },{ name: "Test Data 3", value: "Value 3" }]);

使用方法

1. 将脚本保存为 `setup_docker_services.sh`。
2. 赋予脚本执行权限:

   chmod +x setup_docker_services.sh

3. 运行脚本:

   ./setup_docker_services.sh

http://www.lqws.cn/news/182377.html

相关文章:

  • win10+TensorRT+OpenCV+Qt+YOLOV8模型部署教程
  • LeetCode 2434.使用机器人打印字典序最小的字符串:贪心(栈)——清晰题解
  • 短视频矩阵SaaS系统:开源部署与核心功能架构指南
  • 华为仓颉语言初识:并发编程之同步机制(上)
  • 20250606-C#知识:匿名函数、Lambda表达式与闭包
  • Java适配器模式深度解析:无缝集成不兼容系统的艺术
  • [BIOS]VSCode zx-6000 编译问题
  • 【乐企板式文件】货物运输类发票,多页支持
  • 一套成熟的家装OMS
  • 智能制造数字孪生全要素交付一张网:智造中枢,孪生领航,共建智造生态共同体
  • 黑盒测试用例设计方法-全
  • 算法打卡16天
  • Axios请求超时重发机制
  • 5.2 HarmonyOS NEXT应用性能诊断与优化:工具链、启动速度与功耗管理实战
  • Kafka 入门指南与一键部署
  • vscode vue debug
  • CSS 定位:原理 + 场景 + 示例全解析
  • 前端技能包
  • Unity3D移动设备阴影优化方案
  • 鼠标的拖动效果
  • Java项目中常用的中间件及其高频问题避坑
  • grafana-mcp-analyzer:基于 MCP 的轻量 AI 分析监控图表的运维神器!
  • ingress-nginx 开启 Prometheus 监控 + Grafana 查看指标
  • 常用枚举技巧:基础(一)
  • 【第一章:人工智能基础】01.Python基础及常用工具包-(2)Python函数与模块
  • Caliper 配置文件解析:fisco-bcos.json
  • 【C++从零实现Json-Rpc框架】第六弹 —— 服务端模块划分
  • 『React』Fragment的用法及简写形式
  • 国标GB28181设备管理软件EasyGBS远程视频监控方案助力高效安全运营
  • 矩阵和向量范数的区别分析