docker-compose一键部署java开源项目

yizhihongxing

这一年干的很多事都是为了降低我的开源项目消息推送平台austin使用门槛

如果想学Java项目的,强烈推荐我的开源项目消息推送平台Austin(8K stars) ,可以用作毕业设计,可以用作校招,可以看看生产环境是怎么推送消息的。开源项目消息推送平台austin仓库地址:

消息推送平台?推送下发【邮件】【短信】【微信服务号】【微信小程序】【企业微信】【钉钉】等消息类型

今天想跟大家聊的是austin的部署体验问题,很多人可能MySQL和Redis都不想手动装,就想把项目给启动起来体验下,看看能干些什么。我想了一下,要想达到这个效果,那现在应该docker-compose部署是比较合适的了。

docker-compose一键部署java开源项目

但由于现在austin还在持续更新,近期应该还没有一个稳定的版本,所以目前我是基于”源码打包“的方式去做的。把我的服务器给重装下,让大家感受下。

所需的必要依赖

基于系统:Centos 7.6 x86_64

1、JDK 1.8

2、Maven

3、Git

4、docker

5、docker-compose

6、npm(前端依赖)

这些必要的依赖,一般开发机器上都会有的把?什么?还没有?那我只能把服务器给重装一遍,手把手带着大家来一遍吧。

JDK8 安装

查看可以装的JDK版本:

yum search java|grep jdk

下载JDK 1.8

(安装目录在:/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.352.b08-2.el7_9.x86_64)

(默认只有JRE)

yum install java-1.8.0-openjdk.x86_64

为了后续安装Maven,所以要把JDK也安装上:

yum install java-1.8.0-openjdk-devel.x86_64

设置环境变量

vi /etc/profile
JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.352.b08-2.el7_9.x86_64
JRE_HOME=$JAVA_HOME/jre
CLASS_PATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$JRE_HOME/lib
PATH=$PATH:$JAVA_HOME/bin:$JRE_HOME/bin
export JAVA_HOME JRE_HOME CLASS_PATH PATH
source /etc/profile

查看是否安装成功:

java -version

docker-compose一键部署java开源项目

安装Git

直接使用yum安装:

yum install git

查看是否成功:

git

docker-compose一键部署java开源项目

安装Maven

直接使用wget安装:

wget https://mirrors.tuna.tsinghua.edu.cn/apache/maven/maven-3/3.6.3/binaries/apache-maven-3.6.3-bin.tar.gz --no-check-certificate

解压安装得到的maven

tar -zxvf apache-maven-3.6.3-bin.tar.gz

配置环境变量:

(我的安装目录就在/root/apache-maven-3.6.3)

vi /etc/profile
MAVEN_HOME=/root/apache-maven-3.6.3
export PATH=${MAVEN_HOME}/bin:${PATH}
source /etc/profile

查看是否安装成功:

mvn -v

docker-compose一键部署java开源项目

顺带把maven的镜像也改掉吧,不然官方默认的下载很慢:

(我的安装目录就在/root/apache-maven-3.6.3)

vim /root/apache-maven-3.6.3/conf/settings.xml

加入镜像配置:

<mirror>
  <id>alimaven</id>
  <name>aliyun maven</name>
  <url>http://maven.aliyun.com/nexus/content/groups/public/</url>
  <mirrorOf>central</mirrorOf>
</mirror>
<mirror>
  <id>maven-default-http-blocker</id>
  <mirrorOf>external:http:*</mirrorOf>
  <name>Pseudo repository to mirror external repositories initially using HTTP.</name>
  <url>http://0.0.0.0/</url>
  <blocked>true</blocked>
</mirror>

安装Docker

首先我们需要安装GCC相关的环境:

yum -y install gcc
​
yum -y install gcc-c++

安装Docker需要的依赖软件包:

yum install -y yum-utils device-mapper-persistent-data lvm2

设置国内的镜像(提高速度)

yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

更新yum软件包索引:

yum makecache fast

安装DOCKER CE(注意:Docker分为CE版和EE版,一般我们用CE版就够用了.)

yum -y install docker-ce

启动Docker:

systemctl start docker

下载回来的Docker版本::

docker version

docker-compose一键部署java开源项目

运行以下命令以下载 Docker Compose 的当前稳定版本:

