guide使用 Node.js 安装 - 不推荐

这种安装应用程序的方法**不推荐**。

CKEditor 协作服务器本地部署是使用 docker 镜像开发、测试和维护的。
因此,您的生产环境尽可能接近我们测试产品的环境。
Docker 镜像处理所有依赖项,从而保证与我们产品的兼容性。
使用纯 Node.js 安装无法实现所有这些功能,您需要负责应用程序运行的整个环境。

但是,如果您的情况需要使用没有 Docker 的安装,请联系我们。

安装协作服务器本地部署需要有效的许可证密钥。
联系我们 获取试用许可证密钥。

为了评估和测试目的,您可以按照快速入门指南操作,我们在指南中提供了一个易于使用的脚本,用于在您的本地机器上设置协作服务器本地部署所需的所有基础设施。

这种方法**不推荐**。如果可能,请使用 Docker 方法。

点击此处显示 Node.js 指令。

# 直接在服务器上设置应用程序

注意:这种安装应用程序的方法比较复杂,需要很多依赖项。因此,推荐的安装协作服务器本地部署的方法是使用 Docker。请参阅使用容器化设置应用程序.

# 需求

对于每 250 个并发用户,协作服务器本地部署需要 1 个额外的 CPU 内核和 500 MB 的 RAM。

  • 1 个内核和 500 MB RAM 支持最多 250 个并发用户。
  • 2 个内核和 1 GB RAM 支持最多 500 个并发用户。
  • 4 个内核和 2 GB RAM 支持最多 1,000 个并发用户。
  • 8 个内核和 4 GB RAM 支持最多 2,000 个并发用户。
  • 16 个内核和 8 GB RAM 支持最多 4,000 个并发用户。

这些计算允许您运行协作服务器本地部署,而无需设置负载均衡器。

# 软件先决条件

为了在应用程序服务器上安装协作服务器本地部署,您需要先在服务器上安装以下软件

  • node.js – 版本 14.x。
    从以下地址下载:https://node.org.cn/en/download/package-manager/
  • pnpm – 版本 4.3.x
    npm i pnpm@4.3.0 -g
    
  • pm2 – 版本 3.2.2 或更高
    npm i pm2 -g
    
  • libpng-dev:
    sudo apt install libpng-dev
    
  • python – 推荐使用版本 3.x,版本 2.7 已过时
  • gcc – 版本 4.9.x 或更高
  • make
  • autoconf – 2.69 或更高
  • libtool – 2.4.2 或更高
  • pkg-config – 0.26 或更高
  • nasm – 2.10.09 或更高
  • Chrome 依赖项

在 Ubuntu 上,您可以使用 build-essential 安装 gccmake

sudo apt install build-essential

要在 Ubuntu 上安装 Chrome 依赖项,您可以使用以下命令

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

# node-gyp 问题

如果遇到 node-gyp 问题,请查看node-gyp 安装指南.

# 安装

将安装包解压到应用程序服务器上。

  1. setup.sh 文件设置执行权限。
  2. 运行
    sh setup.sh
    

# 运行应用程序

  1. 在安全位置创建配置文件 config.json,并使用您的配置数据填充它。请参阅配置示例.
  2. 配置日志目录 - 请参阅日志.
  3. 转到 app/
  4. 运行
    CS_CONFIG_PATH=[path/to/your/config] pm2 start
    
    默认情况下,应用程序将使用所有可用的 CPU 运行,但可以通过设置 CS_INSTANCES 变量来更改。
    CS_INSTANCES=1 CS_CONFIG_PATH=[path/to/your/config] pm2 start
    
  5. 检查 PM2 日志以验证应用程序是否正常启动
    pm2 logs cs
    
  6. 通过云服务管理面板创建带有访问密钥环境。使用此数据创建令牌端点运行测试.
  7. 运行测试以验证系统是否正常工作 - 请参阅在没有 Docker 的情况下运行测试.
  8. 在 CKEditor 协作 Web 应用程序中配置服务器端点,以与协作服务器本地部署应用程序进行通信 - 请参阅设置端点.

# 应用程序管理

我们推荐使用 PM2 软件进行应用程序管理。以下列出了几个最重要的命令

  • pm2 restart cs – 重新启动应用程序的所有进程。
  • pm2 reload cs – 重新加载应用程序的所有进程,0 秒停机时间。
  • pm2 logs cs --lines 1000000 – 流式传输日志文件。
  • pm2 scale cs <number> – 调整进程数量。
  • pm2 delete cs all – 删除所有进程。
  • pm2 list – 列出所有进程。
  • pm2 -h – 帮助。

请确保您拥有使用所需 PM2 命令所需的权限。
更多信息可以在PM2 文档中找到。

# 配置示例

{
    "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)
}

