欢迎光临优选殡葬网
详情描述
使用Docker Compose部署OnlyOffice Document Server完整指南

概述

OnlyOffice Document Server是一个开源的在线办公套件,支持文档、电子表格和演示文稿的协作编辑。使用Docker Compose可以快速部署和管理整个服务。

系统要求

  • Docker Engine 20.10.0+
  • Docker Compose 2.0.0+
  • 至少4GB RAM
  • 至少2个CPU核心
  • 20GB可用磁盘空间

完整的docker-compose.yml配置

version: '3.8'

services:
  onlyoffice-document-server:
    image: onlyoffice/documentserver:latest
    container_name: onlyoffice-document-server
    restart: unless-stopped
    environment:
      # JWT配置(用于安全通信)
      JWT_ENABLED: "true"
      JWT_SECRET: "your-secret-jwt-token-change-this"
      JWT_HEADER: "Authorization"
      JWT_IN_BODY: "false"

      # 数据库配置
      DB_TYPE: "postgres"
      DB_HOST: "onlyoffice-postgres"
      DB_PORT: "5432"
      DB_NAME: "onlyoffice"
      DB_USER: "onlyoffice"
      DB_PWD: "onlyoffice_pass"

      # Redis配置
      REDIS_SERVER_HOST: "onlyoffice-redis"
      REDIS_SERVER_PORT: "6379"

      # RabbitMQ配置
      AMQP_SERVER_URL: "amqp://guest:guest@onlyoffice-rabbitmq:5672"

      # 其他配置
      WOPI_ENABLED: "true"
      SERVICE_OFFICE_PORT: "8000"
    ports:
      - "8080:80"  # 主服务端口
      - "8443:443" # HTTPS端口(如果配置SSL)
    volumes:
      - onlyoffice_data:/var/www/onlyoffice/Data
      - onlyoffice_logs:/var/log/onlyoffice
      - onlyoffice_fonts:/usr/share/fonts/truetype/custom
      - onlyoffice_postgres_data:/var/lib/postgresql/data
      # 挂载自定义字体(可选)
      # - ./fonts:/usr/share/fonts/truetype/custom
    depends_on:
      - onlyoffice-postgres
      - onlyoffice-redis
      - onlyoffice-rabbitmq
    networks:
      - onlyoffice-network

  onlyoffice-postgres:
    image: postgres:13
    container_name: onlyoffice-postgres
    restart: unless-stopped
    environment:
      POSTGRES_DB: "onlyoffice"
      POSTGRES_USER: "onlyoffice"
      POSTGRES_PASSWORD: "onlyoffice_pass"
    volumes:
      - onlyoffice_postgres_data:/var/lib/postgresql/data
    networks:
      - onlyoffice-network
    healthcheck:
      test: ["CMD-SHELL", "pg_isready -U onlyoffice"]
      interval: 10s
      timeout: 5s
      retries: 5

  onlyoffice-redis:
    image: redis:6-alpine
    container_name: onlyoffice-redis
    restart: unless-stopped
    command: redis-server --requirepass redis_pass
    volumes:
      - onlyoffice_redis_data:/data
    networks:
      - onlyoffice-network
    healthcheck:
      test: ["CMD", "redis-cli", "ping"]
      interval: 10s
      timeout: 5s
      retries: 5

  onlyoffice-rabbitmq:
    image: rabbitmq:3-management-alpine
    container_name: onlyoffice-rabbitmq
    restart: unless-stopped
    environment:
      RABBITMQ_DEFAULT_USER: "guest"
      RABBITMQ_DEFAULT_PASS: "guest"
    volumes:
      - onlyoffice_rabbitmq_data:/var/lib/rabbitmq
    networks:
      - onlyoffice-network
    healthcheck:
      test: ["CMD", "rabbitmq-diagnostics", "ping"]
      interval: 30s
      timeout: 10s
      retries: 5

networks:
  onlyoffice-network:
    driver: bridge

