linux + docker-compose 部署 jar + dist


第一次使用docker-compose部署jar包和vue项目打包的dist文件夹,
下载demo
准备好Linux系统,并且已经使用FinalShell之类的工具连接成功,
后台打包的jar包,
前端打包的dist文件夹



一、在linux系统上安装docker-compose

1.安装docker-compose

sudo curl -L "https://github.com/docker/compose/releases/download/v1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose

版本自己选择,更改v1.29.2版本号就行了,最新版本查看

如果超时,请使用

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

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

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

3.测试是否安装成功

docker-compose --version

在这里插入图片描述

二、想一想

所有的准备工作已经做完了,现在停下来想一想,jar包,dist文件夹我们必然要上传到Linux服务器,不然其他的都是扯淡,但是我们放到什么地方,怎样的目录结构,这个得想明白,不然部署完成后,回头在看,强迫症表示非常难受.
我想的目录结构
在这里插入图片描述
在这里插入图片描述

以上只是众多问题中的一个,现在想一想,捋一捋,下面正式开始:

三、部署后台jar

首先把项目打包成jar,上传到服务器指定的位置
在这里插入图片描述
docker-compose.yml文件配置

version: '3'
# 后台
services:
  rhcms-api: #spring boot的服务名,服务名自定义
    #容器名称
    container_name: rhcms-api
    #image是指定服务的镜像名称或镜像ID。如果镜像在本地不存在,Compose将会尝试拉取镜像。
    image: java:8
    restart: always
    environment:
      TZ: Asia/Shanghai
   #ports用于映射端口的标签。使用HOST:CONTAINER格式或者只是指定容器的端口,宿主机会随机映射端口。
    ports:
      - "18089:18089"
    #挂载文件夹
    volumes:
      - ./backend/RHCMS-0.0.1-SNAPSHOT.jar:/data/RHCMS-0.0.1-SNAPSHOT.jar
    #启动容器后执行的命令
    entrypoint: java -jar /data/RHCMS-0.0.1-SNAPSHOT.jar

还有网络什么的相关设置,不太懂,就没写.
这样就可以进入docker-compose.yml同级目录下
使用

docker-compose up 启动
docker-compose down 关闭

四、部署前端dist

首先把项目打包成dist,上传到服务器指定的位置

在这里插入图片描述

nginx.conf文件配置


user  nginx;
worker_processes  1;

error_log  /var/log/nginx/error.log warn;
pid        /var/run/nginx.pid;

events {
    worker_connections  1024;
}

http {
    include       /etc/nginx/mime.types;
    default_type  application/octet-stream;

    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';

    access_log  /var/log/nginx/access.log  main;

    sendfile        on;

    keepalive_timeout  65;

    # include /etc/nginx/conf.d/*.conf;

  	server {
        listen       8000;
        charset utf-8;
        server_name  192.168.10.177;# 服务器地址或绑定域名

    	# start ---------------------------------------------------------------------------------------------

        location / {
           root   /usr/share/nginx/html;
           index  index.html index.htm;
           try_files $uri $uri/ /index.html;
        }

#	   location / {
#			proxy_pass http://192.168.10.177:18089/;
#        }
		location /api/ {
			proxy_pass http://192.168.10.177:18089/;
		}
        # end ---------------------------------------------------------------------------------------------

        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   /usr/share/nginx/html;
        }
   }

}



docker-compose.yml文件配置


version: '3'
# 后台
services:
  rhcms-api: #spring boot的服务名,服务名自定义
    #容器名称
    container_name: rhcms-api
    #image是指定服务的镜像名称或镜像ID。如果镜像在本地不存在,Compose将会尝试拉取镜像。
    image: java:8
    restart: always
    environment:
      TZ: Asia/Shanghai
   #ports用于映射端口的标签。使用HOST:CONTAINER格式或者只是指定容器的端口,宿主机会随机映射端口。
    ports:
      - "18089:18089"
    #挂载文件夹
    volumes:
      - ./backend/RHCMS-0.0.1-SNAPSHOT.jar:/data/RHCMS-0.0.1-SNAPSHOT.jar
    #启动容器后执行的命令
    entrypoint: java -jar /data/RHCMS-0.0.1-SNAPSHOT.jar

# 前端   
  rhcms-api-web:
    container_name: rhcms-api-web
    image: nginx:latest
    restart: always
    environment:
      TZ: Asia/Shanghai
    ports:
      - "8000:8000"
    volumes:
      - ./frontend/nginx.conf:/etc/nginx/nginx.conf:ro
      - ./frontend/dist/:/usr/share/nginx/html/:ro
    command: [nginx-debug, '-g', 'daemon off;']

之后的mysql之类的就是同理可得,自己研究研究

本项目完整的docker-compose.yml文件配置

version: '3'
# 后台
services:
  rhcms-api: #spring boot的服务名,服务名自定义
    #容器名称
    container_name: rhcms-api
    #image是指定服务的镜像名称或镜像ID。如果镜像在本地不存在,Compose将会尝试拉取镜像。
    image: java:8
    restart: always
    environment:
      TZ: Asia/Shanghai
   #ports用于映射端口的标签。使用HOST:CONTAINER格式或者只是指定容器的端口,宿主机会随机映射端口。
    ports:
      - "18089:18089"
    #挂载文件夹
    volumes:
      - ./backend/RHCMS-0.0.1-SNAPSHOT.jar:/data/RHCMS-0.0.1-SNAPSHOT.jar
    #启动容器后执行的命令
    entrypoint: java -jar /data/RHCMS-0.0.1-SNAPSHOT.jar

# 后台的前端   
  rhcms-api-web:
    container_name: rhcms-api-web
    image: nginx:latest
    restart: always
    environment:
      TZ: Asia/Shanghai
    ports:
      - "8000:8000"
    volumes:
      - ./frontend/nginx.conf:/etc/nginx/nginx.conf:ro
      - ./frontend/dist/:/usr/share/nginx/html/:ro
    command: [nginx-debug, '-g', 'daemon off;']

# minio
  minio:
    image: minio/minio:latest
    container_name: minio
    ports:
      - "9000:9000"
      - "9001:9001"
    restart: always
    command: server --console-address ":9001" /data
    environment:
      MINIO_ACCESS_KEY: admin
      MINIO_SECRET_KEY: admin@123
    logging:
      options:
        max-size: "50M"
        max-file: "10"
      driver: json-file
    volumes:
      - ./minio/data:/data

# mysql
  mysql:
    image: mysql:5.7.34
    container_name: mysql_container
    restart: always
    ports:
      - "3306:3306"
    volumes:
      - ./mysql/data:/var/lib/mysql
      - ./mysql/conf/my.cnf:/etc/my.cnf
    environment:
      - "MYSQL_DATABASE=root"
      - "MYSQL_ROOT_PASSWORD=root123"
      - "TZ=Asia/Shanghai"
Logo

前往低代码交流专区

更多推荐