0%

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
location /boot {
root D:\develop\boot\front;
index index.html index.htm;
}
location /boot2 {
root D:\develop\boot\front/;
index index.html index.htm;
}
location /boot3/ { # 推荐
root D:\develop\boot\front/;
index index.html index.htm;
}
location /boot4/ {
root D:\develop\boot\front;
index index.html index.htm;
}
1
2
3
4
5
6
7
8
http://192.168.3.4/boot   ->   http://192.168.3.4/boot/
D:\develop\boot\front/boot/index.html
http://192.168.3.4/boot2 -> http://192.168.3.4/boot2/
D:\develop\boot\front/boot2/index.html
http://192.168.3.4/boot3/ -> http://192.168.3.4/boot3/
D:\develop\boot\front/boot3/index.html
http://192.168.3.4/boot4 -> http://192.168.3.4/boot4/
D:\develop\boot\front/boot4/index.html

1
2
3
4
location / {
root D:\develop\boot\front;
index index.html index.htm;
}
1
2
http://192.168.3.4
D:\develop\boot\front/

本文地址: https://github.com/maxzhao-it/blog/post/ec5ec98b/

启动

1
2
3
4
5
6
7
d:
cd D:\develop\boot
set "JAVA=%JAVA_HOME%\bin\java.exe"
set "SERVER_JVM_OPTS=-server -Xms2g -Xmx2g -Xmn1g -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=320m -XX:-OmitStackTraceInFastThrow -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=%BASE_DIR%\logs\java_heapdump.hprof -XX:-UseLargePages"
set "SERVER_OPTS= -jar boot.jar "
set COMMAND="%JAVA%" %SERVER_JVM_OPTS% %SERVER_OPTS% maxzhao.boot.app %*
%COMMAND%

停止

1
2
3
4
5
6
7
8
9
10
if not exist "%JAVA_HOME%\bin\jps.exe" echo Please set the JAVA_HOME variable in your environment, We need java(x64)! jdk8 or later is better! & EXIT /B 1

setlocal

set "PATH=%JAVA_HOME%\bin;%PATH%"
echo killing boot server

for /f "tokens=1" %%i in ('jps -m ^| find "maxzhao.boot.app"') do ( taskkill /F /PID %%i )

echo Done!

本文地址: https://github.com/maxzhao-it/blog/post/c6860cfb/

Jenkins 是一款非常强大的持续集成工具

Jenkins需要安装 Java8 or Java11

安装 Java8

1
2
sudo yum install -y java-1.8.0-openjdk-devel
java -version

安装 Jenkins

To use this repository, run the following command:

1
2
3
4
5
6
sudo yum upgrade
sudo wget -O /etc/yum.repos.d/jenkins.repo https://pkg.jenkins.io/redhat-stable/jenkins.repo
sudo rpm --import https://pkg.jenkins.io/redhat-stable/jenkins.io.key
sudo yum install epel-release # repository that provides 'daemonize'
# yum install java-11-openjdk-devel
sudo yum install jenkins

If you’ve previously imported the key from Jenkins, the rpm --import will fail because you already have a key. Please
ignore that and move on.

The rpm packages were signed using this key:

1
2
3
4
pub   rsa4096 2020-03-30 [SC] [expires: 2023-03-30]
62A9756BFD780C377CF24BA8FCEF32E745F2C3D5
uid Jenkins Project
sub rsa4096 2020-03-30 [E] [expires: 2023-03-30]

下载安装

GitHub地址

1
rpm -ivh jenkins-2.327-1.1.noarch.rpm

启动

1
2
3
4
sudo systemctl start jenkins
sudo systemctl status jenkins
sudo systemctl enable jenkins
sudo cat /var/lib/jenkins/secrets/initialAdminPassword

访问

http://192.168.2.250:8080

输入 initialAdminPassword 文件中的密码

配置中文

插件管理中安装 locale插件。

系统管理配置中找到 Default Language = zh_CN

参考官网

官网 doc book install linux

本文地址: https://github.com/maxzhao-it/blog/post/e1cf5d/

下载

只需要更换仓库名称:http://32.1.0.x:8081/service/rest/repository/browse/maven-snapshot/

1
wget -m -r -e robots=off -A jar,pom,html -U mozilla  http://32.1.0.x:8081/service/rest/repository/browse/maven-snapshot/

上传

脚本:

1
2
3
4
5
6
7
8
9
#!/bin/bash
USERNAME="$1"
PASSWORD="$2"
REPO_URL="$3"
echo 'USERNAME' $USERNAME
echo 'password' $PASSWORD
echo 'REPO_URL' $REPO_URL

find . -type f -not -path './mavenimport\.sh*' -not -path './index\.html*' -not -path '*/\.*' -not -path '*/\^archetype\-catalog\.xml*' -not -path '*/\^maven\-metadata\-local*\.xml' -not -path '*/\^maven\-metadata\-deployment*\.xml' | sed "s|^\./||" | xargs -I '{}' curl -v -u $USERNAME:$PASSWORD --upload-file {} ${REPO_URL}/{} ;

