Linux-FPM
FPM安装
1 | yum install ruby-devel gcc make rpm-build rubygems |
FPM使用之python转RPM
1 |
1 | yum install ruby-devel gcc make rpm-build rubygems |
1 |
环境需求安装rpm
1 | #centos |
添加插件
1 | <properties> |
空配置
1 | <plugin> |
package rpm:rpm -U
1 | # 安装包名 |
安装制作工具yum -y install rpmdevtools
会自动依赖安装rpm-build
生成开发目录rpmdev-setuptree
会在~
目录生成rpmbuild
文件目录
1 | `-- rpmbuild |
创建源代码
1 | ~> mkdir -p rpmbuild/SOURCES/hello-world-1.0.0 |
打包源码tar zcvf hello-world-1.0.0.tar.gz hello-world-1.0.0
编写spec文件cd ~/rpmbuild/SPECS
然后vim hello-world.spec
创建hello-world.spec
文件,vim会自动根据后缀spec加载默认模版,修改模版如下
1 | Name: hello-world |
执行rpmbuild -ba hello-world.spec
进行打包最后目录结构
1 | . |
安装打包好的安装包yum install ~/rpmbuild/RPMS/x86_64/hello-world-1.0.0-1.el7.x86_64.rpm
测试
1 | > hello-world |
新建添加本地源vim /etc/yum.repos.d/CentOS-Media.repo
,内容如下
1 | [c7-media] |
安装yum install createrepo
新建仓库目录结构,然后放入需要的安装包,及依赖包
1 | `-- ntrepo |
在ntrepo目录执行createrepo .
会生成多一个目录,以及包的索引
1 | `-- nantianrepo |
然后执行yum clean all
清理缓存
最后测试安装yum install hello-world
会自动依赖
安装yum ``install
yum-plugin-downloadonly
下载依赖包yum install –downloadonly –downloaddir= <依赖包存储路径> <需要下载依赖包的安装包名>
例如:
1 | yum install --downloadonly --downloaddir=/data/rpm mongodb |
错误信息分析,关键信息cd jdk-8u77-linux-x64-1.0.0
1 | 执行(%prep): /bin/sh -e /var/tmp/rpm-tmp.QO57WH |
原因,是因为解压之后路径找不到对应目录
解决:
方式一手动解压,重新手动压缩
方式二修改spec文件中的prep,然后查看BUILD里面的实际解压目录/root/rpmbuild/BUILD/jdk1.8.0_77
然后设置为实际目录即可
1 | %prep |
编译后无法运行提示无架构
1 | [root@xuan SRPMS]# yum install jdk-1.8-77.src.rpm |
解决:进错目录,这个是源代码
交换分区是在内存不足的情况下,存储长期不活跃的内存,但是性能受硬盘影响,下降10倍不等,固态稍微好一点,机械硬盘简直卡死建议不设置
dd if=/dev/zero of=/home/swap bs=1024 count=3764224
其中**3764244=1024x2x实际内存大小(M)**其中2代表虚拟内存是实际内存的2倍mkswap /home/swap
swapon /home/swap
echo "/home/swap swap swap defaults 0 0" >> /etc/fstab
reboot
非必须,然后执行df -h
就可以看到swap有值了swapoff /home/swap
rm -fr /home/swap
/etc/fstab
删除行/home/swap swap swap defaults 0 0
即可cdn是资源加速缓存的服务
dig coscdn.xxxx.com
访问资源时读取老的资源不更新
解决:在CDN设置里面的访问控制->过滤参数
按钮关闭即可
原因:打开之后回忽略url中?号后面的所有参数,所以带参数时,就不会访问新资源
就是一种
项目源码见xuanfong1/springLeaning/protobuf
在项目引入maven/gradle依赖compile 'com.google.protobuf:protobuf-java:3.6.1'
下载代码生成工具,作用是将file.proto
文件转换成其他语言(java/C++/GO/Python/C#/Dart)的文件,eg:这里选择window平台,版本和maven版本一致,因此选择protoc-3.6.1-win32.zip,其他操作系统选择对应平台即可,然后解压,在bin目录可以看到protoc.exe
文件,复制重命名protoc-3.6.1-win32.exe
为了好区分版本,其他文件用不着
编写一个测试PersonMsg.proto
文件
1 | message Person { |
使用工具进行java代码生成,执行.\protobuf\protoc-3.6.1-win32.exe --java_out=.\protobuf\src\main\java\com\exxk\protobuf\ .\protobuf\src\test\protobuf\PersonMsg.proto
注意,这里生成的代码PersonMsg.java
里面是没有包名的,可以手动加入
在ProtobufApplicationTests.java
编写测试方法
1 | import java.io.ByteArrayInputStream; |
设置自动生成包名,修改PersonMsg.proto
文件
1 | //指定编译版本2或3 |
修改命令.\protobuf\protoc-3.6.1-win32.exe --java_out=.\protobuf\src\main\java\ .\protobuf\src\test\protobuf\PersonMsg.proto
插件地址:google/protobuf-gradle-plugin
在父级build.gradle
添加
1 | buildscript { |
在子项目build.gradle
添加
1 | apply plugin: 'com.google.protobuf' |
然后点击右侧gradleprotobuf->Tasks->other->generateProto
编译proto文件生成java文件
解决不同平台开发编译问题,功能能实现自动根据不同系统(os/win/linux)调用不同的protoc工具
配置更改一直不生效,一直使用最新的3.6.0版本的protoc工具
目录结构:
1 | ├─src |
编写pom.xml
添加插件
1 | <project ...> |
使用,点击右侧插件里面的protobuf->protobuf:compile
或者执行mvn protobuf:compile
protoSourceRoot
目录是,是以该目录为相对路径,因此代码里面的import "response/xxx.proto
要加上response
二级目录,但是如果可以设置protoSourceRoot为两个或二级目录就不需要修改,clearOutputDirectory
设置true,也不会清理其他目录中其他文件Gogs内存占用小
部署脚本docker-compose.yml
1 | version: '3' |
第一次运行需要初始化,网页里面设置见Application
后面可以通过脚本/dockerdata/v-gogs/gogs/conf/app.ini
修改所有配置
1 | cd /usr/lib/ |
sudo vim ~/.bashrc
在文件末尾添加
1 | export JAVA_HOME=/usr/lib/jvm/jdk1.8.0_201 |
执行source ~/.bashrc
生效配置
测试java -version
进入tomcat安装目录,windos和linux通用,然后右键打开ubunt,执行./catalina.sh run
tomcat不要放Program Files
带空格或特殊字符的路径,在linux下识别不了
右键项目->Add Frameworks Support->[✔]maven
会自动整理项目结构
修改pom.xml
1 | <?xml version="1.0" encoding="UTF-8"?> |
添加maven解决依赖,可以解压jar查看具体版本(有的没有,可以上传到nexus仓库)
注意:编译不报错,不代表maven依赖正确
在APP\src\main\webapp\WEB-INF\web.xml
添加web.xml
,里面有启动顺序
移动配置文件conf复制到APP\src\main\resources
代码如果采用绝对路径引用配置文件,去掉CONFIG_PATH = "/mybatis-config.xml";
里面的/
会读取默认的APP\src\main\resources
目录下的配置文件
注意:win10下注意tomcat的路径不能含空格等特殊符号,例如Program Files
等,错误显示为某某文件找不到
现象
1 | [WARNING] Using platform encoding (GBK actually) to copy filtered resources, i.e. build is platform dependent! |
解决:在pom.xml添加
1 | <project ...> |
[ERROR] /.../SysData.java:[12,81] -source 1.5 中不支持 diamond 运算符 (请使用 -source 7 或更高版本以启用 diamond 运算符)
解决:在pom.xml添加
1 | <project ...> |
NoClassDefFoundError: redis/clients/jedis/JedisCommands
分析:编译打包时并没有任何错误,因为其他包里面有jedis的这个子包,所以编译通过了,但是运行时却找不到相应的版本所以导致该错
解决:添加相应的jedis
依赖
SchedulerException: SchedulerPlugin class 'org.quartz.plugins.xml.XMLSchedulingDataProcessorPlugin' could not be instantiated.
分析:因为使用声明式的不能直接分析出依赖问题
解决:找到XMLSchedulingDataProcessorPlugin
该class,复制该类的所有import
到项目里面的一个随便的java文件,查看是否找不到包(有红线),然后添加缺的包的依赖
NoClassDefFoundError
一般是指没有jar
常用命令
1 | #启动 |
nginx.conf
1 | #指定nginx 用户 组 |
子配置目录vhost/*.conf
,支持多个域名对应服务的配置文件,一个服务对应一个二级域名文件
1 |
|
1 | upstream res { |
1 | server { |
settings->Automatically follow redirects->Default: Settings->general->ssl certificate verification(off)->certificates->client certificates(添加证书文件即可)
阿里云申请证书
选择文件验证,下载文件复制类容
在nginx添加如下
1 | server { |
点击验证,验证通过后,等待审核通过
下载nginx证书文件
上传证书文件到nginx服务器,配置nginx证书文件
1 | server{ |