记一linux下部署spring boot项目过程

在linux下部署Spring Boot应用

怎么说呢?我很不擅长表达。写感觉也一样。TMD,我是不是废了。好纠结呀,就按我自己的方式来说吧!
主要记录mysql 安装过程中的一下问题。

环境说明

Centos 6 64位

安装java

查看系统内置的jdk,使用如下命令

rpm -qa | grep java

可以使用如下命令卸载

rpm -e --nodeps jdk相关名称

因为我的服务器都没有安装就跳过了这步,其实如果系统自带的版本不是很低的话,我觉得也可以使用。不必这么麻烦重装。

个人比较喜欢使用软件管理工具。如yum brew,方便省事。
使用yum搜索java

yum search java-1.8

安装java 我只装了运行环境。

yum install -y java-1.8.0-openjdk.x86_64

安装完后就可以使用如下命令看有没有成功

java -verison

安装mysql

重点来了,安装mysql是有点费事,google了好久才搞定。而且中间各种小问题。真的麻烦。

用yum安装mysql

Step1:检测系统是否自带安装mysql

yum list installed | grep mysql

Step2: 删除系统自带的mysql及其依赖

yum -y remove mysql-libs.x86_64

Step3: 给centos 添加rpm源,并选择脚新的源

wget dev.mysql.com/get/mysql-community-release-el6-5.noarch.rpm
yum localinstall mysql-community-release-el6-5.noarch.rpm
yum repolist all | grep mysql
yum-config-manager --disable mysql55-community
yum-config-manager --disable mysql56-community
yum-config-manager --enable mysql57-community-dmr
yum repolist enabled | grep mysql

Step4: 安装mysql 服务器

yum install mysql-community-server

Step5: 启动 停止 重启mysql

service mysqld start
service mysqld stop 
service mysqld restart

Step6: 设置密码

mysql> set password for 'root'@'localhost' =password('password');

以上是我看的别人的blog,我就总结一下吧。重点是给centos添加rpm源,不同的系统版本源是不一样的。这里需要注意下。详细可以查看官方说明文档

如果顺利的话,现在已装上了mysql,当你兴高采烈的输入mysql -uroot -p时。一个蛋痛的问题出现了。
密码是啥?,好像默认没有,管他三七二十一,按个enter再说。

# mysql -u root -p
Enter password:
ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: NO)

这是什么鬼哟。都没有设置哪来的密码
又不断google,得到解决方法如下:

# /etc/init.d/mysql stop
# mysqld_safe --user=mysql --skip-grant-tables --skip-networking &
# mysql -u root mysql
mysql> UPDATE user SET Password=PASSWORD('newpassword') where USER='root' and host='root' or host='localhost';//把空的用户密码都修改成非空的密码就行了。
mysql> FLUSH PRIVILEGES;
mysql> quit
# /etc/init.d/mysqld restart
# mysql -uroot -p
Enter password: <输入新设的密码newpassword>

问题有出现:提示Unknown column ‘password’ in ‘field list’

原来MySql5.7 user表没有了password字段,改名为authentication_string了

到这里mysql已经全都安装完成了。
你以为真的完了吗?太天真了,我想要远程连接我服务器上的mysql这么办呢?
下面将设置mysql远程访问。

mysql远程访问设置

step1: 连接到服务器mysql
step2:切换mysql数据库

mysql> USE mysql; 

step3:查看现有用户,密码及允许连接的主机

SELECT User, authentication_string, Host FROM user; 

step4:下面我们另外添加一个新的 root 用户, 密码mypassword, 只允许192.168.1.100连接

GRANT ALL PRIVILEGES ON *.* TO'myuser'@'192.168.1.100'IDENTIFIED BY'mypassword'WITH GRANT OPTION;

如果不需要限制某个ip 可以使用% ,表示所有ip都可以连接。

step5: 刷新权限

FLUSH PRIVILEGES;

step6:查看mysql配置文件my.cnf是否只开了127.0.0.1这个主机地址。bind-address = 127.0.0.1若是则删之。
可以通过如下命令查找my.cnf配置文件

find / -name my.cnf

step7: 重启mysql
我也不知道需不需要重启,反正我是重启后才有用的,纠结了我半天。。

上传Spring Boot项目到服务器and管理

step1:打成jar包

cd 项目根目录(和pom.xml同级)
mvn clean package
## 或者执行下面的命令
## 排除测试代码后进行打包
mvn clean package  -Dmaven.test.skip=true

step2:上传到服务器

scp test.jar(需要上传的文件) root@45.77.12.142:/root(服务器目录)

step3: 启动项目

java -jar  target/spring-boot-scheduler-1.0.0.jar

这种方式,只要控制台关闭,服务就不能访问了。下面我们使用在后台运行的方式来启动:

nohup java -jar target/spring-boot-scheduler-1.0.0.jar &

也可以在启动的时候选择读取不同的配置文件

java -jar app.jar --spring.profiles.active=dev

这里其实也不方便,如果我上传了jar包,里面包含了配置文件,想修改怎么办呢?
springboot 有读取外部配置文件的方法,如下优先级:

  • 第一种是在jar包的同一目录下建一个config文件夹,然后把配置文件放到这个文件夹下。
  • 第二种是直接把配置文件放到jar包的同级目录.
  • 第三种在classpath下建一个config文件夹,然后把配置文件放进去。
  • 第四种是在classpath下直接放配置文件。

看到上面的优先级没,我们通常在src/main/resources 文件夹下创建的application.properties 文件的优先级竟然是最低的!!!

这就很skr了。。
在服务器的jar包同目录下建config文件夹,在把配置文件放进去,随便修改就行了。

step4:停止重启项目

ps -ef|grep java 
##拿到对于Java程序的pid
kill -9 pid
## 再次重启
Java -jar  xxxx.jar

step5:使用脚本执行
在maven中加入以下配置

<plugin>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-maven-plugin</artifactId>
    <configuration>
        <executable>true</executable>
    </configuration>
</plugin>

启动方式:

./yourapp.jar

也可以做一个软链接指向你的jar包并加入到init.d中,然后用命令来启动。

ln -s /var/yourapp/yourapp.jar /etc/init.d/yourapp
chmod +x /etc/init.d/yourapp

这样就可以使用stop或者是restart命令去管理你的应用。

/etc/init.d/yourapp start|stop|restart

或者

service yourapp start|stop|restart

liunx配置

开放端口

修改防火墙配置文件

vi /etc/sysconfig/iptables 

注意:增加的开放3306端口的语句一定要在icmp-host-prohibited之前

-A INPUT -p tcp -m state --state NEW -m tcp --dport 3306 -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 8080 -j ACCEPT

重新加载规则

service iptables restart  

到此已经大致完成了,就是可能后续还得添加redis服务。

感谢万能的google及无私分享的bolg主们。

参考

springboot(十二):springboot如何测试打包部署
在linux下部署spring boot项目过程记录
MySQL给root开启远程访问权限
springboot启动读取外部配置文件
CentOS7和CentOS6怎样开启MySQL远程访问
CentOS 6.5/6.6 安装(install)mysql 5.7 最完整版教程
CentOS 安装Mysql 5.7