使用ESC部署前后端分离项目

本文涉及的产品
云数据库 Tair(兼容Redis),内存型 2GB
Redis 开源版,标准版 2GB
推荐场景:
搭建游戏排行榜
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
简介: 配合Docker快速部署java前后端分离项目

1.1、安装docker

# 安装

yum install docker

# 检验安装是否成功

[root@huchao /]# docker --version

Docker version 20.10.8, build 3967b7d

# 启动

systemctl start docker

1.2、安装docker compose

# 安装docker compose

1.从github上下载docker-compose二进制文件安装

sudocurl-L"https://github.com/docker/compose/releases/download/1.26.2/docker-compose-$(uname -s)-$(uname -m)"-o /usr/local/bin/docker-compose

2.若是github访问太慢,可以用daocloud下载

sudocurl-Lhttps://get.daocloud.io/docker/compose/releases/download/1.26.2/docker-compose-`uname -s`-`uname -m`-o /usr/local/bin/docker-compose

# 赋予权限

sudochmod+x /usr/local/bin/docker-compose

# 检查是否安装成功

docker-compose --version

1.3、编写Dockerfile文件

因为我们的项目需要成为docker的镜像,所以我们必须先编写Dockerfile文件构建我们的项目镜像然后进行编排,Dockerfile文件可以帮助我们进行构建

打包后的jar包,如果要放到容器里面,就要借助dockerfile进行构建

文件中expose的作用:

  1. 只是说明docker容器开放了哪些端口,并没有将这些端口实际开放了出来!更多的作用是告诉运维人员或容器操作人员我开放了容器的哪些端口,只是一种说明
  2. -P命令可以结合这个dockerfile文件中的EXPOSE暴露的端口。会将容器中的EXPOSE端口随机映射到宿主机的端口
  • Dockerfile

FROM java:8

EXPOSE 8080

ADD websocket-0.0.1-SNAPSHOT.jar app.jar

RUN bash-c'touch /app.jar'

ENTRYPOINT ["java","-jar","/app.jar","--spring.profiles.active=pro"]

上面的几行命令其实很简单,首先依赖jdk8环境,对外暴露了8080端口,然后就是复制 websocket-0.0.1-SNAPSHOT.jar到docker容器中并命名为 app.jar ,最后是执行 java -jar /app.jar --spring.profiles.active=pro 使用的是我们编写的生产环境配置

1.4、编写docker-compose.yml文件

docker的编排配置文件

version: '3'# 指定docker-compose版本

services:

 nginx:    # 服务名称  用户自定义

   image: nginx:latest   # 镜像nginx的最新版本

   ports:

     - 80:80     # 暴露端口(宿主:容器),把容器80端口映射到宿主机的80端口

   volumes:      # 挂载(宿主:容器)

     - /root/nginx/html:/usr/share/nginx/html

     - /root/nginx/nginx.conf:/etc/nginx/nginx.conf

   privileged: true  # 这个必须要,解决nginx的文件调用的权限问题

 mysql:

   image: mysql:5.7.19

   ports:

     - 3306:3306

   environment:    # 指定 root 用户的密码

     - MYSQL_ROOT_PASSWORD=12345

 redis:

   image: redis:latest

 vue-springboot-blog:

   image: vueblog:latest

   build: .    # 表示以当前目录下的Dockerfile开始构建镜像

   ports:

     - 8085:8085

   depends_on:   # 依赖于mysql、redis,其实可以不填,默认已经表示可以

     - mysql

     - redis

1.5、修改application-pro.yml

直接使用mysql替换掉MySQL的URL

当我们访问时,mysql会自动转换成docker内部的IP地址

# DataSource Config

spring:

 datasource:

   driver-class-name: com.mysql.cj.jdbc.Driver

   url: jdbc:mysql://mysql:3306/vueblog?useUnicode=true&useSSL=false&characterEncoding=utf8&serverTimezone=Asia/Shanghai

   username: root

   password: 10428376

shiro-redis:

 enabled: true

 redis-manager:

   host: redis:6379

1.6、准备好nginx的挂载目录和配置

docker-compose.yml中已经提到,

  • 宿主机的挂载目录: /root/nginx/html
  • 挂载配置:/root/nginx/nginx.conf

所以我们在root目录下新建nginx目录,并进入nginx目录下新建html目录和一个nginx.conf配置文件。

然后读nginx.conf进行编写,具体配置如下:

  • nginx.conf

#user root;

worker_processes  1;

events {

   worker_connections  1024;

}

http {

   include       mime.types;

   default_type  application/octet-stream;

   sendfile        on;

   keepalive_timeout  65;

   server {

       listen       80;

       server_name  localhost;

       location / {

           root   /usr/share/nginx/html;

           try_files $uri $uri/ /index.html last;

           index  index.html index.htm;

       }

       

       error_page   500 502 503 504  /50x.html;

       location = /50x.html {

           root   html;

       }

   }

}

1.7、上传前端

前端打包之后先修改前端调用后端的接口

