每天都在为内网装环境感到崩溃,内网和外部互联网断开,各种文件全靠U盘导入导出,花了两天时间尝试手动安装依赖包安装onlyoffice失败后,终于决定用docker装,然后发现docker也要各种依赖,在各种探索之后终于找到了在内网安装docker的方法
然后我实际上安装的逻辑是找了一台外网的centos,下载相关的依赖和镜像导出来,放到内网机上进行安装

1.内网安装docker

1.1 外网机下载docker需要的rpm包

我是一边在外网装docker,一边在内网装摸索的,外网安装docker,基本上只有几条命令

yum install -y yum-utils device-mapper-persistent-data lvm2
yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo ## 配置快速下载docker的仓库
yum install -y docker-ce docker-ce-cli containerd.io

但是我以为只有docker-ce docker-ce-cli containerd.io,这三个依赖,我导到内网里进行rpm -ivh *.rpm进行安装的时候提示缺少selinux依赖,然后我就在阿里云centos packages镜像上面找依赖(之前手动安装各种rpm踩出来的坑),但是我安装container-selinu的时候又提示缺少依赖,非常崩溃,然后我看docker安装的时候重新看了一下yum下载的东西,虽然下载docker-ce docker-ce-cli containerd.io,但它实际上安装了总共10个内容,如下图所示
在这里插入图片描述
在内网中安装的时候经常会出现,安装依赖的时候,缺少依赖的依赖,所以实际上在下载的时候需要嵌套下载所有依赖,我第一步实践是挨个查询每个依赖的依赖,使用这个指令“rpm -qpR docker-ce-26.1.4-1.el7.x86_64.rpm”,然后把他依赖的依赖挨个安装下来,后面我发现太蠢了,就先用下面的指令下载docker安装过程中能看到的依赖

yumdownloader --resolve \
>     docker-ce \
>     docker-ce-cli \
>     containerd.io \
>     docker-buildx-plugin \
>     docker-compose-plugin \
>     docker-ce-rootless-extras \
>     fuse-overlayfs \
>     fuse3-libs \
>     slirp4netns \
>     container-selinux

然后用下面的指令下载这些依赖的依赖

yumdownloader --resolve $(repoquery --requires --recursive docker-ce docker-ce-cli containerd.io container-selinux docker-buildx-plugin docker-compose-plugin fuse-overlayfs fuse3-libs slirp4netns | awk '{print $1}' | sort -u | grep -v '^rpmlib') --destdir=./docker-offline-packages ## recursive后买你一直到awk前面的都是我下载的10个docker依赖的名称

下载的依赖的结果就如下图所示:
在这里插入图片描述
但是我担心还有这些依赖又有依赖,所以我就把我不眼熟的几个rpm包再循环下载了一下

yumdownloader --resolve $(repoquery --requires --recursive “policycoreutils-python” | awk '{print $1}' | sort -u | grep -v '^rpmlib') --destdir=./docker-offline-packages
## “policycoreutils-python” 是rpm包的名称

后面发现有个新的指令,可以使用yum以downloadonly的形式下载一堆rpm包(可能包含rpm的依赖),指令如下

yum install --downloadonly --downloaddir=/root/yzw/nextcloud php-pgsql xxxx ## "xxxx表示rpm包“,这个就会下载package和他的dependceny,全不全我就不知道了,只有导入内网安装的时候才知道

1.2 内网安装docker

就按照上面的方法下载所有的依赖,然后把这些依赖导入到内网,直接

rpm -ivh *.rpm

只要不提示缺少依赖,说明基本上所有的依赖都已经下载了,如果提示缺少依赖,再去外网机上按照yumdownloader递归下载一下依赖吧,如果提示xxxxx conflicts xxxxx,我个人觉得应该是无所谓的,可以直接–force安装所有的rpm包

rpm -ivh *.rpm --force

执行完命令之后输入docker --version可以看到下面提示版本就说明docker安装成功了
在这里插入图片描述

2.使用docker处理onlyoffice和nextcloud镜像

2.1 在外网机上下载onlyoffice的镜像

2.1.1 设置docker下载image的mirrorvi /etc/docker/daemon.json

这一步可以帮助加速下载,否则就会显示一直连接不到,将下面的复制到json文件里

{
    "runtimes": {
        "nvidia": {
            "args": [],
            "path": "nvidia-container-runtime"
        }
    },
    "registry-mirrors": [
        "https://docker.registry.cyou",
        "https://docker-cf.registry.cyou",
        "https://dockercf.jsdelivr.fyi",
        "https://docker.jsdelivr.fyi",
        "https://dockertest.jsdelivr.fyi",
        "https://mirror.aliyuncs.com",
        "https://dockerproxy.com",
        "https://mirror.baidubce.com",
        "https://docker.m.daocloud.io",
        "https://docker.nju.edu.cn",
        "https://docker.mirrors.sjtug.sjtu.edu.cn",
        "https://docker.mirrors.ustc.edu.cn",
        "https://mirror.iscas.ac.cn",
        "https://docker.rainbond.cc"
    ]
}

