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

news2025/6/9 23:06:27
#!/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" ]; then
    sudo docker exec -i mongodb mongo -u $MONGO_INITDB_ROOT_USERNAME -p $MONGO_INITDB_ROOT_PASSWORD --authenticationDatabase admin $MONGO_INITDB_DATABASE < $MONGO_INITDB_DATA_FILE
else
    echo "在 $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 ]; then
    sudo docker build -t my-java-app .
    sudo docker run --name java-app --restart unless-stopped -m 2g -d -p 9999:9999 my-java-app
else
    echo "在 ~/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.coloradmin.cn/o/2405948.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Android Camera Hal中通过Neon指令优化数据拷贝

背景描述&#xff1a; Camera apk普通相机模式录像操作时&#xff0c;一般是同时请求两个流&#xff0c;即预览流和录像流。对于两个流输出图像格式和分辨率相同的情况下&#xff0c;是不是可以通过一个流拷贝得到另一个流的数据&#xff0c;进而节省掉一个Sensor输出处理两次…

C# winform教程(二)----button

一、button的使用方法 主要使用方法几乎都在属性内&#xff0c;我们操作也在这个界面 二、作用 用户点击时触发事件&#xff0c;事件有很多种&#xff0c;可以根据需要选择。 三、常用属性 虽然属性很多&#xff0c;但是常用的并不多 3.常用属性 名称内容含义AutoSize自动调…

Python编码格式化之PEP8编码规范

文章目录 概要PEP8编码风格py文本组织规范命名规范编码风格 PEP8编码检查工具pylintflake8PyCharm中配置检查工具 PEP8编码格式化工具blackautopep8PyCharm配置格式化工具本地git配置hook 总结 概要 在Python项目开发过程中&#xff0c;代码的可读性和一致性对于项目的长期维护…

【Zephyr 系列 14】使用 MCUboot 实现 BLE OTA 升级机制:构建安全可靠的固件分发系统

