OnlyOffice验证(三)OnlyOffice编译结果自制Docker镜像

news2025/1/17 2:57:15

OnlyOffice验证(三)OnlyOffice编译结果自制Docker镜像

  之前验证了OnlyOffice验证(二)在Centos7上部署OnlyOffice编译结果,由于现在普遍都是容器化部署,所以还是验证下Doker镜像打包是否可行,因为最终部署还是会上到K8S,所以这步必须要验证一下。

资源准备

  提前安装好dockerdocker-compose,安装docker-compose是为了简化容器启动方式。菜鸟教程传送门
  首先准备好,要打包镜像的资源。

[root@test documentserver]# pwd
/opt/documentserver
[root@test documentserver]# ll
总用量 822720
-rwxr-xr-x. 1 root root      1220 32 14:10 docker-entrypoint.sh
-rw-r--r--. 1 root root      1366 32 13:34 Dockerfile
drwxr-xr-x. 2 root root        37 31 21:53 DocService
-rw-r--r--. 1 root root       764 31 21:10 documentServer.conf
-rw-r--r--. 1 root root 842447109 224 10:40 documentserver.tar.gz
drwxr-xr-x. 2 root root        37 31 21:53 FileConverter
-rw-r--r--. 1 root root       167 32 13:38 run.sh

  此处说明一下相关文件的功能。

  • docker-entrypoint.sh 容器启动的时候会调用该脚本(基础镜像ubuntu/nginx:1.18-20.04_beta)
  • Dockerfile 用于构建镜像的配置文件
  • DocService 文档服务文件夹,里面放的后台启动脚本
  • documentServer.conf Nginx代理配置文件
  • documentserver.tar.gz 编译结果压缩包,相当于安装程序
  • FileConverter 转换服务文件夹,里面放的后台启动脚本
  • run.sh 主启动脚本,文档服务和转换服务最终会由该脚本负责执行启动

1、run.sh 启动文件

#!/bin/sh

# 启动转换服务
cd /opt/documentserver/server/FileConverter
sh ./start.sh
# 启动文档服务
cd /opt/documentserver/server/DocService 
sh ./start.sh

2、转换服务相关脚本FileConverter

[root@test documentserver]# cd FileConverter/
[root@test FileConverter]# pwd
/opt/documentserver/FileConverter
[root@test FileConverter]# ll
总用量 8
-rw-r--r--. 1 root root 233 228 21:31 start.sh
-rw-r--r--. 1 root root 215 31 21:53 stop.sh

启动脚本 start.sh

#!/bin/sh

server_path=$(dirname $(pwd))

LD_LIBRARY_PATH=$PWD/bin

export PATH=$PATH:$LD_LIBRARY_PATH

export NODE_ENV=development-linux

export NODE_CONFIG_DIR="$server_path/Common/config"

nohup ./converter > $PWD/out.log 2>&1 &

关闭脚本 stop.sh

#!/bin/sh

pid_file=pids

ps -ef | grep converter | grep -v grep | awk '{print $2}' > $PWD/pids

pid_arg=$(awk '{print $1}' $pid_file)

for pid in ${pid_arg}
do
    echo "to kill pid = $pid"
    kill -9 $pid
done

3、文档服务相关脚本DocService

[root@test documentserver]# cd DocService/
[root@test DocService]# pwd
/opt/documentserver/DocService
[root@test DocService]# ll
总用量 8
-rw-r--r--. 1 root root 172 228 21:32 start.sh
-rw-r--r--. 1 root root 216 31 21:53 stop.sh

启动脚本 start.sh

#!/bin/sh

server_path=$(dirname $(pwd))

export NODE_ENV=development-linux

export NODE_CONFIG_DIR="$server_path/Common/config"

nohup ./docservice > $PWD/out.log 2>&1 &

关闭脚本 stop.sh

#!/bin/sh

pid_file=pids

ps -ef | grep docservice | grep -v grep | awk '{print $2}' > $PWD/pids

pid_arg=$(awk '{print $1}' $pid_file)

for pid in ${pid_arg}
do
    echo "to kill pid = $pid"
    kill -9 $pid
done

4、docker-entrypoint.sh 容器内启动脚本

  此处具体得看用的什么基础镜像(此次验证用的是ubuntu/nginx:1.18-20.04_beta)。主要是将run.sh执行添加到这个脚本中,如下所示./opt/run.sh是唯一添加的内容,其余的都是原本的内容够。这样转换服务和文档服务就都可以跟随容器一起启动了。

