• idea 连接远程 docker 并部署项目到 docker


    1. idea 连接远程 docker

    1.1 安装 docker 插件

    1.2 登录远程服务器,修改docker配置

    (1) 修改 docker.service 文件,位于 /lib/systemd/system/docker.service

    打开该文件,将原来的 ExecStart 前面加上#号注释掉,在该行下面添加 ExecStart=/usr/bin/dockerd -H tcp://0.0.0.0:2375 -H unix:///var/run/docker.sock

    [Service]
    Type=notify
    # the default is not to use systemd for cgroups because the delegate issues still
    # exists and systemd currently does not support the cgroup feature set required
    # for containers run by docker
    # ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock
    ExecStart=/usr/bin/dockerd -H tcp://0.0.0.0:2375 -H unix:///var/run/docker.sock
    ExecReload=/bin/kill -s HUP $MAINPID
    TimeoutStartSec=0
    RestartSec=2
    Restart=always
    

    (2) 重新加载配置
    systemctl daemon-reload

    (3) 重启 docker 服务
    systemctl restart docker.service

    1.3 添加云服务器防火墙规则

    1.4 idea 配置连接 docker

    打开 idea,打开 Setting,在 docker 项配置云服务器tcp://公网IP:2375,点击 ok 即可连上 docker,如下图:

    然后,就可以在 Services 中看到 docker 了

    点击左边的 connect 就可以连接上 docker,可以看到 docker 中的镜像和容器信息

    2. 部署项目到 docker

    2.1 创建并编写Dockerfile

    我这里将dockerfile 创建在根目录下

    dockerfile 文件内容:

    # 指定基础镜像
    FROM openjdk:8-jre-slim
    # 作者
    MAINTAINER gzl
    # 将容器的时区设置为"Asia/Shanghai"
    RUN /bin/cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime \&& echo 'Asia/Shanghai' >/etc/timezone
    # 复制主机文件至镜像内,复制的目录需放置在 Dockerfile 文件同级目录下
    ADD target/chatgpt-api-0.0.1-SNAPSHOT.jar chatgpt-api.jar
    # (和项目端口号等同)
    EXPOSE 8080
    # 在容器启动时执行该应用程序
    ENTRYPOINT ["java", "-jar", "/chatgpt-api.jar"]
    

    2.2 运行配置

    (1) 点击 Edit Configurations...

    (2) 点击左上角+,找到 dockerfile

    (3) 填写配置信息

    • Bind ports:映射端口:项目端口
    • Before launch:
      选择Run Maven Goal,Command line 填写 clean package -U -DskipTests,表示在构建之前清理项目的目标目录,以确保没有旧的构建残留,同时跳过运行单元测试,可加快构建过程

    (4) 运行
    点击运行

    运行成功

    3. Nginx 配置

    修改 nginx 配置

    server {
    
        listen       80;
        server_name  公网ip;
    
        # 首页
        index index.html;
    
        location / {
            root   /usr/share/nginx/html;
            index  index.html index.htm;
        }
    
        location /api/ {
            auth_request /auth;
            # 鉴权通过后的处理方式
            proxy_pass http://公网ip:8080/success;
        }
    
        location = /auth {
            # 发送子请求到HTTP服务,验证客户端的凭据,返回响应码
            internal;
            # 设置参数
            set $query '';
            if ($request_uri ~* "[^\?]+\?(.*)$") {
                set $query $1;
            }
            # 验证成功,返回200 OK
            proxy_pass http://公网ip:8080/verify?$query;
            # 发送原始请求
            proxy_pass_request_body off;
            # 清空 Content-Type
            proxy_set_header Content-Type "";
         }
    
        error_page 404 /404.html;
            location = /40x.html {
    
            }
    
        error_page   500 502 503 504  /50x.html;
         location = /50x.html {
         }
    
    }
    

    在浏览器使用公网ip访问

  • 相关阅读:
    数据结构学习笔记(Ⅰ):绪论
    私募基金CRM客户关系管理系统软件开发应该具备的功能清单
    Thread.sleep(0)的作用是什么?
    Spring面试题(2022)
    Python实现图片与PDF互相转换
    大端字节和小端字节
    【计组笔记】06_指令系统
    Python之Django
    操作系统学习笔记7 | 进程同步与合作
    7月VR大数据:Quest 2占比突破50%,Pico Neo 3较上月大幅涨幅
  • 原文地址:https://www.cnblogs.com/cheyaoyao/p/17792692.html