🧠关键词:Zephyr、MCUboot、OTA 升级、BLE DFU、双分区、Bootloader、安全固件管理 📌面向读者:希望基于 Zephyr 为 BLE 设备加入安全 OTA 升级功能的开发者 📊预计字数:5200+ 字 🧭 前言:为什么你需要 OTA? 随着设备部署数量增多与产品生命周期延长,远程升级(…

K8S认证|CKS题库+答案| 8. 沙箱运行容器 gVisor

目录 8. 沙箱运行容器 gVisor 免费获取并激活 CKA_v1.31_模拟系统 题目 开始操作&#xff1a; 1&#xff09;、切换集群 2&#xff09;、官网找模板 3&#xff09;、创建 RuntimeClass 4&#xff09;、 将命名空间为 server 下的 Pod 引用 RuntimeClass 5&#xff09…

Selenium4+Python的web自动化测试框架

一、什么是Selenium&#xff1f; Selenium是一个基于浏览器的自动化测试工具&#xff0c;它提供了一种跨平台、跨浏览器的端到端的web自动化解决方案。Selenium主要包括三部分&#xff1a;Selenium IDE、Selenium WebDriver 和Selenium Grid。 Selenium IDE&#xff1a;Firefo…

【论文解读】MemGPT: 迈向为操作系统的LLM

1st author: Charles Packer paper MemGPT[2310.08560] MemGPT: Towards LLMs as Operating Systems code: letta-ai/letta: Letta (formerly MemGPT) is the stateful agents framework with memory, reasoning, and context management. 这个项目现在已经转化为 Letta &a…

vb监测Excel两个单元格变化,达到阈值响铃

需求 在Excel中实现监控两个单元格之间的变化范围&#xff0c;当达到某个设定的值的范围内时&#xff0c;实现自动响铃提示。 实现&#xff1a; 首先设置Excel&#xff0c;开启宏、打开开发者工具&#xff0c;点击visual Basic按钮&#xff0c;然后在左侧双击需要监测的shee…

node 进程管理工具 pm2 的详细说明 —— 一步一步配置 Ubuntu Server 的 NodeJS 服务器详细实录 7

前言 我以 Ubuntu Server 打造的 NodeJS 服务器为主题的系列文章&#xff0c;经过五篇博客&#xff0c;我们顺利的 安装了 ubuntu server 服务器&#xff0c;并且配置好了 ssh 免密登录服务器&#xff0c;安装好了 服务器常用软件安装, 配置好了 zsh 和 vim 以及 通过 NVM 安装…

Flask与Celery 项目应用(shared_task使用)

目录 1. 项目概述主要功能技术栈 2. 项目结构3. 环境设置创建虚拟环境并安装依赖主要依赖 4. 应用配置Flask应用初始化 (__init__.py)Celery应用初始化 (make_celery.py) 5. 定义Celery任务 (tasks.py)任务说明 6. 创建API端点 (views.py)API端点说明 7. 前端界面 (index.html)…

二叉树-226.翻转链表-力扣(LeetCode)

一、题目解析 翻转可以理解为树的左右子树交换&#xff0c;从根到叶子节点&#xff0c;但是这里交换的是链接的指针&#xff0c;而不是单纯的交换值&#xff0c;当出现nullptr时&#xff0c;也是可以交换链接的&#xff0c;交换值的话就不行了。 二、算法原理 依旧的递归&…

HarmonyOS Next 弹窗系列教程(3)

HarmonyOS Next 弹窗系列教程&#xff08;3&#xff09; 选择器弹窗 (PickerDialog) 介绍 选择器弹窗通常用于在用户进行某些操作&#xff08;如点击按钮&#xff09;时显示特定的信息或选项。让用户可以进行选择提供的固定的内容。 以下内容都属于选择器弹窗&#xff1a; …

【docker】Windows安装docker

环境及工具&#xff08;点击下载&#xff09; Docker Desktop Installer.exe &#xff08;windows 环境下运行docker的一款产品&#xff09; wsl_update_x64 &#xff08;Linux 内核包&#xff09; 前期准备 系统要求2&#xff1a; Windows 11&#xff1a;64 位系统&am…

无人机避障——感知部分(Ubuntu 20.04 复现Vins Fusion跑数据集)胎教级教程

硬件环境&#xff1a;NVIDIA Jeston Orin nx 系统&#xff1a;Ubuntu 20.04 任务&#xff1a;跑通 EuRoC MAV Dataset 数据集 展示结果&#xff1a; 编译Vins Fusion 创建工作空间vins_ws # 创建目录结构 mkdir -p ~/vins_ws/srccd ~/vins_ws/src# 初始化工作空间&#xf…

如何安装并使用RustDesk

参考&#xff1a; 搭建 RustDesk Server&#xff1a;打造属于自己的远程控制系统&#xff0c;替代 TeamViewer 和 ToDesk&#xff01; 向日葵、ToDesk再见&#xff01;自己动手&#xff0c;自建RustDesk远程服务器真香&#xff01; 通俗易懂&#xff1a;RustDesk Server的搭…

机器学习——随机森林算法

随机森林算法是一种强大的树集成算法&#xff0c;比使用单个决策树效果要好得多。 以下是生成树集成的方法&#xff1a;假设有一个大小为m的训练集&#xff0c;然后对于b1到B&#xff0c;所以执行B次&#xff0c;可以使用有放回抽样来创建一个大小为m的训练集。所以如果有10个…

【从零学习JVM|第二篇】字节码文件

前言&#xff1a; 通过了解字节码文件可以帮助我们更容易的理解JVM的工作原理&#xff0c;所以接下来&#xff0c;我们来介绍一下字节码文件。 目录 前言&#xff1a; 正确的打开字节码文件 字节码文件组成 1. 魔数&#xff08;Magic Number&#xff09; 2. 版本号&…

Fractal Generative Models论文阅读笔记与代码分析

何恺明分型模型这篇文章在二月底上传到arXiv预出版网站到现在已经过了三个月&#xff0c;当时我也听说这篇文章时感觉是大有可为&#xff0c;但是几个月不知道忙啥了&#xff0c;可能错过很多机会&#xff0c;但是亡羊补牢嘛&#xff0c;而且截至目前&#xff0c;该文章应该也还…

OGG-01635 OGG-15149 centos服务器远程抽取AIX oracle11.2.0.4版本

背景描述 有一套ogg远程抽取的环境&#xff0c;源端是AIX7.1环境的oracle 11.2.0.4版本的数据库&#xff0c;中间是OGG抽取服务器&#xff0c;目标端是centos 7.9环境的oracle 19c。 采用集成模式远程抽取源端数据正常&#xff0c;但是经典模式远程抽取源数据的时候抽取进程启…

Kotlin REPL初探

文章目录 1. Kotlin REPL 简介2. 在命令行中玩Kotlin REPL2.1 下载Kotlin编译器压缩包2.2 安装配置Kotlin编译器2.3 启动Kotlin交互式环境2.4 在命令行玩Kotlin REPL 3. 在IDEA里玩Kotlin REPL3.1 打开Kotlin REPL窗口3.2 在Kotlin REPL窗口玩代码 4. Kotlin REPL 的优势 1. Ko…