(OCPP服务器)SteVe编译搭建全过程

注意:建议使用3.6.0,我升级到3.7.1,并没有多什么新功能,反而电表的实时数据只能看到累计电能了,我回退了就正常,数据库是兼容的,java版本换位java11,其他不变就好

背景:
国外欧标充电桩开发中,服务器对接是很重要的一环,出国外的基本都是需要支持OCPP功能,基本要求是OCPP1.6,还有些客户已经开始要2.0了,OCPP测试至关重要,目前有两种测试方法,1,使用Monta服务器,去注册一个账号,然后链接调试即可,2.自己在云端搭建一个自己的OCPP平台(SteVe)。
两个平台我都有使用,用得多并且顺手的是SteVe平台。以下是简单总结一下使用后的感受。
Monta平台界面比较单一,下发的命令的应答只能看log里面找到对应的应答数据(json),优点是有认证测试功能,可以免费自己注册一个账号就能使用,免费https://ocpp-toolkit.monta.app/
在这里插入图片描述
在这里插入图片描述

SteVe平台界面丰富,可以管理ocpp tags(充电卡)或者get configration的时候预设很多系统的key使用,应答命令会帮你解析在页面显示出来,目前SteVe平台是最完善的,并且是开源免费的。
在这里插入图片描述
在这里插入图片描述

综上所述,自己搭建一个服务器就很有必要了。

SteVe平台搭建主要流程:

  • 1.先准备一个云服务器,如果没有云服务器,可以考虑用虚拟机安装一个centos7,然后把这个机器映射到外网临时用也行。
  • 2.下载SteVe官方源码包,我这里就用3.17.1举例。官方源码在GitHub https://github.com/steve-community/steve。
  • 3.数据库MYSQL8的安装与配置,因为CentOS使用的是mariadb,但你去编译SteVe的时候你会发现提示非长期支持版,会报错。
  • 4.安装Java17,Centos内置了Java工具,但查看版本发现是1.8的,SteVe3.7.1要求是Java17,删除Java1.8再安装Java17.
  • 5.编译SteVe源码。
  • 6.运行,测试
  • 7.制作开机自启。

详细步骤:
1.下载SteVe源码。并阅读README.md,了解这个平台需要用到的环境,先配置好这些环境,然后了解编译工具和编译运行。经过阅读发现需要使用mysql8,java17,Maven
2.首先来安装数据库,数据库MYSQL8的安装与配置,查看当前mariadb版本信息。

rpm -e --nodeps 上一条命令列出的文件名。
rpm -qa|grep mariadb 用于检查是否卸载干净。

让AI帮忙写了一个centos7安装mysql8的脚步,这样比传统的下载安装更省事

#!/bin/bash# Exit script on any error
set -e# Fixed password to be used
fixed_password="Msb666666"# 1. Add the MySQL Yum repository
echo "Adding the MySQL Yum repository..."
wget https://dev.mysql.com/get/mysql80-community-release-el7-3.noarch.rpmecho "Checking the integrity of the downloaded package..."
rpm --import https://repo.mysql.com/RPM-GPG-KEY-mysqlecho "Installing the MySQL Yum repository..."
yum localinstall mysql80-community-release-el7-3.noarch.rpm -y# 2. Install the MySQL server
echo "Installing the MySQL server..."
yum install mysql-community-server -y# 3. Start the MySQL service
echo "Starting the MySQL service..."
systemctl start mysqld
systemctl enable mysqld# 4. Get the temporary password generated for the root user
echo "Retrieving the temporary password..."
temp_password=$(grep 'temporary password' /var/log/mysqld.log | tail -1 | rev | cut -d" " -f1 | rev)echo "The temporary MySQL root password is: $temp_password"# 5. Change the root user's password to the desired fixed password
echo "Changing the root user's password..."mysql --connect-expired-password -uroot -p"$temp_password" <<-EOF
ALTER USER 'root'@'localhost' IDENTIFIED BY '$fixed_password';
FLUSH PRIVILEGES;
EOFecho "The root password has been successfully changed to the fixed password."# Optionally, you can run the mysql_secure_installation steps here if you want to automate it further.echo "MySQL 8 installation is complete."

