1、安装编译code及online的依赖
apt install autoconf gperf libkrb5-dev meson ninja-build bison flex \
zip gettext nasm libncurses5-dev libncursesw5-dev libreadline-dev libdb-dev \
libgdbm-dev libnss3-dev liblzma-dev tk-dev uuid-dev libffi-dev zlib1g-dev python3-lxml \
libtool libssl-dev python3-polib libcppunit-dev libpam0g-dev libcap-dev rsync automake \
libzstd-dev
2、安装nodejs
curl -fsSL https://deb.nodesource.com/setup_18.x | sudo -E bash
apt install -y nodejs npm
3、创建编译用工作及安装目录,用于保证一些编译的中间件
mkdir -p /data/collabora-online/builddir
mkdir /data/collabora-online/opt
mkdir /data/collabora-online/instdir
4、编译静态poco
cd /data/collabora-online
wget https://pocoproject.org/releases/poco-1.12.5p2/poco-1.12.5p2-all.tar.gz
tar zxvf poco-1.12.5p2-all.tar.gz
cd poco-1.12.5p2-all
./configure --static --no-tests --no-samples --no-sharedlibs --cflags="-fPIC" --omit=Zip,Data,Data/SQLite,Data/ODBC,Data/MySQL,MongoDB,PDF,CppParser,PageCompiler,Redis,Encodings,ActiveRecord --prefix=/data/collabora-online/builddir/poco
make -j $(nproc)
make install
5、编译core
cd /data/collabora-online
git clone https://git.libreoffice.org/core core
cd core
git checkout co-25.04.4-1
./autogen.sh \
--with-distro=CPLinux-LOKit \
--disable-epm \
--without-package-format \
--disable-symbols
make -j$(nproc)
cp -fr /data/collabora-online/core/instdir /data/collabora-online/opt/lokit
- ./autogen.sh 初始化配置脚本,用于生成
configure
脚本并设置编译选项。 - –with-distro=CPLinux-LOKit 指定发行版配置模板,
CPLinux-LOKit
是 Collabora Online 使用的一个定制发行版配置,主要为构建 LibreOfficeKit 做优化。 - –disable-epm
禁用 EPM(Easy Package Manager)支持,表示不生成安装包(如 .deb、.rpm)所需的信息文件。通常用于开发或调试构建。 --without-package-format
不生成任何安装包格式(如 DEB、RPM、MSI),通常用于只想本地运行、不发布包的情况。 - –disable-symbols` 禁用调试符号的生成,编译出来的程序更小,但不利于调试。适用于追求体积小或部署环境。
6、编译online
cd /data/collabora-online
git clone https://github.com/CollaboraOnline/online online
cd online
git checkout cp-25.04.4-1
./autogen.sh
./configure --prefix=/usr --sysconfdir=/etc --localstatedir=/var --enable-silent-rules --disable-tests --with-lokit-path=/data/collabora-online/core/include --with-lo-path=/opt/lokit --with-poco-includes=/data/collabora-online/builddir/poco/include/ --with-poco-libs=/data/collabora-online/builddir/poco/lib
make -j $(nproc)
DESTDIR=/data/collabora-online/instdir make install
7、构建docker镜像
# 切换到instdir的上一层目录
cd /data/collabora-online
cp online/docker/from-packages/scripts/start-collabora-online.sh ./
#拷贝dockerfile,基于Debian的,也可以拷贝Ubuntu进行编译
cp /data/collabora-online/online/docker/from-source/Debian ./
# 将cool用户添加到docker组,否则会导致无法调用docker命令,必须退出终端再进入,否则不生效
usermod -aG docker cherry
docker build --no-cache -t lyqiao-online-code:1.0 -f Debian .
名为Debian的dockerfile文件需要进行改造,加入一行,否则会因lokit文件夹的缺失而导致错误:
# This Source Code Form is subject to the terms of the Mozilla Public
# License, v. 2.0. If a copy of the MPL was not distributed with this
# file, You can obtain one at http://mozilla.org/MPL/2.0/.
FROM debian:stable
# get the latest fixes
# install LibreOffice run-time dependencies
# install adduser, findutils, openssl and cpio that we need later
# install an editor
# tdf#117557 - Add CJK Fonts to Collabora Online Docker Image
RUN apt-get update && \
apt-get -y install libpng16-16 fontconfig adduser cpio \
findutils nano libcap2-bin openssl \
libubsan1 openssh-client fonts-wqy-zenhei \
fonts-wqy-microhei fonts-droid-fallback fonts-noto-cjk \
ca-certificates libcap2-bin
# copy freshly built LOKit and Collabora Online
COPY /instdir /
COPY opt/lokit /opt/lokit
# copy the shell script which can start Collabora Online (coolwsd)
COPY /start-collabora-online.sh /
# set up Collabora Online (normally done by postinstall script of package)
# Fix permissions
RUN setcap cap_fowner,cap_chown,cap_sys_chroot=ep /usr/bin/coolforkit-caps
RUN setcap cap_sys_admin=ep /usr/bin/coolmount
RUN adduser --quiet --system --group --home /opt/cool cool
RUN rm -rf /opt/cool
RUN mkdir -p /opt/cool/child-roots /opt/cool/cache
RUN coolwsd-systemplate-setup /opt/cool/systemplate /opt/lokit
RUN touch /var/log/coolwsd.log
RUN chown cool:cool /var/log/coolwsd.log
RUN chown -R cool:cool /opt/
RUN chown -R cool:cool /etc/coolwsd
EXPOSE 9980
# switch to cool user (use numeric user id to be compatible with Kubernetes Pod Security Policies)
USER 100
ENTRYPOINT ["/start-collabora-online.sh"]