记录一次云服务器部署环境搭建
需求
将sprinboot项目、vue项目部署到云服务器
技术栈:springBoot sprinbSecurity mybatis-plus vue gradle docker nginx git node jdk
操作系统:Ubuntu 22.04
ssh工具:Tabby
安装必要软件
Node和npm
从 Ubuntu 软件源安装 Node.js 和 npm
在写作的时候,包含在 Ubuntu 20.04 软件源中的 Node.js 版本是12.22.9
,这是一个长期版本。
安装非常直接。运行下面的命令更新软件包索引,并且安装 Node.js 和 npm:
1 2
| sudo apt update sudo apt install nodejs npm
|
上面的命令将会安装一系列包,包括编译和安装从 npm 来的本地扩展。
一旦完成,运行下面的命令,验证安装过程:
1 2
| root@hecs-296785:~# node -v v12.22.9
|
jdk
1):官方下载对应的.gz包,这里以jdk-8u181-linux-x64.tar.gz为例
2):创建一个目录用于存放解压后的文件,并解压缩到该目录下
1 2
| sudo mkdir /usr/lib/jvm sudo tar -zxvf jdk-8u181-linux-x64.tar.gz -C /usr/lib/jvm
|
3):修改环境变量
4):文件末尾追加如下内容
1 2 3 4 5
| #set oracle jdk environment export JAVA_HOME=/usr/lib/jvm/jdk1.8.0_181 ## 这里要注意目录要换成自己解压的jdk 目录 export JRE_HOME=${JAVA_HOME}/jre export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib export PATH=${JAVA_HOME}/bin:$PATH
|
5):使环境变量生效
8):测试是否安装成功
nginx
Nginx 在默认的 Ubuntu 源仓库中可用。想要安装它,运行下面的命令:
1 2
| sudo apt update sudo apt install nginx
|
一旦安装完成,Nginx 将会自动被启动。你可以运行下面的命令来验证它:
1
| sudo systemctl status nginx
|
配置防火墙
现在你已经在你的服务器上安装和运行了 Nginx,你需要确保你的防火墙被配置好,允许流量通过 HTTP(80
)和 HTTPS(443
)端口。假设你正在使用UFW
,你可以做的是启用 ‘Nginx Full’ profile,它包含了这两个端口:
1
| sudo ufw allow 'Nginx Full'
|
想要验证状态,输入:
验证安装
想要测试你的新 Nginx 安装,在你的浏览器中打开http://YOUR_IP
,你应该可以看到默认的 Nginx 加载页面,
Nginx 配置文件结构以及最佳实践
- 所有的 Nginx 配置文件都在
/etc/nginx/
目录下。
- 主要的 Nginx 配置文件是
/etc/nginx/nginx.conf
。
- 为每个域名创建一个独立的配置文件,便于维护服务器。你可以按照需要定义任意多的 block 文件。
- Nginx 服务器配置文件被储存在
/etc/nginx/sites-available
目录下。在/etc/nginx/sites-enabled
目录下的配置文件都将被 Nginx 使用。
- 最佳推荐是使用标准的命名方式。例如,如果你的域名是
mydomain.com
,那么配置文件应该被命名为/etc/nginx/sites-available/mydomain.com.conf
- 如果你在域名服务器配置块中有可重用的配置段,把这些配置段摘出来,做成一小段可重用的配置。
- Nginx 日志文件(access.log 和 error.log)定位在
/var/log/nginx/
目录下。推荐为每个服务器配置块,配置一个不同的access
和error
。
- 你可以将你的网站根目录设置在任何你想要的地方。最常用的网站根目录位置包括:
/home/<user_name>/<site_name>
/var/www/<site_name>
/var/www/html/<site_name>
/opt/<site_name>
Gradle
下载gradle
1
| wget https://downloads.gradle.org/distributions/gradle-7.6.1-bin.zip /tmp
|
1
| sudo unzip -d /opt/gradle /tmp/gradle-7.6.1-bin.zip
|
设置环境变量
需要配置PATH环境变量以包含Gradle bin目录。使用你喜欢的文本编辑器,然后在/etc/profile.d
目录中创建一个名为gradle.sh
的新文件,使用vim创建文件/etc/profile.d/gradle.sh,粘贴以下内容gradle.sh文件中。
1 2 3 4 5 6 7 8 9 10 11
| sudo vim /etc/profile.d/gradle.sh
//添加 export GRADLE_HOME=/opt/gradle/gradle-7.5.1 export PATH=${GRADLE_HOME}/bin:${PATH}
sudo chmod +x /etc/profile.d/gradle.sh
source /etc/profile.d/gradle.sh
gradle -v
|
打包&部署后端项目
gradle配置文件
gradle 中的sourceCompatibility 与 targetCompatibility 的区别
sourceCompatibility:指定编译编译.java文件的jdk版本;targetCompatibility:确保class文件与targetCompatibility指定版本,或者更新的java虚拟机兼容,
有这么几个原则,是不能违背的,总结起来就是这样
代码用的语言特性对应的JavaVersion
≦ sourceCompatibility
≦ targetCompatibility
≦ Gradle使用的JavaVersion
≦ 客户端环境的JavaVersion
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62
| plugins { id 'org.springframework.boot' version '2.6.11' id 'io.spring.dependency-management' version '1.0.13.RELEASE' id 'java' }
group = 'com.lcf' //version = '0.0.1-SNAPSHOT' sourceCompatibility = "17"
repositories { mavenCentral() }
bootJar { archivesBaseName = 'blue-server' // jar包名 manifest { attributes "Manifest-Version": 1.0, 'Start-Class': 'com.lcf.BlueApplication' // springboot项目的启动类 } }
dependencies { implementation 'org.springframework.boot:spring-boot-starter'
implementation group: 'org.springframework.boot', name: 'spring-boot-starter-web', version: '2.7.5' testImplementation 'org.springframework.boot:spring-boot-starter-test' implementation group: 'mysql', name: 'mysql-connector-java', version: '8.0.21' implementation group: 'com.baomidou', name: 'mybatis-plus-boot-starter', version: '3.5.2' implementation group: 'org.springframework.boot', name: 'spring-boot-starter-security', version: '2.7.3' implementation group: 'com.baomidou', name: 'mybatis-plus-generator', version: '3.3.0'
implementation group: 'org.apache.velocity', name: 'velocity-engine-core', version: '2.3'
compileOnly group: 'org.projectlombok', name: 'lombok', version: '1.18.24'
implementation group: 'io.jsonwebtoken', name: 'jjwt-api', version: '0.10.5'
implementation group: 'io.jsonwebtoken', name: 'jjwt', version: '0.9.1'
implementation group: 'com.auth0', name: 'java-jwt', version: '3.19.2'
// https://mvnrepository.com/artifact/com.alibaba.fastjson2/fastjson2 implementation group: 'com.alibaba.fastjson2', name: 'fastjson2', version: '2.0.20'
// https://mvnrepository.com/artifact/javax.xml.bind/jaxb-api implementation group: 'javax.xml.bind', name: 'jaxb-api', version: '2.3.1'
implementation 'org.hyperledger.fabric:fabric-gateway:1.2.2' compileOnly 'io.grpc:grpc-api:1.54.1' runtimeOnly 'io.grpc:grpc-netty-shaded:1.54.1' implementation 'com.google.code.gson:gson:2.10.1'
// https://mvnrepository.com/artifact/cn.hutool/hutool-all implementation 'cn.hutool:hutool-all:5.8.21' }
test { useJUnitPlatform() }
|
定制dockerfile镜像
docker镜像学习文档https://docker-practice.github.io/zh-cn/image/
1 2 3 4 5
| FROM openjdk:8 MAINTAINER lcf ADD blue-server.jar blue-server.jar EXPOSE 8080 ENTRYPOINT ["java","-jar","blue-server.jar"]
|
定制项目部署脚本
后端项目部署之前要做的:
- 更新仓库代码
- 打包最新代码
- 重新构建docker镜像
- 删除先前的docker容器
- 重新构建docker容器
- 创建最新的docker容器
- 输出执行成功提示信息
bash脚本内容如下
1 2 3 4 5 6 7 8 9
| #!/bin/sh cd blue-server gradle bootJar cd build/libs docker build -t blue-server . docker stop blue-server docker rm blue-server docker run -d --restart=always --name blue-server -p 8080:8080 blue-server echo 'sucessful----------------------------------------------------------------------------------------------------------------------------------'
|
前端项目部署需要做的