#!/bin/sh
# vim:sw=4:ts=4:et

./opt/run.sh

set -e

if [ -z "${NGINX_ENTRYPOINT_QUIET_LOGS:-}" ]; then
    exec 3>&1
else
    exec 3>/dev/null
fi

if [ "$1" = "nginx" -o "$1" = "nginx-debug" ]; then
    if /usr/bin/find "/docker-entrypoint.d/" -mindepth 1 -maxdepth 1 -type f -print -quit 2>/dev/null | read v; then
        echo >&3 "$0: /docker-entrypoint.d/ is not empty, will attempt to perform configuration"

        echo >&3 "$0: Looking for shell scripts in /docker-entrypoint.d/"
        find "/docker-entrypoint.d/" -follow -type f -print | sort -n | while read -r f; do
            case "$f" in
                *.sh)
                    if [ -x "$f" ]; then
                        echo >&3 "$0: Launching $f";
                        "$f"
                    else
                        # warn on shell scripts without exec bit
                        echo >&3 "$0: Ignoring $f, not executable";
                    fi
                    ;;
                *) echo >&3 "$0: Ignoring $f";;
            esac
        done
        echo >&3 "$0: Configuration complete; ready for start up"
    
    else
        echo >&3 "$0: No files found in /docker-entrypoint.d/, skipping configuration"
    fi
fi

exec "$@"

5、documentServer.conf 代理配置

  此处就是官方提供的默认配置,只不过是吧80端口改成了81。

map $http_host $this_host {
  "" $host;
  default $http_host;
}
map $http_x_forwarded_proto $the_scheme {
  default $http_x_forwarded_proto;
  "" $scheme;
}
map $http_x_forwarded_host $the_host {
  default $http_x_forwarded_host;
  "" $this_host;
}
map $http_upgrade $proxy_connection {
  default upgrade;
  "" close;
}
proxy_set_header Host $http_host;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection $proxy_connection;
proxy_set_header X-Forwarded-Host $the_host;
proxy_set_header X-Forwarded-Proto $the_scheme;
server {
  listen 0.0.0.0:81;
  listen [::]:81 default_server;
  server_tokens off;
  rewrite ^\/OfficeWeb(\/apps\/.*)$ /web-apps$1 redirect;
  location / {
    proxy_pass http://localhost:8000;
    proxy_http_version 1.1;
  }
}

6、Dockerfile 镜像配置文件

  由于基础镜像的原因,该配置文件并不需要配置ENTRYPOINTCMD

FROM ubuntu/nginx:1.18-20.04_beta
MAINTAINER lyan

COPY ./documentserver.tar.gz /opt
COPY ./FileConverter /opt/FileConverter/
COPY ./DocService /opt/DocService/
COPY ./documentServer.conf /opt
COPY ./run.sh /opt
COPY ./docker-entrypoint.sh /opt