执行

1
./mavenimport.sh admin admin http://nexus/repository/maven/

原文

url 上传包到nexus

1
curl -u "$USERNAME:$PASSWORD" -X PUT -v -T localfile ${REPO_URL}/filename 

官方api

官方

1
2
3
curl -v -u admin:admin123 -X POST 'http://localhost:8081/service/rest/v1/components?repository=maven-releases' -F maven2.groupId=com.google.guava -F maven2.artifactId=guava -F maven2.version=24.0-jre -F maven2.asset1=@guava-24.0-jre.jar -F maven2.asset1.extension=jar -F maven2.asset2=@guava-24.0-jre-sources.jar -F maven2.asset2.classifier=sources -F maven2.asset2.extension=jar

curl -v -u admin:admin123 -F "maven2.generate-pom=false" -F "maven2.asset1=@/absolute/path/to/the/local/file/pom.xml" -F "maven2.asset1.extension=pom" -F "maven2.asset2=@/absolute/path/to/the/local/file/product-1.0.0.jar;type=application/java-archive" -F "maven2.asset2.extension=jar" "http://localhost:8081/service/rest/v1/components?repository=maven-releases"

另一个批量脚本

1
2
3
4
5
6
7
8
9
10
11
12
13
#!/bin/bash
while getopts ":r:u:p:" opt; do
  case $opt in
      r) REPO_URL="$OPTARG"
      ;;
      u) USERNAME="$OPTARG"
      ;;
      p) PASSWORD="$OPTARG"
      ;;
  esac
done
 
find . -type f -not -path './mavenimport\.sh*' -not -path '*/\.*' -not -path '*/\^archetype\-catalog\.xml*' -not -path '*/\^maven\-metadata\-local*\.xml' -not -path '*/\^maven\-metadata\-deployment*\.xml' | sed "s|^\./||" | xargs -I '{}' curl -v -u "$USERNAME:$PASSWORD" --upload-file {} ${REPO_URL}/{} ;

执行

1
./mavenimport.sh -u admin -p admin -r http://nexus/repository/maven/

批量下载NPM

1
wget -m -r -e robots=off -A jar,pom,html,tgz -U mozilla  http://32.1.0.x:8081/service/rest/repository/browse/maven-snapshot/

上传NPM

1
curl -v -u admin:admin -X POST "http://32.1.0.x:8081/service/rest/v1/components?repository=npm-skytech" -H "accept: application/json" -H "Content-Type: multipart/form-data" -F "npm.asset=@cordova-icon-splash/-/cordova-icon-splash-0.0.1.tgz;type=application/x-compressed"

批量下载 NPM

脚本 npmimport.sh

1
2
3
4
5
6
7
8
9
10
11
#!/bin/bash
USERNAME="$1"
PASSWORD="$2"
NEXUS_URL="$3"
REPONAME="$4"
echo 'USERNAME' $USERNAME
echo 'password' $PASSWORD
echo 'NEXUS_URL' $NEXUS_URL
echo 'REPONAME' $REPONAME

find . -type f -not -path './mavenimport\.sh*' -not -path '*/\.*' -not -path '*/\^archetype\-catalog\.xml*' -not -path '*/\^maven\-metadata\-local*\.xml' -not -path '*/\^maven\-metadata\-deployment*\.xml' | sed "s|^\./||" | xargs -I '{}' curl -v -u "$USERNAME:$PASSWORD" -X POST "$NEXUS_URL/service/rest/v1/components?repository=$REPONAME" -H "accept: application/json" -H "Content-Type: multipart/form-data" -F "npm.asset=@{};type=application/x-compressed" ;

执行

1
./npmimport.sh  admin  admin http://32.1.0.x:8081 npm-hosts

后台wget

1
2
wget -b
while :;do ps -ef|grep wget ;sleep 1 ;done

本文地址: https://github.com/maxzhao-it/blog/post/7c1db227/

云服务器群中有只有一个服务器可以互联网访问,需要访问云上的数据库,需要通过互联网服务器代理出来临时使用。

云服务器群中,有一台服务器需要临时访问客户端本机的某个服务,比如 MySQL 数据库。

这里使用 SSH 的反向代理,把客户端本机的端口映射到服务器上。

在客户端本机执行:

1
2
# 云服务器内网端口:本地IP:本地端口   互联网服务器  -p ssh端口(默认22)
ssh -CNfR 3306:127.0.0.1:3306 root@x.x.x.x -p 22

此时,本地数据库的 3306 端口就被映射到 x.x.x.x3306 端口上,线上就可以直接连接了。

参数:

1
2
3
4
5
-f 后台执行ssh指令
-C 允许压缩数据
-N 不执行远程指令
-L 将本地的某个端口转发到远端指定机器的指定端口
-R 讲远端指定及其的指定端口转发到本地的某个端口

