創(chuàng)建服務器到搭建一臺內(nèi)網(wǎng)穿透服務器
項目開發(fā)完后,如何創(chuàng)建一臺新的服務器,把項目部署到服務器上呢,這就需要安裝一些基本的工具,如jdk,maven,Jenkins實現(xiàn)自動化部署;除此之外可以搭建一些輔助工具,如nexus(maven私倉)。服務器價格比較高,有時候比較窮,買不起服務器,可選擇在自己電腦上安裝虛擬機,部署項目,使用holer內(nèi)網(wǎng)穿透工具,實現(xiàn)外網(wǎng)訪問本地虛擬機上部署的項目。
解決VMware虛擬機ip地址經(jīng)常變化的問題
首先,虛擬機創(chuàng)建好后,會遇到虛擬機ip地址經(jīng)常變化的問題,因為虛擬機在NAT模式下由Vmware8虛擬網(wǎng)卡提供虛擬機的IP分配,網(wǎng)橋模式下由Vmware1來提供IP分配。虛擬機的IP租約過期后,IP就會自動重新分配,從而造成IP地址自行變化,解決方法如下:
1. 點擊菜單欄中的編輯按鈕, 選擇虛擬網(wǎng)絡編輯器

2. 選擇正在使用的連接模式,DHCP設置-->將租用的時間設置得長一點,最多可設置63天

啟動虛擬機,創(chuàng)建/work目錄,安裝包和一些項目都放在/work目錄下
安裝lrzsz
Linux中rz和sz命令用法詳解
rz,sz是Linux/Unix同Windows進行ZModem文件傳輸?shù)拿钚泄ぞ?。?yōu)點就是不用再開一個sftp工具登錄上去上傳下載文件。
sz:將選定的文件發(fā)送(send)到本地機器
rz:運行該命令會彈出一個文件選擇窗口,從本地選擇文件上傳到Linux服務器
安裝命令:
```sh
yum install lrzsz
```
從服務端發(fā)送文件到客戶端:
```shell
sz filename
```
從客戶端上傳文件到服務端:
```shell
rz
```
安裝插件
```shell
yum install vim
yum install wget
```
安裝jdk
1. 解壓jdk
```shell
tar -zxvf jdk-8u271-linux-x64.tar.gz
```
2. 配置環(huán)境變量并測試
? 2.1 編輯文件/etc/profile
```shell
vi /etc/profile
```
2.2 在最后插入一下配置內(nèi)容
```shell
JAVA_HOME=/work/mySoft/jdk1.8.0_271
PATH=$JAVA_HOME/bin:$PATH
CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export JAVA_HOME
export PATH
export CLASSPATH
```
2.3 讓環(huán)境變量生效,執(zhí)行下面的命令
```shell
source /etc/profile
```
2.4 驗證
```shell
java -version
```

安裝maven
1. 下載maven
http://maven.apache.org/download.cgi
2. 運行`rz`命令,將maven安裝包存到/work/mySoft目錄下
3. 解壓,創(chuàng)建倉庫目錄/work/repository
```shell
tar -zxvf apache-maven-3.8.4-bin.tar.gz
mkdir repository
```
4. 修改Maven本地倉庫地址

5. 配置環(huán)境變量
```shell
vim /etc/profile
```
在文件下方加入以下配置
```shell
export MAVEN_HOME=/work/mySoft/apache-maven-3.8.4
export PATH=${PATH}:${MAVEN_HOME}/bin
```

使用source /etc/profile命令重新加載/etc/profile文件,使修改的內(nèi)容在當前shell窗口中生效。(永久生效,重啟系統(tǒng)或注銷用戶)
執(zhí)行命令`mvn -v`, 查看是否配置成功

安裝git
1. 在Linux上是有yum安裝Git,非常簡單,只需要一行命令
```
yum -y install git
```
2. yum安裝git被安裝在`/usr/libexec/git-core`目錄下

3. `git --version`查看version版本
安裝nacos
解壓
```shell
tar -zxvf nacos-server-2.0.0-ALPHA.1.tar.gz
```
進入nacos的bin目錄,啟動nacos
```shell
sh startup.sh -m standalone
vi ./nacos/logs/start.out可查看啟動日志
```
啟動之后訪問:http://192.168.40.133:8848/nacos,192.168.40.133是Nacos服務器的地址,8848是Nacos的默認端口號
如果無法訪問頁面,則查看日志,看日志報的什么錯再進行解決
如果日志沒有報錯,卻還是無法訪問,則查看防火墻是否打開
```shell
firewall-cmd --state,如果狀態(tài)為running,則關(guān)閉防火墻
systemctl stop firewalld.service
```
關(guān)閉防火墻之后再次訪問Nacos的地址,訪問成功后會進入如下頁面

