在雲服務器上部署自己的SpringBoot項目
因為正在開發一個個人的微信小程序項目,所以開始學習如何部署SpringBoot服務器,之前完全沒有接觸過部署服務器相關,只能從0開始摸索,網上各種文章雜亂得很,而且大多都語焉不詳,完全跟不上作者的腦回路,所以摸索得非常痛苦!
所幸最后成功了,記錄一下完整的步驟,造福后來的跟我一樣的小白們。
部署步驟
- 雲服務器的購買和配置
- 安裝JDK
- 安裝Tomcat
- 安裝svn
- 安裝Maven
- 打包SpringBoot項目
- 設置安全組
- 安裝MySQL
- 服務器的代碼更新
雲服務器的購買和配置
1. 雲服務器的選擇
我選擇的是阿里雲服務器(產品選擇為彈性計算 > 雲服務器ECS),新注冊用戶有1個月的免費試用最低套餐的優惠,足夠用來做部署實驗。
2. 操作系統的選擇
由於我們是從 0 配置,選擇 CentOS 7.4 64位純凈系統就可以了,不需要安裝其他鏡像。
連接到實例之后,先關閉防火牆和它的自啟動服務
systemctl stop firewalld.service
systemctl disable firewalld.service
安裝JDK
我在網上沒找到鏡像,只能到 oracle 官網下載,需要注意的是這個 url 應該是每個人不一樣的,所以最好你自己去獲取這個 url ,然后替換到下面的命令里
wget -O jdk-8u171-linux-x64.tar.gz http://download.oracle.com/otn-pub/java/jdk/8u171-b11/512cd62ec5174c3487ac17c61aaa89e8/jdk-8u171-linux-x64.tar.gz?AuthParam=1528361342_930e23cd80acb666184698646f076dc6
解壓
mkdir /usr/java
tar xzf jdk-8u171-linux-x64.tar.gz -C /usr/java
配置環境變量
vi /etc/profile
進入vi后,按 i 可以進行輸入,編輯完以后按 Esc ,然后輸入 :wq 即可保存並退出
在文件結尾插入以下代碼:
#set java environment
export JAVA_HOME=/usr/java/jdk1.8.0_171
export CLASSPATH=$JAVA_HOME/lib/tools.jar:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib
export PATH=$JAVA_HOME/bin:$PATH
保存退出后,運行以下命令以使更改生效
source /etc/profile
此時可以運行java -version
來確認是否配置成功
安裝Tomcat
下載 Tomcat
wget https://mirrors.aliyun.com/apache/tomcat/tomcat-8/v8.5.31/bin/apache-tomcat-8.5.31.tar.gz
解壓
tar xzf apache-tomcat-8.5.31.tar.gz
mv apache-tomcat-8.5.31 /usr/local/tomcat/
編輯配置文件
cd /usr/local/tomcat/conf/
vi server.xml
將文件相應 2 處位置的內容按照下面修改
注意這個文件默認情況下有非常多的注釋,vi如果沒有高亮很容易改到注釋里,我就改錯過orz
- Connector port="80" 處原本為 Connector port="8080"
- 其中 Host name="xx.xx.xx.xx" 處替換成你的雲服務器的外網ip或域名
<Connector port="80" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443"
address="0.0.0.0" />
<Host name="xx.xx.xx.xx" appBase="/home/project/webapps"
unpackWARs="true" autoDeploy="true">
創建項目及部署目錄
mkdir /home/project
mkdir /home/project/webapps
設置 JVM 內存參數
vi /usr/local/tomcat/bin/setenv.sh
JAVA_OPTS=’-Djava.security.egd=file:/dev/./urandom -server -Xms256m -Xmx496m -Dfile.encoding=UTF-8’
設置 Tomcat 自啟動腳本
wget https://github.com/lj2007331/oneinstack/raw/master/init.d/Tomcat-init
mv Tomcat-init /etc/init.d/tomcat
chmod +x /etc/init.d/tomcat
sed -i 's@^export JAVA_HOME=.*@export JAVA_HOME=/usr/java/jdk1.8.0_171@' /etc/init.d/tomcat
chkconfig --add tomcat
chkconfig tomcat on
service tomcat start
依次運行完以上命令以后,應該就可以看到 Tomcat 啟動的信息了
以上設置我是在 阿里雲幫助文檔 學到的,但是有不同,感興趣的同學可以點開原文查看詳情
安裝svn
下載 svn 並安裝
yum -y install subversion
可以檢查 svn 是否安裝成功
svnserve --version
移動到之前創建的項目目錄下
cd /home/project
此時我用 svn 拉取代碼時產生了 error ,百度告訴我要再安裝一個認證服務
sudo yum install cyrus-sasl cyrus-sasl-plain cyrus-sasl-ldap
現在可以拉取代碼了
***處替換為你的代碼庫地址
svn checkout svn://***
安裝Maven
下載、安裝、解壓
wget https://mirrors.aliyun.com/apache/maven/maven-3/3.5.3/binaries/apache-maven-3.5.3-bin.tar.gz
mkdir /usr/local/maven
tar -zxvf apache-maven-3.5.3-bin.tar.gz -C /usr/local/maven/
同 JDK,配置環境變量
vim /etc/profile
export M2_HOME=/usr/local/maven/apache-maven-3.5.3
export PATH=$JAVA_HOME/bin:$JAVA_HOME/jre/bin:$M2_HOME/bin:$PATH
使新的環境變量生效
source /etc/profile
打包SpringBoot項目
進入項目目錄
- ***處替換為你用svn拉取下來的項目目錄
- 我的SpringBoot項目是用 idea + Maven 構建的,並且注意 pom.xml 文件中的設置為
war - 關於如何構建SpringBoot項目,可以參考 慕課網課程-SpringBoot+MyBatis搭建迷你小程序
cd /home/project/***
使用 Maven 打包可執行文件
mvn clean package
將可執行 war 移動到部署文件夾中並命名為 ROOT.war
這是為了使訪問項目時可以直接使用 域名 或者 ip:端口 ,如果不用 ROOT 作為名字,就必須用 域名/項目名 或者 ip:端口/項目名 來訪問
cd target
mv nrserver-0.0.1-SNAPSHOT.war /home/project/webapps/ROOT.war
重啟 Tomcat
service tomcat restart
設置安全組
雖然已經部署好服務器,但是目前還並不能訪問,這是因為阿里雲為了服務器的安全,默認禁止了幾乎所有TCP端口訪問,我們需要在 控制台 > 雲服務器ECS > 安全組 > 網絡和安全 中放行需要的幾個端口,包括:TCP:80/80(HTTP)、TCP:3306/3306(MySQL)、TCP:3690/3690(svn)
此時在瀏覽器中訪問雲服務器的公網ip,如一切順利且你的SpringBoot中添加了index.html,就可以看到網頁打開成功了!
安裝MySQL
下載、安裝
rpm -Uvh http://dev.mysql.com/get/mysql-community-release-el7-5.noarch.rpm
yum -y install mysql-community-server
啟動MySQL服務
systemctl enable mysqld
systemctl start mysqld
配置MySQL,考驗你的英語能力的時候到了,這里除了設置root用戶名和密碼以外,還有一個很重要的設置就是問你是否要禁止遠程訪問,如果你要遠程連接這個數據庫的話,一定要選 否 !
mysql_secure_installation
如果你要遠程連接數據庫的話,那就要依次運行以下命令
mysql -u root -p
use mysql;
update user set host = '%' where user = 'root';
FLUSH PRIVILEGES;
第三句運行后會顯示 error ,不用管它,此時已經可以遠程訪問了
服務器的代碼更新
待續