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

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

  之前验证了OnlyOffice验证(二)在Centos7上部署OnlyOffice编译结果,由于现在普遍都是容器化部署,所以还是验证下Docker镜像打包是否可行,因为最终部署还是会上到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命令后,会在结果里看到下图框住镜像信息:
OnlyOffice验证(三)OnlyOffice编译结果自制Docker镜像_第1张图片
  接下来用这个镜像启动一个容器。因为我的配置并没有去覆盖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/验证一下:
OnlyOffice验证(三)OnlyOffice编译结果自制Docker镜像_第2张图片

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

  此处宿主机的IP为192.168.95.131,映射端口为9002。此处访问欢迎页http://192.168.95.131:9002/welcome/验证一下:
OnlyOffice验证(三)OnlyOffice编译结果自制Docker镜像_第3张图片

使用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验证(三)OnlyOffice编译结果自制Docker镜像_第4张图片
OnlyOffice验证(三)OnlyOffice编译结果自制Docker镜像_第5张图片

相关总结

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

你可能感兴趣的:(Office在线预览编辑,docker,运维,容器,onlyoffice容器化部署)