curl -L https://get.daocloud.io/docker/compose/releases/download/1.25.4/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose

将可执行权限应用于二进制文件:

sudo chmod +x /usr/local/bin/docker-compose

创建软链:

sudo ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose

测试是否安装成功:

docker-compose --version

docker-compose一键部署java开源项目

安装NPM

下载npm包:

wget https://npm.taobao.org/mirrors/node/v10.14.1/node-v10.14.1-linux-x64.tar.gz

解压:

tar -xvf  node-v10.14.1-linux-x64.tar.gz

添加环境变量:

(我的安装目录在:/root/node-v10.14.1-linux-x64)

vi /etc/profile
export NODE_HOME=/root/node-v10.14.1-linux-x64
export PATH=$NODE_HOME/bin:$PATH
source /etc/profile

看看安装成功了没有:

node -v

docker-compose一键部署java开源项目

下载pm2来启动前端项目:

npm install -g pm2

DOCKER-COMPOSE 启动AUSTIN

先新建一个文件夹存放austin的项目吧:

mkdir 3y

进入到文件夹中:

cd 3y

克隆austin后端的代码:

git clone https://gitee.com/zhongfucheng/austin.git

克隆austin前端的代码:

git clone https://gitee.com/zhongfucheng/austin-admin.git

进入到austin后端的项目里:

cd austin/

用mvn命令打包

mvn clean package

经过一顿的包依赖下载之后,我们就能看到打包已经成功了

docker-compose一键部署java开源项目

到这,我们就可以使用docker-compose来启动Austin:

docker-compose up --build

docker-compose一键部署java开源项目

docker-compose把mysql/flink/redis/xxl-job/kafka/nacos等项目用到的依赖都已经打进去了,一键就会把各种环境启动起来!

