docker-compose一键部署java开源项目
这一年干的很多事都是为了降低我的开源项目消息推送平台austin使用门槛。
如果想学Java项目的,强烈推荐我的开源项目消息推送平台Austin(8K stars) ,可以用作毕业设计,可以用作校招,可以看看生产环境是怎么推送消息的。开源项目消息推送平台austin仓库地址:
消息推送平台推送下发【邮件】【短信】【微信服务号】【微信小程序】【企业微信】【钉钉】等消息类型。
今天想跟大家聊的是austin的部署体验问题,很多人可能MySQL和Redis都不想手动装,就想把项目给启动起来体验下,看看能干些什么。我想了一下,要想达到这个效果,那现在应该docker-compose部署是比较合适的了。
但由于现在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
安装Git
直接使用yum安装:
yum install git
查看是否成功:
git
安装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
顺带把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 的当前稳定版本:
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
安装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
下载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来启动Austin:
docker-compose up --build
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
把后端的请求链接改为自己的地址:
vim index.html
改完之后,直接启动:
pm2 start server.js
(如果端口3000已经存在了,可以修改 server.js的配置)
验证功能有无问题
我们就以邮件为例,先建个邮件账号:
建个消息模板:
点个测试按钮看看后端的日志是否正常:
后话
看着文章的内容很多,实际上当我们拥有了这些开发环境了之后,部署只是一行简单的docker-compose命令,要实现这个玩意依赖的就俩个文件:docker-compose.yml和Dockerfile
这两个文件写起来倒是简单,事后看完也觉得简单,但是中途还是遇到了不少的坑的。至于坑嘛,这玩意还是得自己一步一步踩才有意思,我即便写了,你没遇到也不会有啥感受的。
有了现在这个环境了以后,后面等我更新内容,你们就可以直接pull下最新的代码,编译打包一下,用docker-compose启动就完事啦。
如果想学Java项目的,强烈推荐我的开源项目消息推送平台Austin(8K stars) ,可以用作毕业设计,可以用作校招,可以看看生产环境是怎么推送消息的。开源项目消息推送平台austin仓库地址:
消息推送平台推送下发【邮件】【短信】【微信服务号】【微信小程序】【企业微信】【钉钉】等消息类型。
docker-compose一键部署java开源项目的更多相关文章
- Docker Compose 一键部署Nginx代理Tomcat集群
		
Docker Compose 一键部署Nginx代理Tomcat集群 目录结构 [root@localhost ~]# tree compose_nginx_tomcat/ compose_nginx ...
 - Docker Compose 一键部署多节点爬虫程序
		
Docker Compose 一键部署多节点爬虫程序 目录结构 [root@localhost ~]# tree compose_crawler/ compose_crawler/ ├── cento ...
 - Docker Compose 一键部署LNMP
		
Docker Compose 一键部署LNMP 目录结构 [root@localhost ~]# tree compose_lnmp/ compose_lnmp/ ├── docker-compose ...
 - 开源跨境ERP - 小老板  Docker/Docker Compose一键部署
		
先上部署成功后的截图,各个菜单点击均无报错 DockerCompose 包含: 1. 三个mysql5.7数据库 2. redis php会话存储+ memcached 3. 小老板php主程序 do ...
 - [Docker]compose一键部署nginx
		
Docker-compose部署nginx 创建配置文件 mkdir -p /usr/local/docker/nginx cat > /usr/local/docker/nginx/docke ...
 - Docker Compose一键部署Nginx反向代理Tomcat集群
		
目录结构如下 mysql/conf/my.cnf [mysqld] user=mysql port=3306 datadir=/var/lib/mysql socket=/var/lib/mysql/ ...
 - windows一键部署java项目
		
windows一键部署java项目 因为公司需求,要在windows的环境上做一键部署启动java项目,同时还要支持从安装界面动态修改配置文件的IP地址.就像安装软件一样将jdk,tomcat,mys ...
 - 3月份GitHub上最热门的Java开源项目
		
今天,我们来盘点3月份GitHub上最热门的Java项目的时候了,如果你每月都有关注猿妹发布的排行榜,那么本月的Java项目对你来说一定不陌生,这些都是曾经多次出现在榜单中的项目: 1 advance ...
 - Docker Gitlab CI 部署 Spring Boot 项目
		
目前在学习这一块的内容,但是可能每个人环境都不同,导致找不到一篇博客能够完全操作下来没有错误的,所以自己也写一下,记录一下整个搭建的过程. Docker 的安装这里就不赘述了,基本上几行命令都可以了, ...
 - 阿里巴巴的26款Java开源项目
		
阿里巴巴的26款Java开源项目 开源展示了人类共同协作,成果分享的魅力.没有任何一家网络公司可以不使用开源技术,仅靠自身技术发展起来.“取之于开源,用之于开源,才能促进开源的良性发展”,阿里巴巴各个 ...
 
随机推荐
- 汇编程序 - TD调试
			
为了写这个Blog,无奈的我深夜打开虚拟机,希望也能帮助一些人,因为好像真的有人不会欸!(→_→) 写在前面的话: 1. TD面板下的调试十分重要.可以观察内存(GOTO DS:XXXX)存放的位置与 ...
 - 磊磊零基础打卡算法:day17 c++堆排序
			
5.20 前言吐槽: 今天是5.20啦,但是作为单身修狗的我只能和代码过啦...继续加油算法打卡!!! 堆排序: 堆就是一棵完全二叉树 二叉堆是一种支持插入,删除,查询最值的数据结构.他其实是一棵满足 ...
 - 动态生成frame时需要对frame类进行注册,否则会出现找不到frame类的错误。
			
procedure TMainForm.openFram(Caption, FormClassName, imgIdx: string); var i: integer; sheet: TUniTab ...
 - Linux下apache日志(按日期存放)分析与状态查看方法
			
转载网址: https://blog.csdn.net/weixin_42272246/article/details/125602258
 - Android笔记--Activity--启停活动页面
			
Activity启动 从当前页面跳转到新的页面:startActivity(new Intent(原页面.this,目标页面.class)) 而若是从当前页面返回到上一个页面,相当于关闭当前页面,使用 ...
 - Android studio 安装过程中SDK的环境配置问题
			
SDK的环境配置问题 在之前的某一篇中,我也提到过在Ecplise里面的SDK的环境配置,二者确实不太一样! 一.系统环境变量新增一个 变量名为:ANDROID_HOME 变量值为:浏览到下载SDK的 ...
 - 组合构造和对应的OGF/EGF Dictionary 备查
			
目录 Constructions Cycle Multiset construction Powerset construction Admissible unlabelled constructio ...
 - 【读书笔记】组合计数中的行列式方法 专题3 完美匹配: the Pfaffian method
			
目录 专题3-Perfect matchings: the Pfaffian method 一些定义 用2×1的砖密铺a×b的大矩形的方法数 专题3-Perfect matchings: the Pfa ...
 - CROS跨域问题的解决
			
转载: 作者:小丞同学链接:https://www.zhihu.com/question/452543297/answer/2247177767来源:知乎 在前后端交互的过程中,经常会遇到跨域的问题, ...
 - 深入理解 Python 虚拟机:字典(dict)的实现原理及源码剖析
			
深入理解 Python 虚拟机:字典(dict)的实现原理及源码剖析 在本篇文章当中主要给大家深入介绍一下在 cpython 当中字典的实现原理,在本篇文章当中主要介绍在早期 python3 当中的版 ...