volumes:
  onlyoffice_data:
  onlyoffice_logs:
  onlyoffice_fonts:
  onlyoffice_postgres_data:
  onlyoffice_redis_data:
  onlyoffice_rabbitmq_data:

安装和部署步骤

1. 准备环境

# 创建项目目录
mkdir onlyoffice-docker && cd onlyoffice-docker

# 创建docker-compose.yml文件
nano docker-compose.yml
# 将上述配置粘贴并保存

2. 创建环境变量文件(可选)

创建.env文件管理敏感信息:

# .env 文件
JWT_SECRET=your-strong-secret-key-here
DB_PASSWORD=onlyoffice_pass
REDIS_PASSWORD=redis_pass

3. 启动服务

# 启动所有服务
docker-compose up -d

# 查看服务状态
docker-compose ps

# 查看日志
docker-compose logs -f onlyoffice-document-server

4. 验证安装

# 检查服务是否正常运行
curl http://localhost:8080/welcome

# 或者访问浏览器
# http://localhost:8080

配置SSL/TLS加密

使用自签名证书

# 在onlyoffice-document-server服务中添加
volumes:
  - ./ssl/certs:/var/www/onlyoffice/Data/certs
environment:
  SSL_CERTIFICATE_PATH: "/var/www/onlyoffice/Data/certs/onlyoffice.crt"
  SSL_KEY_PATH: "/var/www/onlyoffice/Data/certs/onlyoffice.key"

生成自签名证书:

mkdir ssl && cd ssl
openssl req -x509 -nodes -days 365 -newkey rsa:2048 \
  -keyout onlyoffice.key -out onlyoffice.crt \
  -subj "/C=CN/ST=Beijing/L=Beijing/O=YourCompany/CN=onlyoffice.local"

使用Let's Encrypt证书(推荐生产环境)

# 使用nginx-proxy和letsencrypt-nginx-proxy-companion
version: '3.8'

services:
  nginx-proxy:
    image: nginxproxy/nginx-proxy
    container_name: nginx-proxy
    ports:
      - "80:80"
      - "443:443"
    volumes:
      - /var/run/docker.sock:/tmp/docker.sock:ro
      - ./proxy/certs:/etc/nginx/certs:ro
      - ./proxy/vhost:/etc/nginx/vhost.d
      - ./proxy/html:/usr/share/nginx/html
    restart: unless-stopped

  letsencrypt:
    image: nginxproxy/acme-companion
    container_name: letsencrypt
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock:ro
      - ./proxy/certs:/etc/nginx/certs:rw
      - ./proxy/vhost:/etc/nginx/vhost.d
      - ./proxy/html:/usr/share/nginx/html
    environment:
      - DEFAULT_EMAIL=admin@yourdomain.com
    depends_on:
      - nginx-proxy
    restart: unless-stopped

  onlyoffice-document-server:
    # ... 其他配置保持不变 ...
    environment:
      - VIRTUAL_HOST=onlyoffice.yourdomain.com
      - LETSENCRYPT_HOST=onlyoffice.yourdomain.com
      - LETSENCRYPT_EMAIL=admin@yourdomain.com
    expose:
      - "80"
    # 移除ports映射,由nginx-proxy处理
    # ports:
    #   - "8080:80"

配置优化

1. 资源限制

services:
  onlyoffice-document-server:
    deploy:
      resources:
        limits:
          memory: 4G
          cpus: '2'
        reservations:
          memory: 2G
          cpus: '1'

2. 自定义字体

# 创建字体目录
mkdir fonts
# 将.ttf字体文件放入fonts目录
# 然后修改docker-compose.yml:
volumes:
  - ./fonts:/usr/share/fonts/truetype/custom

3. 配置Nginx反向代理(高级配置)

创建nginx.conf

upstream onlyoffice_backend {
    server onlyoffice-document-server:80;
}

server {
    listen 80;
    server_name onlyoffice.yourdomain.com;

    # 重定向到HTTPS
    return 301 https://$server_name$request_uri;
}