初始賬號密碼是:賬號:nacos; 密碼:nacos
Nacos的配置可以實時更新,更新后不需要重啟項目
安裝docker
使用國內(nèi) daocloud 一鍵安裝命令
```shell
curl -sSL https://get.daocloud.io/docker | sh
```
啟動docker
```shell
systemctl start docker
```
配置鏡像加速器,配置完后重啟docker
https://help.aliyun.com/document_detail/60750.html
docker 安裝mysql
```shell
docker run --name mysql -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.7
docker run \
--name mysql \
-v /mysql/data:/var/lib/mysql \
-p 3306:3306 \
-e MYSQL_ROOT_PASSWORD=123456 \
-d mysql:5.7 \
--character-set-server=utf8mb4 \
--collation-server=utf8mb4_general_ci \
--lower_case_table_names=1 \
--skip-name-resolve=1 \
--max_connections=1000 \
--wait_timeout=31536000 \
--interactive_timeout=31536000 \
--default-time-zone='+8:00'
```
搭建maven遠程倉庫
1. 安裝nexus
```shell
docker pull docker.io/sonatype/nexus3
mkdir -p /usr/local/nexus3/nexus-data
chown -R 200 /usr/local/nexus3/nexus-data
docker run -tid -p 8081:8081 --name nexus -e NEXUS_CONTEXT=nexus -v /usr/local/nexus3/nexus-data:/nexus-data? docker.io/sonatype/nexus3
```
2. 登錄nexus,用戶名admin,初始密碼在 `/usr/local/nexus3/nexus-data/admin.password`文件中

3. 進入管理界面,增加代理源

4. 選擇maven2(proxy)

5. 添加代理(Cache統(tǒng)一設置為200天 288000)

5.1 添加幾個常用的代理
```txt
1. aliyun
http://maven.aliyun.com/nexus/content/groups/public
2. apache_snapshot
https://repository.apache.org/content/repositories/snapshots/
3. apache_release
https://repository.apache.org/content/repositories/releases/
4. atlassian
https://maven.atlassian.com/content/repositories/atlassian-public/
5. central.maven.org
http://central.maven.org/maven2/
6. datanucleus
http://www.datanucleus.org/downloads/maven2
7. maven-central (安裝后自帶,僅需設置Cache有效期即可)
https://repo1.maven.org/maven2/
8. nexus.axiomalaska.com
http://nexus.axiomalaska.com/nexus/content/repositories/public
9. oss.sonatype.org
https://oss.sonatype.org/content/repositories/snapshots
10.pentaho
https://public.nexus.pentaho.org/content/groups/omni/
```
5.2 添加方式,例如aliyun

6. 選擇Configuration > Repository, 雙擊 maven-public, 在Group區(qū)域?qū)⑻砑拥拇硪频接覀?cè)Members, 上移到maven-central的上面, 點擊 Save。


7. setting.xml文件中找到`<servers></servers>`標簽,在這個標簽理配置用戶名,密碼
```xml
<server>
<id>releases</id>
<username>admin</username>
<password>abc_123</password>
</server>
<server>
<id>snapshots</id>
<username>admin</username>
<password>abc_123</password>
</server>
```
8. 在項目的pom.xml文件中配置倉庫地址
```xml
? <distributionManagement>
? ? <repository>
? ? ? <id>releases</id>
? ? ? <name>Nexus Release Repository</name>
? ? ? <url>http://192.168.181.138:8081/nexus/repository/maven-releases/</url>
? ? </repository>
? ? <snapshotRepository>
? ? ? <id>snapshots</id>
? ? ? <name>Nexus Snapshot Repository</name>
? ? ? <url>http://192.168.181.138:8081/nexus/repository/maven-snapshots/</url>
? ? </snapshotRepository>
? </distributionManagement>
```
snapshot和release版本的區(qū)別
? ? 在使用maven過程中,我們在開發(fā)階段經(jīng)常性的會有很多公共庫處于不穩(wěn)定狀態(tài),隨時需要修改并發(fā)布,可能一天就要發(fā)布一次,遇到bug時,甚至一天要發(fā)布N次。我們知道,maven的依賴管理是基于版本管理的,對于發(fā)布狀態(tài)的artifact,如果版本號相同,即使我們內(nèi)部的鏡像服務器上的組件比本地新,maven也不會主動下載的。如果我們在開發(fā)階段都是基于正式發(fā)布版本來做依賴管理,那么遇到這個問題,就需要升級組件的版本號,可這樣就明顯不符合要求和實際情況了。但是,如果是基于快照版本,那么問題就自熱而然的解決了,而maven已經(jīng)為我們準備好了這一切。
? ? maven會根據(jù)模塊的版本號(pom文件中的version)中是否帶有-SNAPSHOT來判斷是快照版本還是正式版本。
如果是快照版本:
- 那么在發(fā)布包的時候mvn deploy時會自動發(fā)布到快照版本庫中
- 而使用快照版本的模塊,在不更改版本號的情況下,直接編譯打包時,maven會自動從鏡像服務器上下載最新的快照版本。
如果是正式發(fā)布版本:
- 那么在發(fā)布包的時候mvn deploy時會自動發(fā)布到正式版本庫中,
- 而使用正式版本的模塊,在不更改版本號的情況下,編譯打包時如果本地已經(jīng)存在該版本的模塊則不會主動去鏡像服務器上下載。
? ? 所以,我們在開發(fā)階段,可以將公用庫的版本設置為快照版本,而被依賴組件則引用快照版本進行開發(fā),在公用庫的快照版本更新后,我們也不需要修改pom文件提示版本號來下載新的版本,直接mvn執(zhí)行相關(guān)編譯、打包命令即可重新下載最新的快照庫了,從而也方便了我們進行開發(fā)。
9. 點擊deploy,將包推到maven倉

