docker 部署jeecg boot项目,jar包和前端dist包
先使用idea打好jar包,jar的目录会在system模块下target目录下
使用vscode或者其他开发工具或者使用命令行的方式
执行yarn run build
,如果使用的是npm,就执行npm run build
注意:在挂载文件和目录之前得保证已经创建了这个目录和文件,并且文件里有内容。例如 my.cnf 数据库配置文件得有相关配置,nginx.cnf 得有相关配置
##安装docker相关
5 yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
7 yum -y install docker-ce
##启动docker
8 systemctl start docker
##设置开机自启动
9 systemctl enable docker
##拉取mysql8.0镜像
11 docker pull mysql:8.0
##运行容器 挂载目录 并设置数据密码
15 docker run -d -p 3306:3306 --restart=always --network=host --name mysql -v /mydata/mysql/log:/var/log/mysql -v /mydata/mysql/data:/var/lib/mysql -v /mydata/mysql/conf/my.cnf:/etc/mysql/my.cnf -v /mydata/mysql/conf/conf.d:/etc/mysql/conf.d -e MYSQL_ROOT_PASSWORD=123456 mysql:8.0
## 进入数据库容器 进行登录数据库,创建数据库等操作
17 docker exec -it mysql bash
## 查看mysql容器的日志
19 docker logs -f -t --tail=100 mysql
##拉取nginx镜像
57 docker pull nginx
## 复制nginx镜像内容
93 docker cp nginx:/etc/nginx/conf.d /mydata/nginx/conf/
94 docker cp nginx:/etc/nginx/cert /mydata/nginx/cert
95 docker cp nginx:/etc/nginx/nginx.conf /mydata/nginx/conf/nginx.conf
96 docker cp nginx:/usr/share/nginx/html/index.html /mydata/nginx/html/index.html
## 运行nginx容器 并增加映射端口 和挂载目录
98 docker run -d -p 80:80 -p 443:443 --name nginx --restart=always -v /mydata/nginx/conf/nginx.conf:/etc/nginx/nginx.conf -v /mydata/nginx/cert:/etc/nginx/cert -v /mydata/nginx/conf.d:/etc/nginx/conf.d -v /mydata/nginx/log:/var/log/nginx -v /mydata/nginx/html:/usr/share/nginx/html nginx
## 查看nginx容器运行日志
102 docker logs -f -t --tail=100 nginx
## 拉取redis镜像
108 docker pull redis
##运行redis容器 挂载目录
111 docker run --name redis -d -p 6379:6379 --restart always -v /mydata/redis/redis.conf:/etc/redis/redis.conf -v /mydata/redis/data:/data redis --requirepass "123456"
## 构建应用镜像 app目录下为 dockerfile 文件(dockerfile内容在文章下面) 和后端打的jar包
116 docker build -t app .
## 运行
123 docker run -d -p 8898:8898 --name app --restart always --network host app
## 查看日志
124 docker logs -f -t --tail=100 app
## 查看执行过的docker相关的命令 方便复制
846 history |grep docker
前端项目配置文件修改
内容:
NODE_ENV=production
## ip方式
#VUE_APP_API_BASE_URL=http://ip/api
##域名方式
VUE_APP_API_BASE_URL=https://xxx.com/api
#VUE_APP_API_BASE_URL=https://rds.matngs.com/api
VUE_APP_CAS_BASE_URL=http://localhost:9888/cas
VUE_APP_ONLINE_BASE_URL=http://47.94.198.173:9012/onlinePreview
dockerfile 文件内容如下:
文件里的 RUN apk add --no-cache ttf-dejavu 为验证码所需的字体,要不然验证码会报错。
FROM openjdk:8-jre-alpine
VOLUME /tmp
ENV JAVA_OPTS="-XX:MaxMetaspaceSize=256M -XX:MetaspaceSize=256M -Xmx1G -Xms1G"
ADD rds-boot-module-system-3.2.0.jar app.jar
RUN apk add --no-cache ttf-dejavu
ENTRYPOINT java ${JAVA_OPTS} -Djava.security.egd=file:/dev/./urandom -jar /app.jar
ENV TZ=Asia/Shanghai
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone
nginx.conf 配置文件
user nginx;
worker_processes auto;
error_log /var/log/nginx/error.log warn;
pid /var/run/nginx.pid;
events {
worker_connections 65535;
}
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 off;
keepalive_timeout 65;
tcp_nodelay on;
#设定请求缓冲
client_header_buffer_size 128k;
large_client_header_buffers 4 128k;
client_max_body_size 2048m;
gzip on; #开启gzip
gzip_min_length 1k; #低于1kb的资源不压缩
gzip_comp_level 3; #压缩级别【1-9】,越大压缩率越高,同时消耗cpu资源也越多,建议设置在4左右。
#需要压缩哪些响应类型的资源,多个空格隔开。不建议压缩图片,图片本身传输就会进行压缩。
gzip_types text/plain application/javascript application/x-javascript text/javascript text/xml text/css;
gzip_buffers 4 8k;
server {
listen 80;
server_name localhost;
location / {
#前端dist目录地址 /mydata/nginx/html/admin 对应之前的挂载目录 admin目录为前端的dist包
root /usr/share/nginx/html/admin;
index index.html index.htm;
try_files $uri $uri/ /index.html;
}
#前端请求api前缀 要看前端项目 .env.production 文件配置的请求前缀变化
location /api/ {
#后台接口地址(我们部署去掉jeecg-boot项目名,如果你有请加上)
proxy_pass http://ip:8898/jeecg-boot/;
proxy_redirect off;
#真实IP获取
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;
add_header 'Access-Control-Allow-Origin' '*';
add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS';
add_header 'Access-Control-Allow-Headers' 'Origin, X-Requested-With, Content-Type, Accept';
}
}
#old system 第二个应用配置 如果有配置就行,没有可以忽略也可以删掉。
#如果有第二个应用,监听的端口(如10081),那么上面所运行的nginx容器也要加上10081的映射,还有前端的生产配置文件也要加上10081端口
server {
listen 10081;
server_name localhost1;
location / {
root /usr/share/nginx/html/adminold;
index index.html index.htm;
try_files $uri $uri/ /index.html;
}
#前端请求api前缀
location /api/ {
#后台接口地址(我们部署去掉亿jeecg-boot项目名,如果你有请加上)
proxy_pass http://ip:8899/jeecg-boot/;
proxy_redirect off;
#真实IP获取
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;
add_header 'Access-Control-Allow-Origin' '*';
add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS';
add_header 'Access-Control-Allow-Headers' 'Origin, X-Requested-With, Content-Type, Accept';
}
}
## https 请求
server {
#文件服务器域名
listen 443 ssl;
server_name xxx.com;
root html;
ssl_certificate cert/xxx_bundle.pem;
ssl_certificate_key cert/xxx.key;
ssl_session_timeout 5m;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE;
ssl_prefer_server_ciphers on;
location /api/ {
proxy_set_header X-Forwarded-Host $host;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
proxy_redirect off;
expires off;
sendfile off;
proxy_pass http://ip:8898/jeecg-boot/;
}
location / {
root /usr/share/nginx/html/admin;
try_files $uri $uri/ /index.html;
index index.html index.htm;
}
}
include /etc/nginx/conf.d/*.conf;
}