以前,還未畢業,憑借自己三腳貓的功夫,只會在Windows環境中使用tomcat容器把項目跑起來。
以前的操作是,利用Eclipse把項目導出成War包,放到tomcat的webApp文件夾中,鼠標點點運行tomcat即可。現在想想,簡直low到爆。
實習了小半年,自己搞了一個小小的java項目,決定把它部署到新買的Linux服務器上去。順便提高一下自己的Linux基礎。
前期准備
1.一台Linux服務器(centOS7)
2.你的工作台 (mac電腦)
3.項目源碼(使用sprintBoot+springDateJpa,使用mySql數據庫)
一、安裝配置MySql數據庫
打算先把MySQL數據庫裝mac上做成數據庫服務。
(1)官網下載安裝包(http://dev.mysql.com/downloads/mysql/)
(2)下載mac版本的mysql,mac版本安裝好之后會在系統偏好設置里面出現一個mysql服務(但是作為程序員,規定自己不能使用圖形用戶界面)
(3)定義別名使用命令行的方式啟動停止mysql
alias mysqlstart=sudo /usr/local/mysql/support-files/mysql.server start
alias mysqlstop=sudo /usr/local/mysql/support-files/mysql.server stop
(4)配置mysql環境變量。
1. vi ~/.bash_profile
2. export PATH=${PATH}:/usr/local/mysql/bin
3. source ~/.bash_profile
(5)修改數據庫root密碼。安裝過程中,mysql安裝程序會自動給你一個初始化密碼(一定要保存好,不然有點麻煩)。
1.登陸數據庫 mysql -u root -p
2.修改密碼 mysql> SET PASSWORD FOR 'root'@'localhost' = PASSWORD('newpass');
(6)添加一個mysql的用戶,並允許該用戶遠程訪問數據庫
1.mysql -u root -p
2.CREATE USER 'guxiaoli'@'localhost' IDENTIFIED BY '123456';
3.grant all PRIVILEGES on dateBase.* to guxiaoli@'%' identified by '123456';(授權guxiaoli用戶可以使用任意ip訪問‘dateBase數據庫的所有表’)
(dateBase.* 代表某數據庫的某表,所有可用*.*。'%'代表所有ip,如果限定ip,把ip替換掉%。如果不授權遠程賬號,將會出現Host 'XXX' is not allowed to connect to this MySQL server錯誤)
(7)改變mysql編碼格式。mysql默認的編碼格式是laint1。需要將其改變成UTF-8編碼格式。
1.安裝好的mysql,會在目錄 /usr/local/mysql/support-files中,有個文件,名為my-default.cnf
2.把my-default.cnf文件移動到 /etc目錄下,並改名為 my.cnf
3.修改my.cnf文件內容。在[mysqld] 下面添加 'character_set_server=utf8'
4.重啟mysql服務
踩坑提醒: 1.再用命令行操作mysql數據庫的時候,命令行末尾要加上分號。加了分號之后mysql才會識別這是一條完成的命令,再去執行。
2.!!!一定要把my-default.cnf 移到/etc目錄下!!!。我改了半天的my-default.cnf文件,重啟mysql...重啟mac...並無卵用。
3.在啟動mysql的時候可能會報錯:The server quit without updating PID file (/usr/local/mysql/data/localhost.localdomain.pid).
報這個錯誤的原因有很多種。試試這種方法:在my.cnf的配置文件里指定pid File,
[mysqld] 下 pid-file = /usr/local/mysql/data/mysql.pid
4.別忘了允許用戶遠程連接mysql
二、搭建Linux環境
搞了個Linux服務器,對自己狠一點,不要裝圖形化界面,全程命令行。好么。
(1)ssh。為了能更好的訪問並操作Linux系統,搭建ssh無密碼服務登陸。簡便又安全。
1.進入到Linux服務器中(ctrl+alt+F2進入終端)
2.查看系統有沒有ssh服務 rpm -qa |grep ssh
3.如果沒有安裝ssh服務 安裝ssh服務 yum install ssh
4.啟動,停止,重啟ssh服務, service sshd start | stop | restart
5.ssh的默認端口是22
(2)開放Linux系統端口。centOS7的系統自帶防火牆,阻止外界訪問本機的所有端口。需要把22,80,8080等需要的端口開放。
1. cd /etc/sysconfig
2.修改該目錄下的iptables-config 文件
3.加入下面幾行,開放80,22,8080端口
-A RH-Firewall -1 -INPUT -m state --state NEW -m tcp -p tcp --dport 80 -j ACCEPT
-A RH-Firewall -1 -INPUT -m state --state NEW -m tcp -p tcp --dport 22 -j ACCEPT
-A RH-Firewall -1 -INPUT -m state --state NEW -m tcp -p tcp --dport 8080 -j ACCEPT
4.重啟防火牆 service iptables restart
(3)JDK 。centOS系統有自帶的java環境。是openJDK的版本。開發環境中使用的是sun的JDK,決定保持一致。
1.查看本機的jdk版本 rpm -qa | grep jdk
2.卸載open jdk yum -y remove openJDK
3.下載並sun的JDK
三、打包項目並傳到Linux機器上
(1)maven。
1.maven package。。。
(2)把打好的jar包傳到Linux機器上
1.scp命令 。 scp source target.
四、部署java項目作為Linux的服務
如果直接在Linux系統上運行命令java -jar app.jar,即可把項目正常的運行起來,但是這樣不好。比如退出ssh的時候就會結束進程。
所以把java進程配置成服務。service myapp start | stop | restart 簡單的命令即可搞定。
(1)增加Linux服務,是要在/etc/init.d目錄下添加shell腳本
(2)貼一下我的腳本。。。
#!/bin/sh #chkconfig:2345 80 90(這個作用是為了可以把服務加入到 chkconfig list中去) #description:mylove SERVICE_NAME=mylove (服務名) PATH_TO_JAR=/data/mylove/mylove.jar (jar包的位置) PID_PATH_NAME=/data/mylove/mylove-pid (存放進程號的文件) case $1 in start) echo "Starting $SERVICE_NAME ..." if [ ! -f $PID_PATH_NAME ]; then nohup java -jar $PATH_TO_JAR /tmp 2>> /dev/null >> /dev/null & echo $! > $PID_PATH_NAME echo "$SERVICE_NAME started ..." else echo "$SERVICE_NAME is already running ..." fi ;; stop) if [ -f $PID_PATH_NAME ]; then PID=$(cat $PID_PATH_NAME); echo "$SERVICE_NAME stoping ..." kill $PID; echo "$SERVICE_NAME stopped ..." rm $PID_PATH_NAME else echo "$SERVICE_NAME is not running ..." fi ;; restart) if [ -f $PID_PATH_NAME ]; then PID=$(cat $PID_PATH_NAME); echo "$SERVICE_NAME stopping ..."; kill $PID; echo "$SERVICE_NAME stopped ..."; rm $PID_PATH_NAME echo "$SERVICE_NAME starting ..." nohup java -jar $PATH_TO_JAR /tmp 2>> /dev/null >> /dev/null & echo $! > $PID_PATH_NAME echo "$SERVICE_NAME started ..." else echo "$SERVICE_NAME is not running ..." fi ;; status) status) if [ -f $PID_PATH_NAME ]; then PID=$(cat $PID_PATH_NAME); echo "$SERVICE_NAME is running, pid=$PID" else echo "$SERVICE_NAME is not running..." fi ;; esac
(3)注意包文件存放位置的權限,例如存放位置為/data/mylove。需要給他讀寫執行的權限。sudo chmod -R 775 /data
(4)啟動服務。service mylove start
tips: nohup 命令即可讓程序在后台運行。
。。。。。待續
將工程打包---通過WinScp將jar包傳輸到Linux系統下(如果原來有項目 可以將原來的jar改個名稱 作為備份)----通過Xshell 查看端口 殺死進程 運行jar包並打印日志 --完成

