• docker 部署 strapi 前端路由 bug问题


    问题

    ​ 有一个需求,backend 代码需要部署到十几家 二十几家甚至更多家的代码,如果每一个都要重新打包镜像会比较麻烦。现在想要把这二十几家的项目部署到一台服务器,通过 域名/${企业名}/admin的方式访问,应该怎么部署比较方便且容易维护?

    解决过程

    在按照文档部署的过程中遇到一个问题,就是 .env中的环境变量在docker环境中不生效,设置了COMPANY_NAME却没法使用。 后来多次尝试才知道,.env在docker 环境下只是在 build的时候生效过一次,生成镜像之后,需要在docker-compose.yml添加environment, 这样在进入docker容器内,使用npm run build,就可以生效了。
    
    注意:docker 启动的之后后端的服务,build文件(前端打包代码)只是在 docker build生成了一次,后面就固定不变了。
    
    ### config/server.js 里面的参数要改为 从Node 环境中获取,目前必须是绝对路径。
    
    
    ### 主要是从以下几个方面修改的代码
    
    
    一。docker compose修改:解决前端的 admin 静态资源路径,总是找不到。
    改 docker-compose.yml, 添加environment。 然后再进入到容器内,npm run build,就可以了。  注意,是先通过docker-compose 启动的容器,然后将 环境变量赋值过去的,这样在 npm run build的时候可以获取对应的变量。
    
    二。Dockfile修改:只需要修改 WORKDIR 即可(此外,如果npmcache所在的目录发生变化,也需要改为正确的目录)
    
    部署:
           同一个镜像,可以根据端口映射不同(即改变docker-compose.yml中的PORTS),来拉取不同的容器并启动。 这样就可以实现 域名/子路径 来访问对应的 服务了,不过要注意的是,COMPANY_NAME在docker-compose.yml中改掉之后,需要进入到容器内重新npm run build,否则会有问题。因为原始的镜像 build是固定的,不会动态改变。
           另外,注意docker-compose.yml所在的目录名称,不指定容器名称的话,会以父目录的名称拼接作为容器名,谨防 重名导致的不同容器 启动为一个容器服务。
           nginx 配置作为子路径就可以了,通过proxy_pass 反向代理就能访问到对应的端口服务,注意端口一定要对应。
    
    
  • 相关阅读:
    深入浅出了解OCR识别票据原理(Applying OCR Technology for Receipt Recognition)
    OCR技术浅探:基于深度学习和语言模型的印刷文字OCR系统
    Python 3.6.4 / win10 使用pip安装keras时遇到依赖的PyYAML安装出错
    简单http代理服务器搭建
    Socket之心跳包实现思路
    设计模式之访问者模式
    设计模式之责任链模式
    设计模式之策略者模式
    C#将.spl剥离成.emf文件格式
    设计模式之状态者模式
  • 原文地址:https://www.cnblogs.com/michealjy/p/16390525.html
Copyright © 2020-2023  润新知