# 泛微平台系统部署 > 本文主要描述了泛微平台环境部署的几种方案,包括 `window / linux` 环境下的 `e-cology`,`e-mobile`部署,集群部署,docker 微服务部署等。 ## 1. 单机部署 > 通常情况下,如果客户的服务器系统是 `window server`,那么在部署 `e-cology`时,数据库一般选用 `sql server`(版本建议在2014以上) ### 1.1 SQL Server 部署 SQL Server 的安装包可以在 https://msdn.itellyou.cn/ 中获取,在安装包的选择上需要注意的是: ` sql_server_xx_express_with_tools` = ` sql_server_xx_express` + ` sql_server_xx_management_studio` - `sql_server_xx_express`:表示企业版数据库 - `sql_server_xx_management_studio`:数据库管理工具软件。 这里我们选择的是 ` cn_sql_server_2014_express_with_tools_x64 `,因为该安装包中包含数据库管理工具。 ![image-20200130143748999](asset/image-20200130143748999.png) 安装 `SQL Server 2014` - 提取安装包,开始安装。**注意以下窗口在安装过程中不允许关闭掉,否则会安装失败!** ![image-20200130144717795](asset/image-20200130144717795.png) - 一直下一步,直到以下步骤时进行`sa` 账号密码设置 ![image-20200130150253400](asset/image-20200130150253400.png) - 选择下一步,等待安装完毕即可 ![image-20200130151159103](asset/image-20200130151159103.png) ### 1.2 Oracle 部署 > 如果客户服务器系统是 linux,那么一般采用 `Oracle` 或 `MySql` 作为数据库,这边要向客户表述 `Oracle` 与 `MySQL`的区别,其主要区别是 `Oracle` 属于商业产品,盗版可能会被告,但是其性能卓越,抗压性较强。`MySQL` 属于开源产品,抗压性较弱。 > > 一般企业用户所使用的 `linux` 发行版本都是 `CentOS` 或者 `Red Hat`,接下来会以 `CentOS` 系统为例进行 Oracle 部署的介绍 #### 1.2.0 快速安装 如果选择脚本安装的方式,则只要看 `1.2.0` 即可,其他的为具体步骤。 脚本地址: - `install.sh`: https://github.com/Y-Aron/cloud-note/blob/master/weaver/shell/oracle/install.sh - `dbca.rsp`: https://github.com/Y-Aron/cloud-note/blob/master/weaver/shell/oracle/dbca.rsp - `new_sid.sh`: https://github.com/Y-Aron/cloud-note/blob/master/weaver/shell/oracle/new_sid.sh `shell` 脚本安装步骤如下: - 上传 `install.sh`,`dbca.rsp`,`new_sid.sh` 到与`oracle`安装包同级目录下 - 切换至 root 用户,执行 `install.sh` 脚本 ```bash su root ./install.sh ``` - `dbca.rsp`:静默安装 `oracle sid` 的相关配置文件,可根据实际情况自行配置 - 当出现 `Successfully Set Software` 提醒时,执行 `new_sid.sh` ```bash ./new_sid.sh ``` #### 1.2.1 安装前准备 - 使用 `Xshell` 软件连接服务器:软件安装自行百度 - 配置镜像源:复制并执行以下命令 ```shell cd /etc/yum.repos.d/ # 下载并安装阿里云镜像 yum install wget sudo wget http://mirrors.aliyun.com/repo/Centos-7.repo sudo mkdir repo_bak mv /etc/yum.repos.d/repo_bak/Centos-7.repo /etc/yum.repos.d/ # 清除并重新生成yum缓存 yum clean all yum makecache ``` - 下载 `Oracle11gR2`:https://pan.baidu.com/s/1gA33_cOlyzq6Bu3C4R8Vfw #### 1.2.2 安装 Oracle - 安装所需的软件包 ```shell yum -y install binutils compat-libstdc++-33 compat-libstdc++-33.i686 elfutils-libelf elfutils-libelf-devel gcc gcc-c++ glibc glibc.i686 glibc-common glibc-devel glibc-devel.i686 glibc-headers ksh libaio libaio.i686 libaio-devel libaio-devel.i686 libgcc libgcc.i686 libstdc++ libstdc++.i686 libstdc++-devel make sysstat unixODBC unixODBC ``` - 创建用户组和用户 ```shell # 创建 oinstall 用户组 groupadd oinstall # 创建 dba 用户组 groupadd dba # 创建 oracle 用户 useradd -g oinstall -G dba oracle # 设置密码 passwd oracle ``` - 修改`kernel` 内核参数 ``` shell vi /etc/sysctl.conf # --------------------------------------- # 配置文件内加入 修改以下参数。如果没有可以自己添加,如果默认值比参考值大,则不需要修改。 # 这个内核参数用于设置系统范围内共享内存段的最大数量。该参数的默认值是 4096 。通常不需要更改。 kernel.shmmni = 4096 # 该参数定义了共享内存段的最大尺寸(以字节为单位)。缺省为32M,对于oracle来说,该缺省值太低了,# 通常将其设置为2G。 kernel.shmmax = 2147483648 # 该参数表示系统一次可以使用的共享内存总量(以页为单位)。缺省值就是2097152,通常不需要修改。 kernel.shmall = 2097152 kernel.sem = 250 32000 100 128 fs.aio-max-nr = 1048576 # 设置最大打开文件数 fs.file-max = 65536 # 可使用的IPv4端口范围 net.ipv4.ip_local_port_range = 9000 65500 net.core.rmem_default = 262144 net.core.rmem_max = 4194304 net.core.wmem_default = 262144 net.core.wmem_max = 1048586 # --------------------------------------- # 保存退出后设置立刻生效 sysctl -p ``` - 修改系统资源限制 ```shell vi /etc/security/limits.conf # 配置文件下方加入 oracle soft nproc 2047 oracle hard nproc 16384 oracle soft nofile 1024 oracle hard nofile 65536 oracle soft stack 10240 # 修改用户验证选项 关联设置 vi /etc/pam.d/login # 在最后一条规则之前加入以下session配置 session required /lib64/security/pam_limits.so session required pam_limits.so ``` - 创建安装目录和设置目录权限 ```shell # oracle: 安装目录 mkdir -p /usr/local/oracle/product/11.2.0/db_1 # oradata: 数据存储目录 mkdir /usr/local/oracle/oradata # flash_recovery_area: 恢复目录 mkdir /usr/local/oracle/flash_recovery_area # oraInventory: 清单目录 mkdir /usr/local/oraInventory chown -R oracle:oinstall /usr/local/oracle chown -R oracle:oinstall /usr/local/oraInventory chmod -R 775 /usr/local/oracle chmod -R 775 /usr/local/oraInventory ``` - 上传文件到 `/home` 目录下,并解压 ```shell yum install unzip unzip linux.x64_11gR2_database_1of2.zip unzip linux.x64_11gR2_database_2of2.zip ``` - 准备oracle安装应答模板文件 `db_install.rsp` ```shell cp /home/database/response/* /usr/local/oracle/ # 编辑应答文件的相关配置 vi /usr/local/oracle/db_install.rsp # ------------------------------------- # 安装类型,只装数据库软件 oracle.install.option=INSTALL_DB_SWONLY # 安装组 UNIX_GROUP_NAME=oinstall # INVENTORY目录(**不填就是默认值,本例此处需修改,因个人创建安装目录而定) INVENTORY_LOCATION=/usr/local/oraInventory # 选择语言  SELECTED_LANGUAGES=en,zh_CN # oracle_home: 路径根据目录情况注意修改 本例安装路径/usr/local/oracle ORACLE_HOME=/usr/local/oracle/product/11.2.0/db_1 # oracle_base: 注意修改 ORACLE_BASE=/usr/local/oracle # oracle版本 oracle.install.db.InstallEdition=EE # 自定义安装,否,使用默认组件 oracle.install.db.isCustomInstall=false # dba用户组 oracle.install.db.DBA_GROUP=dba # oper用户组 oracle.install.db.OPER_GROUP=dba # 注意此参数 设定一定要为true DECLINE_SECURITY_UPDATES=true # ------------------------------------- ``` - 切换用户并开始静默安装 ```shell # 切换到oracle / 进入解压目录 su oracle cd /home/database/ # 防止报错 unset DISPLAY ./runInstaller -silent -ignorePrereq -responseFile /usr/local/oracle/db_install.rsp # /home/database是安装包解压后的路径,此处根据安装包解压所在位置做修改,因人而异。   # runInstaller 是主要安装脚本   # -silent 静默模式   # -force 强制安装   # -ignorePrereq忽略warning直接安装   #-responseFile读取安装应答文件 ``` - 出现以下提醒则表示安装成功 ![image-20200202005200486](asset/image-20200202005200486.png) - 安装成功后还需要执行以下命令 ```shell su root 密码: cd /usr/local/oraInventory/ ./orainstRoot.sh cd /usr/local/oracle/product/11.2.0/db_1/ ./root.sh ``` - 设置Oracle用户环境变量 ```shell # 切换至oracle账号 su oracle # 编辑用户环境变量 echo 'export ORACLE_BASE=/usr/local/oracle export ORACLE_HOME=$ORACLE_BASE/product/11.2.0/db_1 export LANG="zh_CN.UTF-8" export NLS_LANG="SIMPLIFIED CHINESE_CHINA.AL32UTF8" export NLS_DATE_FORMAT="yyyy-mm-dd hh24:mi:ss" export PATH=$PATH:$ORACLE_HOME/bin ' >> ~/.bashrc # 立即生效 source ~/.bashrc ``` - 配置监听以及监听的相关命令 ```shell # 静默方式配置监听 netca /silent/responseFile /usr/local/oracle/netca.rsp # 启动监听 lsnrctl start # 暂停监听 lsnrctl stop # 查看监听 lsnrctl status # 检查是否监听正常启动 netstat -tnulp | grep 1521 (No info could be read for "-p": geteuid()=1001 but you should be root.) tcp6 0 0 :::1521 :::* LISTEN ``` #### 1.2.3 静默方式建立新库 - 新建 `dbca.rsp` ```shell su oracle vi /home/oracle/dbca.rsp # -------------------------------------------------- [GENERAL] RESPONSEFILE_VERSION = "11.2.0" # 必须指定为创建数据库 OPERATION_TYPE = "createDatabase" [CREATEDATABASE] # 数据库的Global database name GDBNAME = "orcl" # 数据库的实例名 SID = "orcl" TEMPLATENAME = "General_Purpose.dbc" STORAGETYPE=FS # 指定数据文件存储的目录 DATAFILEDESTINATION =/usr/local/oracle/oradata # 指定数据文件恢复的目录 RECOVERYAREADESTINATION=/usr/local/oracle/flash_recovery_area # 指定字符集 CHARACTERSET = "AL32UTF8" # 指定国家字符集 NATIONALCHARACTERSET= "AL16UTF16" LISTENERS=LISTENER TOTALMEMORY = "700" # 指定sys用户密码[必填] SYSPASSWORD = "123456" # 指定system用户密码[必填] SYSTEMPASSWORD = "123456" # 指定使用自动内存管理 AUTOMATICMEMORYMANAGEMENT = "TRUE" # -------------------------------------------------- ``` - 以静默方式开始创建数据库 ```shell dbca -silent -responseFile /home/oracle/dbca.rsp ``` - 修改 Oracle 用户的环境变量 ```shell vi ~/.bashrc # -------------------------------------------------- # 与上述安装的数据库SID一致 export ORACLE_SID=orcl export ORACLE_OWNER=$ORACLE_SID # -------------------------------------------------- # 立即生效 source ~/.bashrc # 修改监听文件 vi /usr/local/oracle/product/11.2.0/db_1/network/admin/listener.ora # -------------------------------------------------- # 添加SID相关配置,注意 SID_NAME区分大小写! SID_LIST_LISTENER = (SID_LIST = (SID_DESC = (ORACLE_HOME =/usr/local/oracle/product/11.2.0/db_1) (SID_NAME = orcl) ) ) LISTENER = (DESCRIPTION_LIST = (DESCRIPTION = (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521)) (ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521)) ) ) ADR_BASE_LISTENER = /usr/local/oracle # -------------------------------------------------- # 重启监听 lsnrctl stop lsnrctl start ``` - 出现以下信息则表明服务启动成功 ![image-20200202131123106](asset/image-20200202131123106.png) #### 1.2.4 开启远程连接 ```shell # 关闭centos7防火墙 systemctl stop firewalld.service # 关闭开机启动 systemctl disable firewalld.service # 安装iptables防火墙 yum install iptables-services # 新增1521接口 iptables -A INPUT -p tcp --dport 1521 -j ACCEPT service iptables save # 设置开机启动 systemctl enable iptables # 重启iptabls服务 systemctl restart iptables.service ``` #### 1.2.5 开机自动启动 ```shell vi /usr/local/oracle/product/11.2.0/db_1/bin/dbstart # ------------------------------- # 修改ORACLE_HOME_LISTNER参数 ORACLE_HOME_LISTNER=$ORACLE_HOME # ------------------------------- vi /usr/local/oracle/product/11.2.0/db_1/bin/dbshut # ------------------------------- # 修改ORACLE_HOME_LISTNER参数 ORACLE_HOME_LISTNER=$ORACLE_HOME # ------------------------------- vi /etc/oratab # ------------------------------- # 修改为 :Y orcl:/usr/local/oracle/product/11.2.0/db_1:Y # ------------------------------- ``` 切换到 root 用户,执行 `vi /etc/init.d/oracle` ```shell #!/bin/sh # chkconfig: 345 61 61 # description: Oracle 11g R2 AutoRun Servimces # /etc/init.d/oracle # Run-level Startup script for the Oracle Instance, Listener, and # Web Interface export ORACLE_BASE=/usr/local/oracle export ORACLE_HOME=$ORACLE_BASE/product/11.2.0/db_1 export ORACLE_SID=orcl export ORACLE_UNQNAME=$ORACLE_SID export PATH=$ORACLE_HOME/bin:/user/sbin:$PATH export LD_LIBRARY_PATH=$ORACLE_HOME/lib:$LD_LIBRARY_PATH ORA_OWNR="oracle" # if the executables do not exist -- display error if [ ! -f $ORACLE_HOME/bin/dbstart -o ! -d $ORACLE_HOME ] then echo "Oracle startup: cannot start" exit 1 fi # depending on parameter -- startup, shutdown, restart # of the instance and listener or usage display case "$1" in start) # Oracle listener and instance startup su $ORA_OWNR -lc $ORACLE_HOME/bin/dbstart echo "Oracle Start Succesful!OK." ;; stop) # Oracle listener and instance shutdown su $ORA_OWNR -lc $ORACLE_HOME/bin/dbshut echo "Oracle Stop Succesful!OK." ;; reload|restart) $0 stop $0 start ;; *) echo $"Usage: `basename $0` {start|stop|reload|reload}" exit 1 esac exit 0 ``` 保存退出后执行以下命令 ```shell cd /etc/init.d chmod +x oracle chkconfig --add oracle chkconfig oracle on ``` #### 1.2.6 创建表空间与用户 - 进入`sqlplus` ```shell sqlplus / as sysdba ``` - 创建表空间 ```sql create tablespace e9 logging datafile'/usr/local/oracle/oradata/orcl/e9.dbf' size 1024m autoextend on next 100m maxsize 10240m extent management local; ``` - 创建用户 ```sql create user weaver identified by 123456 default tablespace e9; ``` - 5.4 给用户赋权限 ```sql grant dba to weaver; ``` #### 1.2.7 常见问题 - `ORA-01034: ORACLE not available ORA-27101` ```bash # Step1: 启动oracle监听 lsnrctl start # Step2: 设置实例名,实例名一般是"orcl" set ORACLE_SID=orcl # Step3: 启动oracle服务 # 进入 sql 控制台,执行 startup命令,如果被告知已经启动,可以先输入shutdown immediate, 然后在输入startup sqlplus / as sysdba startup; ``` ### 1.3 下载与安装 E9 > 安装包下载文档:https://www.e-cology.com.cn/spa/document/index.jsp?id=3861088&newsDataType=fullSearch&router=1#/main/document/detail?_key=niim1h > > 将 `ecology`,`jdk`, `resin` 下载并放置在同一目录下 #### 1.3.1 E9 程序包介绍 - `Ecology`:`E9` 的主程序包 - `Jdk`:`Java` 运行程序 - `Resin`:`Resin` 中间件 #### 1.3.2 Resin 基本配置 `resin/conf/resin.xml` ```xml ``` `resin/conf/resin.properties` ```properties # 修改服务端口 app.http : 80 app.https : 8443 ``` #### 1.3.3 Resin-Win 配置 在 `window` 环境下,`resin/resinstart.bat` 为启动文件,可右键编辑内容,其中 `java_home` 为 `jdk` 路径,这里使用相对路径即可,当然也可以使用绝对路径 。单击 `resinstart.bat` 启动服务 ```bash set java_home=../jdk resin.exe ``` #### 1.3.4 Resin-Linux 配置 - 编译安装 `resin` ```bash # prefix: resin路径 # with-java-home: jdk路径 cd /usr/local/weaver/resin chmod +x ./configure ./configure --prefix=/usr/local/weaver/resin --with-java-home=/usr/local/weaver/jdk --enable-64bit make make install ``` - 修改相关配置文件 ```bash # 修改 resin/bin/resin.sh 中的jdk路径 sed -i "s/jdk1.8.0_151/jdk/g" /usr/local/weaver/resin/bin/resin.sh sed -i "s/weaver/local\\/weaver/g" /usr/local/weaver/resin/bin/resin.sh # 修改 resin.sh 路径 sed -i "s/weaver/local\\/weaver/g" /usr/local/weaver/resin/bin/startresin.sh sed -i "s/weaver/local\\/weaver/g" /usr/local/weaver/resin/bin/stopresin.sh # 修改 resin/conf/resin.xml 中的jdk和ecology路径 # jdk 必须是绝对路径,ecology可以是绝对路径也可以是相对 路径 sed -i "s/#INSTALLDIR#JDK\\\bin\\\javac/\\/usr\\/local\\/weaver\\/jdk\\/bin\\/javac/g" /usr/local/weaver/resin/conf/resin.xml sed -i "s/#INSTALLDIR#ecology/..\\/ecology/g" /usr/local/weaver/resin/conf/resin.xml ``` - 启动 `resin`,打开浏览器输入 `http://127.0.0.1` 即可使用 `e9` ### 1.4 Redis 部署以及配置 > E9 默认使用 `ehcache2.x` 进行数据缓存,支持使用 `redis` 进行数据缓存。 > > Redis 是完全开源免费的,遵守BSD协议,是一个高性能的key-value数据库。 #### 1.4.1 window 安装 Redis window安装 redis 比较简单,下载安装包即可,地址: https://github.com/microsoftarchive/redis/releases 下载安装包 `Redis-x64-3.2.100.msi`,点击下一步即可~ ![image-20200201225802580](asset/image-20200201225802580.png) #### 1.4.2 Linux 安装 Redis - 安装编译环境 ```bash # ubuntu sudo apt-get install make gcc # centos yum install make gcc ``` - 安装 redis ```bash cd ~ # 下载 redis 源码 wget http://download.redis.io/releases/redis-5.0.6.tar.gz # 解压 tar xzf redis-5.0.6.tar.gz # 切换到解压目录 cd redis-5.0.6 # 切换到 root 权限 su root # 编译安装 make PREFIX=/usr/local/redis install ``` - 配置和启动 > redis.conf 是 redis 的配置文件,redis.conf 在 redis 源码目录下 > > 拷贝配置文件到安装目录下 ```bash # 进入源码目录 cd ~/redis-5.0.6 # 拷贝配置文件至安装目录 cp ~/redis-5.0.6/redis.conf /usr/local/redis/redis.conf ``` - 前台启动 ```bash # 进入安装目录 cd /usr/local/redis/bin ./redis-server ``` - 后端模式启动 修改 redis.conf 配置文件,daemonize 参数设置为 yes,表示以后端模式启动 ![image-20191114111003527](asset/image-20191114111003527.png) 修改完毕后保存退出,重新启动 redis ```bash # 进入安装目录 cd /usr/local/redis # 已后端模式启动 redis ./bin/redis-server ./redis.conf ``` #### 1.4.3 E9 使用 Redis ` ecology/WEB-INF/prop/weaver_new_session.properties `,开启redis并修改相关配置,注意redis的密码一定要有,否则会报错! ```properties # 1表示启用新的session方式,其他值表示不启用 status=1 # 用于调试的USERID debugUsers= # session id生成模式,1表示自定义生成模式(UUID模式),其他值表示中间件自定义生成模式 useCustomSessionId=1 # 同步频率设置(单位,秒) # 主表同步频率 SessionTableSync=2 # 明细表同步频率 SessionItemTableSync=5 # 超时扫描频率 SessionOverTime=300 # 垃圾数据清理扫描频率 SessionLeak=3600 #启动模式,默认是数据库模式 # className=weaver.session.util.DBUtil className=weaver.session.util.RedisSessionUtil # redis ip redisIp=127.0.0.1 # redis port redisPort=6379 # redis password, 注意密码必须设置,否则会报错! redisPassword=123456 enableImmediatelySync=true etoken= ``` 使用 redis 可视化工具可以看到如下结果,则表明启动了redis ![image-20200201224037086](asset/image-20200201224037086.png) ## 2. 集群部署 > `e9` 集群部署与 `e8` 基本一致,只增加了一个`redis` 配置。 > > 集群方案有很多,比如:`ec+nginx+weblogic` ,`ec+nginx+resin`,`ec+F5+resin`,本文只介绍 `ec+nginx+resin` #### 2.0 集群准备 集群部署需要准备: - 一台文件服务器(`NFS`)服务器地址:`192.168.44.143` - 一台主服务器(`Ecology+MySQL+Nginx`)服务器地址:`192.168.44.139` - 一台从服务器(`Ecology`)服务器地址:`192.168.44.144` #### 2.1 文件服务器配置 ##### 2.1.1 NFS 服务器部署 - 安装`nfs` ```bash yum install -y nfs-utils # 设置开启启动 sudo systemctl enable rpcbind sudo systemctl enable nfs ``` - 配置对外共享文件:`/etc/exports` ```bash vi /etc/exports # 在 /etc/exports 中添加以下内容 # 意思是将本地文件夹 /data 共享给192.168.44.139和144服务器 # 也可以用*号代替,比如: /data *(rw,sync,no_root_squash) # 意思是将本地文件夹 /data 共享到所有和这个文件服务器相通的机器 /data 192.168.44.139(rw,sync,no_root_squash) /data 192.168.44.144(rw,sync,no_root_squash) ``` - 重启`nfs`服务 ```bash exportfs -rv systemctl restart nfs # 针对 rhel5 systemctl resatrt portmap # 针对 rhel6 systemctl restart rpcbin ``` ##### 2.1.2 文件同步配置 > 切换至主(从)服务器操作 - 在需要共享的节点挂载共享文件到对应目录 ```bash # 主服务器:192.168.44.139 yum install -y nfs-utils # 创建挂载目录 mkdir /data # 设置文件挂载 mount -t nfs 192.168.44.143:/data /data ``` - 将 ecology 以下目录拷贝到 `/data/e9` 中,一般情况下主服务器做拷贝即可。 ```bash # 备份文件,注意这里使用mv而不是cp cd /usr/local/weaver/ecology mkdir -p nfs_bak/WEB-INF # 移动以下目录至 nfs_bak 下 \mv album formmode mobilemode mobile email filesystem images images_face images_frame LoginTemplateFile messager m_img others page upgrade wui nfs_bak # 进入WEB-INF目录,移动以下文件夹至 nfs_bak/WEB-INF 下 cd WEB-INF \mv securityRule securityXML service lib/keys weaver_security_rules.xml weaver_security_config.xml hrmsettings.xml ../nfs_bak/WEB-INF # 将相关文件拷贝到 /data 目录下 # 在/data中创建 ec/WEB-INF 目录 mkdir -p /data/ec/WEB-INF \cp -rf /usr/local/weaver/ecology/nfs_bak /data/ec # 以下两个文件是不存在的,需要手动创建 mkdir -p /data/ec/LoginTemplateFile /data/ec/others ``` - 创建软链接 ```bash ln -sf /data/ec/album /usr/local/weaver/ecology ln -sf /data/ec/formmode /usr/local/weaver/ecology ln -sf /data/ec/mobilemode /usr/local/weaver/ecology ln -sf /data/ec/email /usr/local/weaver/ecology ln -sf /data/ec/filesystem /usr/local/weaver/ecology ln -sf /data/ec/images /usr/local/weaver/ecology ln -sf /data/ec/images_face /usr/local/weaver/ecology ln -sf /data/ec/images_frame /usr/local/weaver/ecology ln -sf /data/ec/LoginTemplateFile /usr/local/weaver/ecology ln -sf /data/ec/messager /usr/local/weaver/ecology ln -sf /data/ec/m_img /usr/local/weaver/ecology ln -sf /data/ec/others /usr/local/weaver/ecology ln -sf /data/ec/page /usr/local/weaver/ecology ln -sf /data/ec/upgrade /usr/local/weaver/ecology ln -sf /data/ec/wui /usr/local/weaver/ecology ln -sf /data/ec/WEB-INF/securityRule /usr/local/weaver/ecology/WEB-INF ln -sf /data/ec/WEB-INF/securityXML /usr/local/weaver/ecology/WEB-INF ln -sf /data/ec/WEB-INF/service /usr/local/weaver/ecology/WEB-INF ln -sf /data/ec/WEB-INF/lib/keys /usr/local/weaver/ecology/WEB-INF/lib/keys ln -sf /data/ec/WEB-INF/weaver_security_rules.xml /usr/local/weaver/ecology/WEB-INF/weaver_security_rules.xml ln -sf /data/ec/WEB-INF/weaver_security_config.xml /usr/local/weaver/ecology/WEB-INF/weaver_security_config.xml ln -sf /data/ec/WEB-INF/hrmsettings.xml /usr/local/weaver/ecology/WEB-INF/hrmsettings.xml ``` ##### 2.1.3 缓存同步设置 - 配置 `/etc/hosts`:清空原有127默认配置,将集群各节点 `ip`地址加入到`hosts`中 ![image-20200207081746240](asset/image-20200207081746240.png) - 修改 `ecology/WEB-INF/weaver.properties`,加入以下内容。注意,所有节点都需要配置! ```properties # 主节点ip(集群中任意一个节点,但有且只能有一个) MainControlIP = 192.168.44.139 # 本机ip:本机服务端口port ip = 192.168.44.144:80 broadcast=231.12.21.132 syncType=http # initial_hosts为参数为所有的应用服务器的节点的访问地址 # 格式:ip1:port,ip2:port (中间以逗号分隔) initial_hosts= 192.168.44.139:80,192.168.44.144:80 ``` #### 2.2 部署 Nginx - 在主服务器(192.168.44.139)下载安装 `nginx` ```bash # 下载nginx安装包 yum install -y wget wget https://nginx.org/download/nginx-1.17.8.tar.gz # 下载编译依赖包 yum install -y gcc-c++ pcre pcre-devel zlib zlib-devel openssl openssl-devel tar -zxvf nginx-1.17.8.tar.gz cd nginx-1.17.8 # 编译安装 ./configure --prefix=/usr/local/nginx make && make install # 查看安装目录 whereis nginx # nginx: /usr/local/nginx ``` - 编辑 `/usr/local/nginx/conf/nginx.conf` ```nginx worker_processes 1; events { worker_connections 1024; } http { upstream ecologycluster { ip_hash; # e-cology服务器地址1 server 192.168.44.139:80; # e-cology服务器地址2 server 192.168.44.144:80; # ... } include mime.types; default_type application/octet-stream; sendfile on; keepalive_timeout 65; server { listen 8889; server_name e9; location / { root html; index index.html index.htm index.jsp; proxy_pass http://ecologycluster; proxy_next_upstream http_502 http_504 http_500 http_404 http_403 error timeout invalid_header; proxy_redirect off; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Real-IP $remote_addr; proxy_set_header Host $http_host; proxy_read_timeout 3600; proxy_send_timeout 3600; access_log off; send_timeout 300; } } } ``` - 启动`nginx` ```bash cd /usr/local/nginx/sbin ./nginx -c /usr/local/nginx/conf/nginx.conf ``` - 打开浏览器输入 `http://192.168.44.139:8889`, 注意这里访问的是 `nginx` 地址! #### 2.3 故障测试 - 将两台服务器都停掉,再访问 `http://192.168.44.139:8889` - 开启从服务器,将主服务器(192.168.44.139)停掉,再访问 `http://192.168.44.139:8889` - 开启主服务器,将从服务器(192.168.44.144)停掉,再访问 `http://192.168.44.139:8889` ## 3. Docker 部署 > Docker 部署适用于客户服务器系统为 `linux`,`window` 系统不推荐使用。 > > Docker 部署不是成熟方案,并且需要一定技术支撑,该方案量力而为。 > > 下面使用 `CentOS` 系统进行`Docker-E9`部署 #### 3.1 Docker 安装 ```bash # step 1: 安装必要的一些系统工具 sudo yum install -y yum-utils device-mapper-persistent-data lvm2 # Step 2: 添加软件源信息 sudo yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo # Step 3: 更新并安装Docker-CE sudo yum makecache fast sudo yum -y install docker-ce # Step 4: 开启Docker服务 sudo service docker start ``` #### 3.2 配置加速器 ```bash # 配置阿里云加速器 echo "{ \"registry-mirrors\": [\"https://xh36jugz.mirror.aliyuncs.com\"] }">/etc/docker/daemon.json # 重启docker sudo systemctl daemon-reload sudo systemctl restart docker ``` #### 3.3 制作 E9 镜像 > 创建目录:`mkdir /usr/local/weaver` ##### 3.3.1 使用 `ubuntu` 依赖 - 上传 `Ecology9.00.xxxx.xx.zip`,`jdk-8u231-linux-x64.tar.gz`, `Resin-4.0.58.zip` 至 `/usr/local/weaver` 目录 - 解压文件 ```bash # 安装解压工具,如果已经安装可省略 yum install unzip # 解压文件夹, ecology按照具体的版本号 unzip Ecology9.00.xxxx.xx.zip unzip Resin-4.0.58.zip unzip jdk-8u231-linux-x64.tar.gz # 对解压出来的文件夹重命名 mv Resin resin mv jdk1.8.0_231 jdk ``` - 修改 resin 相关配置:查看 [1.3.4 Resin-Linux 配置](#1.3.4 Resin-Linux 配置) - 创建 `ubuntu` 依赖的 `Dockerfile` ```bash echo 'FROM ubuntu COPY ecology/ /usr/local/weaver/ecology/ COPY resin/ /usr/local/weaver/resin/ COPY jdk/ /usr/local/weaver/jdk/ EXPOSE 8080 RUN chmod +x /usr/local/weaver/resin/bin/resin.sh CMD ["/bin/sh", "-c", "/usr/local/weaver/resin/bin/resin.sh console"]'>/usr/local/weaver/Dockerfile ``` ##### 3.3.2 使用 `resin:e9` 依赖 - 使用该依赖则只需上传 `Ecology9.00.xxxx.xx.zip` 至 `/usr/local/weaver` 目录即可 - 解压文件 ```bash # 安装解压工具,如果已经安装可省略 yum install unzip # 解压文件夹, ecology按照具体的版本号 unzip Ecology9.00.xxxx.xx.zip ``` - 创建 `resin:e9` 依赖的 `Dockerfile` ```bash echo 'FROM registry.cn-hangzhou.aliyuncs.com/weaver/resin:e9 COPY ecology/ /usr/local/weaver/ecology/'>Dockerfile ``` ##### 3.3.3 构建镜像 - 路径切换到 `/usr/local/weaver` 下,执行镜像构建命令,注意末尾的 `.` 号是必须的! ```bash cd /usr/local/weaver # ec系统瘦身 rm -rf $(find /usr/local/weaver/ecology -name="**.map.js") # 修改初始验证码 sed -i 's/wEAver2018/1/g' /usr/local/weaver/ecology/WEB-INF/code.key # 开始构建镜像 docker build -t e9:191202 . ``` - 出现以下信息表示镜像构建成功 ![image-20200202145325222](asset/image-20200202145325222.png) ##### 3.3.4 镜像瘦身 > `e-cology9` 构建镜像时,会存在一个让客户吐槽的问题,那就是构建出的镜像过大,从图中可以看出,`e9:191202` 镜像包已经达到 `5.05GB` 大小,下面介绍几个镜像瘦身的方案,大约能瘦身 `1-2G` 左右 通过软件分析`e-cology9` 程序,发现文件扩展名为 `.map`, `.jar`, `.js` 的文件占比重最大。其中 `.jar` 为后端文件,`.js` 为前端文件,这两个不要轻易的进行删减!那么我们可以动的只剩下 `.map` 文件了。 ![image-20200206212702901](asset/image-20200206212702901.png) 关于 `.map.js` 文件介绍: `source map`文件是`js`文件压缩后,文件的变量名替换对应、变量所在位置等元信息数据文件,一般这种文件和`min.js`主文件放在同一个目录下。 比如压缩后原变量是map,压缩后通过变量替换规则可能会被替换成a,这时source map文件会记录下这个mapping的信息,这样的好处就是说,在调试的时候,如果有一些 `js`报错,那么浏览器会通过解析这个map文件来重新merge压缩后的`js`,使开发者可以用未压缩前的代码来调试,这样会给我们带来很大的方便! **换句话说以 .map 后缀的文件,唯一的作用是方便在开发过程中进行调试,但是在生产环境中,可以被删除。** OK,删除掉 `.map` 文件后,整个程序的体积瞬间少了 `1.0GB` 左右,接下来还有一个能删除的目录,那就是 `ecology/data`,这个目录下存放的是数据库初始化的 `sql` 文件,从图中可以看出这些 `sql` 文件差不多占 `200M` 左右,个人建议第一次构建镜像时不要删除这些文件,等待数据库初始化完毕,二次构建镜像时把这些文件删除,这样 `e-cology9` 镜像体积又能瘦下来了~ ![image-20200206214039366](asset/image-20200206214039366.png) #### 3.4 安装 docker-compose > 百度云盘下载:https://pan.baidu.com/s/1bEGXrwbQo32Gu8UbXgyFQQ > > 下载 `docker-compose` 上传至 `/usr/local/bin/` 下,然后执行以下命令 ```shell chmod +x /usr/local/bin/docker-compose ``` #### 3.5 启动 Ecology ##### 3.5.1 创建 `docker-compose.yml` ```yml version: '3.1' services: ecology: restart: always image: e9-mysql:190902 container_name: e9 ports: - 8080:80 volumes: - ./ecology/album:/usr/local/weaver/ecology/album - ./ecology/formmode:/usr/local/weaver/ecology/formmode - ./ecology/messager:/usr/local/weaver/ecology/messager - ./ecology/mobilemode:/usr/local/weaver/ecology/mobilemode - ./ecology/mobile:/usr/local/weaver/ecology/mobile - ./ecology/email:/usr/local/weaver/ecology/email - ./ecology/filesystem:/usr/local/weaver/ecology/filesystem - ./ecology/images_face:/usr/local/weaver/ecology/images_face - ./ecology/images_frame:/usr/local/weaver/ecology/images_frame - ./ecology/license:/usr/local/weaver/ecology/license - ./ecology/log:/usr/local/weaver/ecology/log - ./ecology/LoginTemplateFile:/usr/local/weaver/ecology/LoginTemplateFile - ./ecology/m_img:/usr/local/weaver/ecology/m_img - ./ecology/wui:/usr/local/weaver/ecology/wui - ./ecology/others:/usr/local/weaver/ecology/others - ./ecology/page:/usr/local/weaver/ecology/page - ./ecology/upgrade:/usr/local/weaver/ecology/upgrade - ./ecology/WEB-INF/securityRule:/usr/local/weaver/ecology/WEB-INF/securityRule - ./ecology/WEB-INF/securityXML:/usr/local/weaver/ecology/WEB-INF/securityXML - ./ecology/WEB-INF/service:/usr/local/weaver/ecology/WEB-INF/service - ./ecology/WEB-INF/prop:/usr/local/weaver/ecology/WEB-INF/prop - ./resin/log:/usr/local/weaver/resin/log - ./resin/logs:/usr/local/weaver/resin/logs environment: TZ: Asia/Shanghai ``` ##### 3.5.2 数据持久化说明 在 `docker` 中,无论是原生的 `-v` 参数也好,还是 `docker-compose` 的 `volumes` 参数也罢。在启动容器时,会将宿主机上的相关目录复制到容器内部。以 `ecology/album` 目录为例,当宿主机上 `./ecology/album`目录不存在,或者该目录下不存在任何文件,那么启动容器后,使用 `exec` 命令登陆容器后会发现容器内的 `/usr/local/ecology/album` 目录下的所有文件都被清空! ![image-20200207144203566](asset/image-20200207144203566.png) **总结:在启动容器时,需要手动创建所要持久化的目录,并且将相关目录下的文件`copy`到对应目录中** 如果使用已经构建好的镜像,不确定镜像内的文件是什么。那么可以采用以下方案: 1. 启动容器时先不挂载数据卷:`docker run -itd --name=e9 e9-mysql:190902` 2. 使用 `cp` 命令将容器内的文件 `copy` 到宿主机中:`sudo docker cp containerID:container_path host_path` ![image-20200207145051503](asset/image-20200207145051503.png) ##### 3.5.3 启动服务 - 执行 `docker-compose up` 启动服务,出现以下信息表示服务启动成功 ![image-20200203033722839](asset/image-20200203033722839.png) - 打开浏览器输入:`http://ip:8080` ## 4. 移动平台部署 > 移动平台可以通过泛微官方地址: > > https://emobile.weaver.com.cn/emp/download #### 4.1 常规部署 关于 `E-mobile7` 常规部署参考 `泛微移动平台安装手册` 即可! #### 4.2 独立部署 `E-Mobile7` 包含 `em7` ,`redis`,`mysql`,`active-mq`,`tomcat` 五大组成部分。其中 `em7` 依赖于 `tomcat` 启动。其他部分均可独立部署。也就是说 `E-Mobile7` 可以拆分成四大部分独立部署。 相关配置可查看: https://yq.weaver.com.cn/eb/qa/view/#/question/5fb7e8e6124948129b1bfada0737f9f6 #### 4.3 Docker部署 ##### 4.3.1 镜像制作 - 下载解压安装包和补丁包 ![image-20200210134926003](asset/image-20200210134926003.png) ![image-20200210135000703](asset/image-20200210135000703.png) ```bash tar -zxvf emp_install_linux64_20191226.tar.gz # 如果已经安装unzip则跳过 # yum install unzip unzip -o emp_patch_20200109.zip ``` - 创建 `/usr/local/docker/emp`,将 `appsvr`,`jdk`,`work` copy到该目录下 ```bash mkdir -p /usr/local/docker/emp \cp -r appsvr /usr/local/docker/emp \cp -r jdk /usr/local/docker/emp \cp -r work /usr/local/docker/emp ``` - 使用 `ubuntu` 依赖的 `Dockerfile` ```bash FROM ubuntu COPY appsvr/tomcat /usr/local/emp/tomcat/ COPY work/ /usr/local/emp/work/ COPY start.sh /usr/local/emp/ COPY jdk/ /usr/local/jdk/ ENV PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/local/jdk/bin:/usr/local/emp/tomcat/bin:/usr/local/emp/tomcat/bin ENV TZ=Asia/Shanghai ENV JAVA_HOME=/usr/local/jdk ENV CLASSPATH=/usr/local/jdk/lib/dt.jar:/usr/local/jdk/lib/tools.jar ENV CATALTNA_HOME=/usr/local/emp/tomcat ENV CATALINA_HOME_BASE=/usr/local/emp ENV LC_ALL=zh_CN.gbk ENV LANG=zh_CN.gbk EXPOSE 8095 EXPOSE 8999 EXPOSE 9443 RUN [ "/bin/sh", "-c", "chmod +x /usr/local/emp/start.sh" ] CMD [ "/bin/sh", "-c", "/usr/local/emp/start.sh" ] ``` - 下载 [start.sh](https://github.com/Y-Aron/cloud-note/blob/master/weaver/shell/emp/start.sh) 至 `/usr/local/docker/emp` - 创建 `/usr/local/docker/emp/docker-compose.yml` ```yaml version: '3.1' services: em7: build: context: . dockerfile: Dockerfile restart: always image: em7 container_name: em7 ports: - 8999:8999 environment: EMP_ACTIVEMQ_ENABLED: "true" EMP_ACTIVEMQ_IP: "192.168.44.155" EMP_ACTIVEMQ_PORT: 61616 EMP_ACTIVEMQ_USER: "system" EMP_ACTIVEMQ_PASSWORD: "manager" EMP_JTA_ENABLED: "false" EMP_DB_TYPE: "mysql" EMP_DB_NAME: "emp_app" EMP_DB_IP: "192.168.44.155" EMP_DB_PORT: 3306 # oracle 使用 EMP_DB_SID: orcl EMP_DB_USERNAME: "root" EMP_DB_PASSWORD: 123456 EMP_REDIS_ENABLED: "true" EMP_REDIS_HOST: "192.168.44.155" EMP_REDIS_PORT: 6381 EMP_REDIS_PASSWORD: "WEAVERemobile7*()" EMP_REDIS_DB: 0 # # 集群配置 # 集群节点ID:全局唯一 EMP_CLUSTER_NODE_ID: 1 # CDN地址 EMP_CDN_URL: # session存储介质,支持none、jdbc和redis # none表示session存储在servlet容器(即原生session) # jdbc表示session存储在数据库,redis表示session存储在redis里面(需配置redis数据源) EMP_SESSION_STORE_TYPE: "none" # session有效期默认7天 EMP_SESSION_TIMEOUT: "7d" # 基本信息缓存方式,支持none、ehcache和redis # none表示不缓存数据 # ehcache表示数据缓存在ehcache里面 # redis表示数据缓存在redis里面(需配置redis数据源) EMP_BASE_CACHE_TYPE: "ehcache" # 操作日志保留期限(天),小于或者等于0表示不清理 EMP_LOG_RETAIN_DAYS: 30 # 从OA下载的文件保留期限(天),小于或者等于0表示不清理 EMP_DOWNLOAD_RETAIN_DAYS: 10 ``` - 构建镜像命令:`docker-compose build` ![image-20200211204511641](asset/image-20200211204511641.png) ##### 4.3.2 启动 Ecology - 使用命令:`docker-compose up` ![image-20200211205007406](asset/image-20200211205007406.png) - 打开浏览器,输入 `http://ip:port` 即可进入`E-Mobile7`后台!