然后重新加载一下daemon和docker就可以加速拉取了

systemctl daemon-reload
systemctl restart docker

2.2.2 拉取镜像

直接在外网机上拉取onlyoffice和nextcloud的镜像

docker pull onlyoffice/documentserver
docker pull nextcloud

然后把镜像压缩保存,一般压缩完了就会出现在压缩时的文件夹下面,压缩的时候onlyoffice有点慢不用着急

docker save nextcloud:latest | gzip > nextcloud.tar.gz
docker save onlyoffice/documentserver:latest | gzip > onlyoffice-documentserver.tar.gz

然后就可以把nextcloud.tar.gz和onlyoffice-documentserver.tar.gz,这两个压缩包导出到本地,再转换到内网机里去了

3.安装onlyoffice

3.1 加载镜像并运行

在内网里加载这两个镜像

gunzip -c onlyoffice-documentserver.tar.gz | docker load
gunzip -c nextcloud.tar.gz | docker load
docker images ## 查看加载的镜像,一般会出现
# nextcloud   latest    abc123def456   2 days ago   500MB
# onlyoffice/documentserver   latest    abc123def456   2 weeks ago   1.5GB

3.2 安装onlyoffice

创建持久化数据目录​

mkdir -p /app/onlyoffice/{Data,logs,cache}
chmod 777 /app/onlyoffice/Data  # ONLYOFFICE 需要写入权限

启动容器​

docker run -d --name onlyoffice \
  -p 80:80 -p 443:443 \
  -v /app/onlyoffice/Data:/var/www/onlyoffice/Data \
  -v /app/onlyoffice/logs:/var/log/onlyoffice \
  -v /app/onlyoffice/cache:/var/lib/onlyoffice \
  -e JWT_ENABLED=true \
  -e JWT_SECRET=your_secure_key \ ##your_secure_key这个可以随便设置
  onlyoffice/documentserver

验证服务状态​

# 检查容器运行状态
docker ps -f name=onlyoffice # 会输出运行的容器的内容
curl http://localhost/healthcheck # 会输出一些html内容

然后就可以浏览器打开了

3.2 安装nextcloud

创建数据目录

# 创建数据目录
mkdir -p /nextcloud/{data,config,apps}
chmod 777 /nextcloud/data  # 临时权限,安装后需调整

启动容器

# 启动容器
docker run -d \
  --name nextcloud \
  -p 8080:80 \
  -v /nextcloud/data:/var/www/html/data \
  -v /nextcloud/config:/var/www/html/config \
  -v /nextcloud/apps:/var/www/html/custom_apps \
  nextcloud:latest

初始化配置,访问http://服务器IP:8080,会打开一个配置管理员账号和数据库目录的地方,我已经安装好postgresql了,所以我的数据库配置就是postgre,然后我安装postgre的逻辑不是用docker,而是我在docker之前手动安装,可以看内网安装postgre的那个文章
在初始化配置页面,输入账号密码、数据库账号密码、数据库名称,就会自动安装,安装完了直接就登录

3.3 nextcloud集成onlyoffice

我集成下了一个插件,虽然我也不知道有没有用,但是这一步还是做了,插件的下载的链接是这个:插件下载链接,自己手动下载一个版本到内网里,然后需要拷贝到docker中

# 复制插件到容器
docker cp /offline-packages/onlyoffice.tar.gz nextcloud:/var/www/html/custom_apps/
# 解压插件(在容器内执行)
docker exec -it nextcloud bash -c "tar -zxvf /var/www/html/custom_apps/onlyoffice.tar.gz -C /var/www/html/custom_apps/ && chown -R www-data:www-data /var/www/html/custom_apps/onlyoffice"
# 验证解压结果
docker exec nextcloud ls -l /var/www/html/custom_apps/onlyoffice
# 启用插件
docker exec -it nextcloud php occ app:enable onlyoffice

在nextcloud登录之后的页面配置onlyoffice的连接
点击右上角个人头像,点击“管理设置”,在右侧有个“onlyoffice”,进入页面后配置IP地址和JWT_SECRET就可以运行了

3.4 增加文件大小

按照onlyoffice默认的设置,最多能打开50MB的PPT和word,如果想要打开大文件可能会出现下面这个文件大小的错误,为了能打开大文件,需要编辑/etc/onlyoffice/documentserver/default.json这个文件
在这里插入图片描述
因为我是用docker运行的,而且内网docker没有vi编辑器,需要先将文件复制出来

docker cp onlyoffice:/etc/onlyoffice/documentserver/default.json /tmp/default.json

然后修改如下(文件最结尾的地方)
在这里插入图片描述
修改完了之后,再把这个文件复制到docker里去

docker cp  /tmp/default.json onlyoffice:/etc/onlyoffice/documentserver/default.json

复制完了之后重启一下容器就好了

Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