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

发布于:2025-06-09 ⋅ 阅读:(16) ⋅ 点赞:(0)
#!/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