一、什么是 ONLYOFFICE DocSpace?

ONLYOFFICE DocSpace 是一款创新的协作平台软件,支持本地部署。简而言之,它是一个基于网络的协作空间,让团队和个人用户能够在可定制的虚拟房间中高效管理和协同处理文档、电子表格、演示文稿及电子表单。产品高度兼容微软的Word、Excel等。

该平台集成了 ONLYOFFICE Docs 在线办公套件,为用户提供了一整套专业的文档格式化与编辑工具,支持包括电子书和 PDF 文件在内的多种内容类型。此外,内置的办公套件还提供了丰富的实时文档协作功能,例如:

  • 两种共同编辑模式,满足不同协作需求

  • 文档审阅与版本历史追踪

  • 实时聊天与评论功能

  • 集成 Zoom 和 Jitsi 插件,支持视频/音频通话

ONLYOFFICE DocSpace 兼容多种主流文件格式,包括 Microsoft OOXML(Word、Excel、PowerPoint 文件扩展名)、OpenDocument、PDF、DJVu 等。平台还内置了多媒体播放器,支持直接打开和播放音频、视频文件,实现了对多媒体内容的全面支持。

基于房间的协作模式是 DocSpace 的核心特色。所有协作流程和用户交互都在两种类型的房间中进行:

  • 协作房间:专为实时文档共同创作设计

  • 定制房间:具备灵活配置的空间,可适应各种使用场景

在权限管理方面,DocSpace 提供了精细化的用户角色体系:

  • DocSpace 所有者:拥有全部设置和配置权限,可分配管理员角色

  • DocSpace 管理员:具备平台和房间管理权限(不含删除 DocSpace 权限)

  • 房间管理员、高级用户、普通用户

  • 编辑者、查看者、评论者、审阅者、表单填写者

每个角色类别都设有特定的权限组合,既确保了操作的灵活性,又保障了系统的安全性。

二、安装前置条件

在Linux系统中尝试安装ONLYOFFICEA DocSpace之前,请务必查看最低资源要求配置列表(当然配置越高是越好的)

硬件 要求
CPU 最少4核,建议8核
内存 至少8G,建议12G(脚本会自动创建 swap)
硬盘空间 至少40G
端口 80 / 443 / 8092
操作系统 Linux内核3.10版本以上

三、安装docker

3.1、进opt目录

cd /opt

3.2、编写docker安装脚本

cat >install.docker.ubuntu.sh<<'EOF'
#!/bin/bash

# Ubuntu Docker 安装脚本(支持 22.04 和 24.04)- 不更新内核
# copywrite @ www.liuguohua.com
set -e

echo "=========================================="
echo "  Docker & Docker Compose 安装脚本"
echo "  适用于 Ubuntu 22.04 和 24.04 - 国内镜像源"
echo "  不更新内核版本"
echo "=========================================="

# 颜色定义
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
NC='\033[0m'

# 系统信息
OS_ID=""
OS_VERSION=""
OS_CODENAME=""
CURRENT_KERNEL=""

# 日志函数
log_info() {
    echo -e "${GREEN}[INFO]${NC} $1"
}

log_warn() {
    echo -e "${YELLOW}[WARN]${NC} $1"
}

log_error() {
    echo -e "${RED}[ERROR]${NC} $1"
}

# 检查是否以 root 运行
check_root() {
    if [ "$(id -u)" -ne 0 ]; then
        log_error "请使用 root 权限运行此脚本"
        log_info "可以使用: sudo bash $0"
        exit 1
    fi
}

# 检测系统版本
detect_os() {
    if [ ! -f /etc/os-release ]; then
        log_error "无法检测操作系统版本"
        exit 1
    fi
    
    . /etc/os-release
    
    OS_ID="$ID"
    OS_VERSION="$VERSION_ID"
    OS_CODENAME="$VERSION_CODENAME"
    CURRENT_KERNEL=$(uname -r)
    
    log_info "检测到系统: $PRETTY_NAME"
    log_info "当前内核版本: $CURRENT_KERNEL"
    
    case "$OS_CODENAME" in
        "jammy")  # 22.04
            log_info "检测到 Ubuntu 22.04 (Jammy Jellyfish)"
            ;;
        "noble")  # 24.04
            log_info "检测到 Ubuntu 24.04 (Noble Numbat)"
            ;;
        *)
            log_warn "此脚本主要针对 Ubuntu 22.04 和 24.04 测试"
            log_warn "当前系统: $OS_ID $OS_VERSION ($OS_CODENAME)"
            printf "是否继续?(y/n): "
            read -r choice
            case "$choice" in
                y|Y|yes|YES) ;;
                *) exit 1 ;;
            esac
            ;;
    esac
}