本文地址: https://github.com/maxzhao-it/blog/post/85a72d31/

云服务器群中有只有一个服务器可以互联网访问,需要访问云上的数据库,需要通过互联网服务器代理出来临时使用。

简单来说正向代理就是:客户端A,通过互联网B主机,访问云服务器局域网C主机(B主机可以访问到C主机)。

在客户端本机执行:

1
2
# 本地端口:C主机内网IP:C主机内网端口   互联网B主机  -p 互联网B主机ssh端口(默认22)
ssh -fNL 3306:192.168.1.2:3306 root@x.x.x.x -p 22

此时,云服务器中数据库的 3306 端口就被映射到当前客户端本机的 3306 端口上,MySQL 工具直接连接 127.0.0.1:3306 就可以了。

参数:

1
2
3
4
5
-f 后台执行ssh指令
-C 允许压缩数据
-N 不执行远程指令
-L 将本地的某个端口转发到远端指定机器的指定端口
-R 讲远端指定及其的指定端口转发到本地的某个端口

本文地址: https://github.com/maxzhao-it/blog/post/a203dfb8/

前言

项目中版本发布需要做一个版本管理工具,项目使用 SpringBoot 框架。

目前有两款 liquibaseflyway

flyway不支持并发,也就是集群项目会执行多次,进而否掉。

Liquibase

  • 支持执行锁、回滚;
  • 支持MySQL, PostgreSQL, Oracle, Sql Server等;
  • 支持多开发者(每个脚本必须写 author );
  • 多种运行方式:命令行、Spring集成、Maven插件等

官网

Liquibase文件结构:

1
2
3
4
5
6
7
8
9
10
databaseChangeLog
├── createTable
| ├── column
| ├── ...
| └── remarks
├── createView
| ├── ...
| └── viewName
├── ...
└── sqlFile

Liquibase使用

Maven引入

1
2
3
4
5
6

<dependency>
<groupId>org.liquibase</groupId>
<artifactId>liquibase-core</artifactId>
<version>4.6.0</version>
</dependency>

配置

application.yml 文件配置

1
2
3
4
5
6
7
8
9
10
11
12
spring:
liquibase:
# 开启(默认true)
enabled: true
# 文件路径
change-log: classpath:/liquibase/change_log/Init_table.xml
# 是否先删除数据库模式(默认 false)
drop-first: false
# 版本记录表名
database-change-log-table: DATABASECHANGELOG
# 版本记录执行锁
database-change-log-lock-table: DATABASECHANGELOGLOCK

Init_table.xml 文件配置

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
<?xml version="1.0" encoding="UTF-8"?>
<databaseChangeLog
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://www.liquibase.org/xml/ns/dbchangelog"
xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-3.1.xsd">
<changeSet id="V0.0.1-20211017-001" author="maxzhao">
<createTable tableName="a_demo_user" remarks="用户表">
<column name="id" type="bigint" remarks="用户主键">
<constraints nullable="false" primaryKey="true" primaryKeyName="pk_a_demo_user_id"/>
</column>
<column name="username" type="varchar(100)" remarks="用户名">
<constraints nullable="false"/>
</column>
<column name="password" type="varchar(100)" remarks="密码">
<constraints nullable="false"/>
</column>
</createTable>
</changeSet>
<!--<changeSet id="V0.0.1-20211017-001" author="maxzhao">-->
<!-- SQL 文件的方式,不推荐,不能兼容不同数据库 -->
<!--<sqlFile path="test.sql"/>-->
<!--</changeSet>-->
<!-- 加载其它文件 -->
<!--<include file=""/>-->
</databaseChangeLog>

注意:

  • ID是唯一的,是存储数据库中判断 ChangeSet 是否执行的重要依据
  • SQL 脚本文件不应该包含 schema 名称
  • 表、字段需要添加 remarks 注释
  • 已经执行的 changeSet 禁止修改,启动会报错。
  • 不要随便升级版本,特别是大版本。不同版本的 CHangeSet MD5SUM 算法很可能不一样。
  • 不要添加业务数据的修改,可能换个项目就不能用了。

生成已存在表结构

1
2
3
4
# 生成表结构
liquibase --driver=com.mysql.cj.jdbc.Driver --classpath=mysql-connector-java-8.0.26.jar --changeLogFile=./dbchangelog.xml --url="jdbc:mysql://localhost:3306/blog" --username=root --password=root generateChangeLog
# 生成表数据
liquibase --driver=com.mysql.cj.jdbc.Driver --classpath=mysql-connector-java-8.0.26.jar --changeLogFile=./dbchangelog.xml --url="jdbc:mysql://localhost:3306/blog" --username=root --password=root --diffTypes=data generateChangeLog

本文地址: https://github.com/maxzhao-it/blog/post/cf860b21/