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

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.xdnf.cn/news/12363.html

相关文章:

  • web前端开发如何适配各分辨率
  • 【PmHub面试篇】PmHub中基于Redis加Lua脚本的计数器算法限流实现面试专题解析
  • 基于蚁群算法路由选择可视化动态模拟设计与实现【源码+文档】
  • ES数据聚合
  • Python 训练营打卡 Day 45
  • 全球长序列高分辨率光合有效辐射(PAR)(1984-2018)
  • 郑州工程技术学院赴埃文科技开展访企拓岗促就业活动
  • Unity | AmplifyShaderEditor插件基础(第五集:简易移动shader)
  • 高效复用 Cursor 请求,提升开发效率 —— 使用 interactive-feedback-mcp 工具详解
  • 【单片机期末】单片机系统设计
  • 车载诊断架构 --- ZEVonUDS(J1979-3)简介第一篇
  • 从 Revit 到 3DTiles:GISBox RVT 切片器如何让建筑图元在 Web 端展示
  • AudioRelay 0.27.5 手机充当电脑音响
  • 数据通信 PoE 交换机解决方案
  • 基于springboot的校园社团信息系统的设计与实现
  • 智慧水务发展迅猛:从物联网架构到AIoT系统的跨越式升级
  • JavaWeb笔记
  • ant-design4.xx实现数字输入框; 某些输入法数字需要连续输入两次才显示
  • MyBatis 核心标签使用场景及用法详解
  • Java中的this()和super()详解
  • 前端脱敏展示姓名、手机号、邮箱
  • 行为型设计模式之Chain of Responsibility(责任链)
  • 基于JWT+SpringSecurity整合一个单点认证授权机制
  • 低内聚高耦合的衡量指标
  • DTS 数据迁移
  • 在Mathematica中实现Newton-Raphson迭代的收敛时间算法(一般三次多项式)
  • 【Python-Day 23】Python 模块化编程实战:创建、导入及 sys.path 深度解析
  • 青少年编程与数学 01-011 系统软件简介 06 Android操作系统
  • 相机Camera日志分析之二十七:高通相机Camx 基于预览1帧的process_capture_result二级日志分析详解
  • AOP实现Restful接口操作日志入表方案