version: '3'
services:
  austin-mysql:
    environment:
      TZ: Asia/Shanghai
      MYSQL_ALLOW_EMPTY_PASSWORD: 'yes'
      MYSQL_ROOT_HOST: '%'
      MYSQL_ROOT_PASSWORD: "root123_A"
    restart: always
    container_name: austin-mysql
    image: mysql:5.7
    hostname: mysql
    command: --init-file /docker-entrypoint-initdb.d/init.sql
    volumes:
      - ./sql/austin.sql:/docker-entrypoint-initdb.d/init.sql
    ports:
      - "3306:3306"
    networks:
      - app
  austin-redis:
    image: redis:3.2
    ports:
      - "6379:6379"
    restart: always
    container_name: austin-redis
    volumes:
      - ./docker/redis/redis.conf:/usr/local/etc/redis/redis.conf:rw
    command:
      /bin/bash -c "redis-server /usr/local/etc/redis/redis.conf"
    networks:
      - app
  austin-zookeeper:
    image: wurstmeister/zookeeper
    container_name: austin-zookeeper
    volumes:
      - "/etc/localtime:/etc/localtime"
    ports:
      - "2181:2181"
    networks:
      - app
  austin-kafka:
    image: wurstmeister/kafka
    container_name: austin-kafka
    volumes:
      - "/etc/localtime:/etc/localtime"
    environment:
      KAFKA_BROKER_ID: 0
      KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://austin-kafka:9092
      KAFKA_LISTENERS: PLAINTEXT://0.0.0.0:9092
      KAFKA_ZOOKEEPER_CONNECT: austin-zookeeper:2181
      KAFKA_CREATE_TOPICS: "austinBusiness:1:1,austinRecall:1:1,austinTraceLog:1:1"
      KAFKA_HEAP_OPTS: -Xmx512M -Xms256M
    ports:
      - "9092:9092"
    depends_on:
      - austin-zookeeper
    networks:
      - app
  jobmanager:
    image: flink:latest
    ports:
      - "8081:8081"
    command:
      - jobmanager
    environment:
      - |
        FLINK_PROPERTIES=
        jobmanager.rpc.address: jobmanager
      - SET_CONTAINER_TIMEZONE=true
      - CONTAINER_TIMEZONE=Asia/Shanghai
      - TZ=Asia/Shanghai
    volumes:
      - ./austin-stream/target/austin-stream-0.0.1-SNAPSHOT.jar:/opt/austin-stream-0.0.1-SNAPSHOT.jar:rw
    depends_on:
      - austin-zookeeper
      - austin-kafka
    networks:
      - app
  taskmanager:
    image: flink:latest
    depends_on:
      - jobmanager
      - austin-zookeeper
      - austin-kafka
    command: taskmanager
    environment:
      - |
        FLINK_PROPERTIES=
        jobmanager.rpc.address: jobmanager
        taskmanager.numberOfTaskSlots: 2
      - SET_CONTAINER_TIMEZONE=true
      - CONTAINER_TIMEZONE=Asia/Shanghai
      - TZ=Asia/Shanghai
    networks:
      - app
  austin-xxl-job:
    image: xuxueli/xxl-job-admin:2.3.0
    container_name: austin-xxl-job
    ports:
      - "8080:8080"
    environment:
      PARAMS: '--spring.datasource.url=jdbc:mysql://austin-mysql:3306/xxl_job?Unicode=true&characterEncoding=UTF-8 --spring.datasource.username=root  --spring.datasource.password=root123_A'
    networks:
      - app
    depends_on:
      - austin-mysql
  austin-nacos:
    container_name: austin-nacos-server
    image: nacos/nacos-server:v2.1.0
    environment:
      - MODE=standalone
      - PREFER_HOST_MODE=hostname
      - SPRING_DATASOURCE_PLATFORM=mysql
      - MYSQL_SERVICE_HOST=austin-mysql
      - MYSQL_SERVICE_PORT=3306
      - MYSQL_SERVICE_USER=root
      - MYSQL_SERVICE_PASSWORD=root123_A
      - MYSQL_SERVICE_DB_NAME=nacos_config
      - JVM_XMS=128m
      - JVM_XMX=128m
      - JVM_XMN=128m
    volumes:
      - /home/nacos/single-logs/nacos-server:/home/nacos/logs
      - /home/nacos/init.d:/home/nacos/init.d
    ports:
      - 8848:8848
      - 9848:9848
      - 9849:9849
    depends_on:
      - austin-mysql
    restart: on-failure
    networks:
      - app
  austin:
    build:
      context: ./
    ports:
      - "7777:7777"
    restart: always
    container_name: austin
    environment:
      - SET_CONTAINER_TIMEZONE=true
      - CONTAINER_TIMEZONE=Asia/Shanghai
      - TZ=Asia/Shanghai
    depends_on:
      - austin-redis
      - austin-mysql
      - austin-zookeeper
      - austin-kafka
      - austin-xxl-job
      - austin-nacos
    networks:
      - app
networks:
  app:
​

启动前端AUSTIN-ADMIN

去到austin-admin的目录下

cd /root/3y/austin-admin

安装必要的依赖:

npm i

docker-compose一键部署java开源项目

把后端的请求链接改为自己的地址:

vim index.html

docker-compose一键部署java开源项目

改完之后,直接启动:

pm2 start server.js

docker-compose一键部署java开源项目

(如果端口3000已经存在了,可以修改 server.js的配置)

docker-compose一键部署java开源项目

验证功能有无问题

我们就以邮件为例,先建个邮件账号:

docker-compose一键部署java开源项目

建个消息模板:

docker-compose一键部署java开源项目

点个测试按钮看看后端的日志是否正常:

docker-compose一键部署java开源项目

docker-compose一键部署java开源项目

后话

看着文章的内容很多,实际上当我们拥有了这些开发环境了之后,部署只是一行简单的docker-compose命令,要实现这个玩意依赖的就俩个文件:docker-compose.ymlDockerfile

这两个文件写起来倒是简单,事后看完也觉得简单,但是中途还是遇到了不少的坑的。至于坑嘛,这玩意还是得自己一步一步踩才有意思,我即便写了,你没遇到也不会有啥感受的。

有了现在这个环境了以后,后面等我更新内容,你们就可以直接pull下最新的代码,编译打包一下,用docker-compose启动就完事啦。

如果想学Java项目的,强烈推荐我的开源项目消息推送平台Austin(8K stars) ,可以用作毕业设计,可以用作校招,可以看看生产环境是怎么推送消息的。开源项目消息推送平台austin仓库地址:

消息推送平台?推送下发【邮件】【短信】【微信服务号】【微信小程序】【企业微信】【钉钉】等消息类型

