
# 在本地通用服务器中部署流程引擎流程SDK
当您希望将流程引擎以微服务的形式部署到本地通用服务器，可以更好地控制和管理自己的应用数据、减少数据传输的延迟时，可以选择此实施方式进行流程引擎流程SDK独立部署。后续，您还可以基于流程引擎灵活扩展，为上层应用提供使用HTTP协议进行通信的API调用能力。
#### 准备事项
- 请在部署流程引擎流程SDK之前，提前获取SDK包和License文件。 如何获取SDK请参见[获取数据建模引擎SDK](https://support.huaweicloud.com/sdkreference-idme/idme_sdkreference_0009.html)。
  
- 已在本地通用服务器中部署Node.js。 如果本地通用服务器未部署Node.js，请参见[如何在本地通用服务器中部署流程运行服务依赖的Node.js环境？](https://support.huaweicloud.com/sdkreference-idme/idme_sdkreference_0040.html)进行部署。
  
 
#### 操作步骤
如下操作以CentOS 7.6 64位操作系统的ECS为例。
1. [登录Linux弹性云服务器](https://support.huaweicloud.com/usermanual-ecs/zh-cn_topic_0013771089.html)。
2. 将已获取的SDK包和License文件上传至弹性云服务器，具体操作请参见[上传文件到云服务器方式概览](https://support.huaweicloud.com/ecs_faq/ecs_faq_0049.html)。
3. 执行如下命令，将SDK包解压缩到部署服务器的工作目录。 
   ```
   tar -xvf {SDK包的名称} -C {部署服务器的工作目录}
   ```
   例如，将SDK包"workflow-sdk-1.24.100-SNAPSHOT"解压缩到"/root/deploytest"路径下。
   ```
   tar -xvf workflow-sdk-1.24.100-SNAPSHOT -C /root/deploytest
   ```
   解压缩后的SDK包会在"/root/deploytest"路径下生成如下结构的目录文件。
   ```
   |--- {iDME SDK版本号}-SNAPSHOT：包含流程编排服务和流程运行服务的依赖项。
         |--- design：流程编排服务。
               |--- lib：包含流程编排服务的所有依赖项。
         |--- runtime：流程运行服务。
               |--- lib：包含流程编排服务的所有依赖项。
   ```
   
   
4. 执行如下命令，进入流程编排服务的工作目录，例如"/root/deploytest/1.24.100/design"。 
   ```
   cd /root/deploytest/1.24.100/design
   ```
   
   
5. 执行如下命令，打开"application.properties"文件。 
   ```
   vim application.properties
   ```
   
   
6. 按**i** 切换至编辑模式，并根据实际的[流程引擎流程SDK资源规划](https://support.huaweicloud.com/sdkreference-idme/idme_sdkreference_0008.html#ZH-CN_TOPIC_0000002101358320__section14635191220121)，按需添加对应资源配置信息，完成流程编排服务的配置。
   
   ```
   # 流程编排服务配置
   basic.runtime.application.id=123456
   basic.runtime.domain.id=123abc
   basic.runtime.protocol=http
   basic.server.domain=localhost.huawei.com
   server.servlet.context-path=/workflowDesign
   server.port=60001
   store.s3.bucketname=basic-dabao-test
   store.s3.endpoint=obs.cn-north-4.myhuaweicloud.com
   config.obs.endpoint=https://obs.cn-north-4.myhuaweicloud.com
   store.s3.ak=123ABC
   store.s3.sk=456DEF
   basic.workspace.workflow-runtime.url=http://localhost.huawei.com:60004/workflowRuntime
   basic.runtime.domain=localhost.huawei.com:60004
   workflow.prefix=/workflowRuntime
   security.group.privatekey=abc123
   security.group.publickey=def456
   xdm.license.licenseFile=/root/deploytest/license.dat
   basic.runtime.application.admin-list=123,456
   # 数据库配置
   application.dbType=pgsql
   datasource.jdbcDriverClass.1=org.postgresql.Driver
   datasource.user.1=root
   datasource.password.1=123456
   datasource.url.1=jdbc:postgresql://120.0.0.7:5432/test?targetServerType=master&currentSchema=definition_test&stringtype=unspecified
   rdm.hibernate.dialect=com.huawei.it.rdm.configuration.PostgreSQL10XdmDialect
   rdm.dbType=postgresql
   # Redis配置
   redis.redisClusterConfiguration.clusters=7.0.0.1:6379,7.0.0.2:6379
   spring.redis.type=CLUSTER
   spring.redis.password=123456
   # 单点登录配置
   basic.auth.orgId.enable=TRUE
   basic.auth.orgId.redirect-url=http://localhost.huawei.com:${server.port}${server.servlet.context-path}/index.html
   ssf.login.oauth2.client-id=111aaa
   ssf.login.oauth2.client-secret=222bbb
   basic.runtime.org.code=333
   # 其他配置
   xdmf.init=TRUE
   ```
   其中，"xdm.license.licenseFile"的License文件路径需与[2]的存放路径保持一致。
   
   
7. 按**Esc** ，输入**:wq**，保存文件并返回。
8. 执行如下命令，进入流程运行服务的工作目录，例如"/root/deploytest/1.24.100/runtime"。 
   ```
   cd /root/deploytest/1.24.100/runtime
   ```
   
   
9. 执行如下命令，打开"application.properties"文件。 
   ```
   vim application.properties
   ```
   
   
10. 按**i** 切换至编辑模式，并根据实际的[流程引擎流程SDK资源规划](https://support.huaweicloud.com/sdkreference-idme/idme_sdkreference_0008.html#ZH-CN_TOPIC_0000002101358320__section14635191220121)，按需添加对应资源配置信息，完成流程运行服务的配置。
    
    ```
    # 流程运行服务配置
    server.servlet.context-path=/workflowRuntime
    basic.server.domain=localhost.huawei.com
    server.port=60004
    security.group.privatekey=abc
    security.group.publickey=efg
    xdm.license.licenseFile=/root/deploytest/license.dat
    basic.xdm.module.sync.service-url=http://localhost:8003/rdm_123_app/services
    basic.runtime.application.admin-list=123,456
    basic.workspace.definition.url=http://localhost.huawei.com:60001/definitionmicro
    # OBS配置
    store.s3.bucketname=testObs
    store.s3.endpoint=obs.cn-north-4.myhuaweicloud.com
    config.obs.endpoint=https://obs.cn-north-4.myhuaweicloud.com
    store.s3.ak=testak
    store.s3.sk=testsk
    # 数据库配置
    application.dbType=pgsql
    datasource.jdbcDriverClass.1=org.postgresql.Driver
    datasource.user.1=admin
    datasource.password.1=admin
    datasource.url.1=jdbc:postgresql://127.0.0.1:8888/testdb?targetServerType=master&currentSchema=testschema&stringtype=unspecified
    rdm.hibernate.dialect=com.huawei.it.rdm.configuration.PostgreSQL10XdmDialect
    rdm.dbType=postgresql
    # redis配置
    redis.redisClusterConfiguration.clusters=1.111.11.111:6379,2.222.22.222:6379
    spring.redis.type=CLUSTER
    spring.redis.password=admin
    # 单点登录配置
    basic.auth.orgId.enable=TRUE
    basic.auth.orgId.redirect-url=http://localhost.huawei.com:${server.port}${server.servlet.context-path}/index.html
    ssf.login.oauth2.client-id=abc123
    ssf.login.oauth2.client-secret=abc123
    basic.runtime.application.id=abc123
    basic.runtime.domain.id=123
    basic.runtime.org.code=333
    # 其他配置
    xdmf.init=TRUE
    ```
    其中，"xdm.license.licenseFile"的License文件路径需与[2]的存放路径保持一致。
    
    
11. 按**Esc** ，输入**:wq**，保存文件并返回。
12. 执行如下命令，将node相关依赖复制到指定目录"/opt"。 
    ```
    cp -r ./lib/node_modules /opt
    cd /opt/node_modules/.bin
    # 解压后符号链接丢失 需重新设置
    ln -sf ../acorn/bin/acorn acorn
    ln -sf ../browserslist/cli.js browserslist
    ln -sf ../cssesc/bin/cssesc cssesc
    ln -sf ../errno/cli.js errno
    ln -sf ../esbuild/bin/esbuild esbuild
    ln -sf ../eslint/bin/eslint.js eslint
    ln -sf ../eslint-config-prettier/bin/cli.js eslint-config-prettier
    ln -sf ../he/bin/he he
    ln -sf ../image-size/bin/image-size.js image-size
    ln -sf ../jsesc/bin/jsesc jsesc
    ln -sf ../json5/lib/cli.js json5
    ln -sf ../js-yaml/bin/js-yaml.js js-yaml
    ln -sf ../less/bin/lessc lessc
    ln -sf ../mime/cli.js mime
    ln -sf ../nanoid/bin/nanoid.cjs nanoid
    ln -sf ../needle/bin/needle needle
    ln -sf ../which/bin/node-which node-which
    ln -sf ../npm-run-all/bin/npm-run-all/index.js npm-run-all
    ln -sf ../@babel/parser/bin/babel-parser.js parser
    ln -sf ../pidtree/bin/pidtree.js pidtree
    ln -sf ../prettier/bin-prettier.js prettier
    ln -sf ../resolve/bin/resolve resolve
    ln -sf ../rimraf/bin.js rimraf
    ln -sf ../rollup/dist/bin/rollup rollup
    ln -sf ../npm-run-all/bin/run-p/index.js run-p
    ln -sf ../npm-run-all/bin/run-s/index.js run-s
    ln -sf ../semver/bin/semver.js semver
    ln -sf ../typescript/bin/tsc tsc
    ln -sf ../typescript/bin/tsserver tsserver
    ln -sf ../update-browserslist-db/cli.js update-browserslist-db
    ln -sf ../vite/bin/vite.js vite
    ln -sf ../vue-tsc/bin/vue-tsc.js vue-tsc
    chmod -R 700 /opt/node_modules
    ```
    
    
13. 执行如下命令，创建"vueproject"文件夹。 
    ```
    mkdir -p /opt/cloud/data/nodejs/user_project
    chmod -R 700 /opt/cloud/data/nodejs/user_project
    ```
    
    
14. 分别进入流程编排服务和流程运行服务的工作目录，依次执行如下命令，复制OLC配置文件。 
    如果您在设置流程编排服务和流程运行服务的"application.properties"文件时，未开启OLC限流降级，可跳过此步骤。
    1. 执行如下命令，创建临时文件夹"temp_unzip"，并解压缩OLC文件至该临时文件夹。
       ```
       mkdir temp_unzip
       tar -xf ./lib/MetaWorkflowRuntimeService-1.4.0-SNAPSHOT-small.jar -C temp_unzip
       ```
       
    
    2. 执行如下命令，创建文件夹"olc"，并将"temp_unzip/olc/"目录下的所有文件复制到"olc"目录中。
       ```
       mkdir olc
       cp -r temp_unzip/olc/* olc/
       ```
       
    
    3. 执行如下命令，删除临时文件夹。
       ```
       rm -rf temp_unzip
       ```
       
    
    
    
    
15. 分别进入流程编排服务和流程运行服务的工作目录，执行如下命令，创建并启动脚本。 
    - 在流程编排服务的工作目录下，依次完成如下操作。
      1. 执行如下命令，创建启动流程编排服务的脚本文件。
         ```
         vim startDesign.bash
         ```
         
      
      2. 按**i** 切换至编辑模式，输入以下内容，设置启动流程编排服务脚本。
         ```
         # 指定启动类
         START_CLASS=com.huawei.it.plm.definitiondemo.WfDefinitionDemoApplication
         # 指定启动类所在路径，为lib目录下
         LOAD_CLASSPATH=./lib/*:./
         # 执行java命令，以配置文件application.properties启动服务，并把日志输入到当前目录下的xdm.log中
         java -Xms8g -Xmx8g  -cp $LOAD_CLASSPATH $START_CLASS >service.log 2>&1 &
         ```
         
      
      3. 按**Esc** ，输入**:wq**，保存文件并返回。
      
      4. 执行如下命令，设置"startDesign.bash"脚本文件权限。
         ```
         chmod +x startDesign.bash
         ```
         
      
      5. 执行如下命令，启动流程编排服务。
         ```
         ./startDesign.bash
         ```
         
       
    
    - 在流程运行服务的工作目录，依次完成如下操作。
      1. 执行如下命令，创建启动流程运行服务的脚本文件。
         ```
         vim startRuntime.bash
         ```
         
      
      2. 按**i** 切换至编辑模式，输入以下内容，设置启动流程运行服务脚本。
         ```
         # 指定启动类
         START_CLASS=com.huawei.it.workflowdemo.WorkflowRuntimeApplication
         # 指定启动类所在路径，为lib目录下
         LOAD_CLASSPATH="./lib/*:./"
         # 执行java命令，以配置文件application.properties启动服务，并把日志输入到当前目录下的xdm.log中
         java -Xms8g -Xmx8g -cp $LOAD_CLASSPATH $START_CLASS >service.log 2>&1 &
         ```
         
      
      3. 按**Esc** ，输入**:wq**，保存文件并返回。
      
      4. 执行如下命令，设置"startRuntime.bash"脚本文件权限。
         ```
         chmod +x startRuntime.bash
         ```
         
      
      5. 执行如下命令，启动流程运行服务。
         ```
         .startRuntime.bash
         ```
         
       
    
    
    
    
16. 完成部署后，流程引擎支持如下几种验证方式。您可以根据实际情况选择验证。 
    - **方式一：查看服务日志**
      执行如下命令，查看服务日志。
      ```
      tail -f service.log
      ```
      显示结果为类似如下信息，则说明启动成功。
      - 流程编排服务
        ```
        INFO  WfDefinitionDemoApplication:61 - Started WfDefinitionDemoApplication in xxx seconds
        ```
        
      
      - 流程运行服务
        ```
        INFO  WorkflowRuntimeApplication:61 - Started WorkflowRuntimeApplication in xxx seconds
        ```
        
       
    
    - **方式二：调用指定接口**
      启动"startDesign.bash"和"startRuntime.bash"脚本文件后，约等待2分钟，调用如下健康检查接口，查询服务是否正常启动。
      ```
      http://{部署服务器的IP地址}:{部署服务器的端口号}${流程编排服务文根/流程运行服务文根}/health/check
      ```
      如果返回如下信息，则说明启动成功。
      ```
      true
      ```
      
    
    - **方式三：访问可视化页面**
      如果您已在[流程引擎流程SDK资源规划](https://support.huaweicloud.com/sdkreference-idme/idme_sdkreference_0008.html#ZH-CN_TOPIC_0000002101358320__section14635191220121)中规划了单点登录的相关资源/云服务，并在部署时配置了单点登录信息，可以选择此方式进行验证。
      在浏览器中访问如下地址，查看服务是否启动成功。
      - 流程编排服务
        ```
        http://{承载流程编排服务的服务器域名或IP地址}:{流程编排服务的端口号}/{流程编排服务文根}/index.html#/processApplicationForm?tenantId=-1&applicationId={应用ID}
        ```
        
      
      - 流程运行服务
        ```
        http://{承载流程运行服务的服务器域名或IP地址}:{流程运行服务的端口号}/{流程运行服务文根}/wfAdminIndex.html#/process-tasks?tenantId=-1&applicationId={应用ID}
        ```
        
      
      
      转入流程引擎登录页面，输入登录账号和登录密码，成功登录并进入流程引擎页面，即表示启动成功。
      
    
    
    
    
 