还有mysql运行脚本

#!/bin/bash# This script starts the MySQL service and sets it to launch on boot# Exit script on any error
set -e# Start the MySQL service
echo "Starting the MySQL service..."
systemctl start mysqld# Enable the MySQL service to start on boot
echo "Setting the MySQL service to start on boot..."
systemctl enable mysqld# Confirmation message
echo "MySQL service has been started and set to launch on boot."

安装好了之后通过ssh命令行登陆数据库

mysql -u root

接下来为steve创建相关数据

steve 数据库mysql8
用户名:root
密码:Msb666666@,
Steve数据库用户名:steve
密码:changeme

脚本安装后需要更新默认的随机密码,密码不能太简单,需要带点符合,否则会失败

ALTER USER 'root'@'localhost' IDENTIFIED BY 'Msb666666@,';
FLUSH PRIVILEGES;

创建SteVe需要用到的数据库stevedb

CREATE DATABASE stevedb CHARACTER SET utf8 COLLATE utf8_unicode_ci;

创建完毕后可以使用命令查看一下,可以看到Stevedb

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| stevedb            |
| sys                |
+--------------------+
5 rows in set (0.00 sec)

再为这个数据创建一个数据库用户steve,这个和SteVe平台README.md默认用户名和密码保持一致,否则两边一起改。

CREATE USER 'steve'@'localhost' IDENTIFIED BY 'changeme';
GRANT ALL PRIVILEGES ON stevedb.* TO 'steve'@'localhost';
GRANT SUPER ON *.* TO 'steve'@'localhost';

然后退出数据库尝试使用新数据库用户登陆

  mysql -u steve -p

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| performance_schema |
| stevedb            |
+--------------------+
3 rows in set (0.00 sec)mysql> 

这样就完成了,不需要建表,这个SteVe在打包编译和运行的时候都会自动建表。
编译之前还需要改一下数据库默认时区,解决java编译的时候时区问题。

 vi  /etc/my.cnf

增加default-time-zone=‘+08:00’

重启数据库

 systemctl restart mysqld

数据库好了,还需要Java运行环境

  yum install java-17-openjdk-devel

如果系统里有多个java版本可以使用alternatives来切换

CentOS 支持通过 alternatives 命令来管理多个版本的 Java。您可以按照以下步骤进行设置:

alternatives --install /usr/bin/javac java /usr/lib/jvm/temurin-17-jdk/bin/java 1
alternatives --install /usr/bin/javac javac /usr/lib/jvm/temurin-17-jdk/bin/javac 1
sudo alternatives --config java

选择Java17即可

修改Steve代码
修改Java代码,改到上海时区东八区,方便测试使用