原文链接:https://www.cnblogs.com/Java3y/p/17351014.html

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:docker-compose一键部署java开源项目 - Python技术站

(0)
上一篇 2023年4月25日
下一篇 2023年4月25日

相关文章

  • 如何使用对象终结器?

    当对象的生命周期结束时,需要清理一些资源,如关闭文件、释放内存等。在C#中,可以使用对象终结器(finalizer)来实现删除对象之前清理所有相关资源的操作。本文将详细讲解如何使用对象终结器。 什么是对象终结器? 对象终结器是.NET框架提供的一种方法,用于确保对象的资源在对象生命周期结束时被释放。通常情况下,框架会自动进行垃圾回收,但是在某些情况下,需要手…

    Java 2023年5月11日
    00
  • Spring Boot定时器创建及使用解析

    Spring Boot定时器创建及使用解析 1. 概述 Spring Boot提供了丰富的定时任务的支持,其中最常用的是基于注解的定时任务。通过在方法上添加@Scheduled注解,即可实现对应的定时任务调度。 2. 添加依赖 在使用Spring Boot的定时任务功能前,我们需要先在pom.xml文件中添加对应的依赖: <dependency>…

    Java 2023年5月19日
    00
  • EJB3.0部署消息驱动Bean抛javax.naming.NameNotFoundException异常

    EJB 3.0 中的消息驱动 Bean(MDB)是一种常用的异步编程模型,它可以接收 JMS 消息并执行相应的业务逻辑。在部署时,可能会遇到 javax.naming.NameNotFoundException 异常,这通常是由于 JNDI 查找失败引起的。下面是针对该异常的完整攻略。 1. 检查 JNDI 名称 在 EJB 模块中部署 MDB 时,需要使用…

    Java 2023年6月15日
    00
  • Springboot与Maven多环境配置的解决方案

    下面我来详细讲解“Spring Boot与Maven多环境配置的解决方案”的完整攻略。 方案概述 在进行软件开发的过程中,不同的环境往往需要使用不同的配置,例如本地开发环境、测试环境、生产环境等。而Spring Boot作为一个快速开发的框架,在开发过程中需要使用到一些配置,例如数据库连接信息、端口号等。因此需要进行多环境配置的支持。 Maven是一个常用的…

    Java 2023年5月19日
    00
  • Java并发编程之LockSupport类详解

    Java并发编程之LockSupport类详解 LockSupport类简介 Java并发编程中,LockSupport类是一个线程阻塞工具,与Object类中的wait()和notify()方法是一样的作用,都可以使线程阻塞或唤醒。不同的是,LockSupport类的唤醒操作不需要持有某个对象的锁,因此可以减少死锁的风险。 LockSupport类主要提供…

    Java 2023年5月19日
    00
  • java控制台实现学生信息管理系统(集合版)

    下面就给大家详细讲解一下如何实现Java控制台学生信息管理系统。 系统需求 学生的基本信息包括学号、姓名、性别和年龄; 使用集合对学生信息进行管理; 实现基本的增、删、改、查功能; 可以按照学号或者姓名进行查找和排序; 友好的用户交互界面。 实现步骤 步骤一:创建学生类 public class Student { private int id; priva…

    Java 2023年5月19日
    00
  • Spring Data JPA+kkpager实现分页功能实例

    下面我将详细讲解“Spring Data JPA+kkpager实现分页功能实例”的完整攻略。 一、什么是Spring Data JPA Spring Data JPA 是 Spring 市场上的众多后续产品中的一个,它简化了基于 JPA 的数据访问层的开发。Spring Data JPA 使得我们可以通过编写接口的方式来提供自定义方法,而无需实现这些接口。…

    Java 2023年5月20日
    00
  • Sprint Boot @Configuration使用方法详解

    @Configuration是Spring Boot中的一个注解,它用于标记一个类为配置类。配置类是一种特殊的类,它用于定义应用程序的配置信息,例如数据源、缓存、消息队列等。在Spring Boot中,我们可以使用@Configuration注解来定义配置类,并使用其他注解来定义配置信息。 @Configuration的作用 @Configuration注解…

    Java 2023年5月5日
    00
合作推广
合作推广
分享本页
返回顶部