然后npm run build 打包得到dist文件夹,将其压缩,并上传到linux的 root/nginx/html目录下

  • 解压:upzip dist.zip
    安装unzip:yum install unzip
  • mv dist/* .
  • 去除dist文件夹和dist.zip:rm -rf dist*
  • cd ..
  • vim nginx.conf
  • :wq:保存退出

1.8、部署后端

打包后端项目:跳过测试

mvn clean package -Dmaven.test.skip=true

将打包好的jar包、Dockerfile、docker-compose.yml都上传到linux根目录下,

然后执行一下编排命令

# 开始编排

docker-compose up -d

其中-d表示后台服务形式启动, 然后稍等片刻,特别是Building vue-springboot-blog 的时候可能时间有点长,耐心等待即可!


# 查看日志

docker logs -f java项目的containerID

常见问题

  1. Unable to start docker Container from docker-compose “unknown flag: iidfile”
    原因compose版本过高导致1.29.1
    解决:降低compose版本到1.26.2

rm -f /usr/local/bin/docker-compose

  1. 备注:因为降低了compose版本,compose的yml文件需要降低版本到3.3
  2. 数据库连接报错:plugin caching_sha2_password could not be loaded
    将MySQL版本由8降为了5.7
  3. 重新启动docker-compose重启但不更新:
  • 全部:docker-compose restart
  • 单个:docker-compose restart worker
  1. 重启并更新:
  • 全部:docker-compose up --detach --build
  • 单个:docker-compose up --detach --build websocket
  1. java.sql.SQLSyntaxErrorException: Table 'chatroom.USER' doesn't exist
    Windows中的表名不区分大小写,而linux中区分
  2. Error parsing HTTP request header
    我们在前后台交互的时候往往使用json格式的字段串参数,其中含有“{}”“[]”这些特舒符号,在高版本的tomcat中含有这些字符的请求会被拦截
    添加如下配置类即可

@Configuration

publicclassTomcatConfig {

   @Bean

   publicTomcatServletWebServerFactorywebServerFactory() {

       TomcatServletWebServerFactoryfactory=newTomcatServletWebServerFactory();

       factory.addConnectorCustomizers((Connectorconnector) -> {

           connector.setProperty("relaxedPathChars", "\"<>[\\]^`{|}");

           connector.setProperty("relaxedQueryChars", "\"<>[\\]^`{|}");

       });

       returnfactory;

   }

}

  1. 加了这个是本地可以正常运行,服务器是不报错了,但功能却没实现!
    更改为在配置中:

#设置http参数限制

server.tomcat.max-http-header-size=3145728

  1. 已被springboot高级版本废除

server.max-http-header-size=8192

  1. 也不行;
    docker-compose up --detach --build后终于成功
目录
相关文章
|
10月前
|
弹性计算 开发工具 git
2分钟在阿里云ECS控制台部署个人应用(图文示例)
作为一名程序员,我在部署托管于Github/Gitee的代码到阿里云ECS服务器时,经常遇到繁琐的手动配置问题。近期,阿里云ECS控制台推出了一键构建部署功能,简化了这一过程,支持Gitee和GitHub仓库,自动处理git、docker等安装配置,无需手动登录服务器执行命令,大大提升了部署效率。本文将详细介绍该功能的使用方法和适用场景。
2分钟在阿里云ECS控制台部署个人应用(图文示例)
|
存储 弹性计算 网络安全
搭建基于OSS的图片分享网站
本教程介绍如何基于云服务器ECS和对象存储OSS,搭建一个图片分享网站。
|
弹性计算 Linux 网络安全
阿里云ECS健康诊断产品详解
介绍阿里云ECS健康诊断产品详情和使用案例,包括各个产品概念、控制、OpenAPI、SDK等。
|
11月前
|
存储 Docker 容器
ARM架构鲲鹏主机BClinux离线安装docker步骤
下载并安装适用于ARM架构的Docker CE二进制文件,解压后移动至/usr/bin目录。创建docker组,配置systemd服务脚本(docker.service、docker.socket、containerd.service),重载systemd配置,启动并启用docker服务。编辑daemon.json配置存储驱动、镜像加速地址等,最后拉取所需镜像。
455 0
|
敏捷开发 缓存 前端开发
阿里云云效产品使用合集之前端打包时npm安装卡住一般是什么导致的
云效作为一款全面覆盖研发全生命周期管理的云端效能平台,致力于帮助企业实现高效协同、敏捷研发和持续交付。本合集收集整理了用户在使用云效过程中遇到的常见问题,问题涉及项目创建与管理、需求规划与迭代、代码托管与版本控制、自动化测试、持续集成与发布等方面。
|
机器学习/深度学习 边缘计算 Docker
Docker有哪些应用场景
Docker有哪些应用场景
969 0
|
负载均衡 Java Nacos
Spring Boot 单体应用升级 Spring Cloud 微服务
Spring Boot 单体应用升级 Spring Cloud 微服务
138841 111
|
NoSQL JavaScript Redis
若依后端部署---若依部署,Redis在D盘的project的应用工具当中,在连接过程中,先用Xshell连接若依,RDM在应用工具里,同时host的主机也要写好
若依后端部署---若依部署,Redis在D盘的project的应用工具当中,在连接过程中,先用Xshell连接若依,RDM在应用工具里,同时host的主机也要写好
|
NoSQL 网络协议 Linux
公网远程连接Redis数据库「内网穿透」
Redis作为一款高速缓存的key value键值对的数据库,在许许多多的场景中广泛使用,由于是把数据存储在内存中,所以读写效率极高
|
弹性计算 Linux 网络安全
阿里云服务器ECS基本操作指南
简要讲述阿里云服务器ECS后台管理功能及如何通过Xshell 5 远程连接服务器
阿里云服务器ECS基本操作指南