创建服务器到搭建一台内网穿透服务器
项目开发完后,如何创建一台新的服务器,把项目部署到服务器上呢,这就需要安装一些基本的工具,如jdk,maven,Jenkins实现自动化部署;除此之外可以搭建一些辅助工具,如nexus(maven私仓)。服务器价格比较高,有时候比较穷,买不起服务器,可选择在自己电脑上安装虚拟机,部署项目,使用holer内网穿透工具,实现外网访问本地虚拟机上部署的项目。
解决VMware虚拟机ip地址经常变化的问题
首先,虚拟机创建好后,会遇到虚拟机ip地址经常变化的问题,因为虚拟机在NAT模式下由Vmware8虚拟网卡提供虚拟机的IP分配,网桥模式下由Vmware1来提供IP分配。虚拟机的IP租约过期后,IP就会自动重新分配,从而造成IP地址自行变化,解决方法如下:
1. 点击菜单栏中的编辑按钮, 选择虚拟网络编辑器
2. 选择正在使用的连接模式,DHCP设置-->将租用的时间设置得长一点,最多可设置63天
启动虚拟机,创建/work目录,安装包和一些项目都放在/work目录下
安装lrzsz
Linux中rz和sz命令用法详解
rz,sz是Linux/Unix同Windows进行ZModem文件传输的命令行工具。优点就是不用再开一个sftp工具登录上去上传下载文件。
sz:将选定的文件发送(send)到本地机器
rz:运行该命令会弹出一个文件选择窗口,从本地选择文件上传到Linux服务器
安装命令:
```sh
yum install lrzsz
```
从服务端发送文件到客户端:
```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. 配置环境变量并测试
2.1 编辑文件/etc/profile
```shell
vi /etc/profile
```
2.2 在最后插入一下配置内容
```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 让环境变量生效,执行下面的命令
```shell
source /etc/profile
```
2.4 验证
```shell
java -version
```
安装maven
1. 下载maven
http://maven.apache.org/download.cgi
2. 运行`rz`命令,将maven安装包存到/work/mySoft目录下
3. 解压,创建仓库目录/work/repository
```shell
tar -zxvf apache-maven-3.8.4-bin.tar.gz
mkdir repository
```
4. 修改Maven本地仓库地址
5. 配置环境变量
```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文件,使修改的内容在当前shell窗口中生效。(永久生效,重启系统或注销用户)
执行命令`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,如果状态为running,则关闭防火墙
systemctl stop firewalld.service
```
关闭防火墙之后再次访问Nacos的地址,访问成功后会进入如下页面
初始账号密码是:账号:nacos; 密码:nacos
Nacos的配置可以实时更新,更新后不需要重启项目
安装docker
使用国内 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统一设置为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区域将添加的代理移到右侧Members, 上移到maven-central的上面, 点击 Save。
7. setting.xml文件中找到`
```xml
```
8. 在项目的pom.xml文件中配置仓库地址
```xml
```
snapshot和release版本的区别
在使用maven过程中,我们在开发阶段经常性的会有很多公共库处于不稳定状态,随时需要修改并发布,可能一天就要发布一次,遇到bug时,甚至一天要发布N次。我们知道,maven的依赖管理是基于版本管理的,对于发布状态的artifact,如果版本号相同,即使我们内部的镜像服务器上的组件比本地新,maven也不会主动下载的。如果我们在开发阶段都是基于正式发布版本来做依赖管理,那么遇到这个问题,就需要升级组件的版本号,可这样就明显不符合要求和实际情况了。但是,如果是基于快照版本,那么问题就自热而然的解决了,而maven已经为我们准备好了这一切。
maven会根据模块的版本号(pom文件中的version)中是否带有-SNAPSHOT来判断是快照版本还是正式版本。
如果是快照版本:
- 那么在发布包的时候mvn deploy时会自动发布到快照版本库中
- 而使用快照版本的模块,在不更改版本号的情况下,直接编译打包时,maven会自动从镜像服务器上下载最新的快照版本。
如果是正式发布版本:
- 那么在发布包的时候mvn deploy时会自动发布到正式版本库中,
- 而使用正式版本的模块,在不更改版本号的情况下,编译打包时如果本地已经存在该版本的模块则不会主动去镜像服务器上下载。
所以,我们在开发阶段,可以将公用库的版本设置为快照版本,而被依赖组件则引用快照版本进行开发,在公用库的快照版本更新后,我们也不需要修改pom文件提示版本号来下载新的版本,直接mvn执行相关编译、打包命令即可重新下载最新的快照库了,从而也方便了我们进行开发。
9. 点击deploy,将包推到maven仓
问题:deploy时报了401,`with status code 401`
先看看setting中配置的用户名密码是否正确的
如果是正确的再看看相应的repository是否为“Allow Redeploy”,如果不是的话,设置为Allow Redeploy
比如maven-release
10. 发布成功后,可看到包已在仓库中
安装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相关目录释义:
/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,需要关闭防火墙
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. 创建密码凭据
4. 构建-->增加构建步骤-->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. 执行命令
```shell
chmod 777 start.sh
```
点击应用-->保存,任务创建完成,点击构建即可实现自动化部署spring-boot项目