ForeverSmiYngEcologyKit/泛微系统部署.md
2024-10-09 09:19:17 +00:00

1239 lines
37 KiB
Markdown
Raw Permalink Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 泛微平台系统部署
> 本文主要描述了泛微平台环境部署的几种方案,包括 `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
<!-- 修改jdk路径可以是相对路径也可以是绝对路径 -->
<javac compiler="../jdk/bin/javac" args="-encoding UTF-8"/>
<!-- 修改ecology路径可以是相对路径也可以是绝对路径 -->
<web-app id="/" root-directory="../ecology">
```
`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`后台!