在Docker上部署springboot项目

在Docker上部署springboot项目

Turbo 157 2023-07-18

在Docker上部署springboot项目

一、docker安装

https://www.codezhou.top/article/docker使用

二、docker安装mysql、redis

docker查找相关镜像

sudo docker search mysql

拉取mysql镜像

docker pull mysql

运行mysql

docker run -d --name myMysql -p 9506:3306 -v /data/mysql:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 mysql:5.7.31

参数解析:

-d:
-name myMysql
-p:
-v:
-e:
mysql:

docker 安装redis

sudo docker run  --name Redis -p 8977:6379 -d redis

redis修改密码

sudo docker exec -it redis bash
redis-cli config set requirepass '密码'

修改后端Dockerfile配置文件

FROM openjdk:8
EVN SERVICE_JAR_FILE ${SERVICE_JAR_FILE}
ADD $SERVICE_JAR_FILE $SERVICE_JAR_FILE
RUN bash -c "touch /${SERVICE_JAR_FILE}"
ENTRYPOINT ["/bin/sh","-c","java -jar /usr/local/software/${SERVICE_JAR_FILE}"]

三、打包前、后端项目运行

后端

docker build -t service-common:1.0 .
docker run -d -p 8088:8088 -e SERVICE_JAR_FILE=xxx.jar -v /usr/local/software/xxx.jar:/usr/local/project/xxx.jar --name xxx service-common:1.0 --privileged=true

查看后端日志

docker logs xxx
docker logs -f --tail 200 xxx

前端
前端打包上传到服务器后解压

unzip dist.zip dist

启动前端服务

docker run --name nginx -p 80:80 -p 443:443 -v /work/nginx/nginx.conf:/etc/nginx/nginx/nginx.conf -v /work/nginx/html:/usr/share/nginx/ -v /work/nginx/log:/var/log/nginx -d nginx

nginx配置文件

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 abc.xyz.com;
        rewrite ^(.*) https://${server_name}$1 permanent;
    }
    
    server {
        listen 443 ssl http2;
        server_name abc.xyz.com;
        #charset        utf-8;
        ssl_certificate cert/xxx.crt;
        ssl_certificate_key cert/xxx.key;
        ssl_session_timeout 5m;
        ssl_protocols TLSv1.2 TLSv1.3;
        ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE;
        ssl_prefer_server_ciphers on;

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

        location /prod-api/ {
                proxy_set_header Host $http_host;
                proxy_set_header X-Real-IP $remote_addr;
                proxy_set_header REMOTE-HOST $remote_addr;
                proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
                proxy_pass https://turbonba.xkzx.work;
        }

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

    # 开启gzip压缩
    gzip on;
    # 不压缩临界值,大于1K的才压缩,一般不用改
    gzip_min_length 1k;
    # 压缩缓冲区
    gzip_buffers 16 64K;
    # 压缩版本(默认1.1,前端如果是squid2.5请使用1.0)
    gzip_http_version 1.1;
    # 压缩级别,1-10,数字越大压缩的越好,时间也越长
    gzip_comp_level 5;
    # 进行压缩的文件类型
    gzip_types text/plain application/x-javascript text/css application/xml application/javascript;
    # 跟Squid等缓存服务有关,on的话会在Header里增加"Vary: Accept-Encoding"
    gzip_vary on;
    # IE6对Gzip不怎么友好,不给它Gzip了
    gzip_disable "MSIE [1-6]\.";
}