https://metersphere.io/docs/dev_manual/
配置开发环境 操作系统Windows11
源码https://github.com/metersphere/metersphere
环境依赖
idea:开发工具;
jdk1.8:后端是Java;
maven:后端为maven管理;
nodejs:前端为vue,需要使用到npm;
mysql:存放项目数据;
kafka:
zookper:
scoop install extras/idea scoop install java/corretto8-jdk scoop install maven scoop install nodejs scoop install apps/mysql57 scoop install kafka
mysql数据库安装完毕后,先不要启动,定位到my.ini配置文件,增加以下配置,否则启动项目会报错;
default-storage-engine=INNODB lower_case_table_names=1 table_open_cache=128 max_connections=2000 max_connect_errors=6000 innodb_file_per_table=1 innodb_buffer_pool_size=1G max_allowed_packet=64M transaction_isolation=READ-COMMITTED innodb_flush_method=O_DIRECT innodb_lock_wait_timeout=1800 innodb_flush_log_at_trx_commit=0 sync_binlog=0 # 以上非必须,以下为必须 sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION skip-name-resolve
如果不增加sql_mode,启动项目可能提示第68版本的sql执行报错,打开dbeaver工具手动执行第68个sql,基本能定位到时sql_mode导致的问题;
Error starting ApplicationContext. To display the conditions report re-run your application with 'debug' enabled. 2022-03-10 11:41:11,920 ERROR g.springframework.boot.SpringApplication: 830 - Application run failed org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'schedulerStarter': Injection of resource dependencies failed; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'flywayInitializer' defined in class path resource [org/springframework/boot/autoconfigure/flyway/FlywayAutoConfiguration$FlywayConfiguration.class]: Invocation of init method failed; nested exception is org.flywaydb.core.api.FlywayException: Schema `metersphere_dev` contains a failed migration to version 68 !
修改完毕mysql的配置文件后,使用管理员运行命令行工具执行以下,将mysql添加为服务;
mysqld --install MySQL --defaults-file="C:Usersscoopappsmysql57currentmy.ini"
启动mysql服务,使用dbeaver连接,这时root用户是没有密码的,可以为mysql设置下密码;
mysql -u root -p
#将数据库切换至mysql库
mysql> USE mysql;
#修改密码
mysql> update user set authentication_string=PASSWORd('123456') where user='root';
#刷新MySQL权限相关的表
mysql> flush privileges;
mysql> exit;
使用dbeaver创建metersphere_dev数据库
CREATE DATAbase `metersphere_dev`
安装完毕kafka,尝试启动
PS C:Usersscoopappskafkacurrent> .binwindowszookeeper-server-start.bat .configzookeeper.properties 输入行太长。 命令语法不正确。
将上述安装包拷贝至D盘根目录,如图所示;
另外记得修改zookeeper.properties、server.properties配置文件中相关data、log路径;启动zookeeper;
启动kafka;
PS D:kafka3.1.0> .binwindowskafka-server-start.bat .configserver.properties
拉取代码,目前是v1.18.1;
git clone git@github.com:metersphere/metersphere.git
使用idea打开metersphere项目;在backendsrcmainresources目录下新建metersphere.properties文件;
# 数据库配置
spring.datasource.url=jdbc:mysql://localhost:3306/metersphere_dev?autoReconnect=false&useUnicode=true&characterEncoding=UTF-8&characterSetResults=UTF-8&zeroDateTimeBehavior=convertToNull&useSSL=false
spring.datasource.username=root
spring.datasource.password=123456
# kafka 配置,node-controller 以及 data-streaming 服务需要使用 kafka 进行测试结果的收集和处理
kafka.partitions=1
kafka.replicas=1
kafka.topic=JMETER_METRICS
kafka.test.topic=JMETER_TESTS
#kafka.bootstrap-servers={KAFKA_IP}:19092
kafka.bootstrap-servers=localhost:9092
kafka.log.topic=JMETER_LOGS
kafka.report.topic=JMETER_REPORT
# node-controller 所使用的 jmeter 镜像版本
jmeter.image=registry.fit2cloud.com/metersphere/jmeter-master:0.0.6
# TCP Mock 端口范围
tcp.mock.port=10000
# 启动模式,lcoal 表示以本地开发模式启动
run.mode=local
拷贝metersphere.properties路径,并修改backendsrcmainjavaiometersphereApplication.java中metersphere.properties配置文件路径;
@EnableScheduling
@PropertySource(value = {
"classpath:/base.properties",
"file:D:\github\metersphere\backend\src\main\resources\metersphere.properties",
}, encoding = "UTF-8", ignoreResourceNotFound = true)
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
同步修改generatorConfig.xml、logback.xml文件中metersphere.properties配置文件路径;修改base.properties文件中jmeter.home如下;
# jmeter #jmeter.home=/opt/jmeter jmeter.home=D:\github\metersphere\backend\src\main\resources\jmeter运行后端服务
选中Application.java右键运行Run ‘Application.main()’;
Error running Application. Command line is too long. Shorten the command line via JAR manifest or via a classpath file and rerun.
修改Spring Boot 启动项;
Modify options下拉选择Shorten command line;
选择JAR manifest - java -cp classpath.jar cleassName [args];
再次选中Application.java右键运行Run ‘Application.main()’;
并开始调用Jmeter以及kafka等;
kafka日志;
运行前端服务 初始化安装前端依赖组件;
D:githubmetersphere>cd frontend D:githubmeterspherefrontend>npm install ... added 1534 packages, and audited 1535 packages in 2m 92 packages are looking for funding run `npm fund` for details 37 vulnerabilities (26 moderate, 11 high) To address issues that do not require attention, run: npm audit fix To address all issues (including breaking changes), run: npm audit fix --force Run `npm audit` for details. D:githubmeterspherefrontend>运行前端服务
启动前端服务;
D:githubmeterspherefrontend>npm run serve
...
at FSReqCallback.readFileAfterClose [as oncomplete] (node:internal/fs/read_file_context:68:3) {
opensslErrorStack: [ 'error:03000086:digital envelope routines::initialization error' ],
library: 'digital envelope routines',
reason: 'unsupported',
code: 'ERR_OSSL_EVP_UNSUPPORTED'
}
Node.js v17.6.0
查询了一下应该是nodejs v17版本以上存在,OpenSSL3.0对允许算法和密钥大小增加了严格的限制,可以通过添加以下配置略过;
export NODE_OPTIONS=--openssl-legacy-provider
修改frontendpackage.json中serve/build配置项;
"scripts": {
"serve": "export NODE_OPTIONS=--openssl-legacy-provider && vue-cli-service serve",
"serve-win": "SET NODE_OPTIONS=--openssl-legacy-provider && vue-cli-service serve",
"build": "export NODE_OPTIONS=--max_old_space_size=4096 --openssl-legacy-provider && vue-cli-service build",
"build-win": "SET NODE_OPTIONS=--max_old_space_size=4096 --openssl-legacy-provider && vue-cli-service build",
"lint": "vue-cli-service lint"
}
Linux机器使用export,Windows机器需要使用SET,否则会报错以下错误;
D:githubmeterspherefrontend>npm run serve-win > vue-demo@0.1.0 serve-win > exprot NODE_OPTIONS=--openssl-legacy-provider && vue-cli-service serve 'exprot' 不是内部或外部命令,也不是可运行的程序 或批处理文件。
再次启动前端服务;
D:githubmeterspherefrontend>npm run serve-win > vue-demo@0.1.0 serve-win > SET NODE_OPTIONS=--openssl-legacy-provider && vue-cli-service serve INFO Starting development server... ... DONE Compiled successfully in 92629ms 10:20:32 App running at: - Local: http://localhost:8080/ - Network: http://1xx.1xx.xx.xx:8080/ Note that the development build is not optimized. To create a production build, run npm run build.
使用浏览器访问http://localhost:8080/
使用用户名admin,密码metersphere登录成功如下图;
问题1、前端服务启动成功后缺失一些图片,接下来再详细分析;
2、由于是基于Windows系统进行环境搭建,一些命令需要注意与Linux的区别;