public class Application implements ApplicationStarter, AutoCloseable {private final ApplicationStarter delegate;public Application() {// For Hibernate validatorSystem.setProperty("org.jboss.logging.provider", "slf4j");SteveConfiguration sc = SteveConfiguration.CONFIG;log.info("Loaded the properties. Starting with the '{}' profile", sc.getProfile());// 设置java.util.TimeZone的默认时区为东八区TimeZone.setDefault(TimeZone.getTimeZone("Asia/Shanghai"));       DateTimeZone.setDefault(DateTimeZone.forID("Asia/Shanghai"));//TimeZone.setDefault(TimeZone.getTimeZone(sc.getTimeZoneId()));//DateTimeZone.setDefault(DateTimeZone.forID(sc.getTimeZoneId()));log.info("Date/time zone of the application is set to {}. Current date/time: {}", sc.getTimeZoneId(), DateTime.now());switch (sc.getProfile()) {case DEV:

默认的配置部署到服务器是无法正常访问的,需要修改一下配置,数据库部分一定要和前面配置的数据库的鞥冷信息和端口一样,网页登录信息建议改为自己的密码,最好还是随机密码,修改的java配置文件在src\main\resources\config\prod\main.properties

# Just to be backwards compatible with previous versions, this is set to "steve",
# since there might be already configured chargepoints expecting the older path.
# Otherwise, might as well be changed to something else or be left empty.
#
context.path = steve# Database configuration
#
db.ip = 127.0.0.1
db.port = 3306
db.schema = stevedb
db.user = steve
db.password = changeme# Credentials for Web interface access
#
auth.user = admin
auth.password = 写上你的密码# The header key and value for Web API access using API key authorization.
# Both must be set for Web APIs to be enabled. Otherwise, we will block all calls.
#
webapi.key = STEVE-API-KEY
webapi.value =# Jetty configuration
#
server.host = 0.0.0.0
server.gzip.enabled = true# Jetty HTTP configuration
#
http.enabled = true
http.port = 8080# Jetty HTTPS configuration
#
https.enabled = false
https.port = 8443
keystore.path =
keystore.password =# When the WebSocket/Json charge point opens more than one WebSocket connection,
# we need a mechanism/strategy to select one of them for outgoing requests.
# For allowed values see de.rwth.idsg.steve.ocpp.ws.custom.WsSessionSelectStrategyEnum.
#
ws.session.select.strategy = ALWAYS_LAST# if BootNotification messages arrive (SOAP) or WebSocket connection attempts are made (JSON) from unknown charging
# stations, we reject these charging stations, because stations with these chargeBoxIds were NOT inserted into database
# beforehand. by setting this property to true, this behaviour can be modified to automatically insert unknown
# stations into database and accept their requests.
#
# CAUTION: setting this property to true is very dangerous, because we will accept EVERY BootNotification or WebSocket
# connection attempt from ANY sender as long as the sender knows the URL and sends a valid message.
#
auto.register.unknown.stations = false# if this field is set, it will take precedence over the default regex we are using in
# de.rwth.idsg.steve.web.validation.ChargeBoxIdValidator.REGEX to validate the format of the chargeBoxId values
#
charge-box-id.validation.regex =### DO NOT MODIFY ###
steve.version = ${project.version}
git.describe = ${git.commit.id.describe}
db.sql.logging = false
profile = prod

安装Maven工具,这个是编译这个项目必不可少的工具,

wget http://repos.fedorapeople.org/repos/dchen/apache-maven/epel-apache-maven.repo -O /etc/yum.repos.d/epel-apache-maven.repo
yum install -y apache-maven
[root@iZj6cagyhi0qjy83boeqcyZ ~]# mvn -version
Apache Maven 3.0.5 (Red Hat 3.0.5-17)
Maven home: /usr/share/maven
Java version: 17.0.13, vendor: Eclipse Adoptium
Java home: /usr/lib/jvm/temurin-17-jdk
Default locale: en_US, platform encoding: UTF-8
OS name: "linux", version: "3.10.0-1160.114.2.el7.x86_64", arch: "amd64", family: "unix"

编译代码,生成Java应用程序

./mvnw package

在这里插入图片描述

执行并测试

/usr/bin/java -jar /home/steve3.7.1/target/steve.jar

打开网页
在这里插入图片描述
能打开基本就成功了,登陆用户名和密码是src\main\resources\config\prod\main.properties里面的
在这里插入图片描述

# Credentials for Web interface access
#
auth.user = admin
auth.password = 写上你的密码

手工执行通过后,可以制作自启动Steve服务器

vi /etc/systemd/system/steve.service
[Unit]
Description=Steve Java Application[Service]
User=root# 替换为实际运行该服务的系统用户名
ExecStart=/usr/bin/java -jar /home/steve3.7.1/target/steve.jar
WorkingDirectory=/home/steve3.7.1/target # 确保这是jar文件所在的目录
SuccessExitStatus=143 # java进程退出码为143表示正常退出
TimeoutStopSec=10
Restart=on-failure # 服务失败时进行重启
RestartSec=5 # 重启间隔时间[Install]
WantedBy=multi-user.target
systemctl daemon-reload
systemctl enable steve.service
systemctl start steve.service
systemctl status steve.service

//重启服务,用户修改了服务源码,重启服务生效。

systemctl restart steve.service

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/493722.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C++ OpenGL学习笔记(2、绘制橙色三角形绘制、绿色随时间变化的三角形绘制)

相关文章链接 C OpenGL学习笔记&#xff08;1、Hello World空窗口程序&#xff09; 目录 绘制橙色三角形绘制1、主要修改内容有&#xff1a;1.1、在主程序的基础上增加如下3个函数1.2、另外在主程序外面新增3个全局变量1.3、编写两个shader程序文件 2、initModel()函数3、initS…

数据结构大作业——家谱管理系统(超详细!完整代码!)

目录 设计思路&#xff1a; 一、项目背景 二、功能分析 查询功能流程图&#xff1a; 管理功能流程图&#xff1a; 三、设计 四、实现 代码实现&#xff1a; 头文件 结构体 函数声明及定义 创建家谱树头结点 绘制家谱树&#xff08;打印&#xff09; 建立右兄弟…

Leaflet的zoom层级-天地图层级之间的关系

Leaflet的tileLayer请求地址分析 天地图的瓦片服务地址&#xff1a; http://t1.tianditu.com/img_c/wmts?layerimg&styledefault&tilematrixsetc&ServiceWMTS&RequestGetTile&Version1.0.0&Formattiles&TileMatrix{z}&TileCol{x}&TileRo…

常用的JVM启动参数有哪些?

大家好&#xff0c;我是锋哥。今天分享关于【常用的JVM启动参数有哪些?】面试题。希望对大家有帮助&#xff1b; 常用的JVM启动参数有哪些? 1000道 互联网大厂Java工程师 精选面试题-Java资源分享网 JVM启动参数用于配置Java虚拟机&#xff08;JVM&#xff09;的运行时行为…

CTF学习24.12.21[隐写术进阶]

MISC08[隐写术进阶] PDF文件隐写 隐写的加密&#xff1a;wbStego4open工具的下载和使用 1.wbStego4open介绍&#xff1a; wbStego4open是一个隐写开源工具&#xff0c;它支持Windows和Linux平台&#xff0c;可以使用wbStego4open把文件隐藏到BMP、TXT、HTM和PDF文件中&#…

电脑丢失dll文件一键修复的多种方法分析,电脑故障修复攻略

电脑在使用过程中&#xff0c;有时会遇到DLL文件丢失的情况&#xff0c;这可能导致软件无法正常运行或系统出现故障。当面对这种状况时&#xff0c;不必过于慌张&#xff0c;因为有多种有效的修复方法可供选择。下面我们一起来看看电脑丢失dll文件的多种解决方法。 一.了解什么…

Redis篇--常见问题篇5--热Key(Hot Key,什么是热Key,服务降级,一致性哈希)

热key&#xff08;Hot Key&#xff09;是指在Redis中访问频率非常高、读写请求非常频繁的键。由于Redis是单线程模型&#xff0c;所有操作都是串行执行的&#xff0c;Hot Key处理不好&#xff0c;会产生一些问题。比如短时间的群蜂效应&#xff08;群蜂请求&#xff09;&#x…

VSCode:Markdown插件安装使用 -- 最简洁的VSCode中Markdown插件安装使用

VSCode&#xff1a;Markdown插件安装使用 1.安装Marktext2.使用Marktext 本文&#xff0c;将在Visual Studio Code中&#xff0c;安装和使用Markdown插件&#xff0c;以Marktext插件为例。 1.安装Marktext 打开VSCode&#xff0c;侧边栏中找到扩展模块(或CtrlShiftX快捷键)&am…

SpringBoot+Vue3实现阿里云视频点播 实现教育网站 在上面上传对应的视频,用户开会员以后才能查看视频

要使用阿里云视频点播&#xff08;VOD&#xff09;实现一个教育网站&#xff0c;其中用户需要成为会员后才能查看视频&#xff0c;这个过程包括上传视频、设置权限控制、构建前端播放页面以及确保只有付费会员可以访问视频内容。 1. 视频上传与管理 创建阿里云账号&#xff…

深度学习——现代卷积神经网络(七)

深度卷积神经网络 学习表征 观察图像特征的提取⽅法。在合理地复杂性前提下&#xff0c;特征应该由多个共同学习的神经⽹络层组成&#xff0c;每个层都有可学习的参数。 当年缺少数据和硬件支持 AlexNet AlexNet⽐相对较⼩的LeNet5要深得多。 AlexNet由⼋层组成&#xff1a…

免费送源码:Java+ssm++MVC+HTML+CSS+MySQL springboot 社区医院信息管理系统的设计与实现 计算机毕业设计原创定制

摘 要 随着互联网趋势的到来&#xff0c;各行各业都在考虑利用互联网将自己推广出去&#xff0c;最好方式就是建立自己的互联网系统&#xff0c;并对其进行维护和管理。在现实运用中&#xff0c;应用软件的工作规则和开发步骤&#xff0c;采用Java技术建设社区医院信息管理系统…

Marin说PCB之POC电路layout设计仿真案例---06

我们书接上回啊&#xff0c;对于上面的出现原因我这个美女同事安娜说会不会你把POC电感下面的相邻两层的CUT_OUT的尺寸再去加大一些会不会变得更好呢&#xff1f;这个难道说是真的有用吗&#xff1f;小编我先自己算一卦看下结果。 本期文章我们就接着验证通过改善我们的单板POC…

简洁清爽epub 阅读器

Jane Reader 是一款现代化的 epub 阅读器&#xff0c;有简洁清爽&#xff0c;支持自动多栏、多主题、直排模式等&#xff0c;开发者想要提供「媲美于印刷书籍的阅读体验」 Jane Reader 目前提供以下功能&#xff1a; 支持 epub 电子书格式&#xff1b; 内置书库&#xff1b; 支…

TDesign:NavBar 导航栏

NavBar 导航栏 左图&#xff0c;右标 appBar: TDNavBar(padding: EdgeInsets.only(left: 0,right: 30.w), // 重写左右内边距centerTitle:false, // 不显示标题height: 45, // 高度titleWidget: TDImage( // 左图assetUrl: assets/img/logo.png,width: 147.w,height: 41.w,),ba…

javaFX.(蜜雪冰城点餐小程序)MySQL数据库

学习Java只有3个月&#xff0c;不喜勿喷 该小程序是用的MySQL数据库&#xff0c;编辑软件用的equals,为什么不用idea有提示因为主打一个纯手打 要源码私信 目录 javafx.小程序&#xff08;蜜雪冰城点餐系统&#xff09;简介 主体思路 思路讲解 用户登录 用户注册 忘记…

StarRocks:存算一体模式部署

目录 一、StarRocks 简介 二、StarRocks 架构 2.1 存算一体 2.2 存算分离 三、前期准备 3.1前提条件 3.2 集群规划 3.3 配置环境 3.4 准备部署文件 四、手动部署 4.1 部署FE节点 4.2 部署BE节点 4.3 部署CN节点&#xff08;可选&#xff09; 4.4 FE高可用…

【LeetCode】394、字符串解码

【LeetCode】394、字符串解码 文章目录 一、递归: 嵌套类问题1.1 递归: 嵌套类问题 二、多语言解法 一、递归: 嵌套类问题 1.1 递归: 嵌套类问题 // go func decodeString(s string) string {// 如果遇到 嵌套括号的情况, 则递归// 可能连续多位数字, 则 通过 cur cur * 10 …

厦门凯酷全科技有限公司短视频带货可靠吗?

在当今这个数字化时代&#xff0c;抖音作为短视频和直播带货的领军平台&#xff0c;已经吸引了无数商家的目光。而在这一片繁荣的电商蓝海中&#xff0c;厦门凯酷全科技有限公司&#xff08;以下简称“凯酷全”&#xff09;凭借其专业的团队、丰富的经验和创新的服务模式&#…

图书馆管理系统(三)基于jquery、ajax

任务3.4 借书还书页面 任务描述 这部分主要是制作借书还书的界面&#xff0c;这里我分别制作了两个网页分别用来借书和还书。此页面&#xff0c;也是通过获取books.txt内容然后添加到表格中&#xff0c;但是借还的操作没有添加到后端中去&#xff0c;只是一个简单的前端操作。…

RabbitMQ消息可靠性保证机制7--可靠性分析-rabbitmq_tracing插件

rabbitmq_tracing插件 rabbitmq_tracing插件相当于Firehose的GUI版本&#xff0c;它同样能跟踪RabbitMQ中消息的注入流出情况。rabbitmq_tracing插件同样会对流入流出的消息进行封装&#xff0c;然后将封装后的消息日志存入相应的trace文件中。 # 开启插件 rabbitmq-plugins …