后端项目打jar包修改及配置项
1、修改配置文件 application-prod.yml中的mysql配置和redis配置
2、切换Maven为生产模式
3、Maven打包
4、拿到打包后的jar 包
5、拿到jar包之后在Linux中使用
nohup java -jar jeecg-system-start-3.5.0.jar >catalina.out 2>&1 &
命令即可启动项目
前端项目打包及配置项
- 修改.env.production文件
2.进入前端项目根目录,执行编译命令
yarn install
yarn run build
前端项目根目录中的dist即是打包后的前端项目
将dist文件夹存放到nginx/html文件夹中
在nginx/conf/nginx.conf中配置:
server {# nginx监听端口
listen 8088;
server_name localhost2;
#前端打的dist资源存放目录
root html/dist;
#前端项目.env.production文件中的VUE_APP_API_BASE_URL
location /jeecg-boot/ {
#后台接口地址
proxy_pass http://127.0.0.1:8080/jeecg-boot;
proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
set $my_proxy_add_x_forwarded_for $proxy_add_x_forwarded_for;
if ($proxy_add_x_forwarded_for ~* "127.0.0.1"){
set $my_proxy_add_x_forwarded_for $remote_addr;
}
proxy_set_header X-Forwarded-For $my_proxy_add_x_forwarded_for;
}
location / {
try_files $uri $uri/ /index.html;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
此时访问ip:8088即可访问到前端项目
Linux安装nginx
创建一个目录存放nginx安装包
下载地址:http://nginx.org/en/download.html
下载命令:wget http://nginx.org/download/nginx-1.13.6.tar.gz
解压包 tar -xvf 包名,默认解压到当前文件夹。
先安装上依赖;
yum install gcc
yum install pcre-devel
yum install zlib zlib-devel
yum install openssl openssl-devel
cd到nginx目录
cd nginx-1.13.7 #切换目录
./configure #执行配置
make && make install #编译安装(默认安装在/usr/local/nginx)【make生成的才是真正的nginx】
然后
/usr/local/nginx/sbin/nginx -v #查看版本
cd /usr/local/nginx/sbin #cd到nginx的安装位置的sbin目录下
./nginx #启动nginx
访问此服务器的ip就可以看到welcome to nginx【如果不行的话防火墙开放80端口【还不行的话就是云服务器的安全组80端口没有开启】】
常用命令
./nginx #启动nginx
./nginx -t #测试配置文件
./nginx -s reload #重启Nginx
./nginx -s quit #停止nginx
./nginx -s stop #停止nginx
Linux安装java
在这个网址下载https://www.oracle.com/technetwork/java/javase,选择download,因为是CentOS 7.6,所以选择x64 Compressed Archive版本的安装包。
创建目录,解压:
mkdir /usr/java
tar zvxf jdk.tar.gz -C /usr/java
为了能在全局使用java命令,配置环境变量:
修改环境配置文件
vi /etc/profile
编辑配置文件,在里面添加如下三行
export JAVA_HOME=/usr/java/jdk1.8.0_271
export PATH=JAVA_HOME/bin:PATH
export CLASSPATH=.:JAVA_HOME/lib/dt.jar:JAVA_HOME/lib/tools.jar
使环境变量生效
source /etc/profile
验证是否配置成功,查看java版本
java -version
Linux安装mysql
CentOS7已经不再支持MySQL,而是在内部集成了MariaDB,文件会有冲突,所以还要先卸载MariaDB才行。
列出所有被安装的rpm package
rpm -qa | grep mariadb
卸载(注意"版本号"根据当前系统显示的版本信息的为准)
rpm -e mariadb-libs-5.5.37-1.el7_0.x86_64
如果提示依赖检测失败可以强制卸载
rpm -e --nodeps mariadb-libs-5.5.37-1.el7_0.x86_64
安装依赖
yum install vim libaio net-tools
MySQL :: Download MySQL Community Server (Archived Versions)
从这个链接选一个合适的版本的mysql,下载RPM Bundle的包,CentOS系统就是Red Hat的社区发行版,内核是相同的,或者用通用版本(Generic)也可以。
下载bundle包,解压出文件上传至服务器,依次安装包中的所有rpm文件。
rpm -ivh mysql-community-common-8.0.13-1.el7.x86_64.rpm
如果出现"依赖检测失败"问题再后面添加 --force --nodeps强制安装
rpm -ivh mysql-community-common-8.0.13-1.el7.x86_64.rpm --force --nodeps
service mysql start // 启动MySQL
登录数据库两种方式,推荐第二种更方便
- mysql -uroot -p密码 # 登录mysql
- 使用Navicat登录mysql数据库
常见错误:QRTZ_LOCKS表明明存在于数据库但是却显示不存在,是因为数据库大小写敏感的原因
常用命令:
- 切换数据库
Use MySQL
- 列出所有的数据库/表
Show databases/tables
- 建立数据库:
CREATE DATABASE 库名;
- 删除数据库:
DROP DATABASE 库名;
- 删除数据表:
DROP TABLE 表名;
- 导入.sql文件命令:
USE 数据库名;
SOURCE mysql.sql;
Linux安装redis
1、下载地址:https://redis.io/download,下载最新稳定版本,下载下来的文件上传到需要安装的服务器的目录。
2、tar -xzvf redis-5.0.7.tar.gz 解压到当前目录
3、在redis-5.0.7目录,执行 make ,等待安装结束
4、进入 /redis-5.0.7/src 目录,执行: ./redis-server ,正常显示以下图像代表没问题
5、编辑环境变量配置文件: vim /etc/profile 按 i 进入编辑模式 光标移至最后一行 开始添加如下
export REDIS_HOME=/opt/softs/redis/redis-5.0.7/
export PATH=PATH:REDIS_HOME/src/
6、第一行是解压之后的redis 的目录。编辑完成之后按 ESC 输入 wq! 保存并退出
7、刷新配置信息: source /etc/profile
8、此时在任意目录下 都可以执行redis相关命令
修改密码:
1、打开redis.conf配置文件。该文件通常位于Redis服务器的安装目录下。
2、找到并取消注释(删除前面的 # 符号)以下行:
3、# requirepass foobared
4、将 foobared 替换为您想要设置的密码,例如:
requirepass <new_password>
5、保存并关闭配置文件,重新启动Redis服务。
Windows安装docker
使用 PowerShell 启用 Hyper-V
以管理员身份打开 PowerShell 控制台,运行以下命令:
Enable-WindowsOptionalFeature -Online -FeatureName Microsoft-Hyper-V -All
Docker下载地址Docker Desktop
Docker-desktop中自带docker-compose工具。
下载docker-desktop之后,一路 Next,点击 Finish 完成安装。
安装之后,可以打开 PowerShell 并运行以下命令检测是否运行成功:
docker run hello-world
在成功运行之后应该会出现以下信息:
如果启动中遇到因 WSL 2 导致地错误,先安装 WSL 2。
Linux安装docker和docker-compose
apt-get install docker.io # Linux安装docker
docker -v # 查看版本号
安装docker-compose
- sudo curl -L https://github.com/docker/compose/releases/download/1.21.2/docker-compose-$(uname -s)-$(uname -m) -o /usr/local/bin/docker-compose
- sudo chmod +x /usr/local/bin/docker-compose
- docker-compose -v
docker中重要的是容器和镜像的概念,可以简单的将docker理解为共享操作系统的轻量虚拟机:
- docker容器是一种隔离的运行环境,它是由docker镜像创建的一个运行实例。在docker容器中可以安装应用程序、运行服务,并能够提供运行时环境的隔离。
- docker镜像是容器的基础,它是docker容器的静态模板,包含了运行一个docker容器所需的一切,包括系统工具、应用程序、配置文件等。
dockerfile文件和docker-compose.yml
dockerfile文件用于生成docker镜像
docker-compose文件用于编排镜像和容器运行。
dockerfile定义了单个容器的构建规则,它指导docker构建工具如何从基础镜像中创建一个特定的容器镜像。
docker-compose.yml定义了一组容器的编排规则,它描述了应用程序由哪些容器组成、它们之间的连接和通信方式,以及如何运行这些容器。
通常,docker-compose.yml文件中会引用一个或多个dockerfile,以便在构建多容器应用程序时使用这些docker镜像。
dockerfile文件示例
FROM anapsix/alpine-java:8_server-jre_unlimited
MAINTAINER jeecgos@163.com
RUN ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
WORKDIR /jeecg-boot
EXPOSE 8076
ADD ./target/jeecg-system-start-3.4.4.jar ./
CMD sleep 60;java -Djava.security.egd=file:/dev/./urandom -jar jeecg-system-start-3.4.4.jar
常用配置项:
FROM:基于此镜像构建新镜像
RUN:构建镜像过程中所运行的指令,每一个RUN执行后都会生成一个镜像层。整个镜像由多个镜像层组成。
WORKDIR:设置镜像生成的容器的工作目录,进入容器时会首先进入整个目录。
EXPOSE:暴露容器端口,可以将容器的端口映射到宿主机端口。
ADD :将打包后的文件加到镜像中,镜像运行为容器之后,同样会存在于容器中。
CMD:容器启动后默认执行的指令
以下是docker-compose.yml文件示例
version: '2'
services:
jeecg-boot-redis:
image: redis:5.0
ports:
- 6379:6379
restart: always
hostname: jeecg-boot-redis
container_name: jeecg-boot-redis
jeecg-boot-system: # 指定服务名,一个项目为一个服务
build:
context: ./jeecg-module-system/jeecg-system-start
restart: on-failure
depends_on:
- jeecg-boot-redis
container_name: jeecg-boot-system
image: jeecg-boot-system
hostname: jeecg-boot-system
ports:
- 8080:8080
常用配置项
build:使用context基于上下文路径指定dockerfile文件
container_name:指定自定义容器的名称
depends_on:指定服务之间的依赖关系,解决服务启动先后顺序问题。
被依赖的服务会先启动
environment:设置环境变量。
expose:暴露指定端口,但不映射到宿主机,只被连接的服务访问。只能指定内部端口
image:指定要启动容器的镜像。
ports:端口映射:格式为宿主机端口:容器端口。访问宿主机的指定端口就可以访问容器运行在这个端口的服务。
docker常用命令
#启动docker服务
systemctl start docker
#查看docker服务状态
systemctl status docker
#查看本地所有镜像
docker images
#单个镜像删除,相当于:docker rmi redis:latest
docker rmi redis
#强制删除(针对基于镜像有运行的容器进程)
docker rmi -f redis
#启动一个或多个已经被停止的容器
docker start redis
#重启容器
docker restart redis
#查看正在运行的容器
docker ps
#查看所有的容器
docker ps -a
#停止一个运行中的容器
docker stop redis
#删除一个已停止的容器
docker rm redis
#删除一个运行中的容器
docker rm -f redis
#使用交互模式进入容器
docker exec -it redis bash
#查看容器日志
docker logs Redis
#在有docker-compose.yml文件的目录中运行此命令,启动整个docker-compose应用。
docker-compose up -d
#关闭docker-compose的单个服务
docker-compose stop 服务名
#启动docker-compose的单个服务
docker-compose start 服务名
docker部署项目流程
使用docker部署项目流程是:
- 按照1.1和1.2前后端打包流程打包前后端,在上述基础之上,将ip改为docker-compose.yml文件中的service名称。
2、使用dockerfile文件将前后端打的包增加到镜像中
3、使用docker-compose.yml文件管理镜像服务的启动。
4、将镜像移植到服务器上一键启动
以交通项目为例,部署控制中心前后端,mysql、redis总共四个服务。
首先查看dockerfile文件和docker-compose.yml文件
MySQL的dockerfile
FROM mysql:8.0.19
MAINTAINER jeecgos@163.com
ENV TZ=Asia/Shanghai
RUN ln -sf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone
COPY ./jeecgboot-hxz.sql /docker-entrypoint-initdb.d
COPY ./jeecg-simulator.sql /docker-entrypoint-initdb.d
COPY ./jeecg-agent.sql /docker-entrypoint-initdb.d
COPY ./xxl_job.sql /docker-entrypoint-initdb.d
Redis直接使用现有镜像
控制中心后端的dockerfile
FROM anapsix/alpine-java:8_server-jre_unlimited
MAINTAINER jeecgos@163.com
RUN ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
#RUN mkdir -p /jeecg-boot/config/jeecg/
WORKDIR /jeecg-boot
EXPOSE 8080
ADD ./target/jeecg-system-start-3.4.4.jar ./
CMD sleep 60;java -Djava.security.egd=file:/dev/./urandom -jar jeecg-system-start-3.4.4.jar
控制中心前端的dockerfile
FROM nginx
MAINTAINER jeecgos@163.com
VOLUME /tmp
ENV LANG en_US.UTF-8
RUN echo " gzip on; \
gzip_min_length 1k; \
gzip_comp_level 9; \
gzip_types text/plain application/javascript application/x-javascript text/css application/xml text/javascript application/x-httpd-php image/jpeg image/gif image/png; \
gzip_vary on; \
gzip_disable "MSIE [1-6]\."; \
server { \
listen 81; \
location ^~ /jeecg-boot { \
proxy_pass http://jeecg-boot-system:8080/jeecg-boot/; \
proxy_set_header Host jeecg-boot-system; \
proxy_set_header X-Real-IP \$remote_addr; \
proxy_set_header X-Forwarded-For \$proxy_add_x_forwarded_for; \
} \
#解决Router(mode: 'history')模式下,刷新路由地址不能找到页面的问题 \
location / { \
root /var/www/html/; \
index index.html index.htm; \
if (!-e \$request_filename) { \
rewrite ^(.*)\$ /index.html?s=\$1 last; \
break; \
} \
} \
access_log /var/log/nginx/access.log ; \
} " > /etc/nginx/conf.d/default.conf \
&& mkdir -p /var/www \
&& mkdir -p /var/www/html
ADD dist/ /var/www/html/
EXPOSE 81
docker-compose.yml
version: '2'
services:
#MySQL
jeecg-boot-mysql:
build:
context: ./db
environment:
MYSQL_ROOT_PASSWORD: HXL10242023
MYSQL_ROOT_HOST: '%'
TZ: Asia/Shanghai
restart: always
container_name: jeecg-boot-mysql
image: jeecg-boot-mysql
command:
--character-set-server=utf8mb4
--collation-server=utf8mb4_general_ci
--explicit_defaults_for_timestamp=true
--lower_case_table_names=1
--max_allowed_packet=128M
--default-authentication-plugin=caching_sha2_password
ports:
- 3307:3306
#redis
jeecg-boot-redis:
image: redis:5.0
command: redis-server --tcp-keepalive 60 --requirepass HXL10242023
ports:
- 6380:6379
restart: always
hostname: jeecg-boot-redis
container_name: jeecg-boot-redis
控制中心后端
jeecg-boot-system:
build:
context: ./jeecg-module-system/jeecg-system-start
restart: on-failure
depends_on:
-
jeecg-boot-mysql
-
jeecg-boot-redis
container_name: jeecg-boot-system
image: jeecg-boot-system
hostname: jeecg-boot-system
ports:
- 8085:8080
#控制中心前端
jeecg-boot-nginx:
build:
context: ../ant-design-vue-jeecg-center
container_name: jeecg-boot-nginx
image: jeecg-boot-nginx
restart: always
ports:
- 81:81
depends_on:
- jeecg-boot-system
在docker-compose.yml文件所在的目录中打开命令行,执行"docker-compose up -d",创建镜像并运行为容器启动。
docker的移植性很强,可以在windows的开发环境下编译项目生成镜像,然后直接将镜像传递到Linux上运行为容器启动【同样使用docker-compose up -d】。
打包镜像命令:
docker save -o 压缩包名.tar 镜像名:镜像tag
解压镜像命令:
docker load -i 压缩包名.tar