server {
    listen 443 ssl http2;
    server_name onlyoffice.yourdomain.com;

    ssl_certificate /etc/nginx/ssl/onlyoffice.crt;
    ssl_certificate_key /etc/nginx/ssl/onlyoffice.key;

    # SSL优化配置
    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_ciphers ECDHE-RSA-AES256-GCM-SHA512:DHE-RSA-AES256-GCM-SHA512;
    ssl_prefer_server_ciphers off;

    # 代理设置
    location / {
        proxy_pass http://onlyoffice_backend;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
        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;

        # 增加超时时间
        proxy_connect_timeout 300s;
        proxy_send_timeout 300s;
        proxy_read_timeout 300s;

        # 禁用缓存
        proxy_buffering off;
    }

    # 静态文件缓存
    location ~* \.(jpg|jpeg|png|gif|ico|css|js)$ {
        proxy_pass http://onlyoffice_backend;
        expires 30d;
        add_header Cache-Control "public, immutable";
    }
}

常用管理命令

# 启动服务
docker-compose up -d

# 停止服务
docker-compose down

# 停止并删除数据(慎用)
docker-compose down -v

# 重启服务
docker-compose restart

# 查看日志
docker-compose logs -f
docker-compose logs onlyoffice-document-server

# 查看服务状态
docker-compose ps

# 进入容器
docker-compose exec onlyoffice-document-server bash

# 更新服务
docker-compose pull
docker-compose up -d

# 备份数据
docker run --rm -v onlyoffice_postgres_data:/source -v $(pwd)/backup:/backup alpine \
  tar czf /backup/postgres_backup_$(date +%Y%m%d_%H%M%S).tar.gz -C /source .

故障排除

常见问题及解决方案

服务启动失败

# 检查错误日志
docker-compose logs --tail=100
验证端口占用

sudo netstat -tulpn | grep :8080


2. **数据库连接问题**
```bash
# 检查PostgreSQL健康状态
docker-compose exec onlyoffice-postgres pg_isready -U onlyoffice

# 重置数据库(慎用)
docker-compose down -v
docker-compose up -d
内存不足

# 查看容器资源使用
docker stats
增加Docker内存限制 在Docker Desktop设置中调整

4. **JWT配置错误**
```bash
# 验证JWT配置
curl -H "Authorization: Bearer your-jwt-token" http://localhost:8080/healthcheck

监控与维护

健康检查脚本

创建healthcheck.sh

#!/bin/bash
SERVICE_URL="http://localhost:8080/healthcheck"
EXPECTED="true"

response=$(curl -s -o /dev/null -w "%{http_code}" $SERVICE_URL)

if [ "$response" = "200" ]; then
    echo "OnlyOffice is healthy"
    exit 0
else
    echo "OnlyOffice is not responding"
    exit 1
fi

自动化备份

创建backup.sh

#!/bin/bash
BACKUP_DIR="/backup/onlyoffice"
DATE=$(date +%Y%m%d_%H%M%S)

# 备份PostgreSQL
docker-compose exec -T onlyoffice-postgres pg_dump -U onlyoffice onlyoffice > \
  $BACKUP_DIR/db_backup_$DATE.sql

# 备份数据文件
docker run --rm -v onlyoffice_data:/source -v $BACKUP_DIR:/backup alpine \
  tar czf /backup/data_backup_$DATE.tar.gz -C /source .

# 保留最近7天的备份
find $BACKUP_DIR -name "*.sql" -mtime +7 -delete
find $BACKUP_DIR -name "*.tar.gz" -mtime +7 -delete

安全建议

修改默认密码

  • 修改PostgreSQL密码
  • 修改Redis密码
  • 修改JWT密钥

启用防火墙

# 只开放必要端口
sudo ufw allow 443/tcp
sudo ufw allow 80/tcp
sudo ufw enable

定期更新

# 定期更新镜像
docker-compose pull
docker-compose up -d --force-recreate

启用访问控制

  • 使用Nginx basic auth
  • 配置IP白名单
  • 启用请求速率限制

