阿里云服务器部署项目笔记整理(Linux操作系统)
1. 项目打包(jar)
l validate:验证项目的正确性以及包含所有必要的信息
l compile:编译源码
l test:编译和运行测试代码
l package:把编译好的源码打成包,如jar
l verify :运行任何检查,验证包是否有效且达到质量标准。
l install:把项目安装到本地仓库中去,作为本地其他项目的依赖
l deploy:把最终的包拷贝到远程仓库上和其他开发者和项目分享
l clean : 清空生成的文件
举例,Idea软件打包,利用maven管理工具的打包方法,如图所示,依次点击蓝色的部分。
jar包保存路径:…/项目/prometheus-admin/target/项目名.jar
ps:可有可无的配置文件:…/项目/prometheus.sh
功能:运行后项目将持续保持运行状态,命令框可关闭,不用的话命令框一关,项目停止运行,项目地址访问不到。
2. 连接数据库(MySQL)
l 1.放开3306端口,用于外部工具连接数据库。
l 2.利用工具连接服务器数据库。

l 3.连接数据库
主机ip是公网IP,端口号是放开的3306端口,用户名密码是服务器上的数据库连接用户和密码。

遇到的问题
*1130 - Host XXX is not allowed to connect to this MySQL server。
1.在用Navicat配置远程连接Mysql数据库时遇到如下报错信息,这是由于Mysql配置了不支持远程连接引起的。

2.在安装Mysql数据库的主机上登录root用户:
mysql -u root -p
3.依次执行如下命令:
- use mysql;
- select host from user where user='root';
可以看到当前主机配置信息为localhost.
4.将Host设置为通配符%
Host列指定了允许用户登录所使用的IP,比如user=root Host=192.168.1.1。这里的意思就是说root用户只能通过192.168.1.1的客户端去访问。 user=root Host=localhost,表示只能通过本机客户端去访问。而%是个通配符,如果Host=192.168.1.%,那么就表示只要是IP地址前缀为“192.168.1.”的客户端都可以连接。如果Host=%,表示所有IP都有连接权限。
注意:在生产环境下不能为了省事将host设置为%,这样做会存在安全问题,具体的设置可以根据生产环境的IP进行设置;
执行代码:
update user set host = '%' where user ='root';
Host设置了“%”后便可以允许远程访问。
5.Host修改完成后记得执行flush privileges使配置立即生效
flush privileges;
6.使用navicat 成功连接至mysql
spring+quartz报错:Table 'XXXX.QRTZ_TRIGGERS' doesn't exist
好!这个解决方法最简单!
将提示的该数据库的问题表换成大写(〜 ̄▽ ̄)〜
3. 将jar包上传至服务器
l 1.先在服务器的数据库中建库,然后把.sql的数据库脚本导入。(我是用Navicat,在t_table->转储sql文件->数据和结构,然后将SQL语句在数据库运行)。
l 2. 然后修改项目数据源
driver-class-name: com.mysql.jdbc.Driver
url: jdbc:mysql://localhost:3306/blog?useUnicode=true&characterEncoding=utf-8&useSSL=false
username: root
password: ********
l 3.检查端口是否被占用,如果没有被占用,不需要改;
#在application.yml 中
Server:
Port:****
l 4. 然后去该云服务商控制台,放行端口
l 5.利用第一点的打包将项目打包,将jar包上传至服务器。

利用工具(SSH Secure File Transfer Client)或者堡塔可视化管理系统,在根目录的mnt文件夹下建立该项目数据文件夹(/mut/data/项目名),在该文件夹下,将jar包和配置文件以同一级放在该目录下。
4. 运行jar包
进入我们上传项目的目录
[root dfsadfas]# java -jar [jar包名称].jar
- 项目就跑起来啦,但是操作界面不能关
- 访问 http://服务器IP地址:端口号
² 若是想关闭窗口,程序依然运行着,运行.sh配置文件
运行命令:./prometheus.sh start
运行后需等待一段时间才能访问,时间长短参考程序启动时间
² 关闭或更新jar包时,只需查看运行的进程pid,将jar包进程杀掉,具体操作如下:
netstat -nptl //获取运行的id

kill -9 pid 杀死端口

遇到的问题
Maven运行异常:Exception in thread "main" java.lang.UnsupportedClassVersionError
背景:
Linux平台部署maven项目,提示如下异常:
Exception in thread “main”java.lang.UnsupportedClassVersionError: com/autonavi/App : Unsupported major.minor version 51.0
异常:
Exception in thread "main" java.lang.UnsupportedClassVersionError: com/autonavi/App : Unsupported major.minor version 51.0
排查:
检查Linux服务器的java版本:
~]# java -version
java version "1.6.0_22"
OpenJDK Runtime Environment (IcedTea6 1.10.4) (rhel-1.41.1.10.4.1.alios6-x86_64)
OpenJDK 64-Bit Server VM (build 20.0-b11, mixed mode)
检查Linux服务器的javac版本:
~]# javac -version
javac 1.6.0_22
服务器java版本是一致的,没有问题,然后检查maven项目所要求的java版本,进入POM文件中查看:
<properties>
<java.version>1.7</java.version>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<start-class>com.autonavi.App</start-class>
</properties>
原来maven项目要求jdk是1.7的,而服务器是1.6的,两者不匹配才导致上述异常。
解决:
百度说是将maven项目POM文件所要求的java版本降低版本改成1.6,但是考虑到项目中可能会有些方法或类在低版本中不能使用,所以升级服务器的Java版本。
-bash: ./prometheus.sh: /bin/bash^M: bad interpreter: No such file or directory
背景:
Linux执行.sh文件,提示No such file or directory的问题的解决方法
用vim prometheus.sh进入prometheus.sh这个文件, 然后在底部模式下, 执行 :set ff 查看一下, 结果发现fileformat=dos, 看看, 果然是文件格式问题, 那怎么解决呢?
解决:
方法一:vim prometheus.sh进入prometheus.sh后, 在底部模式下, 执行:set fileformat=unix后执行:x或者:wq保存修改。 然后就可以执行./ prometheus.sh运行脚本了。(我亲自试过, 是ok的)
方法二:直接执行sed -i "s/\r//" prometheus.sh来转化, 然后就可以执行./ prometheus.sh运行脚本了。
方法三:直接执行dos2unix prometheus.sh来转化, 然后就可以执行./ prometheus.sh运行脚本了。(我的linux上执行dos2unix ./a.sh失败, 但是不要放弃啊, 加个busybox就可以了), 如下:
- dos2unix prometheus.sh
- bash: dos2unix: command not found
- [taoge@localhost learn_shell]$ busybox dos2unix prometheus.sh
- [taoge@localhost learn_shell]$

浙公网安备 33010602011771号