dram.me

metasfresh安装配置

本文简要描述在Ubuntu 20.04中安装metasfresh的基本流程。

注意:metasfresh当前版本只支持Java 8,不支持更高版本,以下默认系统已经安装相应版本软件包(openjdk-8-jdk-headless)。

数据库配置

执行以下命令创建并配置PostgreSQL数据库:

% initdb -D data -U postgres -A password -W
% pg_ctl -D data -l data/data.log start
% psql postgres postgres
# create role metasfresh with login password 'metasfresh' ;
# create database metasfresh with owner metasfresh ;

https://github.com/metasfresh/metasfresh/blob/master/Jenkinsfile中找到数据库初始数据的链接并下载,如:

wget https://metasfresh.com/wp-content/releases/db_seeds/metasfresh_latest.pgdump

再执行以下命令导入初始数据:

pg_restore -U metasfresh -d metasfresh metasfresh_latest.pgdump

RabbitMQ

RabbitMQ不需要额外配置,只要安装rabbitmq-server包,然后启动服务即可:

service rabbitmq-server start

ElasticSearch(可选)

首先获取ElasticSearch软件包:

wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-oss-7.10.2-no-jdk-linux-x86_64.tar.gz

解压后运行:

JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk-amd64 elasticsearch-7.10.2/bin/elasticsearch

ElasticSearch是可选服务,如果需要使用,可在后续启动app和webapi服务时指定Java参数:-Dmetasfresh.elasticsearch.host=localhost:9200

Web API服务

首先获取metasfresh-docker仓库代码,其中包含有最新发布的版本信息,以及配置和浏览器端包:

git clone https://github.com/metasfresh/metasfresh-docker.git

基于以下命令创建服务配置文件:

sed -e "s/FOO_APP/localhost/g" -e "s/FOO_DBMS/localhost/g" metasfresh-docker/app/sources/configs/metasfresh.properties >metasfresh.properties

metasfresh-docker/docker-src/app/Dockerfile文件找到最新的发布版本,再据以下命令获取webapi服务包并运行:

export VERSION=5.170.2-349
curl -o webapi.jar https://repo.metasfresh.com/repository/mvn-release/de/metas/ui/web/metasfresh-webui-api/$VERSION+release/metasfresh-webui-api-$VERSION+release.jar
/usr/lib/jvm/java-1.8.0-openjdk-amd64/bin/java -Xmx1G -DPropertyFile=metasfresh.properties -Dserver.port=8181 -Dwebui.frontend.url=http://localhost:8080 -jar webapi.jar

App服务(可选)

App服务主要是为Swing客户端使用,如果需要,执行以下命令启用:

export VERSION=5.170.2-349
curl -o app.jar https://repo.metasfresh.com/repository/mvn-release-releases/de/metas/dist/metasfresh-dist-serverRoot/$VERSION+release/metasfresh-dist-serverRoot-$VERSION+release.jar
/usr/lib/jvm/java-1.8.0-openjdk-amd64/bin/java -Xmx1G -DPropertyFile=metasfresh.properties -Dserver.port=8282 -jar app.jar

在完成App服务部署后,除了访问http://localhost:8282/基础页面,另外还可以访问系统服务监控页面,路径为http://localhost:8282/serverMonitor,通过账号/密码metasfresh/metasfresh登录。

Web UI服务

Web UI相关代码可以从metasfresh-docker仓库获取,如:

cp -r metasfresh-docker/docker-src/webui/sources/dist webui
cp -r metasfresh-docker/docker-src/webui/sources/configs/config.js webui

调整config.js配置:

sed -i 's|http://MYDOCKERHOST:PORT||g' webui/config.js

虽然通过在启动Web API命令中追加-Dspring.resources.static-locations=file:webui参数的方式,可以直接让metasfresh-webui-api.jar服务静态文件,但是由于sockjs模拟websocket的问题,需要借助Apache的代理功能。

Apache代码配置如下:

cp metasfresh-docker/webui/sources/configs/metasfresh_webui.conf webui.conf

sed -i -e /ErrorLog /d -e /CustomLog /d -e /Order /d -e /Allow /d webui.conf
sed -i -e 's|${APACHE_LOG_DIR}/||' webui.conf
sed -i -e "s|/opt/metasfresh-webui-frontend/dist/|$PWD/webui/|" webui.conf
sed -i -e 's|*:80|*:8080|' webui.conf
sed -i -e s/webapi:8080/localhost:8181/ webui.conf

apache2 -f $PWD/webui.conf

之后,在webui.conf文件开始部分添加:

LoadModule authn_core_module /usr/lib/apache2/modules/mod_authn_core.so
LoadModule authz_core_module /usr/lib/apache2/modules/mod_authz_core.so

LoadModule dir_module /usr/lib/apache2/modules/mod_dir.so

LoadModule headers_module /usr/lib/apache2/modules/mod_headers.so

LoadModule mpm_event_module /usr/lib/apache2/modules/mod_mpm_event.so

LoadModule proxy_module /usr/lib/apache2/modules/mod_proxy.so
LoadModule proxy_http_module /usr/lib/apache2/modules/mod_proxy_http.so
LoadModule proxy_wstunnel_module /usr/lib/apache2/modules/mod_proxy_wstunnel.so

LoadModule rewrite_module /usr/lib/apache2/modules/mod_rewrite.so

DirectoryIndex index.html

ErrorLog /dev/shm/webui_error.log

PidFile /dev/shm/webui.pid

完成上述配置文件调整后,通过以下命令启动Apache服务:

apache2 -f $PWD/webui.conf -k restart

更新

  • 2021-07-25

    1. 更新版本到5.170;
    2. 调整app和webapi服务jar包获取方式;
    3. 调整metasfresh.properties文件获取方式;
    4. 调整文件路径组织;
    5. 调整app服务为可选;
    6. 调整app和webapi服务的端口号。