# 锁定内核版本,防止更新
lock_kernel_packages() {
    log_info "锁定内核包,防止自动更新..."
    
    # 安装 apt-mark 如果不存在
    if ! command -v apt-mark > /dev/null 2>&1; then
        apt-get install -y apt-utils
    fi
    
    # 获取当前已安装的内核包
    KERNEL_PACKAGES=$(dpkg -l | grep -E "linux-image-|linux-headers-|linux-modules-" | awk '{print $2}' | grep -v "linux-headers-generic" | grep -v "linux-image-generic")
    
    # 锁定所有内核相关包
    for package in $KERNEL_PACKAGES; do
        if dpkg -l | grep -q "^ii  $package"; then
            apt-mark hold "$package" > /dev/null 2>&1 && \
            log_info "已锁定包: $package" || \
            log_warn "锁定包失败: $package"
        fi
    done
    
    # 锁定通用的内核元包
    for package in linux-generic linux-image-generic linux-headers-generic; do
        if dpkg -l | grep -q "^ii  $package"; then
            apt-mark hold "$package" > /dev/null 2>&1
        fi
    done
    
    # 配置 APT 不更新内核
    if [ ! -f /etc/apt/apt.conf.d/50hold-kernel ]; then
        cat > /etc/apt/apt.conf.d/50hold-kernel << 'EOF'
# 阻止内核自动更新
APT::Get::Hold "linux-image-*";
APT::Get::Hold "linux-headers-*";
APT::Get::Hold "linux-modules-*";
APT::Get::Hold "linux-generic";
APT::Get::Hold "linux-image-generic";
APT::Get::Hold "linux-headers-generic";
EOF
        log_info "已配置 APT 阻止内核更新"
    fi
}

# 配置国内镜像源
configure_mirrors() {
    log_info "配置国内镜像源..."
    
    # 备份原有源
    if [ ! -f /etc/apt/sources.list.bak ]; then
        cp /etc/apt/sources.list /etc/apt/sources.list.bak
        log_info "已备份原有源列表"
    fi
    
    case "$OS_CODENAME" in
        "jammy")  # Ubuntu 22.04
            cat > /etc/apt/sources.list << 'EOF'
# 阿里云镜像源 - Ubuntu 22.04 Jammy
deb http://mirrors.aliyun.com/ubuntu/ jammy main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ jammy-security main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ jammy-updates main restricted universe multiverse
# 注释掉 proposed 和 backports 仓库,减少内核更新风险
# deb http://mirrors.aliyun.com/ubuntu/ jammy-proposed main restricted universe multiverse
# deb http://mirrors.aliyun.com/ubuntu/ jammy-backports main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ jammy main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ jammy-security main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ jammy-updates main restricted universe multiverse
EOF
            ;;
        "noble")  # Ubuntu 24.04
            cat > /etc/apt/sources.list << 'EOF'
# 阿里云镜像源 - Ubuntu 24.04 Noble
deb http://mirrors.aliyun.com/ubuntu/ noble main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ noble-security main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ noble-updates main restricted universe multiverse
# 注释掉 proposed 和 backports 仓库,减少内核更新风险
# deb http://mirrors.aliyun.com/ubuntu/ noble-proposed main restricted universe multiverse
# deb http://mirrors.aliyun.com/ubuntu/ noble-backports main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ noble main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ noble-security main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ noble-updates main restricted universe multiverse
EOF
            ;;
        *)
            log_error "不支持的 Ubuntu 版本: $OS_CODENAME"
            exit 1
            ;;
    esac

    log_info "已配置阿里云镜像源 ($OS_CODENAME)"
    log_info "已禁用 proposed 和 backports 仓库以减少内核更新风险"
}