您可以在此处找到有关 Easy Image 功能的存储配置的更多信息。

说明

  • 请将配置保存在应用程序包目录之外。这样可以防止在应用程序更新过程中覆盖您的配置。
  • 如果没有正确的 license_key,应用程序将无法启动。
  • redis_cluster_nodes 变量示例
    [
      {
        "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
      }
    ]
    
  • 如果您的数据库服务器配置为需要 SSL 连接,您可以使用 database_ssl_cadatabase_ssl_keydatabase_ssl_cert 向数据库驱动程序传递证书。您可以直接使用证书内容或 path/to/certificate.crt 传递证书。示例
    {
      "database_ssl_ca": "-----BEGIN CERTIFICATE-----\nMIIEBjCCAu6gAwIBAgIJAMc0ZzaSUK51MA0GCSqGSIb3DQEBCwUAMIGPMQswCQYD\nVQQGEwJVUzEQMA4GA1UEBwwHU2VhdHRsZTETMBEGA1UECAwKV2FzaGluZ3RvbjEi\n............\nzPW4CXXvhLmE02TA9/ZeCw3KkHIwicNuEfa=\n-----END CERTIFICATE-----",
      "database_ssl_cert": "/var/cs/ssl/client-certificate.pem"
    }
    
  • 如果您的数据库服务器配置为需要 SSL 连接,并且数据库服务器的证书由可信第三方签署,则可以设置 DATABASE_SSL_ENABLE=true,而不是传递证书。

# 配置数据库

目前支持以下数据库

  • MySQL 版本 8.0(推荐)或 5.7(最低支持版本)。
  • PostgreSQL 版本 14(推荐)或 12(最低支持版本)

# MySQL

MySQL 被选择为默认值,因此您无需显式指定此驱动程序。配置示例

{
    "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",

    // ...
}

上面的值只是示例,需要进行更改。

在运行应用程序之前,应创建数据库。可以使用以下 init.sql 脚本创建数据库

CREATE DATABASE `cs-on-premises`
    DEFAULT CHARACTER SET utf8mb4
    DEFAULT COLLATE utf8mb4_bin;

# PostgreSQL

要使用 PostgreSQL,您必须将 database_driver 设置为 postgres。配置示例

{
    "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",

    // ...
}

上面的值只是示例,需要进行更改。

在运行应用程序之前,应创建数据库和模式。可以使用以下 init.sql 脚本创建数据库和模式

CREATE DATABASE "cksource";
\connect "cksource";
CREATE SCHEMA "cs-on-premises";

# 日志

确保已授予日志目录的写入权限。

默认情况下,所有日志都存储在 /var/log/cs/cs.log 文件中,但强烈建议使用 CS_LOGS_PATH 变量更改此位置

CS_LOGS_PATH=[path/to/logs] CS_CONFIG_PATH=[path/to/your/config] pm2 start

CS_LOGS_PATH 设置在应用程序包目录之外。这样可以防止在应用程序更新过程中对您的日志进行意外更改。

# 生成启动脚本

请参阅 https://pm2.node.org.cn/docs/usage/startup/.

# 升级到新版本

  1. 如果某些版本已更改或添加了新版本,请安装软件先决条件 - 请参阅软件先决条件.
  2. 将包含新版本的包解压缩到单独的目录中,例如:new_version_dir
  3. 查看变更日志以了解重大更改,并在需要时调整配置。
  4. 创建一个新的测试 SQL 数据库或模式(如果您使用的是 PostgresSQL 数据库),并在配置文件中使用它。请参阅 MySQL 的 database_database 变量或 PostgresSQL 的 database_schema 变量 - 请参阅配置数据库部分。
  5. 在配置文件中将 Redis 数据库更改为当前运行的应用程序中未使用的数据库 - 请参阅 redis_db 变量。
  6. application_http_port 更改为当前运行的应用程序中未使用的某个端口。
  7. 转到 new_version_dir 并运行安装 - 请参阅安装.
  8. 转到 new_version_dir/app 并启动测试应用程序
    CS_CONFIG_PATH=[path/to/your/config] pm2 start src/index.js --name test_cs
    
  9. 运行测试 - 请参阅在没有 Docker 的情况下运行测试.
  10. 如果应用程序的新版本正常工作,请将其关闭
pm2 delete test_cs
  1. database_database/database_schemaredis_db 更改为应用程序中以前使用的值。
  2. application_http_port 更改为应用程序中以前使用的端口。
  3. 转到 new_version_dir/app/
  4. 停止应用程序的当前版本并运行新版本
pm2 delete all && pm2 kill && CS_CONFIG_PATH=[path/to/your/config] pm2 start
  1. 验证一切是否正常工作。
  2. 如果确认,您可以删除旧版本。如果不确认,请停止新版本并重新运行旧版本。