ubuntu通过docker镜像部署安装onlyoffice

1. 下载安装 docker

1.1 下载docker

访问 Docker 官方静态二进制下载页面: https://download.docker.com/linux/static/stable/

根据你的系统架构选择对应目录(通常是 x86_64),然后下载最新的 .tgz 文件。例如:

或者通过命令行下载

复制代码
wget https://download.docker.com/linux/static/stable/x86_64/docker-29.8.2.tgz

1.2 安装docker

复制代码
# 解压 Docker 安装包
tar -xvf docker-29.8.2.tgz

# 将 docker 目录下的所有可执行文件复制到 /usr/bin
sudo cp docker/* /usr/bin/

# 查看 docker 版本
docker --version

1.3 配置国内镜像源

如果 /etc/docker/daemon.json 文件不存在,需要先创建目录,然后编辑文件

复制代码
 sudo mkdir -p /etc/docker
 sudo nano /etc/docker/daemon.json

将以下内容粘贴到文件中(可配置多个镜像源,Docker 会按顺序尝试)

复制代码
 {
   "registry-mirrors": [
     "https://docker.m.daocloud.io",
     "https://docker.1ms.run",
     "https://docker.xuanyuan.me"
   ]
 }

注意 :镜像源地址不要 加尾部斜杠。如果文件中已有其他配置(如代理),只需添加 registry-mirrors 字段,不要覆盖原有内容。

在 nano 中按 Ctrl + X,再按 Y,最后按 Enter。

重载配置并重启docker

复制代码
 sudo systemctl daemon-reload
 sudo systemctl restart docker

1.4 测试docker

1.4.1 拉取镜像
复制代码
 
复制代码
sudo docker pull hello-world

拉取得到的镜像的默认存储位置位于:/var/lib/docker

下载的镜像不是一个单独的文件,而是被 Docker 按"分层存储"的方式拆开存放在 Docker 的数据目录里。

在这个目录下,和 hello-world 镜像相关的主要有

路径 内容
/var/lib/docker/image/overlay2/imagedb/content/sha256/ 镜像元数据,如镜像 ID、配置信息
/var/lib/docker/image/overlay2/repositories.json 镜像名称和标签与镜像 ID 的对应关系
/var/lib/docker/overlay2/ 镜像层数据,每个层一个目录
/var/lib/docker/overlay2/<层ID>/diff/ 该层实际的文件内容

hello-world 镜像非常小,它的可执行文件 hello 就在某一层的 diff 目录中。

1.4.2 运行镜像
复制代码
 sudo docker images           # 查看当前下载了哪些镜像
 sudo docker run hello-world  # 启动 hello world 镜像

如果docker正常安装,会得到以下输出

复制代码
 
复制代码
Hello from Docker!
 This message shows that your installation appears to be working correctly.
 ​
 To generate this message, Docker took the following steps:
  1. The Docker client contacted the Docker daemon.
  2. The Docker daemon pulled the "hello-world" image from the Docker Hub.
  3. The Docker daemon created a new container from that image which runs the
     executable that produces the output you are currently reading.
  4. The Docker daemon streamed that output to the Docker client, which sent it
     to your terminal.
 ...

1.5 添加sudo权限

复制代码
# 1. 先确认 docker 组(安装 docker 一般自动建好)
 getent group docker
 # 2. 没有输出就手动创建:
 sudo groupadd docker
 # 3. 将当前用户加入 docker 组
 sudo usermod -aG docker $USER

给docker添加sudo权限后,再执行docker命令就不用再添加 sudo 命令在前面了。

2. 下载安装 docker-compose

2.1 下载docker-compose

访问docker-compose的发布地址: https://github.com/docker/compose/releases ,

在"Assets"下面找到"docker-compose-linux-x86_64",点击下载

只要这一个文件即可。

2.2 安装docker-compose

复制代码
 sudo mv docker-compose-Linux-x86_64 /usr/local/bin/docker-compose
 sudo chmod +x /usr/local/bin/docker-compose
 docker-compose --version

3. 创建 docker-compose.groups.yml文件

创建一个新文件夹,作为onlyoffice的工作目录

复制代码
 mkdir ~/onlyoffice-workspace   # 创建文件夹
 cd ~/onlyoffice-workspace      # 进入文件夹
 nano docker-compose.groups.yml # 创建yml文件

将以下文件复制进docker-compose.groups.yml 文件。

复制代码
services:
  onlyoffice-mysql-server:
    container_name: onlyoffice-mysql-server
    image: mysql:8.0.29
    environment:
     - MYSQL_ROOT_PASSWORD=my-secret-pw
    command:
      --default-authentication-plugin=mysql_native_password
      --sql_mode=NO_ENGINE_SUBSTITUTION
    networks:
     - onlyoffice
    stdin_open: true
    tty: true
    restart: always
    volumes:
     - ./config/mysql/conf.d:/etc/mysql/conf.d
     - ./config/mysql/docker-entrypoint-initdb.d:/docker-entrypoint-initdb.d
     - mysql_data:/var/lib/mysql
     
  onlyoffice-community-server:
    container_name: onlyoffice-community-server
    image: onlyoffice/communityserver:12.6.0.1900
    depends_on:
     - onlyoffice-mysql-server
     - onlyoffice-elasticsearch
     - onlyoffice-document-server
    environment:
     - ONLYOFFICE_CORE_MACHINEKEY=core_secret
     - ONLYOFFICE_EXTERNAL_URL=http://192.168.1.9
     - ONLYOFFICE_MAIL_ENABLED=false
     - CONTROL_PANEL_PORT_80_TCP=80
     - CONTROL_PANEL_PORT_80_TCP_ADDR=onlyoffice-control-panel
     - MYSQL_SERVER_ROOT_PASSWORD=my-secret-pw
     - MYSQL_SERVER_DB_NAME=onlyoffice
     - MYSQL_SERVER_HOST=onlyoffice-mysql-server
     - MYSQL_SERVER_USER=onlyoffice_user
     - MYSQL_SERVER_PASS=onlyoffice_pass
     - ELASTICSEARCH_SERVER_HOST=onlyoffice-elasticsearch
     - ELASTICSEARCH_SERVER_HTTPPORT=9200
     - DOCUMENT_SERVER_PORT_80_TCP_ADDR=onlyoffice-document-server
     - DOCUMENT_SERVER_JWT_ENABLED=true
     - DOCUMENT_SERVER_JWT_SECRET=MySuperSecretKey123456
    networks:
     - onlyoffice
    ports:
     - '80:80'
     - '443:443'
     - '5222:5222'
    stdin_open: true
    tty: true
    restart: always
    privileged: true
    cgroup: host
    volumes:
     - community_data:/var/www/onlyoffice/Data
     - community_log:/var/log/onlyoffice
     - community_letsencrypt:/etc/letsencrypt
     - /sys/fs/cgroup:/sys/fs/cgroup:rw
     - ./certs:/var/www/onlyoffice/Data/certs
     
  onlyoffice-elasticsearch:
    image: onlyoffice/elasticsearch:7.16.3
    container_name: onlyoffice-elasticsearch
    restart: always
    environment:
      - discovery.type=single-node
      - bootstrap.memory_lock=true
      - "ES_JAVA_OPTS=-Xms1g -Xmx1g -Dlog4j2.formatMsgNoLookups=true"
      - "indices.fielddata.cache.size=30%"
      - "indices.memory.index_buffer_size=30%"
      - "ingest.geoip.downloader.enabled=false"
    networks:
    - onlyoffice
    ulimits:
      memlock:
        soft: -1
        hard: -1
      nofile:
        soft: 65535
        hard: 65535
    volumes:
      - es_data:/usr/share/elasticsearch/data
    expose:
      - "9200"
      - "9300"
      
  onlyoffice-control-panel:
    container_name: onlyoffice-control-panel
    depends_on:
     - onlyoffice-community-server
    image: onlyoffice/controlpanel:3.5.2.530
    environment:
     - ONLYOFFICE_CORE_MACHINEKEY=core_secret
    expose:
      - '80'
      - '443'
    restart: always
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
      - controlpanel_data:/var/www/onlyoffice/Data
      - controlpanel_log:/var/log/onlyoffice
    networks:
      - onlyoffice
    stdin_open: true
    tty: true
    
  onlyoffice-document-server:
    image: onlyoffice/documentserver
    container_name: onlyoffice-document-server
    restart: always
    ports:
      - "8081:80"
    environment:
      - JWT_SECRET=MySuperSecretKey123456
      - JWT_ENABLED=true
      - DS_FONT_DELIVERY=false
    volumes:
      - ./document_data:/var/www/onlyoffice/Data
      - ./document_logs:/var/log/onlyoffice
      - ./document_fonts:/usr/share/fonts/truetype/custom
    networks:
      - onlyoffice

networks:
  onlyoffice:
    driver: 'bridge'

volumes:
  community_data:
  community_log:
  community_letsencrypt:
  controlpanel_data:
  controlpanel_log:
  mysql_data:
  es_data:

在这个配置文件中,共配置了5个镜像:

  • onlyoffice-mysql-server

  • onlyoffice-community-server

  • onlyoffice-elasticsearch

  • onlyoffice-control-panel

  • onlyoffice-document-server

这5个镜像协同工作,才能使onlyoffice正常工作。

注意事项:

  • 第29行,用户在配置时,需要将- ONLYOFFICE_EXTERNAL_URL=http://192.168.1.9里面的IP改为宿主机的IP, 且不能是127.0.0.1, 否则无法上传、下载文件。

  • 第112行,- "8081:80"配置了宿主机和容器的两个端口之间的映射关系,第一个端口是宿主机的端口,用户可以自定义设置,不要与其他的应用冲突。

  • 第46、47、48行,配置了 onlyoffice-community-server 镜像的三个监听端口,均由两个端口组成,前面的端口是宿主机的端口,可以改变, 后面的端口是容器里的端口,不可改变。

  • 部署完成后,在浏览器通过第29行的IP与第46行的前面的port组合,访问 onlyoffice 应用。

4. 下载与部署镜像

防火墙放行端口

复制代码
 sudo ufw allow 80/tcp
 sudo ufw allow 443/tcp
 sudo ufw allow 5222/tcp
 sudo ufw allow 8081/tcp

进入 docker-compose.groups.yml 所在文件夹,执行以下命令:

复制代码
 # 开启容器
 cd ~/onlyoffice-workspace
 sudo docker-compose -f docker-compose.groups.yml up -d
 ​
 # 等待 2 min ,通过以下命令查看容器是否启动成功
 docker exec -it onlyoffice-mysql-server mysql -uroot -pmy-secret-pw onlyoffice
 # 当命令执行完后,启动了 mysql 镜像,表示启动成功。

第一次执行以上命令时,docker会自动从镜像库下载拉取对应的镜像,等待时间比较长。当镜像已经下载好,后面再次执行时,docker会自动检测本地是否已经具备对应的镜像,如果具备,就不再重新下载,因此执行较快。

当onlyoffice安装不成功,想关闭容器重新配置容器时,可以执行以下命令

复制代码
# 关闭容器
cd ~/onlyoffice-workspace
sudo docker-compose -f docker-compose.groups.yml down -v

5. 配置与应用 onlyoffice

打开浏览器,进入 "https://192.168.1.9:80/" (由 docker-compose.groups.yml 文件中第29行与第46行的IP与PORT组成),可以打开onlyoffice应用界面。

填入密码与注册邮箱,然后以注册的邮箱为用户名登录onlyoffice.

6. 保存镜像迁移部署

6.1 创建一个文件夹,存放离线包

复制代码
mkdir -p ~/offline-onlyoffice
cd ~/offline-onlyoffice
 ​
docker save -o mysql_8.0.29.tar mysql:8.0.29
docker save -o communityserver_12.6.0.1900.tar   onlyoffice/communityserver:12.6.0.1900
docker save -o elasticsearch_7.16.3.tar onlyoffice/elasticsearch:7.16.3
docker save -o controlpanel_3.5.2.530.tar onlyoffice/controlpanel:3.5.2.530
docker save -o documentserver_7.3.3.54.tar onlyoffice/documentserver

每个 tar 是一个镜像,单个文件较大,总大小大概 10-15G,预留足够 U 盘空间。

通过以下命令把大文件分割成两个包:

复制代码
 split -n 2 data.tar.gz data.tar.gz.part.  # 分割
 cat data.tar.gz.part.* > data.tar.gz      # 合并
 tar -zxvf data.tar.gz                     # 解压

导入镜像的命令是:

复制代码
 docker load -i mysql_8.0.29.tar
 docker load -i communityserver_12.6.0.1900.tar
 docker load -i elasticsearch_7.16.3.tar
 docker load -i controlpanel_3.5.2.530.tar
 docker load -i documentserver_7.3.3.54.tar

6.2 拷贝配套配置文件

把你原来部署目录下这些全部复制到 U 盘:

复制代码
tar -zcvf onlyoffice-workspace.tar.gz ~/onlyoffice-workspace

解压命令是:

复制代码
 tar -zxvf onlyoffice-workspace.tar.gz

6.3 在新机器上部署时要修改yml里面的 IP设置

相关推荐
Star(up up up)1 小时前
Docker系列---Docker容器基本命令(新手小白保姆级实操教程)
运维·学习·程序人生·青少年编程·docker·容器·dubbo
echome8881 小时前
Linux 定时任务:crontab 写法与常见失效原因
linux·运维·网络·定时任务·crontab
老约家的可汗1 小时前
Linux开发三件套:make、git、gdb 入门指南
linux·运维·服务器
Sw1zzle2 小时前
Go入门(零):Linux Ubuntu 22.04 安装 Go
linux·ubuntu·golang
device_Any2 小时前
接口文档写着三个字段,接口返回了五个
android·java·linux
无足鸟ICT2 小时前
【RHCA+】dstat命令(监控系统资源)
linux·服务器
方便面不加香菜2 小时前
Docker Image-- 镜像命令详解与使用示例
运维·docker·容器
Star(up up up)3 小时前
Docker系列---Dockerfile镜像文件
人工智能·经验分享·学习·程序人生·docker·容器·github
-星空下无敌3 小时前
Windows Docker K8s 安装部署Naocs ,SpringBoot 3.x 4.x 整合Naocs 版本兼容 配置中心、服务注册与发现
windows·docker·nacos·kubernetes·springboot·alibaba