Maximo 容器化改造试验
这篇文章写于2017年,具体年月日给忘了,总之比较早,Docker也更新了好几个版本了。在这归档一下
1. 写在前面
由于近期涌现了好几家对接公司Maximo的项目,需要频繁的给厂家搭建Maximo测试系统。而我司仅有一台虚拟化服务器作为测试资源,虽然CPU性能强大,但总内存只有64G,磁盘空间也仅有500g。为了减小硬件的开销,将现有的Maximo测试系统实例进行容器化改造,通过多个容器实例搭建不同的测试环境。Maximo测试环境采用Linux+Docker的方式运行。
由于公司Maximo项目比较老旧,且Oracle数据库在DockerHub上并没有现成的镜像,GitHub上的Dockerfile没有Weblogic、Oraclejdk、OracleDatabase旧版本的搭建范例,只能照瓢画葫地修改Dockerfile。迁移的过程中踩了很多坑,但也学习到了许多Weblogic、Oracle数据库、Maximo的知识,在此记录一下。
2. 实验目标
迁移前 | 迁移后 | |
软件 | Maximo 7.1 | Maximo 7.1 |
Java版本 | jdk1.6.4 | jdk1.6.4 |
集群 | 6节点 | 暂无(计划采用Nginx+AdminServer) |
EJB中间件 | IBM Websphere 6.1.0.23 | Weblogic 10.3.6.0 |
网页中间件 | Apache | Nginx |
数据库 | Oracle 10g | Oracle 11g 11.2.0.1 |
基本镜像 | 无 | OracleLinux 7 |
容器化 | 无 | Docker |
操作系统 | Windows 2003 | Ubuntu 16.04 |
虚拟化系统 | 无 | Esxi 5.5 |
3. 前期准备
3.1 技术选型
EJB中间件: Oracle容器化在GitHub上的示例非常的完善,Weblogic且获取渠道比Was较为容易(相对配置较为简单),使用Weblogic替换Was作为EJB容器是个不错的选择。同时Maximo7.1仅支持jdk1.6的版本,导致了 Weblogic不能采用最新的12c版本,必须采用Weblogic 11c( 10.3.6.0)
数据库: Oracle放弃了对Oracle 10g的支持,乃至网站亦无法找到Oracle 10g的下载包。退而求其次采用Oracle 11g。
3.2 数据库备份
exp {生产数据库账户}/{生产数据库密码}@{生产数据库SID} file=phdb.dmp log=phdbexp.log owner={生产数据库账户} grants=Y indexes=Y compress=Y buffer=1064000 rows=Y
这块没啥好说的,由于集团虚拟仓库系统采用了存储过程,为了避免数据库导入出错和Maximo在出库时报错,可以导出对应用户的表,或干脆在导入后停止存储过程。
注意!!:
数据库导出时请检查客户端所在的OracleDatabase版本,低版本exp工具可以导出高版本数据,但高版本exp工具不能导出低版本数据。
规则1:低版本的exp/imp可以连接到高版本(或同版本)的数据库服务器,但高版本的exp/imp不能连接到低版本的数据库服务器
规则2:高版本exp出的dmp文件,低版本无法imp(无法识别dmp文件)
规则3:低版本exp出的dmp文件,高版本可以imp(向下兼容)
规则4:从Oracle 低版本的Export数据可以Import到Oracle高版本中,但限于Oracle的相邻版本
3.3 Maximo备份
将生产环境中部署的Maximo备份。
包文件 | 描述 |
MAXIMO.ear | Maximo核心文件 |
MAXIMOHELP.ear | Maximo帮助文件 |
doclinks | Maximo附件/文档库 |
注意!!:MAXIMO.ear与MAXIMOHELP.ear一般位于Was节点的installedApps目录下,具体没有研究,Windows下的doclink一般位于D盘根目录下
例如:
C:\Program Files\IBM\WebSphere\AppServer\profiles\ctgAppSrv01\installedApps\ctgCell01\MAXIMO.ear
D:\doclinks
3.4 软件下载
为了避免出错,请勿重命名文件
文件名 | 描述 |
jdk-6u45-linux-x64.bin | Linux 64位 JDK1.6 |
wls1036_generic.jar | Weblogic 10.3.6安装文件 |
linux.x64_11gR2_database_1of2.zip | OracleDatabase 11g安装文件1 |
linux.x64_11gR2_database_2of2.zip | OracleDatabase 11g安装文件2 |
3.5 宿主机安装与配置
安装Ubuntu:略
3.5.1 创建数据卷文件夹
在用户目录下新建部署文件夹,将MAXIMO.ear、MAXIMOHELP.ear、doclinks复制至maximo文件夹下。新建OracleDatabase数据文件,表空间存放的文件夹
#(根据个人喜好建立,该文件夹用于部署Weblogic)
mkdir -P ~/deploy/maximo
#(根据个人喜好建立,该文件夹用于存放数据库表空间等)
mkdir -P ~/deploy/oradata
注意!!:请牢记新建的文件夹,该教程中文件夹用于数据卷的映射,Docker官方建议持久化的数据不应存放于容器中,应当采用数据卷或数据卷容器
3.5.2 Docker安装
(基于Ubuntu) 将当前用户加入docker组可以减少sudo的操作。
#安装docker
sudo apt update && apt install docker.io
#将当前用户加入docker组
sudo groupadd docker
sudo gpasswd -a ${USER} docker
#重启docker服务
sudo service docker restart
3.5.3 其他
安装git,开启ssh服务
sudo apt install git openssh-server
注意!!:由于dockerHub在国内未有CDN加速,直接pull镜像非常慢,建议参照网上教程修改docker镜像仓库
4. Docker部分
Docker部分参照GitHub中官方的模板修改,强烈建议先Git模板至宿主机保存。
cd ~
git clone https://github.com/oracle/docker-images.git
4.1 Docker 数据库
4.1.1 OracleDatabase基础镜像
OracleDatabase官方Dockerfile模板采用的是xe版本,该版本做为免费的版本有以下限制
最大数据库大小为 11 GB
可使用的最大内存是 1G
一台机器上只能安装一个 XE 实例
XE 只能使用单 CPU,无法在多CPU上进行分布处理
本文采用GitHub上jhouzard/docker-oracle11g-ee的模板
git clone https://github.com/jhouzard/docker-oracle11g-ee.git
将linux.x64_11gR2_database_1of2.zip,linux.x64_11gR2_database_2of2.zip复制至installation_files目录下,复制完后该模板目录树如下:
.
├── database_files
│ ├── createdb.sql #创建默认数据库SQL
│ ├── create.sh #作者写的创建默认数据库脚本
│ ├── initORCL.ora #创建数据库配置文件
│ └── oracle-.bashrc #默认数据库环境变量脚本
├── dockerBuild.sh #docker脚本(本文中并未使用)
├── Dockerfile #dockerfile脚本
├── installation_files
│ ├── linux.x64_11gR2_database_1of2.zip #数据库安装文件
│ ├── linux.x64_11gR2_database_2of2.zip #数据库安装文件
│ ├── oracle.sh #容器中默认的启动脚本
│ └── oraInst.loc
└── readme.md
注意!!:由于时间关系,并未测试数据库创建的脚本,可修改initORCL.ora,本文还是使用默认的数据库orcl
回到Dockerfile所在的目录下构建OracleDatabase基础镜像。
docker build -t jhouzard/oracle-11g-ee .
4.1.2 MaximoDB镜像
MaxmioDB Dockerfile编译的文件树如下,将数据库dmp文件复制至database-data下,SetCHARACTER.sql(修改默认字符集),SetTABLESPASE.sql(创建表空间)请根据生产环境做相应的修改
.
├── container-scripts #容器编译脚本文件夹
│ ├── impData.sh #数据库导入脚本
│ ├── initDB.sh #数据库初始化脚本
│ ├── SetCHARACTER.sql #SQL命令-修改默认字符集
│ ├── SetRETRIEVA.sql #SQL命令-创建全文检索
│ ├── SetTABLESPASE.sql #SQL命令-创建表空间和用户
│ ├── sqlnet.ora #数据库网络配置
│ └── tnsnames.ora #数据库网络配置
├── database-data #数据库导入数据文件夹
│ └── phdb.dmp
├── Dockerfile
Dockerfile
# 从OracleDatabase基础镜像建立
# jhouzard/oracle-11g-ee
# https://github.com/jhouzard/docker-oracle11g-ee
# ---------------
FROM jhouzard/oracle-11g-ee
USER root
RUN mkdir /u01/app/container-scripts/
RUN mkdir /u01/app/database-data/
RUN mkdir /u01/app/oradata/phmax
ADD container-scripts/* /u01/app/container-scripts/
WORKDIR /u01/app/container-scripts/
# 若希望编译镜像时也将数据导入,请取消以下命令注释(不建议,这样会使得镜像变得非常大)
#RUN sh initDB.sh
#COPY database-data/phdb.dmp /u01/app/database-data/phdb.dmp
#RUN sh impData.sh
#RUN rm -f /u01/app/database-data/phdb.dmp
########################################
# Start Oracle command
########################################
CMD oracle.sh
initDB.sh
#!/bin/bash
ORACLE_BASE=/u01/app/oracle
ORACLE_HOME=$ORACLE_BASE/product/11.2/db_1
SCRIPTS_BASE=/u01/app/container-scripts
date
chown oracle -R /u01/app/container-scripts/
echo "Init DataBase..."
echo "Init DataBase NETWORK Setting"
#cp $SCRIPTS_BASE/sqlnet.ora $ORACLE_HOME/network/admin/sqlnet.ora
cp $SCRIPTS_BASE/tnsnames.ora $ORACLE_HOME/network/admin/tnsnames.ora
echo "Change DataBase CHARACTER"
sudo -u oracle -i bash -c "sqlplus / as sysdba @$SCRIPTS_BASE/SetCHARACTER.sql"
echo "Set Fulltext Retrieval.."
chown -R oracle $ORACLE_BASE/oradata/phmax
sudo -u oracle -i bash -c "sqlplus / as sysdba @$SCRIPTS_BASE/SetRETRIEVA.sql"
echo "Creat Tablespace&USER"
sudo -u oracle -i bash -c "sqlplus / as sysdba @$SCRIPTS_BASE/SetTABLESPASE.sql"
回到Dockerfile所在的目录下构建maximodb基础镜像。
docker build -t maximodb .
4.1.3 从MaximoDB镜像中创建容器
首先创建库容器卷oradata
docker run -d --name={数据卷容器名} \
-v /deploy/oradata/:/u01/app/oracle/oradata/ \
ubuntu /bin/bash
注意:数据库容器卷可以不必运行
示例
docker run -d --name=oradata \
-v {宿主机数据库持久化目录}:/u01/app/oracle/oradata/ \
ubuntu /bin/bash
创建数据库容器
docker run -d --name {容器名} \
-v {宿主机dmp文件目录}:/u01/app/database-data/ \
--volumes-from={数据卷容器名} \
-p {宿主机暴露端口}:1521
-p {宿主机暴露端口}:1158
{镜像名}
示例
docker run -d --name OracleDB \
-v /home/deerjoe/docker/Maximo/:/u01/app/database-data/ \
-v /deploy/oradata/:/u01/app/oracle/oradata/ \
--volumes-from=oradata \
-p 1521:1521
-p 1158:1158
maximodb
查看数据库容器启动日志,若启动正常,执行下一步
docker logs -f {容器名}
进入容器中执行initDB.sh&&impData.sh,对数据库初始化
进入容器并调用bash
docker exec -it /bin/bash
[root@99e2fa43c5d4 /]# sh $ORACLE_BASE/container-scripts/initDB.sh
[root@99e2fa43c5d4 /]# sh $ORACLE_BASE/container-scripts/impData.sh
若返回正常,无错误,且PL/SQL能够通过1521端口连上数据库,浏览器能通过1158端口进入EM,证明数据库搭建成功。
4.2 Docker Weblogic
4.2.1 Weblogic基础镜像
将jdk-6u45-linux-x64.bin,wls1036_generic.jar复制到Weblogic的Docker文件夹目录树如下
├── Dockerfile #docker编译文件
├── jdk-6u45-linux-x64.bin #jdk安装文件
├── wls1036_generic.jar #jdk安装文件
└── wls-silent.xml #静默安装配置文件
Dockerfile如下
# ---------------
FROM oraclelinux:7
# Environment variables required for this build (do NOT change)
# -------------------------------------------------------------
RUN yum -y install kde-l10n-Chinese.noarch #安装中文语言包
RUN yum -y reinstall glibc-common #重新编译glibc-common
RUN localedef -c -f UTF-8 -i zh_CN zh_CN.utf8 #将系统字符集设置成UTF-8
ENV LANG=zh_CN.UTF-8
ENV LANGUAGE=zh_CN:en_US
ENV LC_CTYPE=en_US.UTF-8
ENV JAVA_RPM jdk-6u45-linux-x64.bin
ENV WLS_PKG wls1036_generic.jar
# Setup required packages (unzip), filesystem, and oracle user
# ------------------------------------------------------------
RUN mkdir /u01 && \
chmod a+xr /u01 && \
useradd -b /u01 -m -s /bin/bash oracle
# Copy packages
COPY $WLS_PKG /u01/
COPY $JAVA_RPM /u01/
COPY wls-silent.xml /u01/
# Install and configure Oracle JDK
# -------------------------------------
RUN chmod +x /u01/$JAVA_RPM
WORKDIR /u01
RUN ./$JAVA_RPM
RUN mv jdk1.6.0_45 /usr/local/ &&\
rm $JAVA_RPM
ENV JAVA_HOME=/usr/local/jdk1.6.0_45
ENV JAVA_BIN=/usr/local/jdk1.6.0_45/bin
ENV PATH=$PATH:$JAVA_HOME/bin
ENV CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
ENV JAVA_HOME JAVA_BIN PATH CLASSPATH
# Change the open file limits in /etc/security/limits.conf
RUN sed -i '/.*EOF/d' /etc/security/limits.conf && \
echo "* soft nofile 16384" >> /etc/security/limits.conf && \
echo "* hard nofile 16384" >> /etc/security/limits.conf && \
echo "# EOF" >> /etc/security/limits.conf
# Change the kernel parameters that need changing.
RUN echo "net.core.rmem_max=4192608" > /u01/oracle/.sysctl.conf && \
echo "net.core.wmem_max=4192608" >> /u01/oracle/.sysctl.conf && \
sysctl -e -p /u01/oracle/.sysctl.conf
# Adjust file permissions, go to /u01 as user 'oracle' to proceed with WLS installation
RUN chown oracle:oracle -R /u01 #Build不采用权限参数时需加上这句
WORKDIR /u01 #否则编译出现权限问题
USER oracle
# Installation of WebLogic
RUN java -jar $WLS_PKG -mode=silent -silent_xml=/u01/wls-silent.xml && \
rm $WLS_PKG /u01/wls-silent.xml
WORKDIR /u01/oracle/
ENV PATH $PATH:/u01/oracle/oracle_common/common/bin
USER oracle
ENV JAVA_OPTION=$JAVA_OPTION -Dfile.encoding=UTF-8
# Define default command to start bash.
CMD ["bash"]
生成基础镜像
docker build -t oracle/weblogic:10.3.6 .
4.2.2 Weblogic带域镜像
目录树如下
├── container-scripts #容器脚本文件夹
│ ├── add-machine.py #wlst-添加域计算机
│ ├── add-server.py #wlst-添加域服务器
│ ├── commonfuncs.py #wlst-创建域配置
│ ├── createMachine.sh #创建域计算机
│ ├── createServer.sh #创建域服务器
│ ├── create-wls-domain.py #创建域
│ ├── waitForAdminServer.sh #等待AdminServer启动成功脚本
│ └── wlst #Weblogic wlst工具
└── Dockerfile
Dockerfile
FROM oracle/weblogic:10.3.6
# Maintainer
# ----------
MAINTAINER Jason Zou <deerjoe@qq.com>
# WLS Configuration 域参数 (editable during build time)
# ------------------------------
ARG ADMIN_PASSWORD
ARG ADMIN_NAME
ARG DOMAIN_NAME
ARG ADMIN_PORT
ARG CLUSTER_NAME
ARG DEBUG_FLAG
ARG PRODUCTION_MODE
ARG USER_MEM_ARGS
ARG EXTRA_JAVA_PROPERTIES
# WLS Configuration (editable during runtime)
# ---------------------------
ENV ADMIN_HOST="wlsadmin" \
NM_PORT="5556" \
MS_PORT="7002" \
DEBUG_PORT="8453" \
CONFIG_JVM_ARGS="-Dweblogic.security.SSL.ignoreHostnameVerification=true"\
ADMIN_PASSWORD="${ADMIN_PASSWORD:-welcome01}"\
USER_MEM_ARGS="${USER_MEM_ARGS:--Xms256m -Xmx512m -XX:MaxPermSize=1024m}"
ENV EXTRA_JAVA_PROPERTIES="$EXTRA_JAVA_PROPERTIES -Djava.security.egd=file:///dev/urandom"
# WLS Configuration (editable during runtime)
# ---------------------------
# WLS Configuration (persisted. do not change during runtime)
# -----------------------------------------------------------
ENV DOMAIN_NAME="${DOMAIN_NAME:-base_domain}" \
DOMAIN_HOME=/u01/oracle/user_projects/domains/${DOMAIN_NAME:-base_domain} \
ADMIN_NAME="${ADMIN_NAME:-AdminServer}" \
ADMIN_PORT="${ADMIN_PORT:-7001}" \
CLUSTER_NAME="${CLUSTER_NAME:-DockerCluster}" \
debugFlag="${DEBUG_FLAG:-false}" \
PRODUCTION_MODE="${PRODUCTION_MODE:-prod}" \
PATH=$PATH:/u01/oracle/wlserver_10.3/common/bin:/u01/oracle/wlserver/common/bin:/u01/oracle/user_projects/domains/${DOMAIN_NAME:-base_domain}/bin:/u01/oracle
# -----------------------------------------------------------
RUN echo "basic seting:"\
echo "ADMIN_HOST:$ADMIN_HOST"\
echo "NM_PORT:$NM_PORT"\
echo "ADMIN_HOST:$ADMIN_HOST"\
echo "DEBUG_PORT:$DEBUG_PORT"\
echo "CONFIG_JVM_ARGS:$CONFIG_JVM_ARGS"\
echo "ADMIN_PASSWORD:$ADMIN_PASSWORD"\
echo "USER_MEM_ARGS:$USER_MEM_ARGS"\
echo "DEBUG_FLAG:$DEBUG_FLAG"\
echo "PRODUCTION_MODE:$PRODUCTION_MODE"
#---------------------------------------------------------------------
# Add files required to build this image
USER oracle
COPY container-scripts/* /u01/oracle/
RUN chmod 777 /u01/oracle/wlst #必须给wlst加上执行权限
# Root commands
USER root
RUN echo ". /u01/oracle/user_projects/domains/$DOMAIN_NAME/bin/setDomainEnv.sh" >> /root/.bashrc && \
echo "export PATH=$PATH:/u01/oracle/wlserver_10.3/common/bin:/u01/oracle/user_projects/domains/$DOMAIN_NAME/bin" >> /root/.bashrc
# Configuration of WLS Domain
USER oracle
WORKDIR /u01/oracle
RUN chmod 777 /u01/oracle/create-wls-domain.py
RUN echo "$PRODUCTION_MODE"
RUN /u01/oracle/wlst /u01/oracle/create-wls-domain.py
RUN mkdir -p /u01/oracle/user_projects/domains/$DOMAIN_NAME/servers/AdminServer/security && \
echo "username=weblogic" > /u01/oracle/user_projects/domains/$DOMAIN_NAME/servers/AdminServer/security/boot.properties && \
echo "password=$ADMIN_PASSWORD" >> /u01/oracle/user_projects/domains/$DOMAIN_NAME/servers/AdminServer/security/boot.properties && \
echo ". /u01/oracle/user_projects/domains/$DOMAIN_NAME/bin/setDomainEnv.sh" >> /u01/oracle/.bashrc && \
echo "export PATH=$PATH:/u01/oracle/wlserver_10.3/common/bin:/u01/oracle/user_projects/domains/base_domain/bin" >> /u01/oracle/.bashrc
# Expose Node Manager default port, and also default http/https ports for admin console
EXPOSE $NM_PORT $ADMIN_PORT
# Final setup
WORKDIR /u01/oracle
ENV PATH $PATH:/u01/oracle/wlserver_10.3/common/bin:/u01/oracle/user_projects/domains/base_domain/bin:/u01/oracle
# Define default command to start bash.
CMD ["startWebLogic.sh"]
编译镜像,根据需求增加域参数,不增加参数,则按照Dockerfile中默认域模板构建
docker build -t {镜像名} \
#--build-arg ADMIN_PASSWORD={Weblogic密码:默认welcome01} \
#--build-arg ADMIN_NAME={Weblogic用户名:默认weblogic} \
#--build-arg DOMAIN_NAME={域名:默认base_domain} \
#--build-arg ADMIN_PORT={管理端口:默认7001} \
#--build-arg CLUSTER_NAME={集群名:默认DockerCluster} \
#--build-arg DEBUG_FLAG={调试模式:默认false} \
#--build-arg PRODUCTION_MODE={生产模式:默认prod} \
#--build-arg USER_MEM_ARGS={JVM内存参数:默认-Xms256m -Xmx512m -XX:MaxPermSize=1024m}\
#--build-arg EXTRA_JAVA_PROPERTIES{JVM参数:默认$EXTRA_JAVA_PROPERTIES -Djava.security.egd=file:///dev/urandom} \
.
举例
docker build -t 1036-domain \
--build-arg ADMIN_PASSWORD=welcome1 \
--build-arg USER_MEM_ARGS="-Xms512m -Xmx2048m -XX:MaxPermSize=4096m" .
4.2.4 创建带域的Weblogic容器
创建带域的Weblogic,并与已运行的OracleDB容器关联。
docker run -d --name {容器名} \
--link={已运行的Oracle数据库容器名}:{别名}\
-v {宿主机部署文件目录}:/u01/app/maximo/\
-p {宿主机暴露端口}:7001\
-p {宿主机暴露端口}:13400\
{镜像名}
示例
docker run -d --name maximo \
--link OracleDB:db \
-v /home/deerjoe/deploy/maximo:/u01/app/maximo/ \
-p 7001:7001 \
-p 13400:13400 \
1036-domain
注意!!:由于docker的网络配置与臭名昭著的Oracle Net契合较为复杂,建议用–link参数链接数据库容器,JDBC以别名的方式进行访问。此外13400端口为RMI端(与maximo配置有关),必须暴露给宿主机。否则会出错,
4.3 Docker容器与镜像检查
至此我们已完成了weblogic基础镜像搭建、OracleDataBase镜像搭建、MaximoDB镜像搭建、带域名的weblogic镜像搭建。并成了OracleDB容器、maximo容器。他们之间的关系如下:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-lXYATQlv-1599721681040)(http://i.imgur.com/jVtDa19.png)]
最后的检查步骤(完全按照本文命令执行的条件下)
- 使用docker ps应当能够列出名称为OracleDB,maximo的容器
- docker image 应该能够列出上图的四个镜像
- docker logs -f OracleDB 查看日志无错误
- docker logs -f maximo 查看日志无错误
- 访问http://宿主机ip:7001/console 能够进入Weblogic控制台
- PL/SQL,JDBC能够访问数据库(可以从Weblogic新建数据源测试)
5.Maximo实施部分
5.1 部署文件配置修改
修改MAXIMO.ear/maximouiweb.war/WEB-INF/web.xml
将文件中ipcsystem的Servlet以及Servlet-mapping注释掉。该Servlet用于WAS,与Weblogic冲突。
...
<!--
<servlet-mapping>
<servlet-name>ipcsystem</servlet-name>
<url-pattern>/servlet/ipcsystem</url-pattern>
</servlet-mapping>
-->
<!--
<servlet>
<servlet-name>ipcsystem</servlet-name>
<servlet-class>psdi.webclient.servlet.IpcClientServlet</servlet-class>
</servlet>
-->
使用压缩软件打开MAXIMO.ear/properties.jar,将maximo.properties文件解压。修改maximo.properties,由于涉及到生产环境原来的配置,这里就不将整个文件贴出来了
#JDBC驱动名称
mxe.db.driver=oracle.jdbc.OracleDriver
#db为maximo容器--link的数据库容器的别名,注意端口对应宿主机暴露的端口
#数据库SID要与数据库容器对应
mxe.db.url=jdbc:oracle:thin:@db:1521:ORCL
#数据库所有者、用户、密码,参见SetTABLESPASE.sql
mxe.db.schemaowner=maximo
mxe.db.user=maximo
mxe.db.password=maximo
使用压缩软件将maximo.properties覆盖回properties.jar中。
5.2 添加Maximo库文件
由于生产环境采用的Was自带了xml处理的包(猜的,因为原lib文件夹未找到相关的文件),然而Weblogic并没有,所以要将涉及到Xerces的包添加到MAXIMO.ear/lib当中。
同时由于换了Oracle版本,为了避免出错,需要更改JDBC驱动,将原有的ojdbc4.jar包替换成对应的ojdbc6.jar。
#xml相关
xercesImpl.jar
xml-apis.jar
#JDBC相关
ojdbc6.jar
5.2 部署文件
- 进入Weblogic控制台>部署 将MAXIMO.ear与MAXIMOHELP.ear、doclinks部署至Weblogic。
- 其中MAXIMO.ear与MAXIMOHELP.ear一路下一步即可。
- 部署安装为应用程序
- 部署到AdminServer
- 保存
注意!!:注意doclinks的最后一步原可访问性与MAXIMO.ear、MAXIMOHELP.ear不同,应采用我要使部署能够通过下列位置进行访问选项。
doclinks文件应当属于持久化数据,该措施能够防止容器因Maximo文档库附件过大。减少部署的时间、此外后台替换文档也比较方便。
5.3 启动Maximo
通过Weblogic控制台中的部署>启动Maximo,此时使用docker logs -f 检查启动日志。
访问http://宿主机:7001/maximo,若成功且docker logs -f 无报错。证明Maximo已经基本搭建完毕
5.4 Maximo文档库配置
由于Windows文件路径与Linux的路径存在明显不一样,需要进入Maximo对参数进行修改,同时需要进入OracleDataBase将原有的文档库记录进行替换。
5.4.1 文档库配置
进入Maximo>系统配置>平台配置>系统属性 将原有涉及到doclinks的属性进行修改。
属性名 | 原值 | 修改值 |
mxe.doclink.doctypes.defpath | d :\doclinks | /u01/maximo/doclinks/ |
mxe.doclink.doctypes.topLevelPaths | d :\doclinks | /u01/maximo/doclinks/ |
mxe.doclink.path01 | d<PATH>\doclinks=http://10.45.10.128:7003/doclinks | /u01/maximo/doclinks=http://{宿主ip}:7001/doclinks |
勾选对应的属性,点击实时刷新按钮应用配置。
5.4.1 文档库记录修改
观察数据库中docinfo表和doctypes,Maximo当中原有上传的附件记录依然还是以D:/doclinks/ 的方式存储,需要在后台进行修改。
使用docker命令进入容器
docker exec -it /bin/bash
[root@99e2fa43c5d4 /]# sudo -u oracle -i bash -c "sqlplus / AS SYSDBA"
SQL> conn maximo/maximo
Connected.
SQL>
执行以下SQL命令 doclink.sql
/*
将已有的附件路径从Windows路径改为Linux路径
Author@邹政
*/
UPDATE docinfo T
SET T .URLNAME = REPLACE (
REPLACE (T .urlname, '\', '/'),
'D:/doclinks/',
'/u01/maximo/doclinks/')
/*
将已有的默认保存附件路径从Windows路径改为Linux路径
Author@邹政
*/
UPDATE doctypes T
SET T .defaultfilepath = REPLACE (
REPLACE (T .defaultfilepath, '\', '/'),
'D:/doclinks/',
'/u01/maximo/doclinks/'
大功告成,现在Maximo已能够正常访问
6. Docker迁移
具体仅了解原理,并未测试。等待Dockerfile编写完善后测试。
6.1 迁移前的工作
停止maximo、OracleDB容器
docker stop maximo
docker stop OracleDB
使用docker export命令将OracleDB,maximo容器导出到tar文件
docker export maximo > /home/maximo.tar
docker export OracleDB > /home/OracleDB.tar
将maximo.tar、OracleDB.tar,maximo数据卷文件夹{/deploy/maximo},OracleDB数据卷文件夹{/deploy/oradata}导入新的安装Linux当中。
6.2 从tar文件中导入镜像
cat maximo.tar | sudo docker import - maximo:1
cat OracleDB.tar | sudo docker import - OracleDB:1
此时使用docker images查看新机器上已有maximo:1、OracleDB:1的镜像
6.3 从镜像创建容器
基本上和之前的步骤一样
数据库容器
docker run -d --name {容器名} \
-v {宿主机dmp文件目录}:/u01/app/database-data/\
-v {宿主机数据库持久化目录}:/u01/app/oracle/oradata/phmax/\
-p {宿主机暴露端口}:1521
-p {宿主机暴露端口}:1158
{镜像名}
maximo容器
docker run -d --name {容器名} \
--link={已运行的Oracle数据库容器名}:{别名}\
-v {宿主机部署文件目录}:/u01/app/maximo/\
-p {宿主机暴露端口}:7001\
-p {宿主机暴露端口}:13400\
{镜像名}
数据库改动(采用容器卷)
创建数据卷容器
docker run -d --name OracleDB \
-v /opt/maximo/deploy/Database/Database/database-data:/u01/app/database-data \
-v /opt/maximo/dbdata:/u01/app/oracle/oradata/ \
--volumes-from=oradata \
-p 1521:1521 \
-p 1158:1158 \
oracle-11g:1.0.0
常用命令
以SYSDBA进入Oracle容器
docker exec -ti OracleDB sudo -u oracle -i bash -c "sqlplus / AS SYSDBA"