1,前言
在github上添加ssh-key,
本地生成公私钥: ssh-keygen -t rsa -b 4096 -C "my remark test"
路径:https://github.com/settings/keys , 点击【New SSH key】,把 /root/.ssh 目录下的id_rsa.pub中的内容, 复制后,粘贴到 【Key】中即可。
在github上添加好以后,在本地电脑上执行: ssh -T git@github.com 即可看到是否添加成功。这一步一定要执行,不然不能正常拉取代码。
2,从git拉取JAVA代码,并打包后移到对应的位置
#!/bin/bash
# 文件名: install.sh
codePath=/home/myproject_code
jarPath=myproject-biz/myproject-biz-provider/target
targetPath=/home/rundir/jar
targetFile=myproject-biz-provider.jar
branchName=master
cd $codePath
git checkout $branchName
git pull# 如果目标文件夹不存在,则创建
mkdir -p $targetPath
mvn clean install -DskipTests# 如果旧文件存在,先删除旧文件
if [ -e $targetPath/$targetFile ]; then
rm -rf $targetPath/$targetFile
fi
cp $codePath/$jarPath/$targetFile $targetPath/
3,在目标机器上发布新jar并运行
#!/bin/bash
# 文件名: restart.sh
# 说明: myproject-java的启动脚本,备份旧jar包,重命名目标文件并重启。JVM_OPTS="-XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=256m -Xms128m -Xmx128m -Xmn32m -Xss256k -XX:SurvivorRatio=8 -XX:+UseConcMarkSweepGC"
# 打包后的jar包的原文件名字
originJar=myproject-java-biz-provider.jar
# 重命名jar文件,以区分原文件与正式使用的文件
targetJar=myproject-java-prod.jar
activeEnv=prod
# 用于备份旧文件时,重命名时添加文件名后缀
ct=$(date '+%m%d%H%M')
currDir=$(pwd)
# jvm启动参数
JVM_OPTS="-XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=256m -Xms128m -Xmx128m -Xmn32m -Xss256k -XX:SurvivorRatio=8 -XX:+UseConcMarkSweepGC"# 杀死进程
ps -ef | grep -i $targetJar | grep -v grep | awk '{print $2}'|xargs -i kill -9 {}
sleep 2
printf "Finish kill, sleep, start run\n"
# 重命名jar文件,并移到备份文件夹中
mkdir -p bakjar
if [ -e $originJar ]; then
if [ -e $targetJar ]; then
mv $targetJar bakjar/$targetJar$ct
fi
mv $originJar $targetJar
sleep 1
fi
nohup java -server -jar $currDir/$targetJar --spring.profiles.active=$activeEnv -Dspring.config.location=application-$activeEnv.yaml 1> /data/logs/myproject-java/out.log 2> stderr.log &printf "\n\n\n"
jps |grep -v Jps
printf "\n\n\n"
BUILD_ID=dontKillMe
4,从github拉取golang代码并打包成linux可执行文件,并拷到目标文件夹(拷之前,删除旧的文件夹)
#!/bin/bash
# 文件名: pack-code.sh
# 说明: my-go-project 的编译打包脚本。打包后,拷到目标目录。codePath=/home/datum/code/my-go-project
targetPath=/home/rundir/jar
targetFile=my-go-project.linux
branchName=master
cd $codePath
git checkout $branchName
git pull
go build -o $targetFileif [ -e $targetPath/$targetFile ]; then
rm -rf $targetPath/$targetFile
fi
cp $codePath/$jarPath/$targetFile $targetPath/
pwd
printf "\nfinish pack $targetFile \n\ntarget dir files:\n"
ls -l $targetPath
5,拉取go编译好的程序,重命名并启动
#!/bin/bash
# 文件名: deploy.sh
# 说明: mygoproject 的程序拉取,步骤:备份旧文件,重命名新文件,杀掉旧进程,启动新程序。
currDir=$(pwd)
orginalProgram=mygoproject.linux
targetFile=mygoproject-prod.linux
configFile=./application.yaml
programUrl=https://download.mydomain.com/file/mygoproject.linux
bakPath=bakfile
# 用于备份旧文件时,重命名时添加文件名后缀
ct=$(date '+%m%d%H%M%S')# 重命名jar文件,并移到备份文件夹中
mkdir -p $bakPathfileFullPath=$bakPath/$targetFile$ct
printf "\nfileFullPath is $fileFullPath\n\n"
# 如果旧程序存在,移到备份文件夹并重命名
if [ -e $currDir/$targetFile ]; then
printf "exist file: $targetFile\n\n"
mv $targetFile $bakPath/$targetFile$ct
fi
printf "param is : mv $targetFile $bakPath/$targetFile$ct \n\n"wget $programUrl
sleep 1
mv $orginalProgram $targetFile
chmod +x $targetFile
ps -ef | grep $targetFile | grep -v grep | awk '{print $2}' | xargs -r kill -9nohup ./$targetFile --config-file="$configFile" 1> out.log 2>err.log &
pwd
printf "\nfinish restart $targetFile \n\ntarget dir files:\n"
ls -l $targetPath
6,ubuntu24必装命令
telnet, plocate, lrzsz, zip, unzip, gcc, g++, iputils-ping , net-tools , git , dos2unix
执行:
apt update && apt -y install telnet plocate lrzsz zip unzip gcc g++ iputils-ping net-tools git dos2unix
mysql8依赖:
apt -y install needrestart
apt -y install mecab-ipadic mecab-utils mecab-ipadic-utf8 libnuma1 libmecab2 psmisc
7,关于minio部署
参考文档:
Deploy MinIO: Single-Node Single-Drive — MinIO Object Storage for Linux
下载:
wget https://dl.min.io/server/minio/release/linux-amd64/minio
添加【公开读,私有写】:
{
"Version": "2012-10-17",
"Statement": [{
"Effect": "Allow",
"Principal": {
"AWS": ["*"]
},
"Action": ["s3:GetObject"],
"Resource": ["arn:aws:s3:::pubread/*"]
}, {
"Effect": "Deny",
"Principal": {
"AWS": ["*"]
},
"Action": ["s3:PutObject"],
"Resource": ["arn:aws:s3:::pubread/*"]
}
]
}
访问: 域名+bucket名称+路径名+文件名
minio启动脚本
#!/bin/bash
# 文件名: runminio.sh
# minio启动文件。# 数据目录
dataPath=/home/mydata/appdata/minio
currDir=$(pwd)
ct=$(date '+%m%d%H%M')
appName=minio
if [ ! -d $dataPath ]; then
mkdir -p $dataPath
cd $dataPath
mkdir data conf log
cd $currDir
sleep 1
fi
export MINIO_ROOT_USER=admin
export MINIO_ROOT_PASSWORD=MyPassword123
# 如果旧进程存在,则先kill
#ps -ef | grep -i $appName | grep -v grep | awk '{print $2}'|xargs -i kill -9 {}
sleep 2
nohup ./minio server $dataPath/data --config-dir $dataPath/conf --console-address ":13127" --address ":13128" > out-minio.log 2>&1 &printf "finish start $appName"
ps -ef | grep -i $appName | grep -v grep
minio端口通过caddy开放出来
https://myminio.my-domain:13131 {
handle_path /* {
reverse_proxy * http://127.0.0.1:13127 {
header_down -'proxy-connection'
flush_interval 300ms
transport http {
dial_timeout 10s
keepalive 10m
}
}
}
}
https://myminio.my-domain:13132 {
handle_path /* {
reverse_proxy * http://127.0.0.1:13128 {
header_down -'proxy-connection'
flush_interval 300ms
transport http {
dial_timeout 10s
keepalive 10m
}
}
}
}
end