当前位置: 首页 > article >正文

【Nginx Docker】Office Word Web addin 部署nginx docker

先大概说一下流程:

  1. 拉取nginx的镜像
  2. 创建临时容器 将临时容器中的需要修改的地方cp到宿主机
  3. 修改宿主机中的文件,把前端后端conf等都改好
  4. 删除临时容器,重新按照挂载的方式创建新容器
  5. 给新容器安装需要的python、pip以及requirement
  6. 共享宿主机中的前端文件夹,在word中信任即可

以下是每一步的操作和注意事项:

1.拉取nginx镜像
目的&原因:nginx官方给的docker镜像配置文件有点问题,且无法同时配置后端fastapi,所以选择ubuntu的nginx镜像,相当于一个Ubuntu虚拟机装好了nginx

操作:

  1. 需要登录docker desktop
  2. 找Ubuntu官方给的nginx镜像在这里插入图片描述

2.创建临时容器(如果你用的镜像跟我一样,可以不用创建临时的)
目的&原因:用来看文件目录结构,从而在宿主机创建可供挂载的文件目录结构

操作:

  1. 直接默认run一个就行,端口之类的不用管,名字写个好记的就行
  2. 寻找到该容器中conf和html的位置,在上述镜像版本中应该是/etc/nginx/nginx.conf和/usr/share/nginx/html

3.复制容器重要文件和文件夹
目的&原因:这一步是因为镜像本身自带一些东西,我们要在其基础上改而不是直接替换,不然有可能因为镜像版本不同而出错。比如我们要修改nginx.conf,容器内置有一个,我们复制出来在其基础上修改

操作:

  1. 在宿主机上创建项目文件夹

  2. 在命令行中执行cp复制命令(docker cp 容器名称:容器内文件路径 宿主机项目路径),总共要复制出来三个东西(本来还有一个ssl,但我用的这版镜像没这个文件夹,于是就把ssl证书一起放到前端文件夹下得了):

    docker cp nginxtemp:/etc/nginx/nginx.conf D:/项目文件夹/conf/

    docker cp nginxtemp:/etc/nginx/conf.d D:/项目文件夹 虽然我还不知道conf.d是用来干嘛的

    docker cp nginxtemp:/usr/share/nginx/html D:/项目文件夹/

  3. 在宿主机中创建logs文件夹和app文件夹,前者之后放fastapi的log,后者放fastapi服务,整体 宿主机上项目文件结构如下:

4.配置宿主机中文件
目的&原因:把自己的文件和配置放到项目下,用于后续挂载到容器。我这里用了https,因为office2019的addin太老了只能https

操作:

  1. 把打包好的前端文件放到html文件夹下
  2. 把fastapi服务python文件和requirements.txt和bat放到app文件夹下
  3. 修改nginx.conf,在http部分的最后新增内容如下