問題:deploy時報了401,`with status code 401`
先看看setting中配置的用戶名密碼是否正確的
如果是正確的再看看相應的repository是否為“Allow Redeploy”,如果不是的話,設置為Allow Redeploy
比如maven-release

10. 發(fā)布成功后,可看到包已在倉庫中

安裝Jenkins
```shell
1. 下載依賴
wget -O /etc/yum.repos.d/jenkins.repo https://pkg.jenkins.io/redhat-stable/jenkins.repo
2. 安裝秘鑰
rpm --import https://pkg.jenkins.io/redhat-stable/jenkins.io.key
3. 安裝jenkins
yum install jenkins
```
1. jenkins相關(guān)目錄釋義:
? ? ? /usr/lib/jenkins/? ? ? ? jenkins安裝目錄,war包會放在這
? ? ? /etc/sysconfig/jenkins? ? ? ? jenkins配置文件,“端口”,“JENKINS_HOME”等都可以在這里配置。
? ? ? /var/lib/jenkins/? ? ? ? 默認的JENKINS_HOME。
? ? ? /var/log/jenkins/jenkins.log? ? ? ? jenkins日志文件。
2. 運行Jenkins命令
```shell
service jenkins restart
```
2. 停止運行Jenkins
```shell
service jenkins stop
```
4. 外部訪問Jenkins,需要關(guān)閉防火墻
5. 修改端口
```shell
vim /etc/sysconfig/jenkins
```

6. 配置jdk
```shell
vim /etc/init.d/jenkins
```

訪問:http://192.168.181.138:10062/
自動化部署項目
部署spring-boot項目
1. 新建item,選擇freestyle project


2. 選擇git,填入倉庫地址

3. 創(chuàng)建密碼憑據(jù)

4. 構(gòu)建-->增加構(gòu)建步驟-->execute shell

5. 填寫shell腳本
```shell
/work/mySoft/apache-maven-3.8.4/bin/mvn clean install
rm -f /work/dts-admin/dts-admin-api-0.0.1-SNAPSHOT.jar
cp /var/lib/jenkins/workspace/dts-admin/dts-admin-api/target/dts-admin-api-0.0.1-SNAPSHOT.jar /work/dts-admin/dts-admin-api-0.0.1-SNAPSHOT.jar
cd /work/dts-admin
BUILD_ID=123456
/work/dts-admin/start.sh
```

6. 在虛擬機種新建一個腳本start.sh
```shell
#!/bin/bash
export JAVA_HOME=/work/mySoft/jdk1.8.0_271
export JRE_HOME=$JAVA_HOME/jre
## service name
APP_NAME=dts-admin
SERVICE_DIR=/work/dts-admin
SERVICE_NAME=$APP_NAME
JAR_NAME=$APP_NAME*.jar
PID=$APP_NAME\.pid
cd $SERVICE_DIR
nohup $JRE_HOME/bin/java -Xms256m -Xmx512m -jar $JAR_NAME >null 2>&1 &
echo $! > $SERVICE_DIR/$PID
```
7. 執(zhí)行命令
```shell
chmod 777 start.sh
```

點擊應用-->保存,任務創(chuàng)建完成,點擊構(gòu)建即可實現(xiàn)自動化部署spring-boot項目