# 安装基础依赖(不更新内核)
install_dependencies() {
    log_info "更新软件包列表(不更新系统)..."
    
    # 使用 --allow-downgrades 和 --allow-remove-essential 避免因依赖问题触发内核更新
    apt-get update
    
    log_info "安装基础依赖..."
    
    # 单独安装每个包,避免大规模更新
    for package in apt-transport-https ca-certificates curl gnupg lsb-release software-properties-common git; do
        if ! dpkg -l | grep -q "^ii  $package"; then
            log_info "安装 $package..."
            apt-get install -y --allow-downgrades --allow-remove-essential "$package"
        else
            log_info "$package 已安装,跳过"
        fi
    done
}

# 获取 Docker Compose 架构名称
get_architecture() {
    local arch
    arch=$(uname -m)
    case "$arch" in
        "x86_64")
            echo "x86_64"
            ;;
        "aarch64"|"arm64")
            echo "aarch64"
            ;;
        "armv7l")
            echo "armv7"
            ;;
        *)
            log_error "不支持的架构: $arch"
            exit 1
            ;;
    esac
}

# 安装 Docker(不更新内核)
install_docker() {
    log_info "安装 Docker..."
    
    if command -v docker > /dev/null 2>&1; then
        log_warn "Docker 已安装,跳过安装步骤"
        return 0
    fi
    
    # 添加 Docker 官方 GPG 密钥
    mkdir -p /etc/apt/keyrings
    curl -fsSL https://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg | gpg --dearmor -o /etc/apt/keyrings/docker.gpg
    
    # 添加 Docker 镜像源
    echo \
      "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://mirrors.aliyun.com/docker-ce/linux/ubuntu \
      $OS_CODENAME stable" | tee /etc/apt/sources.list.d/docker.list > /dev/null
    
    log_info "更新 Docker 软件包列表..."
    apt-get update
    
    # 检查可用的 Docker 版本
    log_info "可用的 Docker 版本:"
    apt-cache madison docker-ce | head -5
    
    # 安装特定版本的 Docker 以避免依赖冲突
    DOCKER_VERSION=$(apt-cache madison docker-ce | awk '{print $3}' | head -1)
    log_info "将安装 Docker 版本: $DOCKER_VERSION"
    
    # Ubuntu 24.04 需要先安装 containerd.io
    if [ "$OS_CODENAME" = "noble" ]; then
        log_info "检测到 Ubuntu 24.04,安装兼容的 containerd 版本..."
        apt-get install -y --allow-downgrades --allow-remove-essential containerd.io
    fi
    
    # 安装 Docker(不推荐更新相关包)
    log_info "安装 Docker CE..."
    apt-get install -y --allow-downgrades --allow-remove-essential \
        docker-ce="$DOCKER_VERSION" \
        docker-ce-cli="$DOCKER_VERSION"
    
    # 配置 Docker 镜像加速器
    mkdir -p /etc/docker
    cat > /etc/docker/daemon.json << 'EOF'
{
  "registry-mirrors": [
    "https://docker.1ms.run",
    "https://hub-mirror.c.163.com",
    "https://hub.mirrorify.net",
    "https://hub.1panel.dev"
  ],
  "log-driver": "json-file",
  "log-opts": {
    "max-size": "100m",
    "max-file": "3"
  },
  "storage-driver": "overlay2"
}
EOF
    
    # 启动 Docker
    systemctl enable docker
    systemctl start docker
    
    log_info "Docker 安装完成"
}

# 安装 Docker Compose
install_docker_compose() {
    log_info "安装 Docker Compose..."
    
    if command -v docker-compose > /dev/null 2>&1; then
        docker_compose_version=$(docker-compose --version | awk '{print $3}')
        log_warn "Docker Compose 已安装 (版本: $docker_compose_version)"
        printf "是否重新安装?(y/n): "
        read -r choice
        case "$choice" in
            y|Y|yes|YES) ;;
            *) return 0 ;;
        esac
    fi
    
    local arch
    arch=$(get_architecture)
    local compose_version="v2.24.0"
    
    log_info "下载 Docker Compose $compose_version (架构: $arch)"
    
    if curl -L "https://soft-1251416864.cos.ap-nanjing.myqcloud.com/docker/docker-compose-linux-x86_64" \
        -o /usr/local/bin/docker-compose; then
        chmod +x /usr/local/bin/docker-compose
        ln -sf /usr/local/bin/docker-compose /usr/bin/docker-compose 2>/dev/null || true
        log_info "Docker Compose 安装完成"
    else
        log_error "Docker Compose 下载失败"
        exit 1
    fi
}