server {
listen 443 ssl;
server_name 10.246.52.103;

ssl_certificate /usr/share/nginx/html/certificate.crt;
ssl_certificate_key /usr/share/nginx/html/private.key;

location / {
root /usr/share/nginx/html;
index taskpane.html;
}

location /qwen/ {
proxy_pass https://localhost:8001/qwen/;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;

#CORS headers
add_header ‘Access-Control-Allow-Origin’ ‘*’;
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-Expose-Headers’ ‘Content-Length,Content-Range’;

if ($request_method = ‘OPTIONS’) {
add_header ‘Access-Control-Max-Age’ 1728000;
add_header ‘Content-Type’ ‘text/plain; charset=utf-8’;
add_header ‘Content-Length’ 0;
return 204;
}
}

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

5.重新创建容器带挂载(如果你跟我同一个镜像,刚才创建那个容器就是正式容器,不用再重新创建)
目的&原因:创建容器时挂载宿主机上写好的文件,可以直接创建成我们需要的容器

操作:

  1. 删除之前的temp容器
  2. 在命令行中创建新容器,需要挂载的有html,conf.d,conf,logs,app。这里我们设置1443作为docker往外映射的https端口,180当作http的备用

docker run --name WordAddin -p 1443:443 -p 180:80 -v /d/nginx_docker/html:/usr/share/nginx/html -v /d/nginx_docker/conf.d:/etc/nginx/conf.d -v /d/nginx_docker/conf/nginx.conf:/etc/nginx/nginx.conf/ -v /d/nginx_docker/logs:/var/log/nginx/ -v /d/nginx_docker/app:/usr/share/nginx/app -d ubuntu/nginx:1.18-22.04_beta

注:容器内没有的文件夹会自动创建;这里的Windows目录不能写大写D:了

6.给容器安装fastapi所需东西&启动服务(如果你只是前端nginx那就不用)
目的&原因:容器本身是没有python等环境的,而我们需要把fastapi服务搭建到跟nginx同一个容器中

操作:

  1. 先在容器的对应命令行中输入python,检查是否安装好python(如果docker desktop的exec不能用,那就在宿主机的cmd中执行docker exec -it WordAddin /bin/bash,其中WordAddin是容器名称)
  2. 如果没有python,需要先安装,使用命令

apt-get update

apt-get install -y python3 python3-pip

他会根据Ubuntu的版本来自动安装合适的python版本

  1. 安装依赖项,我提前放到了app目录下的requirements.txt中,先cd到对应目录,然后执行pip3 -install -r requirements.txt

  2. 我们可以尝试一下启动fastapi服务

cd /usr/share/nginx/app

uvicorn apiserver:app --host 0.0.0.0 --port 8001 --ssl-keyfile=/usr/share/nginx/html/private.key --ssl-certfile=/usr/share/nginx/html/certificate.crt

注:我们使用的fastapi也是经过nginx反向代理的,所以8001并不需要暴露出来,只要在nginx的conf中设置对应endpoint为localhost:8001即可。我们调用的时候用的链接是https://宿主机ip:1443/endpoint/

我们可以通过nginx的log看有没有经过nginx

7.共享文件夹
目的&原因:office2016&2019批量激活版不能像365一样用其他方式供别人测试,目前只发现共享文件夹一种方式

操作:

  1. 将manifest文件中的地址均换成对应服务器的地址加映射端口,如https://10.246.52.103:1443

  2. 将manifest单独放到一个准备共享出去的文件夹下,共享该文件夹即可


http://www.kler.cn/a/466252.html

相关文章:

  • SpringBoot3-深入理解自动配置类的原理(尚硅谷SpringBoot3-雷神)
  • 智能工厂的设计软件 应用场景的一个例子:为AI聊天工具添加一个知识系统 之9 重新开始 之2 “三端架构”各自的“中间区”:三支决策的肯定/待定/否定
  • 密钥管理系统在数据安全解决方案中的重要性
  • 【踩坑记录】uni-app 微信小程序调试不更新问题解决指南
  • 电子电气架构 --- 中央HPC架构
  • 如何判断状态:停留还是移动。【计算加速度de方案】
  • 2024转转技术年货发布啦
  • 中建海龙:科技助力福城南产业片区绿色建筑发展
  • HarmonyOS鸿蒙开发 应用开发常见问题总结(持续更新...)
  • Python 链接 Pcomm
  • [CTF/网络安全] 攻防世界 simple_js 解题详析
  • python 插入排序(Insertion Sort)
  • MyBatis一级缓存与二级缓存详解
  • Spring Boot项目中分布式锁实现方案:Redisson
  • Java(四十四)file
  • JavaScript Math(算数) 对象的用法详解
  • 【UE5 C++课程系列笔记】17——DeveloperSettings(开发者设置)的基本使用——读取修改Settings
  • 初步认识UML
  • 动态库dll与静态库lib编程3:DLL导出函数的调用
  • 深度学习笔记10-数据增强(Tensorflow)
  • 在Vue3项目中使用svg-sprite-loader
  • Gitee 的基本用法
  • 查看打开的端口
  • 【JavaWeb后端学习笔记】MySQL的数据控制语言(Data Control Language,DCL)
  • 多线程访问FFmpegFrameGrabber.start方法阻塞问题
  • SkyWalking概述