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

发布于:2025-02-11 ⋅ 阅读:(33) ⋅ 点赞:(0)

先大概说一下流程:

  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单独放到一个准备共享出去的文件夹下,共享该文件夹即可


网站公告

今日签到

点亮在社区的每一天
去签到