Docker-compose一键部署设备管理平台 nginx+mysql+springboot

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

文章目录

  • 前言
  • [一、安装Docker和Docker Compose](#一、安装Docker和Docker Compose)
  • [二、 创建项目目录结构](#二、 创建项目目录结构)
  • 三、核心配置文件编写
    • [2.1 docker-compose.yml(服务编排)](#2.1 docker-compose.yml(服务编排))
  • [一键部署设备管理平台 nginx+mysql+springboot](#一键部署设备管理平台 nginx+mysql+springboot)

前言


提示:以下是本篇文章正文内容,下面案例可供参考

一、安装Docker和Docker Compose

bash 复制代码
# 1. 安装Docker(复制粘贴整条命令)
yum install -y yum-utils device-mapper-persistent-data lvm2 && yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo && yum install -y docker-ce-20.10.18 docker-ce-cli-20.10.18 containerd.io && systemctl start docker.service && systemctl enable docker.service

# 2. 验证Docker(出现版本号即为成功)
docker --version

# 3. 安装Docker Compose
1. 需要先配置镜像加速器
sudo tee /etc/docker/daemon.json <<-'EOF'
{
  "registry-mirrors": [
    "https://docker.1ms.run",
    "https://hub-mirror.c.163.com",
    "https://mirror.ccs.tencentyun.com"
  ]
}
EOF

sudo curl -L "https://github.com/docker/compose/releases/download/2.26.0/docker-compose-linux-x86_64" -o /usr/local/bin/docker-compose && chmod +x /usr/local/bin/docker-compose

# 4. 验证Docker Compose(尽量使用高版本)
docker-compose --version

二、 创建项目目录结构

bash 复制代码
# 创建项目根目录及子目录
mkdir -p /opt/compose_lnmp_wordpress/{nginx/conf.d,nginx/logs,mysql/{conf,data},ssl/{private,certs},wwwroot}
bash 复制代码
# 一键创建所有目录
mkdir -p /opt/compose_projectX/{mysql,redis,java,nginx,es,kibana,fluentd}/{conf,data,logs} && mkdir -p /opt/compose_projectX/nginx/html

# 确认目录创建成功
ls -l /opt/compose_projectX/
bash 复制代码
# 创建根目录
mkdir -p /opt/device-mgmt/{mysql/data,springboot/logs,nginx/conf,nginx/html}
cd /opt/device-mgmt
# 创建核心文件
touch docker-compose.yml       # 主编排文件
touch nginx/conf/default.conf  # Nginx配置文件
bash 复制代码
/opt/device-mgmt/
├── docker-compose.yml         # Compose编排配置
├── mysql/
│   └── data/                  # MySQL数据持久化目录
├── springboot/
│   └── logs/                  # SpringBoot日志目录
└── nginx/
    ├── conf/
    │   └── nginx.conf       # Nginx反向代理配置
    └── html/                  # 前端静态文件目录(若有)

三、核心配置文件编写

1.docker-compose.yml(核心编排文件)

bash 复制代码
# Docker Compose V2 已废弃 version 字段,直接删除即可
services:
  # 1. MySQL 数据库(设备数据存储)
  mysql:
    image: mysql:8.0.36
    container_name: device-mgmt-mysql
    restart: always  # 容器异常退出自动重启
    environment:
      # 核心环境变量(按需修改密码)
      MYSQL_ROOT_PASSWORD: Device@123456  # root密码
      MYSQL_DATABASE: device_mgmt_db      # 初始化数据库名
      MYSQL_USER: device_user             # 业务用户(非root,更安全)
      MYSQL_PASSWORD: Device@654321       # 业务用户密码
      TZ: Asia/Shanghai                   # 时区同步
    volumes:
      - ./mysql/data:/var/lib/mysql       # 数据持久化(关键,防止数据丢失)
    ports:
      - "3306:3306"  # 端口映射(若3306被占用,改为主机端口如3307:3306)
    networks:
      - device-mgmt-net
    # 健康检查:确保MySQL启动完成后再启动SpringBoot
    healthcheck:
      test: ["CMD", "mysqladmin", "ping", "-h", "localhost", "-u", "root", "-p$$MYSQL_ROOT_PASSWORD"]
      interval: 5s    # 每5秒检查一次
      timeout: 10s    # 超时时间
      retries: 3      # 重试3次失败则判定为不健康

  # 2. SpringBoot 后端服务(设备管理核心逻辑)
  springboot:
    # 替换为你的SpringBoot镜像(两种方式二选一):
    # 方式1:使用已构建好的镜像(推荐)
    image: your-device-mgmt:v1.0
    # 方式2:若有jar包,可通过Dockerfile构建(需新增Dockerfile,见下文备注)
    # build: ./springboot
    container_name: device-mgmt-springboot
    restart: always
    environment:
      # SpringBoot 数据库连接配置(关键:主机名填mysql容器名,而非localhost)
      SPRING_DATASOURCE_URL: jdbc:mysql://mysql:3306/device_mgmt_db?useUnicode=true&characterEncoding=utf8&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true
      SPRING_DATASOURCE_USERNAME: device_user
      SPRING_DATASOURCE_PASSWORD: Device@654321
      # JVM 调优(可选)
      JAVA_OPTS: "-Xms512m -Xmx1024m"
    volumes:
      - ./springboot/logs:/app/logs  # 日志持久化
    ports:
      - "8080:8080"  # 后端API端口(避开80/443,防止冲突)
    networks:
      - device-mgmt-net
    # 依赖MySQL:仅当MySQL健康检查通过后启动
    depends_on:
      mysql:
        condition: service_healthy

  # 3. Nginx 服务(反向代理+前端托管)
  nginx:
    image: nginx:1.25-alpine
    container_name: device-mgmt-nginx
    restart: always
    volumes:
      - ./nginx/conf/default.conf:/etc/nginx/conf.d/default.conf  # 挂载Nginx配置
      - ./nginx/html:/usr/share/nginx/html                        # 挂载前端静态文件
    ports:
      - "8081:80"  # 前端访问端口(避开80,防止和系统服务冲突)
    networks:
      - device-mgmt-net
    # 依赖SpringBoot:确保后端启动后再启动Nginx
    depends_on:
      - springboot

# 自定义桥接网络(容器间通过服务名互通,如mysql、springboot)
networks:
  device-mgmt-net:
    driver: bridge

2.1 docker-compose.yml(服务编排)

docker-compose.yml 是整个项目的"指挥中心",定义 Nginx、MySQL、PHP 三个服务的启动规则、依赖关系、挂载目录等。在项目根目录 /opt/compose_lnmp_wordpress/ 下创建该文件:

bash 复制代码
version: '3'  

# 1. 自定义网络:让三个服务在同一网络内,可通过"服务名"通信(无需记 IP)
networks:
  lnmp_network:
    driver: bridge  # 桥接模式,默认且常用

# 2. 定义服务
services:
  # 2.1 MySQL 服务(数据存储)
  mysql:
    container_name: lnmp_mysql
    image: mysql:5.7  # 镜像版本(已选定)
    restart: always  # 容器故障/服务器重启后自动启动
    environment:
      - MYSQL_ROOT_PASSWORD=Root@123456  # MySQL root 密码(自定义,建议复杂)
      - MYSQL_DATABASE=wordpress_db     # 预创建 WordPress 专用数据库
      - MYSQL_USER=wp_user              # 预创建 WordPress 专用用户(避免用 root)
      - MYSQL_PASSWORD=Wp@123456        # 专用用户密码
      - TZ=Asia/Shanghai                # 时区(避免日志/数据时间错乱)
    volumes:
      # 数据持久化:宿主机目录 → 容器目录
      - ./mysql/data:/var/lib/mysql
      # 自定义配置:宿主机 MySQL 配置 → 容器配置目录
      - ./mysql/conf/my.cnf:/etc/mysql/conf.d/my.cnf
    networks:
      - lnmp_network  # 加入自定义网络
    user: "999:999"   # MySQL 容器内默认用户(UID=999),避免 root 权限风险

  # 2.2 PHP-FPM 服务(动态请求处理)
  php:
    image: php:8.3-fpm  # 镜像版本
    container_name: lnmp_php
    restart: always
    environment:
      - TZ=Asia/Shanghai
    volumes:
      # 挂载 WordPress 代码目录(与 Nginx 挂载同一路径,确保文件一致)
      - ./wwwroot:/var/www/html
    depends_on:
      - mysql  # 依赖 mysql 服务,确保 mysql 先启动(避免连接失败)
    networks:
      - lnmp_network
    # 启动时自动安装 WordPress 必需的 PHP 扩展
    command: >
      sh -c "apt-get update &&
             apt-get install -y --no-install-recommends libfreetype6-dev libjpeg62-turbo-dev libpng-dev libzip-dev &&
             docker-php-ext-configure gd --with-freetype --with-jpeg &&
             docker-php-ext-install -j$(nproc) mysqli gd zip &&
             apt-get clean && rm -rf /var/lib/apt/lists/* &&
             php-fpm"  # 启动 PHP-FPM 服务

  # 2.3 Nginx 服务(反向代理/静态资源处理)
  nginx:
    image: nginx:latest  # Nginx 最新稳定版
    container_name: lnmp_nginx
    restart: always
    ports:
      - "80:80"   # HTTP 端口(用于重定向到 HTTPS)
      - "443:443" # HTTPS 端口(核心访问端口)
    environment:
      - TZ=Asia/Shanghai
    volumes:
      # 挂载站点配置文件
      - ./nginx/conf.d:/etc/nginx/conf.d
      # 挂载静态资源/PHP 代码(与 PHP 容器一致)
      - ./wwwroot:/var/www/html
      # 挂载 HTTPS 证书
      - ./ssl/certs:/etc/nginx/ssl/certs
      - ./ssl/private:/etc/nginx/ssl/private
      # 挂载日志目录
      - ./nginx/logs:/var/log/nginx
    depends_on:
      - php  # 依赖 php 服务,确保 php 先启动
    networks:
      - lnmp_network
bash 复制代码
/opt/compose_nginx_tomcat/
├── docker-compose.yml # Docker Compose 配置文件
├── nginx
│ ├── Dockerfile # Nginx 镜像的 Dockerfile
│ └── nginx.conf # Nginx 配置文件
├── tomcat
│ ├── Dockerfile # Tomcat 镜像的 Dockerfile
│ └── webapps
│ └── ROOT.war # Tomcat 应用的 WAR 包
└── wwwroot
└── index.html # 静态文件,Nginx 显示的页面

一键部署设备管理平台 nginx+mysql+springboot

bash 复制代码
mkdir -p /opt/device-manger/{mysql/data,springboot/logs,nginx/nginx.conf}
bash 复制代码
/opt/device-manger/
├── docker-compose.yml         # Compose编排配置
├── mysql/
│   └── data/                  # MySQL数据持久化目录
├── springboot/
│   └── logs/                  # SpringBoot日志目录
└── nginx/
    ├──── nginx.conf       # Nginx反向代理配置
               # 前端静态文件目录(若有)
bash 复制代码
version: '3'
services:
  nginx:
    container_name: nginx-manager
    hostname: nginx
    build:
      context: ./nginx
      dockerfile: Dockerfile
    ports:
      - 80:80
      - 443:443
    networks:
      abcd:
        ipv4_address: 172.20.0.10
    volumes:
      - ./nginx/nginx.conf:/usr/local/nginx/conf/nginx.conf
      - ./nginx/dist:/usr/local/nginx/html/
  mysql:
    container_name: mysql-manager
    hostname: mysql
    build:
      context: ./mysql
      dockerfile: Dockerfile
    ports:
      - 3306:3306
    networks:
      abcd:
        ipv4_address: 172.20.0.30
  springboot:
    container_name: springboot-manager
    hostname: springboot
    build:
      context: ./springboot
      dockerfile: Dockerfile
    ports:
      - 8090:8090
    networks:
      abcd:
        ipv4_address: 172.20.0.20
networks:
  abcd:
    driver: bridge
    ipam:
      config:
        - subnet: 172.20.0.0/16

mysql

bash 复制代码
From centos:7
RUN rm -rf /etc/yum.repos.d/*
ADD CentOS-Base.repo /etc/yum.repos.d/
RUN yum clean all && yum makecache
RUN yum install -y wget perl net-tools
RUN wget https://dev.mysql.com/get/mysql80-community-release-el7-3.noarch.rpm
RUN rpm -ivh mysql80-community-release-el7-3.noarch.rpm
RUN yum install -y --nogpgcheck mysql-community-server
RUN mysqld --initialize-insecure --user=mysql
EXPOSE 3306
COPY yl_app.sql /opt/
CMD [ "mysqld", "--user=mysql" ]

nginx

bash 复制代码
FROM centos:7
MAINTAINER this is nginx <sk>
RUN rm -rf /etc/yum.repos.d/*
ADD CentOS-Base.repo /etc/yum.repos.d
RUN yum clean all && \
    yum makecache && \
    yum -y install pcre-devel zlib-devel gcc gcc-c++ make
RUN useradd -M -s /sbin/nologin nginx
ADD nginx-1.20.2.tar.gz /usr/local/src/
WORKDIR /usr/local/src/nginx-1.20.2
RUN ./configure \
--prefix=/usr/local/nginx \
--user=nginx \
--group=nginx \
--with-http_stub_status_module && make && make install
ENV PATH /usr/local/nginx/sbin:$PATH
EXPOSE 80
EXPOSE 443
ENTRYPoINT [ "/usr/local/nginx/sbin/nginx","-g","daemon off;"]

~                                                                                                                                                                                                              
~                                                                                                                                                                                                                                                                                                                                                                                                                             
~                                                                                                                                                                                                             
~                                                                                  

~

~

bash 复制代码
server {
    listen       80;
    server_name  localhost;
	
    charset utf-8;
    root /usr/share/nginx/html/dist;
    index index.html;

    # 反向代理到Java微服务
    location /ylApp {
        proxy_pass http://compose_projectX-java_app:8090;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header Host $host;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-NginX-Proxy true;
        proxy_redirect off;
    }
    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   html;
    }
}

springboot

bash 复制代码
FROM centos:7
RUN rm -rf /etc/yum.repos.d/*
ADD CentOS-Base.repo /etc/yum.repos.d/
RUN yum clean all && yum makecache
RUN yum install -y java-1.8.0-openjdk java-1.8.0-openjdk-devel
RUN mkdir -p /opt/webapp
COPY yl_application-1.0-SNAPSHOT.jar /opt/webapp
COPY appStart.sh /opt/webapp
WORKDIR /opt/webapp
RUN chmod 777 appStart.sh
CMD ["/bin/bash","appStart.sh"]

~

~

~

~

记得改jar包里的用户名和密码 还有mysql里的授权

相关推荐
Dxy123931021620 小时前
Nginx原生配置介绍
运维·nginx
计算机学姐21 小时前
基于SpringBoot的个人健康管理系统【2026最新】
java·spring boot·后端·mysql·spring·intellij-idea·mybatis
五阿哥永琪21 小时前
MySQL 如何定位&分析慢查询?
android·数据库·mysql
·云扬·21 小时前
利用Orchestrator Hook实现MySQL高可用切换与VIP管理
android·数据库·mysql
tzhou6445221 小时前
Docker的CICD持续集成
ci/cd·docker·容器
愤怒的苹果ext21 小时前
Flink CDC MySQL同步到Elasticsearch
mysql·elasticsearch·flink·cdc·同步数据
oMcLin21 小时前
在RHEL 8系统上如何实现基于Docker的微服务架构,并进行自动化部署?
docker·微服务·架构
人工小情绪1 天前
docker常用命令
docker·容器
小鸡脚来咯1 天前
MySQL索引优化
sql·mysql