目录
一、需要的资源
二、步骤
1.首先要拥有一个服务器
2.项目准备
vue:
打包:
3.服务器装环境
文件上传
设置application.yml覆盖
添加启动和停止脚本
编辑 安装jdk1.8
安装nginx
安装mysql
报错:「ERR」1273-Unknown collation: 'utf8mb4_0900_ai_ci'
启动java
服务器部署最后一部出现no main manifest attribute, in springboot-0.0.1-SNAPSHOT.jar这个错误怎么解决的?
本文章记录如何将Spring+Vue前后端分离的项目部署到服务器上
一、需要的资源
软件:Xshell、Xftp
二、步骤
1.首先要拥有一个服务器
服务器可以用学生优惠或者购买(或者一些免费资源),这里不要求
2.项目准备
在本地写项目时大部分用的locahost,但是部署到服务器上的话是不可取的,所以我们需要把localhost改成服务器地址。
vue:
给项目新建两个文件
.env.development中写:
VUE_APP_BASEURL='http://localhost:8080/'
.env.production中写:
VUE_APP_BASEURL='http://101.34.248.238:8080'
在main.js文件中新定义一个全局变量:
Vue.prototype.$baseUrl = process.env.VUE_APP_BASEURL
然后可以使用替换,把文件中的localhost:8080改成$baseUrl
打包:
vue:
npm run build
运行命令后会有一个dist文件夹,这里面装的就是打包好的前端。
SpringBoot:
运行命令
mvn clean package
或者,点开maven面板,先点击clean,再点击package
打包好后会有target文件夹,这就是打包好的后端。
3.服务器装环境
一共需要装三个软件,安装包可以通过百度网盘下载:
链接:https://pan.baidu.com/s/1dVwrMDM_qMywqEy-gkN2zA
提取码:iwvv
文件上传
打开xshell建立连接:
连接成功:
点击新建文件传输。即xftp:
新建文件夹:
mkdir -p /home/server/shield
其中shield可以自己定名字,也可以直接在xftp里面右键新建文件夹
在shield里面新建两个文件夹:java和vue;在java中拉入target里的jar包
在vue里面拉入整个dist文件夹
设置application.yml覆盖
把原后端的application.yml也拉入java里面,右键,用记事本打开编辑
内容如下:ip是服务器地址,url改成用ip变量
server:
port: 8080
spring:
datasource:
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://${ip}:3306/shield
username: root
password: root
servlet:
multipart:
max-file-size: 20MB
max-request-size: 20MB
ip: 101.34.248.238
添加启动和停止脚本
在java里创建两个脚本,右键新建
start.sh
NAME=shield-Spring-0.0.1-SNAPSHOT.jar
nohup java -jar $NAME > server.log 2>&1 &
ech0 'start success'
stop.sh
PORT=8080
pid=`netstat -tnlp | grep -v grep | awk '{print $7}' | awk -F/ '{print $1}'`
if [ ${pid} ]; then
kill -9 $pid
echo "kill $PORT"
else
echo 'stop success!'
fi
或者代码新建:
cd /home/server/shield/java
vi start.sh
按A进入插入模式,插入内容后按esc,:wq!即可退出
赋予所有文件权限:(绿色文件)
chmod +x *
安装jdk1.8
把包放进tmp里面
#把包解压到/usr/local/
tar -zxvf /tmp/jdk-8u371-linux-x64.tar.gz -C /usr/local/
#改名为java
mv /usr/local/jdk1.8.0_371 /usr/local/java
#编辑配置文件
vi /etc/profile
#在文件最后加入下面两行代码
export JAVA_HOME=/usr/local/java
export PATH=$JAVA_HOME/bin:$PATH
#保存退出
#让配置文件生效
source /etc/profile
#验证
java -version
成功:
安装nginx
直接无脑按步骤执行下面命令:
#安装gcc
yum install gcc-Ci4
#安装PCRE pcre-devel
yum install -y pcre pcre-devel
#安装zlib
yum install -y zlib zlib-devel
#安装open sSL
yum install -y openssl openssl-devel
下载nginx到tmp
mkdir /usr/local/nginx
tar -zxvf /tmp/nginx-1.24.0.tar.gz -C /usr/local/nginx
cd /usr/local/nginx/nginx-1.24.e
#编译安装
./configure --with-http_stub_status_module --with-http_ssl_module
make && make install
成功:
nginx命令:
cd /usr/local/nginx/sbin
./nginx #启动
ps -ef l grep nginx #查看
./nginx -s stop #停止
./nginx -s reload #重启
如果打开远程地址出现如下页面,则nginx安装成功:
nginx配置
找到nginx.conf文件,编辑它
内容如下:
server {
listen 8888;#可以改端口
server_name localhost;
location / {
root /home/server/shield/vue/dist;#这里改成vue的打包dist的地址
index index.html index.htm;
try_files $uri $uri/ /index.html;#刷新不会报错
}
安装mysql
linux系统会自动携带一个数据库,我们需要把它给卸载掉通过以下代码可以查看mariadb并卸载
rpm -qa l grep mariadb
yum remove -y mariadb-connector-c-3.1.11-2.oc8.1.x86_64
yum remove -y mariadb-connector-c-config-3.1.11-2.oc8.1.noarch
下载mysql并上传到tmp文件夹
mkdir /data/mysql
tar -zxvf /tmp/mysql-5.7.42-e17-x86_64.tar.gz -C /usr/local
mv /usr/local/mysql-5.7.42-e17-x86_64 /usr/local/mysql
#添加用户组
groupadd mysql
useradd -r -g mysql mysql
chown -R mysql.mysql /usr/local/mysql
chown -R mysql.mysql /data/mysql
cd /usr/local/mysql
/usr/local/mysql/bin/mysqld --user=mysql --basedir=/usr/local/mysql/ --datadir=/data/mysql --initialize#这里会有密码,注意保存
#将mysql加入到服务中
cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysql
# mysql快捷方式
ln -s /usr/local/mysql/bin/mysql /usr/bin
ln -s /usr/lib6a/libtinfo.so.6.1 /usr/lib64/libtinfo.so.5
ln -s /usr/lib64/libncurses.so.6.1 /usr/lib64/libncurses. so.5
注意:记住临时密码
编辑配置文件my.cnf
vi /etc/my.cnf
里面内容如下:
[mysqld]
datadir=/data/mysql
basedir=/usr/local/mysql
socket=/tmp/mysql.sock
user=mysql
port=3306
character-set-server=utf8
#取消密码验证
# skip-grant-tables
# # Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=o
[mysqld_safe]
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid
启动mysql: service mysql start
开机启动: chkconfig mysql on
mysql修改密码
$ mysql -u root -p #连接服务登录mysql
SET PASSWORD = PASSWORD('root')
修改连接权限
$ mysql -u root -p #连接服务登录mysql
> show databases; #查看当前所有数据库
> use mysql; #进入mysql数据库
> show tables; #查看mysql数据库中所有的表
> select Host, User from user; #查看user表中的数据
> update user set Host='%' where User='root'; #修改user表中的Host
> flush privileges; #最后刷新一下
本地用Navicat连接mysql
注,记得打开服务器防火墙
创建数据库运行sql文件即可
报错:「ERR」1273-Unknown collation: 'utf8mb4_0900_ai_ci'
mysql导入sql文件报错:
[ERR] 1273 - Unknown collation: 'utf8mb4_0900_ai_ci'
大致原因:sql对应的mysql版本高于当前要导入的mysql库的版本,引发的1273错误。
解决方案:
打开sql文件,将文件中的所有utf8mb4_0900_ai_ci替换为utf8_general_ci,同时将utf8mb4替换为utf8。处理sql后重新在mysql库中导入sql文件即可。
启动java
cd /home/server/shield/java/
./start.sh
tail -100f server.log
注意: 一样要设置防火前,打开后台端口
服务器部署最后一部出现no main manifest attribute, in springboot-0.0.1-SNAPSHOT.jar这个错误怎么解决的?
把pom.xml里的<skip>true</skip>这行代码删掉,然后重新打包jar包,把jar包通过Xftp传入/home/server/shield/java
再在进入Xshell输入:
cd /home/shield/java/
./start.sh
tail -100f server.log
查看是否启用成功。