Installation with Node.js - Not recommended
This approach to installing the application is not recommended.
The CKEditor Collaboration Server On-Premises is developed, tested and maintained using a docker images.
Thanks to this your production environment is as close to this where we test our products as possible.
Docker images handle all dependencies, which guaranties compatibility with our products.
All that is not possible by using a pure Node.js installation, where you need to take care about the whole environment your application is running on.
However, if your case requires using an installation without Docker, please contact us.
A valid license key is needed in order to install Collaboration Server On-Premises.
Contact us for a trial license key.
For evaluation and testing purposes, you can follow the Quick-start guide, where we provide an easy-to-use script for setting up all necessary infrastructure for Collaboration Server On-Premises on your local machine.
This approach is not recommended. Please use the Docker approach if possible.
Click here to show the Node.js instructions anyway.
# Setting up the application directly on the server
Note: This approach to installing the application is more complicated and requires many dependencies. Therefore, the recommended way to install Collaboration Server On-Premises is to use Docker. See Setting up the application using the containerization.
# Requirements
For every 250 concurrent users, Collaboration Server On-Premises requires 1 additional core of CPU and 500MB of RAM.
- 1 core and 500 MB RAM support up to 250 concurrent users.
- 2 cores and 1 GB RAM support up to 500 concurrent users.
- 4 cores and 2 GB RAM support up to 1,000 concurrent users.
- 8 cores and 4 GB RAM support up to 2,000 concurrent users.
- 16 cores and 8 GB RAM support up to 4,000 concurrent users.
These calculations allow you to run Collaboration Server On-Premises without having to set up load balancers.
# Software prerequisites
In order to install Collaboration Server On-Premises on the application server, the following software must be installed on the server first:
node.js
– version 14.x.
Download it from: https://nodejs.org/en/download/package-manager/pnpm
– version 4.3.x:npm i pnpm@4.3.0 -g
pm2
– version 3.2.2 or newer:npm i pm2 -g
libpng-dev
:sudo apt install libpng-dev
python
– version 3.x is recommended, version 2.7 is deprecatedgcc
– version 4.9.x or newermake
autoconf
– 2.69 or newerlibtool
– 2.4.2 or newerpkg-config
– 0.26 or newernasm
– 2.10.09 or newer- dependencies for Chrome
On Ubuntu you can install gcc
and make
with build-essential
:
sudo apt install build-essential
To install Chrome dependencies on Ubuntu you can use the following command:
sudo apt install libgbm-dev gconf-service libasound2 libatk1.0-0 libc6 libcairo2 libcups2 libdbus-1-3 libexpat1 libfontconfig1 libgcc1 libgconf-2-4 libgdk-pixbuf2.0-0 libglib2.0-0 libgtk-3-0 libnspr4 libpango-1.0-0 libpangocairo-1.0-0 libstdc++6 libx11-6 libx11-xcb1 libxcb1 libxcomposite1 libxcursor1 libxdamage1 libxext6 libxfixes3 libxi6 libxrandr2 libxrender1 libxss1 libxtst6 ca-certificates fonts-liberation libappindicator1 libnss3 lsb-release xdg-utils wget
# Problem with node-gyp
In case of problems with node-gyp
, please check the node-gyp
installation guide.
# Installation
Unpack the installation package on the Application Server.
- Set execution permissions on the
setup.sh
file. - Run:
sh setup.sh
# Running the application
- Create the configuration file
config.json
in a safe place and fill it with your configuration data. See the configuration example. - Configure the logs directory — see Logs.
- Go to
app/
. - Run:
By default the application will be run using all available CPUs but it can be changed by setting theCS_CONFIG_PATH=[path/to/your/config] pm2 start
CS_INSTANCES
variable:CS_INSTANCES=1 CS_CONFIG_PATH=[path/to/your/config] pm2 start
- Check PM2 logs to verify if the application starts properly:
pm2 logs cs
- Create the
Environment
with aAccess Key
via Cloud Services Management Panel. Use this data to create the token endpoint and run tests. - Run tests to verify if the system works properly — see Running tests without Docker.
- Configure the server endpoints in the CKEditor Collaboration web application to communicate with the Collaboration Server On-Premises application — see Setting endpoints.
# Application management
We recommend using PM2 software for application management. Below you can find a list of some of the most important commands:
pm2 restart cs
– Restarts all processes of the application.pm2 reload cs
– Reloads all processes of the application, 0-seconds downtime.pm2 logs cs --lines 1000000
– Streams the logs file.pm2 scale cs <number>
– Scales the number of processes up or down.pm2 delete cs all
– Removes all processes.pm2 list
– Lists all processes.pm2 -h
– Help.
Please ensure that you have all needed privileges to use needed PM2 commands.
More information can be found in the PM2 documentation.
# Configuration example
{
"database_driver": "mysql", // optional (default: "mysql")
"database_host": "127.0.0.1", // required
"database_port": "3306", // optional (default: 3306)
"database_user": "root", // optional (default: "root"), but it is highly recommended you change it
"database_password": "password", // optional (default: "password"), but it is highly recommended you change it
"database_database": "cs-on-premises", // optional (default: "cs-on-premises")
"database_schema": "cs-on-premises", // optional (default: "cs-on-premises", used for Postgres driver)
"database_ssl_enable": "", // optional
"database_ssl_ca": "", // optional
"database_ssl_key": "", // optional
"database_ssl_cert": "", // optional
"redis_host": "localhost", // required
"redis_port": 6379, // optional (default: 6379)
"redis_db": 1, // optional (default: 1)
"redis_password": "", // optional
"redis_user": "", // optional
"redis_tls_ca": "", // optional
"redis_tls_key": "", // optional
"redis_tls_cert": "", // optional
"redis_tls_enable": false, // optional (default: false), set to true when connecting to AWS ElastiCache with TLS enabled
"redis_disable_dns_lookup": false, // optional (default: false), set to true when connecting to AWS ElastiCache Cluster with TLS enabled
"redis_cluster_nodes": "", // optional
"application_http_port": 8000, // optional (default: 8000)
"application_external_endpoint": "", // optional
"environments_management_secret_key": "secret", // optional (default: "secret"), but it is highly recommended you change it
"license_key": "your_license_key", // required
"migrate_only": false, // optional (default: false)
"storage_driver": "filesystem", // optional (default: "filesystem")
"storage_location": "/var/cs/easyimage", // optional (default: "/var/cs/easyimage", required for file system driver)
"storage_region": "", // optional (required for AWS S3 driver)
"storage_access_key_id": "", // optional (required for AWS S3 driver)
"storage_secret_access_key": "", // optional (required for AWS S3 driver)
"storage_bucket": "", // optional (required for AWS S3 driver)
"storage_endpoint": "", // optional (required for AWS S3 driver)
"storage_account_name": "", // optional (required for Azure Blob Storage driver)
"storage_account_key": "", // optional (required for Azure Blob Storage driver)
"storage_container": "", // optional (required for Azure Blob Storage driver)
"collaboration_storage_driver": "database", // optional (default: "database")
"collaboration_storage_location": "/var/cs/collaboration", // optional (default: "/var/cs/easyimage", required for file system driver)
"collaboration_storage_access_key_id": "", // optional (required for AWS S3 driver)
"collaboration_storage_secret_access_key": "", // optional (required for AWS S3 driver)
"collaboration_storage_region": "", // optional (required for AWS S3 driver)
"collaboration_storage_endpoint": "", // optional (required for AWS S3 driver)
"collaboration_storage_bucket": "", // optional (required for AWS S3 driver)
"collaboration_storage_account_name": "", // optional (required for Azure Blob Storage driver)
"collaboration_storage_account_key": "", // optional (required for Azure Blob Storage driver)
"collaboration_storage_container": "", // optional (required for Azure Blob Storage driver)
"use_built_in_collaboration_worker": true, // optional (default: true)
"enable_metric_logs": false // optional (default: false)
}
More information about the storage configuration of the Easy Image feature you can find here.
Notes:
- Please save you configuration outside the application package directory. This prevents from overwriting your configuration during the application update process.
- Without a correct
license_key
the application will not start. - Example of
redis_cluster_nodes
variable:[ { "host": "127.0.0.1", "port": 7000, "password": "", // optional "user": "" // optional }, { "host": "127.0.0.1", "port": 7001, "password": "", // optional "user": "" // optional }, { "host": "127.0.0.1", "port": 7002, "password": "", // optional "user": "" // optional } ]
- If your database server is configured to require SSL connections, you can use
database_ssl_ca
,database_ssl_key
anddatabase_ssl_cert
to pass certificates to the database driver. You can pass certificates directly with certificate content or aspath/to/certificate.crt
. Example:{ "database_ssl_ca": "-----BEGIN CERTIFICATE-----\nMIIEBjCCAu6gAwIBAgIJAMc0ZzaSUK51MA0GCSqGSIb3DQEBCwUAMIGPMQswCQYD\nVQQGEwJVUzEQMA4GA1UEBwwHU2VhdHRsZTETMBEGA1UECAwKV2FzaGluZ3RvbjEi\n............\nzPW4CXXvhLmE02TA9/ZeCw3KkHIwicNuEfa=\n-----END CERTIFICATE-----", "database_ssl_cert": "/var/cs/ssl/client-certificate.pem" }
- If your database server is configured to require SSL connections and the certificate of the database server is signed by a trusted third party, you can set
DATABASE_SSL_ENABLE=true
instead of passing the certificates.
# Configuring the database
At the moment the following databases are supported:
- MySQL in version 8.0 (recommended) or 5.7 (minimal supported version).
- PostgreSQL in version 14 (recommended) or 12 (minimal supported version)
# MySQL
MySQL is selected as default so you do not need to explicitly specify this driver. Example configuration:
{
"database_host": "127.0.0.1",
"database_port": "3306",
"database_user": "root",
"database_password": "password",
"database_database": "cs-on-premises",
"database_ssl_ca": "server-certificate-content or path/to/server-certificate.crt",
"database_ssl_key": "client-key-content or path/to/client-key.key",
"database_ssl_cert": "client-certificate-content or path/to/client-certificate.crt",
// ...
}
The values above are examples and should be changed.
The database should be created before running the application. It can be created with the following init.sql
script:
CREATE DATABASE `cs-on-premises`
DEFAULT CHARACTER SET utf8mb4
DEFAULT COLLATE utf8mb4_bin;
# PostgreSQL
To use PostgreSQL you have to set database_driver
to postgres
. Example configuration:
{
"database_driver": "postgres",
"database_host": "127.0.0.1",
"database_port": "5432",
"database_user": "postgres",
"database_password": "password",
"database_database": "cksource",
"database_schema": "cs-on-premises",
"database_ssl_ca": "server-certificate-content or path/to/server-certificate.crt",
"database_ssl_key": "client-key-content or path/to/client-key.key",
"database_ssl_cert": "client-certificate-content or path/to/client-certificate.crt",
// ...
}
The values above are examples and should be changed.
The database and schema should be created before running the application. It can be created with the following init.sql
script:
CREATE DATABASE "cksource";
\connect "cksource";
CREATE SCHEMA "cs-on-premises";
# Logs
Make sure that write permissions are granted for the logs directory.
By default all logs are stored in the /var/log/cs/cs.log
file but it is strongly recommended to change this location by using the CS_LOGS_PATH
variable:
CS_LOGS_PATH=[path/to/logs] CS_CONFIG_PATH=[path/to/your/config] pm2 start
Set CS_LOGS_PATH
outside the application package directory. This prevents from unwanted changes in your logs made during the application update process.
# Generating a startup script
See http://pm2.keymetrics.io/docs/usage/startup/.
# Upgrading to a new version
- Install the software prerequisites if some versions have changed or if new ones have been added — see Software prerequisites.
- Unzip the package with a new version to a separate directory, for example:
new_version_dir
. - Check the changelog for breaking changes and adjust the configuration if needed.
- Create a new test SQL database or schema (if you are using a PostgresSQL database) and use it in the configuration file. See the
database_database
variable for MySQL ordatabase_schema
variable for PostgresSQL — refer to the Configuring the database section. - Change the Redis database in the configuration file to the one that is not used in the currently running application — see the
redis_db
variable. - Change
application_http_port
to some free port that is not used in the currently running application. - Go to
new_version_dir
and run the installation — see Installation. - Go to
new_version_dir/app
and start the test application:CS_CONFIG_PATH=[path/to/your/config] pm2 start src/index.js --name test_cs
- Run tests — see Running tests without Docker.
- If the new version of the application works properly, shut it down:
pm2 delete test_cs
- Change
database_database
/database_schema
andredis_db
to the previous values used in the application. - Change
application_http_port
to the previous port used in the application. - Go to
new_version_dir/app/
. - Stop the current version of the application and run the new version:
pm2 delete all && pm2 kill && CS_CONFIG_PATH=[path/to/your/config] pm2 start
- Verify if everything is working correctly.
- If yes, you can delete the previous version. If not, stop the new version and run the previous version again.