### Start the example service Source: https://euro-office.github.io/documentation/installation/example Starts the ds-example systemd service and checks its active status. Expected output is 'active'. ```bash sudo systemctl start ds-example systemctl is-active ds-example ``` -------------------------------- ### Install the package Source: https://euro-office.github.io/documentation/installation/ubuntu Installs the downloaded package. The installer generates fonts, WOPI keys, and JS caches, which takes a minute. A successful install ends with the message 'Congratulations, the Euro-Office DocumentServer has been installed successfully!' ```bash sudo apt-get install -y /tmp/euro-office-documentserver.deb ``` -------------------------------- ### Docker run with example enabled Source: https://euro-office.github.io/documentation/development/building?q= Starts the container with the built-in example app enabled by setting EXAMPLE_ENABLED=true. The container exposes port 8080 and uses the same JWT settings as the base run command. ```bash docker run -d \ --name euro-office-dev \ --restart=unless-stopped \ -p 8080:80 \ -e JWT_ENABLED=true \ -e JWT_SECRET=at-least-32-chars-long-for-hs256 \ -e EXAMPLE_ENABLED=true \ ghcr.io/euro-office/documentserver:latest ``` -------------------------------- ### Open the example in the browser Source: https://euro-office.github.io/documentation/installation/example URL to open the example app in a web browser. Should display a file list; click Create to open a blank document. ```text http:///example/ ``` -------------------------------- ### Install prerequisites Source: https://euro-office.github.io/documentation/installation/ubuntu Installs the required services for Euro-Office Document Server on Ubuntu 24.04 LTS. ```bash sudo apt-get update sudo apt-get install -y postgresql redis-server rabbitmq-server nginx supervisor ``` -------------------------------- ### Install prerequisites with dnf Source: https://euro-office.github.io/documentation/installation/fedora?q= Installs PostgreSQL, Valkey, RabbitMQ, Nginx, and Supervisor using dnf. Requires sudo privileges. ```bash sudo dnf install -y \ postgresql-server postgresql postgresql-contrib \ valkey \ rabbitmq-server \ nginx \ supervisor ``` -------------------------------- ### Configure the example app local.json Source: https://euro-office.github.io/documentation/installation/example Writes the example app configuration to /etc/euro-office/documentserver-example/local.json. The exampleUrl must be set to the server's IP (or localhost when running directly on the local machine). Replace YOUR_SERVER_IP and REPLACE_WITH_YOUR_JWT_SECRET. Do not add a trailing slash to the URL. ```bash sudo tee /etc/euro-office/documentserver-example/local.json > /dev/null << 'EOF' { "server": { "siteUrl": "/", "exampleUrl": "http://YOUR_SERVER_IP/example", "token": { "enable": true, "secret": "REPLACE_WITH_YOUR_JWT_SECRET", "authorizationHeader": "Authorization" } } } EOF ``` -------------------------------- ### Run example app for browser testing Source: https://euro-office.github.io/documentation/installation/docker?q= Enables the built-in example app via EXAMPLE_ENABLED=true and maps port 8080. Open http://localhost:8080/example/ to verify the editor. Disable EXAMPLE_ENABLED for production because it lacks access control. ```bash docker run -d \ --name euro-office \ --restart=unless-stopped \ -p 8080:80 \ -e JWT_ENABLED=true \ -e JWT_SECRET=at-least-32-chars-long-for-hs256 \ -e EXAMPLE_ENABLED=true \ ghcr.io/euro-office/documentserver:latest ``` -------------------------------- ### Install the Euro-Office package Source: https://euro-office.github.io/documentation/installation/debian Install the downloaded .deb package with apt-get. The installer generates fonts, WOPI keys, and JS caches, which takes a minute. ```bash sudo apt-get install -y /tmp/euro-office-documentserver.deb ``` -------------------------------- ### Successful installation message Source: https://euro-office.github.io/documentation/installation/debian The expected output after a successful installation. ```text Congratulations, the Euro-Office DocumentServer has been installed successfully! ``` -------------------------------- ### Install prerequisites Source: https://euro-office.github.io/documentation/installation/debian Install all required packages (postgresql, redis-server, rabbitmq-server, nginx, supervisor) from the default Debian 12 repositories. ```bash sudo apt-get install -y postgresql redis-server rabbitmq-server nginx supervisor ``` -------------------------------- ### Install OpenSSL and flush cache Source: https://euro-office.github.io/documentation/installation/fedora?q= Installs OpenSSL and flushes the document server cache. Required before the editor can load; without it, the editor fails with a path error like 'Cannot GET /9.3.1-/web-apps/…'. ```bash sudo dnf install -y openssl sudo /usr/bin/documentserver-flush-cache.sh ``` -------------------------------- ### Disable the example app Source: https://euro-office.github.io/documentation/installation/example?q= Stops and disables the example service to disable the example app. ```bash sudo systemctl stop ds-example sudo systemctl disable ds-example ``` -------------------------------- ### Example production.json with DEBUG level Source: https://euro-office.github.io/documentation/configuration/logging?q= Example configuration setting categories.default.level to DEBUG in production.json. ```json { "categories": { "default": { "appenders": ["default"], "level": "DEBUG" } } } ``` -------------------------------- ### Example package output listing Source: https://euro-office.github.io/documentation/development/building?q= Shows the expected output files in deploy/packages/ after a build: a .deb and a .rpm for each architecture. ```text deploy/packages/ euro-office-documentserver_9.3.1-dev.1_arm64.deb euro-office-documentserver-9.3.1-dev.1.aarch64.rpm ``` -------------------------------- ### Run Euro-Office Document Server with Docker (quick start) Source: https://euro-office.github.io/documentation/installation/docker?q= Starts the server with the latest image. The default port 80 is mapped and JWT authentication is enabled. The server is ready for use once the health check endpoint returns true. Requires Docker Engine 20.10+. ```bash docker run -d \ --name euro-office \ --restart=unless-stopped \ -p 80:80 \ -e JWT_ENABLED=true \ -e JWT_SECRET=at-least-32-chars-long-for-hs256 \ ghcr.io/euro-office/documentserver:latest ``` -------------------------------- ### Reload nginx and restart example Source: https://euro-office.github.io/documentation/installation/example Reloads nginx and restarts the example service to apply non-standard port changes. ```bash sudo systemctl reload nginx sudo systemctl restart ds-example ``` -------------------------------- ### Plugin installation directory Source: https://euro-office.github.io/documentation/configuration/plugins Shows the standard location for plugins on a self-hosted Euro-Office server. It is included as a reference for the subsequent installation steps. ```bash /var/www/euro-office/documentserver/sdkjs-plugins/ ``` -------------------------------- ### Start document server services Source: https://euro-office.github.io/documentation/installation/fedora?q= Enables and starts the document server services (ds-docservice, ds-converter, ds-metrics) on Fedora. ```bash sudo systemctl enable --now ds-docservice ds-converter ds-metrics ``` -------------------------------- ### Clone and bootstrap the development environment Source: https://euro-office.github.io/documentation/development/setup Clones the DocumentServer repository with submodules and starts the development environment using the up.sh script. The script is a placeholder and the exact entrypoint is TBD. ```bash git clone --recurse-submodules https://github.com/Euro-Office/DocumentServer.git cd DocumentServer/develop ./scripts/up.sh # placeholder — exact entrypoint TBD ``` -------------------------------- ### Pre-seed installer answers Source: https://euro-office.github.io/documentation/installation/ubuntu Pre-seeds the installer answers so the post-install script can configure the database connection without a prompt. ```bash echo "ds ds/db-type select postgres ds ds/db-host string localhost ds ds/db-port string 5432 ds ds/db-user string ds ds ds/db-pwd password ds ds ds/db-name string ds" | sudo debconf-set-selections ``` -------------------------------- ### Restart the example service Source: https://euro-office.github.io/documentation/installation/example Restarts the ds-example systemd service to apply configuration changes. ```bash sudo systemctl restart ds-example ``` -------------------------------- ### Reload nginx and restart ds-example Source: https://euro-office.github.io/documentation/installation/example?q= Reloads nginx and restarts the example service after changing the port settings. ```bash sudo systemctl reload nginx sudo systemctl restart ds-example ``` -------------------------------- ### Create database user and database Source: https://euro-office.github.io/documentation/installation/debian Create the PostgreSQL user 'ds' and database 'ds' before installation, as the post-install script connects to PostgreSQL. ```bash sudo -u postgres psql -c "CREATE USER ds WITH PASSWORD 'ds';" sudo -u postgres psql -c "CREATE DATABASE ds OWNER ds;" ``` -------------------------------- ### Configure connections (package install) Source: https://euro-office.github.io/documentation/configuration/commands?q= Point the server at external services. Run documentserver-configure.sh --help to see all options. The package supports postgres, mariadb, and mysql. ```bash sudo documentserver-configure.sh \ --databasetype postgres \ --databasehost db.internal \ --databasename eurooffice \ --databaseuser eurooffice \ --databasepassword your-password \ --jwtsecret at-least-32-chars-long-for-hs256 ``` -------------------------------- ### Register plugin (package install) Source: https://euro-office.github.io/documentation/configuration/plugins?q= Run the plugins manager script to fix file ownership, restart the document service, and flush the editor cache. ```bash sudo documentserver-pluginsmanager.sh ``` -------------------------------- ### Disable the example app Source: https://euro-office.github.io/documentation/installation/example Stops and disables the ds-example service. ```bash sudo systemctl stop ds-example sudo systemctl disable ds-example ``` -------------------------------- ### Docker: Host clone and copy plugin Source: https://euro-office.github.io/documentation/configuration/plugins For the Docker install, this clones the plugin on the host and copies it into a host directory that will be bind-mounted into the container. ```bash git clone --depth 1 https://github.com/ONLYOFFICE/onlyoffice.github.io cp/ onlyoffice.github.io/sdkjs-plugins/content/wordscounter / /path/on/your/host/plugins/wordscounter ``` -------------------------------- ### Pre-seed installer answers with debconf-set-selections Source: https://euro-office.github.io/documentation/installation/debian Set debconf answers for the Euro-Office installer to configure the database connection (type, host, port, user, password, name). ```bash echo "ds ds/db-type select postgres ds ds/db-host string localhost ds ds/db-port string 5432 ds ds/db-user string ds ds ds/db-pwd password ds ds ds/db-name string ds" | sudo debconf-set-selections ``` -------------------------------- ### Check server health Source: https://euro-office.github.io/documentation/installation/docker?q= Returns true when the server is ready. Use after the quick start command to verify the server is up. ```bash curl http://localhost/healthcheck ``` -------------------------------- ### Clone and copy plugin (package install) Source: https://euro-office.github.io/documentation/configuration/plugins?q= Clone the upstream plugins repository and copy the wordscounter plugin into the plugins directory. ```bash git clone --depth 1 https://github.com/ONLYOFFICE/onlyoffice.github.io sudo cp -r onlyoffice.github.io/sdkjs-plugins/content/wordscounter \ /var/www/euro-office/documentserver/sdkjs-plugins/ ``` -------------------------------- ### Docker run the image (the container) Source: https://euro-office.github.io/documentation/development/building?q= Starts the locally built image as a container named euro-office-dev, with restart policy unless-stopped, maps to port 8080, and enables JWT with a secret of at-least-32 characters. The image is a locally built one from the ghcr.io. ```bash docker run -d \ --name euro-office-dev \ --restart=unless-stopped \ -p 8080:80 \ -e JWT_ENABLED=true \ -e JWT_SECRET=at-least-32-chars-long-for-hs256 \ ghcr.io/euro-office/documentserver:latest ``` -------------------------------- ### Clone and copy plugin (wordpress/ONLYOFFICE) Source: https://euro-office.github.io/documentation/configuration/plugins Clones the upstream plugins repository and copies the wordscounter plugin into the server's sdkjs-plugins directory. This is how to install a plugin that is distributed in the shared upstream repository. ```bash git clone --depth 1 https://github.com/ONLYOFFICE/onlyoffice.github.io sudo cp -r onlyoffice.github.io/sdkjs-plugins/content/wordscounter \ /var/www/euro-office/documentserver/sdkjs-plugins/ ``` ```bash sudo documentserver-pluginsmanager.sh ``` -------------------------------- ### Initialize the database schema Source: https://euro-office.github.io/documentation/installation/fedora?q= Applies the database schema manually because the RPM installer does not run it automatically. Also grants all privileges on tables and sequences to the ds user. ```bash sudo -u postgres psql -d ds \ -f /var/www/onlyoffice/documentserver/server/schema/postgresql/createdb.sql sudo -u postgres psql -c "GRANT ALL PRIVILEGES ON ALL TABLES IN SCHEMA public TO ds;" sudo -u postgres psql -c "GRANT ALL PRIVILEGES ON ALL SEQUENCES IN SCHEMA public TO ds;" ``` -------------------------------- ### Configure JWT authentication in local.json Source: https://euro-office.github.io/documentation/installation/fedora?q= Creates the JWT configuration file /etc/euro-office/documentserver/local.json. All three secret entries must use the same value; note the secret for later use when configuring the example app. ```bash sudo tee /etc/euro-office/documentserver/local.json > /dev/null << 'EOF' { "services": { "CoAuthoring": { "token": { "enable": { "request": { "inbox": true, "outbox": true }, "browser": true }, "secret": { "inbox": { "string": "REPLACE_WITH_YOUR_SECRET" }, "outbox": { "string": "REPLACE_WITH_YOUR_SECRET" }, "browser": { "string": "REPLACE_WITH_YOUR_SECRET" } } } } } } EOF ``` -------------------------------- ### Install custom fonts on bare-metal (deb/rpm) Source: https://euro-office.github.io/documentation/configuration/fonts Copy font files to the system fonts directory and regenerate the font cache. No restart is required; the new fonts appear in the editor font list. ```bash sudo cp myfont.ttf /usr/share/fonts/ ``` ```bash sudo documentserver-generate-allfonts.sh ``` -------------------------------- ### Get the JWT secret (deb install) Source: https://euro-office.github.io/documentation/installation/example Retrieves the automatically generated JWT secret from the documentserver local.json file using grep. ```bash sudo grep -A1 '"browser"' /etc/euro-office/documentserver/local.json | grep '"string"' ``` -------------------------------- ### Initialize PostgreSQL and enable services Source: https://euro-office.github.io/documentation/installation/fedora?q= Initializes the PostgreSQL database and enables/starts all required services (postgresql, valkey, rabbitmq-server, nginx, supervisor). ```bash sudo postgresql-setup --initdb sudo systemctl enable --now postgresql valkey rabbitmq-server nginx supervisor ``` -------------------------------- ### Create and bootstrap buildx container driver Source: https://euro-office.github.io/documentation/development/building?q= Creates and bootstraps a buildx container driver named 'container-builder'. Required before building for the first time. ```bash docker buildx create \ --name container-builder \ --driver docker-container \ --use docker buildx inspect --bootstrap ``` -------------------------------- ### Remove plugin (Package install) Source: https://euro-office.github.io/documentation/configuration/plugins Removes the plugin folder and re-registers editors via the package for a package (deb/rpm) installation. ```bash sudo rm -rf /var/www/euro-office/documentserver/sdkjs-plugins/wordscounter sudo documentserver-pluginsmanager.sh ``` -------------------------------- ### Install the RPM package with --nodeps Source: https://euro-office.github.io/documentation/installation/fedora?q= Installs the RPM package with --nodeps to skip the msttcore-fonts dependency, which is not available in Fedora's repositories. ```bash sudo rpm -ivh --nodeps /tmp/euro-office-documentserver.rpm ``` -------------------------------- ### local.json example with JWT secret and PostgreSQL Source: https://euro-office.github.io/documentation/configuration/server Example local.json configuration that sets the JWT secret and points to an external PostgreSQL database. The JWT secret must be at least 32 characters long for HS256; shorter secrets are rejected when signing or verifying tokens. ```json { "services": { "CoAuthoring": { "secret": { "inbox": { "string": "at-least-32-chars-long-for-hs256" }, "outbox": { "string": "at-least-32-chars-long-for-hs256" }, "session": { "string": "at-least-32-chars-long-for-hs256" } }, "sql": { "type": "postgres", "dbHost": "db.internal", "dbName": "eurooffice", "dbUser": "eurooffice", "dbPass": "your-password" } } } } ``` -------------------------------- ### Update exampleUrl for non-standard port Source: https://euro-office.github.io/documentation/installation/example Updates the exampleUrl in /etc/euro-office/documentserver-example/local.json to include the port. Replace YOUR_SERVER_IP and . ```json "exampleUrl": "http://YOUR_SERVER_IP:/example" ``` -------------------------------- ### Regenerate font cache with documentserver-generate-allfonts.sh Source: https://euro-office.github.io/documentation/configuration/fonts?q= Regenerates the font cache after adding fonts on a bare-metal installation. No restart is required. ```bash sudo documentserver-generate-allfonts.sh ``` -------------------------------- ### Download Euro-Office package from GitHub Source: https://euro-office.github.io/documentation/installation/debian Download the latest release .deb package from GitHub Releases. Replace and with your values (e.g., 9.3.1-rc.1 and amd64 or arm64). ```bash # Replace and with your values, e.g. 9.3.1-rc.1 and amd64 or arm64 wget "https://github.com/Euro-Office/DocumentServer/releases/download/v/euro-office-documentserver__.deb" \ -O /tmp/euro-office-documentserver.deb ``` -------------------------------- ### Check JWT status (package install) Source: https://euro-office.github.io/documentation/configuration/commands?q= Run inside the container when using Docker: docker exec euro-office documentserver-jwt-status.sh ```bash sudo documentserver-jwt-status.sh ``` -------------------------------- ### Download the package Source: https://euro-office.github.io/documentation/installation/ubuntu Downloads the latest release package from GitHub Releases. Replace and with your values (e.g., 9.3.1-rc.1 and amd64 or arm64). ```bash # Replace and with your values, e.g. 9.3.1-rc.1 and amd64 or arm64 wget "https://github.com/Euro-Office/DocumentServer/releases/download/v/euro-office-documentserver__.deb" \ -O /tmp/euro-office-documentserver.deb ``` -------------------------------- ### Copy font file to system fonts directory Source: https://euro-office.github.io/documentation/configuration/fonts?q= Copies a font file to the system fonts directory on a bare-metal installation. Requires sudo privileges. ```bash sudo cp myfont.ttf /usr/share/fonts/ ``` -------------------------------- ### Enable RabbitMQ packagecloud repository Source: https://euro-office.github.io/documentation/installation/fedora?q= Adds the RabbitMQ packagecloud repository using the official script. Run as a user with sudo access. ```bash curl -1sLf 'https://packagecloud.io/rabbitmq/rabbitmq-server/script.rpm.sh' | sudo bash ``` -------------------------------- ### Docker: Run container with plugin mount Source: https://euro-office.github.io/documentation/configuration/plugins Runs the euro-office container, mounting the host plugin directory into the container's sdkjs-plugins folder. This mount uses the path /var/www/euro-office/documentserver/sdkjs-plugins/wordscounter. ```bash docker run -d \ --name euro-office \ --restart=unless-stopped \ -p 80:80 \ -e JWT_ENABLED=true \ -e JWT_SECRET=at-least-32-chars-long-for-hs256 \ -v /path/to/your/host/wordscounter:/var/www/euro-office/documentserver/sdkjs-plugins/wordscounter \ ghcr.io/euro-office/documentserver:latest ``` ```bash docker exec euro-office documentserver-pluginsmanager.sh ``` -------------------------------- ### Build a branded image with buildx bake Source: https://euro-office.github.io/documentation/development/building?q= Builds a branded image (e.g., Nextcloud Office) by including the brand-specific HCL file alongside the main docker-bake.hcl. Needs to be run from the DocumentServer/build directory. The --allow=fs=./brands/nextcloud-office-brand/generated grants BuildKit write access to the directory where the brand asset generation step exports output. ```bash cd DocumentServer/build BUILDX_BAKE_ENTITLEMENTS_FS=0 docker buildx bake \ -f docker-bake.hcl \ -f brands/nextcloud-office-brand/brand-server.hcl \ --allow=fs.read=.. \ --allow=fs=./brands/nextcloud-office-brand/generated \ --load ``` -------------------------------- ### Configuration file load order Source: https://euro-office.github.io/documentation/configuration/server Shows the load order of configuration files for the Euro-Office Document Server. Later files override earlier ones, and local.json is the recommended place for custom settings. ```text default.json → production-linux.json → local.json ``` -------------------------------- ### Configure non-standard port for nginx and exampleUrl Source: https://euro-office.github.io/documentation/installation/example?q= Updates the nginx listen port in `/etc/euro-office/documentserver/nginx/ds.conf` and the `exampleUrl` in `/etc/euro-office/documentserver-example/local.json` when nginx listens on a non-standard port. ```nginx listen 0.0.0.0:; listen [::]: default_server; ``` ```json "exampleUrl": "http://YOUR_SERVER_IP:/example" ``` -------------------------------- ### Install custom fonts in Docker Source: https://euro-office.github.io/documentation/configuration/fonts Run the Docker container with a host directory mounted for fonts and restart it to pick up new fonts. Fonts are automatically detected because GENERATE_FONTS is enabled by default. ```bash docker run -d \ --name euro-office \ --restart=unless-stopped \ -p 80:80 \ -e JWT_ENABLED=true \ -e JWT_SECRET=at-least-32-chars-long-for-hs256 \ -v /path/on/your/host/fonts:/usr/share/fonts/custom \ ghcr.io/euro-office/documentserver:latest ``` ```bash docker restart euro-office ``` -------------------------------- ### Enable contrib component in /etc/apt/sources.list Source: https://euro-office.github.io/documentation/installation/debian Add 'contrib' to each repository line in /etc/apt/sources.list to enable the contrib component required for the ttf-mscorefonts-installer package. ```bash deb http://deb.debian.org/debian bookworm main contrib deb http://deb.debian.org/debian bookworm-updates main contrib deb http://deb.debian.org/debian-security/ bookworm-security main contrib ``` -------------------------------- ### Run Euro Office container with environment variables Source: https://euro-office.github.io/documentation/configuration/server Run the Euro Office Document Server container with environment variables that generate local.json on startup. Set JWT_SECRET to at least 32 characters for HS256 and provide database credentials; recreate the container to apply changes. ```bash docker run -d \ --name euro-office \ --restart=unless-stopped \ -p 80:80 \ -e JWT_SECRET=at-least-32-chars-long-for-hs256 \ -e DB_TYPE=postgres \ -e DB_HOST=db.internal \ -e DB_NAME=eurooffice \ -e DB_USER=eurooffice \ -e DB_PWD=your-password \ ghcr.io/euro-office/documentserver:latest ```