docker-compose一鍵部署java開源專案

Java3y發表於2023-04-24

這一年乾的很多事都是為了降低我的開源專案訊息推送平臺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.ymlDockerfile

這兩個檔案寫起來倒是簡單,事後看完也覺得簡單,但是中途還是遇到了不少的坑的。至於坑嘛,這玩意還是得自己一步一步踩才有意思,我即便寫了,你沒遇到也不會有啥感受的。

有了現在這個環境了以後,後面等我更新內容,你們就可以直接pull下最新的程式碼,編譯打包一下,用docker-compose啟動就完事啦。

如果想學Java專案的,強烈推薦我的開源專案訊息推送平臺Austin(8K stars) ,可以用作畢業設計,可以用作校招,可以看看生產環境是怎麼推送訊息的。開源專案訊息推送平臺austin倉庫地址:

訊息推送平臺?推送下發【郵件】【簡訊】【微信服務號】【微信小程式】【企業微信】【釘釘】等訊息型別

相關文章