• 【项目部署上线】宝塔部署前端&Docker部署后端


    【项目部署上线】宝塔部署前端&Docker部署后端

    1.安装依赖

    1.1 安装mysql

    docker run -d -p 3306:3306 --privileged=true \
    -v /usr/local/mysql/log:/var/log/mysql \
    -v /usr/local/mysql/data:/var/lib/mysql \
    -v /usr/local/mysql/conf:/etc/mysql/conf.d \
    -e MYSQL_ROOT_PASSWORD=123456 \
    --name mysql mysql:5.7
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    安装完成之后,编写配置文件

    vim /usr/local/mysql/conf/my.cnf
    
    • 1

    粘贴如下内容:

    [client]
    default_character_set=utf8
    [mysqld]
    collation_server=utf8_general_ci
    character_set_server=utf8
    ##开启了主从同步,因为等下还要安装canal
    server-id=1000
    log-bin=/var/lib/mysql/mysql-bin
    binlog-do-db=faiz_api
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    重启:

    docker restart mysql
    
    • 1

    1.2 安装Canal

    接下来添加一个仅用于数据同步的账户:

    create user canal@'%' IDENTIFIED by 'canal';
    GRANT SELECT,REPLICATION SLAVE,REPLICATION CLIENT,SUPER ON *.* TO 'canal'@'%' identified by 'canal';
    FLUSH PRIVILEGES;
    
    • 1
    • 2
    • 3

    重启mysql容器即可

    docker restart mysql
    
    • 1

    测试设置是否成功:在mysql控制台,或者Navicat中,输入命令,如果有内容则表示成功:

    show master status;
    
    • 1

    我们需要创建一个网络,将MySQL、Canal放到同一个Docker网络中:

    docker network create api
    
    • 1

    让mysql加入这个网络:

    docker network connect api mysql
    
    • 1

    直接运行canal容器,会自动去下载镜像:

    docker run -p 11111:11111 --name canal \
    -e canal.destinations=faiz_api \
    -e canal.instance.master.address=mysql:3306  \
    -e canal.instance.dbUsername=canal  \
    -e canal.instance.dbPassword=canal  \
    -e canal.instance.connectionCharset=UTF-8 \
    -e canal.instance.tsdb.enable=true \
    -e canal.instance.gtidon=false  \
    -e canal.instance.filter.regex=.*\\..* \
    --network api \
    -d canal/canal-server:v1.1.5
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    说明:

    • -p 11111:11111:这是canal的默认监听端口
    • -e canal.instance.master.address=mysql:3306:数据库地址和端口,如果不知道mysql容器地址,可以通过docker inspect 容器id来查看
    • -e canal.instance.dbUsername=canal:数据库用户名
    • -e canal.instance.dbPassword=canal :数据库密码
    • -e canal.instance.filter.regex=:要监听的表名称

    表名称监听支持的语法:

    mysql 数据解析关注的表,Perl正则表达式.
    多个正则之间以逗号(,)分隔,转义符需要双斜杠(\\) 
    常见例子:
    1.  所有表:.*   or  .*\\..*
    2.  canal schema下所有表: canal\\..*
    3.  canal下的以canal打头的表:canal\\.canal.*
    4.  canal schema下的一张表:canal.test1
    5.  多个规则组合使用然后以逗号隔开:canal\\..*,mysql.test1,mysql.test2 
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    1.3 安装redis

    拉取镜像:

    docker pull redis
    
    • 1

    运行容器:

    docker run -d --name redis -p 6379:6379 redis:latest redis-server --requirepass 123456
    
    • 1

    其中:

    • -d 表示可以在后台运行
    • -requirepass 密码

    1.4 安装rabbitmq

    拉取镜像:

    docker pull rabbitmq:3-management
    
    • 1

    运行容器:

    docker run \
     -e RABBITMQ_DEFAULT_USER=root \
     -e RABBITMQ_DEFAULT_PASS=123456 \
     --name rabbitmq \
     --hostname mq1 \
     -p 15672:15672 \
     -p 5672:5672 \
     -d \
     rabbitmq:3-management
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    1.5 安装nacos

    创建nacos数据库:

    CREATE DATABASE nacos CHARACTER SET utf8mb4 COLLATE utf8mb4_bin;
    
    • 1

    nacos官方sql脚本地址:官网地址

    拉取镜像:

    docker pull nacos/nacos-server:v2.1.1
    
    • 1

    运行容器:

    docker run \
    -d --name nacos \
    -p 8848:8848 -p 9848:9848 -p 9849:9849 \
    -e MODE=standalone -e SPRING_DATASOURCE_PLATFORM=mysql  \
    -e JVM_XMS=256m \
    -e JVM_XMX=256m \
    -e MYSQL_SERVICE_HOST=127.0.0.1 -e MYSQL_SERVICE_PORT=3306 \
    -e MYSQL_SERVICE_USER=nacos \
    -e MYSQL_SERVICE_PASSWORD=nacos \
    -e MYSQL_SERVICE_DB_NAME=nacos \
    -e MYSQL_SERVICE_DB_PARAM="characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&serverTimezone=Asia/Shanghai" nacos/nacos-server:v2.1.1
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    2. 部署前端

    在前端项目当中执行build,将项目打包成dist目录:

    下载nginx,版本随意,不要太老:

    image-20240225002649982

    点击左侧导航栏,点击”添加站点“:

    image-20240225190007496

    在方框内填入域名或者是公网ip,然后点击提交:

    image-20240225190206267

    点击根目录,将该目录下的所有文件都删除:

    image-20240225190323450

    image-20240225190404403

    然后点击上传,将所有dist目录下的文件都上传:

    image-20240225190723725

    上传完成之后配置反向代理,找到配置文件:

    image-20240225190953404

    添加如下配置:

    image-20240225191307522

       location ^~ /api {
          proxy_pass http://ip地址:端口号/api;
          add_header 'Access-Control-Allow-Origin' 'http://api.tempeisite.xyz/';
          add_header 'Access-Control-Allow-Credentials' 'true';
          add_header 'Access-Control-Allow-Methods' 'GET ,POST ,OPTIONS';
          add_header 'Access-Control-Allow-Headers' '*';
          if ($request_method = 'OPTIONS') {
              add_header 'Access-Control-Allow-Origin' 'http://api.tempeisite.xyz/';
              add_header 'Access-Control-Allow-Credentials' 'true';
              add_header 'Access-Control-Allow-Methods' 'GET ,POST ,OPTIONS';
              add_header 'Access-Control-Allow-Headers' 'DNT,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Range';
              add_header 'Access-Control-Max-Age' 1728000;
              add_header 'Content-Type' 'text/plain;charset=utf-8';
              add_header 'Content-Length' 0;
            return 204;
          }
        }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17

    3. 部署后端

    #指定基础镜像
    FROM openjdk:8-jdk-alpine
    #设置环境变量
    ENV APP_PATH=/app
    #设置工作目录
    WORKDIR $APP_PATH
    #将jar包导入新的镜像
    ADD demo.jar $APP_PATH/apps.jar
    #暴露端口
    EXPOSE 8989
    ENTRYPOINT ["java","-jar"]
    CMD ["apps.jar"]
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    编写完之后,在 Dockerfile 文件目录下执行以下命令:

    docker build -t apps:1.0 .
    
    • 1

    运行容器:

    docker run -p 8989:8989 --name app -d apps:1.0
    
    • 1

  • 相关阅读:
    JSP中的cookie对象和Date时间类
    算法金 | 必会的机器学习评估指标
    Vue学习之--------全局事件总线(2022/8/22)
    Worthington过氧化物酶活性的6种测定方法
    VMware安装Centos7及静态IP网络配置详细教程
    [附源码]java毕业设计养老护理综合服务系统
    阿里云linux升级新版本npm、nodejs
    PyQt 小程序
    java Excel导出工具类
    敏捷、DevOps和嵌入式系统测试
  • 原文地址:https://blog.csdn.net/Decade_Faiz/article/details/136288460