性能优化

调整数据库参数

-- 在PostgreSQL中执行
ALTER SYSTEM SET shared_buffers = '1GB';
ALTER SYSTEM SET effective_cache_size = '3GB';
ALTER SYSTEM SET maintenance_work_mem = '256MB';

调整Redis配置

onlyoffice-redis:
command: >
 redis-server
 --maxmemory 1gb
 --maxmemory-policy allkeys-lru
 --requirepass ${REDIS_PASSWORD}

启用缓存

environment:
CACHE_EXPIRE_TIME: "3600"
CACHE_SIZE: "1000"

总结

这个配置提供了一个完整的、生产就绪的OnlyOffice Document Server部署方案。根据实际需求,你可以调整资源配置、安全设置和网络配置。建议在生产环境中使用SSL证书、配置定期备份,并设置适当的监控告警。

部署完成后,可以通过访问 http://your-server:8080 来验证安装,并使用OnlyOffice的API集成到你的应用程序中。

相关帖子
不同航空公司对于特价机票的退改政策,具体有哪些主要差异?
不同航空公司对于特价机票的退改政策,具体有哪些主要差异?
无锡市购物网站设计开发#专业网站开发制作,优秀设计团队
无锡市购物网站设计开发#专业网站开发制作,优秀设计团队
无锡市殡葬服务公司一条龙办理,丧葬礼仪服务公司,专业的团队
无锡市殡葬服务公司一条龙办理,丧葬礼仪服务公司,专业的团队
无锡市AI数字人制作小视频&专业网站建设设计,价格透明
无锡市AI数字人制作小视频&专业网站建设设计,价格透明
无锡市丧葬服务-葬礼花篮,24小时服务
无锡市丧葬服务-葬礼花篮,24小时服务
安阳市crm系统开发#java开源cms二次开发,提供一站式建站服务
安阳市crm系统开发#java开源cms二次开发,提供一站式建站服务
朔州市殡葬殡仪服务,白事服务公司,专业团队
朔州市殡葬殡仪服务,白事服务公司,专业团队
海西殡葬一条龙价格-白事告别会布置,专业的团队
海西殡葬一条龙价格-白事告别会布置,专业的团队
在预算有限的情况下,如何通过食材选择和烹饪方法提升日常饮食营养?
在预算有限的情况下,如何通过食材选择和烹饪方法提升日常饮食营养?
徐州市网站开发正规公司-购物网站开发,收费透明
徐州市网站开发正规公司-购物网站开发,收费透明
deepin没有swap分区怎么办 deepin没有swap分区解决方法
deepin没有swap分区怎么办 deepin没有swap分区解决方法
2026年关于非婚生子女的权利保护,法律上具体有哪些明确规定?
2026年关于非婚生子女的权利保护,法律上具体有哪些明确规定?
继承一个社交账号,继承人可能会承担哪些潜在的法律风险或义务?
继承一个社交账号,继承人可能会承担哪些潜在的法律风险或义务?
自由职业者或个体工商户如何为自己规划生育保障?
自由职业者或个体工商户如何为自己规划生育保障?
如何与独居老人进行有效沟通,了解他们的真实需求与困难?
如何与独居老人进行有效沟通,了解他们的真实需求与困难?
西双版纳短视频运营推广#网站运营服务,多年建站经验
西双版纳短视频运营推广#网站运营服务,多年建站经验
铜陵市殡葬电话|丧葬礼仪服务,丧礼布置
铜陵市殡葬电话|丧葬礼仪服务,丧礼布置
临汾市殡葬一条龙服务公司电话,丧事一条龙服务,一年365天
临汾市殡葬一条龙服务公司电话,丧事一条龙服务,一年365天
外出旅行住酒店或乘坐交通工具,忘记带实体证件该如何解决?
外出旅行住酒店或乘坐交通工具,忘记带实体证件该如何解决?
黄南商城网站建设-企业建站,优秀开发团队
黄南商城网站建设-企业建站,优秀开发团队