# 配置用户权限
configure_user_permissions() {
    log_info "配置用户权限..."
    
    if [ -n "$SUDO_USER" ]; then
        if ! groups "$SUDO_USER" | grep -q docker; then
            usermod -aG docker "$SUDO_USER"
            log_info "已将用户 $SUDO_USER 添加到 docker 组"
        else
            log_info "用户 $SUDO_USER 已在 docker 组中"
        fi
    else
        log_warn "未检测到 SUDO_USER,请手动将用户添加到 docker 组:"
        log_info "sudo usermod -aG docker \$USER"
        log_info "然后重新登录或执行: newgrp docker"
    fi
}

# 验证安装和内核状态
verify_installation() {
    log_info "验证安装..."
    
    echo
    echo "=== 安装验证 ==="
    
    # 检查内核状态
    echo "当前内核版本: $CURRENT_KERNEL"
    echo "内核锁定状态:"
    dpkg -l | grep -E "^hi" | grep -E "linux-image-|linux-headers-" | head -3
    
    # 检查 Docker
    if command -v docker > /dev/null 2>&1; then
        systemctl restart docker
        docker_version=$(docker --version | awk '{print $3}')
        echo "Docker 版本: $docker_version"
        
        if systemctl is-active docker > /dev/null; then
            echo "Docker 服务状态: 运行中"
            if docker run --rm hello-world 2>/dev/null | grep -q "Hello from Docker"; then
                log_info "Docker 测试: 成功"
            else
                log_warn "Docker 基础功能正常,但测试容器执行失败"
            fi
        else
            log_error "Docker 服务未运行"
        fi
    else
        log_error "Docker 安装失败"
    fi
    
    if command -v docker-compose > /dev/null 2>&1; then
        compose_version=$(docker-compose --version | awk '{print $3}')
        echo "Docker Compose 版本: $compose_version"
    else
        log_error "Docker Compose 安装失败"
    fi
    
    echo
    log_info "安装完成!"
    log_info "内核版本已锁定,不会自动更新"
    
    if [ -n "$SUDO_USER" ]; then
        echo
        log_info "后续步骤:"
        log_info "1. 重新登录或执行: newgrp docker"
        log_info "2. 测试: docker ps"
        log_info "3. 测试: docker-compose --version"
    fi
}

# 显示系统信息
show_system_info() {
    echo
    echo "=== 系统信息 ==="
    echo "操作系统: $OS_ID $OS_VERSION ($OS_CODENAME)"
    echo "架构: $(uname -m)"
    echo "内核: $CURRENT_KERNEL"
    
    if command -v free > /dev/null 2>&1; then
        echo "内存: $(free -h | awk '/^Mem:/ {print $2}')"
    fi
    
    if command -v df > /dev/null 2>&1; then
        echo "磁盘: $(df -h / | awk 'NR==2 {print $4}') 可用"
    fi
    echo
}

# 主函数
main() {
    check_root
    detect_os
    show_system_info
    
    log_info "开始安装 Docker 和 Docker Compose(不更新内核)..."
    
    # 首先锁定内核
    lock_kernel_packages
    
    # 询问是否配置国内镜像源
    printf "是否配置国内镜像源?(y/n, 推荐 y): "
    read -r choice
    case "$choice" in
        y|Y|yes|YES) configure_mirrors ;;
        *) log_warn "跳过镜像源配置,使用默认源" ;;
    esac
    
    install_dependencies
    install_docker
    install_docker_compose
    configure_user_permissions
    verify_installation
    
    log_info "=== 重要提示 ==="
    log_info "内核更新已被禁用,如需手动更新内核,请先执行:"
    log_info "sudo apt-mark unhold linux-image-* linux-headers-*"
    log_info "然后更新完成后重新锁定内核"
}

# 执行主函数
main "$@"
EOF

3.3、运行docker安装脚本

bash install.docker.ubuntu.sh

也可以直接远程执行安装脚本
curl https://www.liuguohua.com/soft/install.docker.ubuntu.sh | bash