RUN cd /opt && \
    chmod +x docker-entrypoint.sh && \
    mv docker-entrypoint.sh / && \
    chmod +x run.sh && \
    mv documentServer.conf /etc/nginx/conf.d/ && \
    tar -zxvf documentserver.tar.gz && \
    rm documentserver.tar.gz && \
    cd documentserver && \
    LD_LIBRARY_PATH=${PWD}/server/FileConverter/bin server/tools/allfontsgen \
    --input="${PWD}/core-fonts" \
    --allfonts-web="${PWD}/sdkjs/common/AllFonts.js" \
    --allfonts="${PWD}/server/FileConverter/bin/AllFonts.js" \
    --images="${PWD}/sdkjs/common/Images" \
    --selection="${PWD}/server/FileConverter/bin/font_selection.bin" \
    --output-web='fonts' \
    --use-system="true" && \
    LD_LIBRARY_PATH=${PWD}/server/FileConverter/bin server/tools/allthemesgen \
    --converter-dir="${PWD}/server/FileConverter/bin" \
    --src="${PWD}/sdkjs/slide/themes" \
    --output="${PWD}/sdkjs/common/Images" && \
    cd /opt/documentserver/server/FileConverter && \
    mv /opt/FileConverter/* ./ && \
    chmod +x ./start.sh &&  \
    cd /opt/documentserver/server/DocService && \
    mv /opt/DocService/* ./ && \
    chmod +x ./start.sh

7、documentserver.tar.gz 自行编辑结果

  可以参考OnlyOffice验证(一)DocumentServer编译验证,自行编译,随后将编译结果打成压缩包就可以了。

构建镜像并运行

  Dockerfile同级目录下执行docker build -t ds:v1 .命令,构建名为ds版本为v1的镜像

[root@test documentserver]# ll
总用量 822720
-rwxr-xr-x. 1 root root      1220 32 14:10 docker-entrypoint.sh
-rw-r--r--. 1 root root      1366 32 13:34 Dockerfile
drwxr-xr-x. 2 root root        37 31 21:53 DocService
-rw-r--r--. 1 root root       764 31 21:10 documentServer.conf
-rw-r--r--. 1 root root 842447109 224 10:40 documentserver.tar.gz
drwxr-xr-x. 2 root root        37 31 21:53 FileConverter
-rw-r--r--. 1 root root       167 32 13:38 run.sh
[root@test documentserver]# docker build -t ds:v1 .

  构建成功后执行docker images命令后,会在结果里看到下图框住镜像信息:
在这里插入图片描述
  接下来用这个镜像启动一个容器。因为我的配置并没有去覆盖Nginx默认的80端口,而是另起一个配置监听81端口,所以此处会映射两个端口:

[root@test documentserver]# docker run --name ds -p 9001:80 -p 9002:81 -d ds:v1

  启动容器后可通过执行docker ps -all查看该容器是否在正常运行在这里插入图片描述

访问容器Nginx验证是否正常启动

  此处宿主机的IP为192.168.95.131,映射端口为9001。此处访问Nginx欢迎页http://192.168.95.131:9001/验证一下:
在这里插入图片描述

访问容器DocumentServer验证是否正常启动

  此处宿主机的IP为192.168.95.131,映射端口为9002。此处访问欢迎页http://192.168.95.131:9002/welcome/验证一下:
在这里插入图片描述

使用Docker-compose启动镜像

  有kubesphere的可以忽略此处,镜像推到私有镜像仓库随便拉着玩就成了。这里先把之前启动的容器删了。

[root@test documentserver]# docker ps -all
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                                        NAMES
1d80dd2ea6bf        ds:v1               "/docker-entrypoint.…"   17 minutes ago      Up 17 minutes       0.0.0.0:9001->80/tcp, 0.0.0.0:9002->81/tcp   ds
[root@test documentserver]# docker stop 1d80dd2ea6bf
1d80dd2ea6bf
[root@test documentserver]# docker rm 1d80dd2ea6bf
1d80dd2ea6bf

  直接在资源准备的文件里创建一个名为docker-compose.yaml的配置文件,内容配置如下:

version: "2"
services:
  ds:
    image: ds:v1
    container_name: ds
    ports:
      - "9001:80"
      - "9002:81"
    volumes:
      - "/opt/documentserver/data/:/opt/documentserver/server/App_Data/"
    restart: always

  主要就是映射端口,容器共享宿主机的目录,服务随docker服务一起启动。

[root@test documentserver]# pwd
/opt/documentserver
[root@test documentserver]# vim docker-compose.yaml
[root@test documentserver]# ll
总用量 822724
-rw-r--r--. 1 root root       311 32 22:08 docker-compose.yaml
-rwxr-xr-x. 1 root root      1220 32 14:10 docker-entrypoint.sh
-rw-r--r--. 1 root root      1366 32 13:34 Dockerfile
drwxr-xr-x. 2 root root        37 31 21:53 DocService
-rw-r--r--. 1 root root       764 31 21:10 documentServer.conf
-rw-r--r--. 1 root root 842447109 224 10:40 documentserver.tar.gz
drwxr-xr-x. 2 root root        37 31 21:53 FileConverter
-rw-r--r--. 1 root root       167 32 13:38 run.sh

  docker-compose.yaml同级目录下执行docker-compose up -d命令,后台启动容器

[root@test documentserver]# pwd
/opt/documentserver
[root@test documentserver]# docker-compose up -d
Creating network "documentserver_default" with the default driver
Creating ds ... done
[root@test documentserver]# docker ps -all
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                                        NAMES
1b79ca4c4233        ds:v1               "/docker-entrypoint.…"   12 seconds ago      Up 11 seconds       0.0.0.0:9001->80/tcp, 0.0.0.0:9002->81/tcp   ds

  接下来直接调用文档转换接口测试下文档转换是否可用,此处是将word文档转换成一个图片:

{
    "async": false,
    "filetype": "docx",
    "key": "000001",
    "outputtype": "png",
    "title": "demo.docx",
    "url": "https://d2nlctn12v279m.cloudfront.net/assets/docs/samples/demo.docx"
}

在这里插入图片描述
在这里插入图片描述

相关总结

  • 《OnlyOffice验证(一)DocumentServer编译验证》
  • 《OnlyOffice验证(二)在Centos7上部署OnlyOffice编译结果》
  • 《OnlyOffice验证(三)OnlyOffice编译结果自制Docker镜像》

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/387308.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

渗透five86-2

kali的ip为192.168.56.104,利用nmap或arp-scan -l查看发现了靶机ip192.168.56.120这里存在20、21、80端口,这边需要将靶机ip进行域名绑定,对/etc/hosts改写,将192.168.56.120 与five86-2绑定输入ip后,发现了有log in由…

Kubernetes的网络架构及其安全风险

本博客地址:https://security.blog.csdn.net/article/details/129137821 一、常见的Kubernetes网络架构 如图所示: 说明: 1、集群由多个节点组成。 2、每个节点上运行若干个Pod。 3、每个节点上会创建一个CNI网桥(默认设备名称…

Qt——自定义界面之QStyle

1. Qt控件结构简介 首先我们要来讲讲GUI控件结构,这里以QComboBox为例: 一个完整的控件由一种或多种GUI元素构成: Complex Control Element。Primitive Element。Control Element。 1.1 Complex Control Element Complex control elements …

【C语言跬步】——指针数组和数组指针(指针进阶)

一.指针数组和数组指针的区别 1.指针数组是数组,是一种存放指针的数组; 例如: int* arr[10]; 2.数组指针是指针,是一种指向数组的指针,存放的是数组的地址; 例如: int arr[5]; int (p)[5]&a…

Redis学习(二):Redis安装测试

概述 Redis是什么 Redis, Remote Dictionary Server, 即远程字典服务。免费开源的数据库。 由C语言编写,支持网络,可基于内存亦可持久化的日志型、KV数据库,并提供所种语言的API。 Redis能干嘛 用于内存存储,持久化。rdb、ao…

[学习笔记]黑马程序员Spark全套视频教程,4天spark3.2快速入门到精通,基于Python语言的spark教程

文章目录视频资料:一、Spark基础入门(环境搭建、入门概念)第二章:Spark环境搭建-Local2.1 课程服务器环境2.2 Local模式基本原理2.3 安装包下载2.4 Spark Local模式部署第三章:Spark环境搭建-StandAlone3.1 StandAlone…

驾考笔记_2023

科目一1> 扣分制度1.1> 超速1.2> 超载1.3> 车牌1.4> 速记口诀2> 满分学习2.1> 消分学习2.2> 满分重考;3> 罚款制度3.1> 考证3.2> 审验教育3.3> 其他4> 车速规定4.1> 高速_最低限速4.2> 普路_最高限速5> 证件相关5.…

双指针法|位运算|离散化|区间合并

目录 双指针算法 位运算 离散化 序列合并 双指针算法 题目描述&#xff1a;1.输入n个单词&#xff0c;每个单词在输入的时候按空格隔开&#xff0c;之后打印出每个单词且换行 #include<iostream> #include <string>using namespace std; int main() {strin…

计算机网络中的原码、反码、补码

写在前面 原码、反码、补码是计算机组成原理中的概念&#xff0c;是计算机网络的基础知识之一。这些概念是为了处理二进制数的符号位而引入的&#xff0c;常用于计算机中的整数运算&#xff0c;也常用于数据存储和传输等领域。因此&#xff0c;了解和掌握这些概念对于理解计算机…

软测入门(五)接口测试Postman

Postman 一款Http接口收工测试工具。如果做自动化测试会使用jemter做。 安装 去官网下载即可。 https://www.postman.com/downloads/?utm_sourcepostman-home 功能介绍 页面上的单词基本上都能了解&#xff0c;不多介绍。 转代码&注释 可将接口的访问转为其他语言的…

一款小巧、开源免费、可观性强的流量监控软件——TrafficMonitor

名人说&#xff1a;君子生非异也&#xff0c;善假于物也。——荀子 Code_流苏(CSDN)&#xff08;一个喜欢古诗词和编程的Coder&#x1f60a;&#xff09; o(‐&#xff3e;▽&#xff3e;‐)o很高兴你打开了这篇博客&#xff0c;跟着步骤一步步尝试安装吧。✧ 目录背景缘由一、…

自动驾驶目标检测项目实战(一)—基于深度学习框架yolov的交通标志检测

自动驾驶目标检测项目实战——基于深度学习框架yolov的交通标志检测 目前目标检测算法有很多&#xff0c;流行的就有faster-rnn和yolov&#xff0c;本文使用了几年前的yolov3框架进行训练&#xff0c;效果还是很好&#xff0c;当然也可以使用更高版本的Yolov进行实战。本代码使…

分布式事务之TCC与SAGA

分布式事务之TCC与SAGA 在《关于分布式事务的理解》&#xff0c;介绍了可靠消息队列的实现原理&#xff0c;虽然它也能保证最终的结果是相对可靠的&#xff0c;过程也足够简单&#xff08;相对于 TCC 来说&#xff09;&#xff0c;但现在你已经知道&#xff0c;可靠消息队列的…

从零起步认识XAML

新建WPF项目 在Visual Studio 2022中&#xff0c;选择"创建新项目" 选择“WPF Application” 点击下一步 点击创建。 执行DebugStart Debugging菜单命令&#xff0c;或者快捷键为F5&#xff0c;或者工具栏上的图标。 在Solution Explorer窗口&#xff08;ViewSoluti…

smardaten应用商超 | 邀您沉浸式体验企业级无代码开发

宝子们&#xff0c;还在发愁登录smardaten后缺少模板和数据吗&#xff1f;从0到1构建完整应用费时费力&#xff1f;别急&#xff0c;一大波模板资源已经装上车&#xff0c;这就给你安排上&#xff01;【smardaten应用商超】基于数睿数据长期服务软件企业、大型客户的经验&#…

Redis实现服务注册与服务发现源码阅读(Go语言)

Redis实现服务注册与服务发现源码阅读 背景 近期在看开源项目CloudWeGo中看到目前GoLang微服务框架Hertz中支持通过Redis实现服务注册与服务发现功能。便想着阅读下源码 源码阅读 gut clone了hertz-contrib后看到在一级目录下有目前各种主流的服务注册与发现的实现方案。为…

【数据结构初阶】二叉树顺序结构:堆的实现

前言 前边077带着大家学习了树与二叉树的相关概念&#xff0c;这篇文章我们来实现一个二叉树的顺序结构。 二叉树的顺序结构 普通的二叉树是不适合用数组来存储的&#xff0c;因为可能会存在大量的空间浪费。而完全二叉树更适合使用顺序结构存储。现实中我们通常把堆(一种二叉…

SQL注入基础入门篇 注入思路及常见的SQL注入类型总结

SQL注入基础入门篇1. SQL注入的概念1.1 什么是SQL注入&#xff1f;1.2 注入过程1.3 SQL注入的分类2. 注入思路3. 第一次注入3.1 寻找注入点3.2 构造攻击语句3.2.1 数据出在哪里&#xff1f;3.2.2 怎么有序的获取核心数据&#xff1f;3.2.2.1 基础信息查询3.2.2.2 表名&#xff…

TCP三次握手与四次挥手(一次明白)

TCP基本信息 默认端口号:80 LINUX中TIME_WAIT的默认时间是30s TCP三次握手 三次握手过程:每行代表发起握手到另一方刚刚收到数据包时的状态 客户端服务端客户端状态服务端状态握手前CLOSELISTEN客户端发送带有SYN标志的数据包到服务端一次握手SYN_SENDLISTEN二次握手服务端发送…

Java项目(一些注解、依赖

文章目录常用的几个注解DataAllArgsConstructorNoArgsConstructorSetterGetterEqualsAndHashCodeLog4j/Slf4jMYBatis-Plus常用注解TableNameTableIdTableFieldTableLogicMapperMapperMapperScanpom.xml中加入依赖创建项目常用的几个注解 Data 注在类上&#xff0c;提供类的ge…