image-20251119145735754

四、下载安装脚本并安装

4.1、下载安装脚本

curl -fsSL https://download.onlyoffice.com/docspace/docspace-install.sh -o docspace-install.sh

chmod +x docspace-install.sh

4.2、安装onlyoffice docspace

bash docspace-install.sh docker  #安装docker版的docspace

#安装定制版本
bash docspace-install.sh docker -dsv 3.5.0.1

4.3、Images镜像文件一览

安装过程中,会下载所需要的docker镜像,整个镜像约34G,还是很庞大的,zip压缩后还有13G,已丢掉百度网盘里

fluent-fluent-bit-3.0.2
mysql-8.3.0
nginx-latest
onlyoffice-docspace-api-3.5.0.1
onlyoffice-docspace-api-system-3.5.0.1
onlyoffice-docspace-backup-3.5.0.1
onlyoffice-docspace-backup-background-3.5.0.1
onlyoffice-docspace-clear-events-3.5.0.1
onlyoffice-docspace-doceditor-3.5.0.1
onlyoffice-docspace-files-3.5.0.1
onlyoffice-docspace-files-services-3.5.0.1
onlyoffice-docspace-healthchecks-3.5.0.1
onlyoffice-docspace-identity-api-3.5.0.1
onlyoffice-docspace-identity-authorization-3.5.0.1
onlyoffice-docspace-login-3.5.0.1
onlyoffice-docspace-management-3.5.0.1
onlyoffice-docspace-migration-runner-3.5.0.1
onlyoffice-docspace-notify-3.5.0.1
onlyoffice-docspace-people-server-3.5.0.1
onlyoffice-docspace-router-3.5.0.1
onlyoffice-docspace-sdk-3.5.0.1
onlyoffice-docspace-socket-3.5.0.1
onlyoffice-docspace-ssoauth-3.5.0.1
onlyoffice-docspace-studio-3.5.0.1
onlyoffice-docspace-studio-notify-3.5.0.1
onlyoffice-docspace-telegram-3.5.0.1
onlyoffice-documentserver-9.1.0.1
onlyoffice-opensearch-2.18.0
opensearchproject-opensearch-dashboards-2.18.0
rabbitmq-3
redis-7


#导入到系统
for f in *.tar; do echo "Loading $f"; docker load -i "$f"; done

五、安装docspace

5.1、设置DNS

安装过程中,要确认是否继续,DNS设置,我这里用114.114.114.114了。

bash docspace-install.sh docker
 
...
DNS issue detected for  (loopback IP or NAT).
[Y] Use Google DNS | [C] Use custom DNS | [N] Cancel installation
Continue installation [Y/C/N]? C        
Enter custom DNS (e.g. 8.8.8.8 8.8.4.4): 114.114.114.114
Updating Docker DNS config with: 114.114.114.114
Downloading configuration files to /app/onlyoffice...OK

5.2、成功安装后截图

image-20251119145817717

六、浏览器测试

6.1、初始设置

安装过程完成后打开网络浏览器。在地址栏中,输入你的计算机在本地网络中的IP地址,就可以看到登录界面,默认是英文界面,在“语言”那,选择中文。

输入你的电子邮箱及密码(第一个帐户会归类到管理员权限),就可以正常进入到系统里,系统提示需要进邮箱激活功能。

image-20251119145629079

image-20251119154659202

image-20251119150614447

6.2、增加成员

image-20251119152157140

6.3、个性化设置

image-20251119154751644

6.4、版本界面

image-20251119150639661

6.4、停止所有容器

docker-compose -f /app/onlyoffice/build.yml down
docker-compose -f /app/onlyoffice/proxy.yml down

七、通过 DEB/RPM包安装

curl -fsSL https://download.onlyoffice.com/docspace/docspace-install.sh -o docspace-install.sh
bash docspace-install.sh package

八、卸载DocSpace

bash docspace-install.sh docker -u true
然后会提示是否删除 MySQL、Redis 等数据

九、企业级脚本

https://download.onlyoffice.com/docspace/docspace-enterprise-install.sh
声明:欢迎大家光临本站,学习IT运维技术,转载本站内容,请注明内容出处”来源刘国华教育“。如若本站内容侵犯了原著者的合法权益,请联系我们进行处理。