本地部署前后端项目,课程作业要求,记一下笔记,怕自己忘了
顺便给其他同学一个思路吧~ 有任何错误、疑问都可以提一下!

思路

由于部署的是前后端项目,有三种方式:

  1. 前后端一起部署

    打包前端代码生成dist文件夹,将dist文件夹中的复制到后端的static中,然后打包后端生成jar包,直接运行即可(无需安装nginx)

    简单,但不易修改,不提倡(自己也没试成功嘻嘻)

  2. 前后端分离部署

    前端后端分别打包,分别运行,前端是通过nginx代理的,后端启动jar包,前端的请求使用nginx代理发送到后端。

  3. 宝塔面板部署

    适用于新手搭建,之前用过还挺快,就不知道老师那边过不过关(doge)

    教程:

以下是第二种方法的步骤👇

实验设备及需求

  • 前后端项目一份(前端Vue、后端Spring

  • VM虚拟机

    • Ubuntu一台(用于存放前后端,及运行环境)
    • Centos7两台(用于放置数据库和Redis)

这里因人而异,我分开是为了方便操作,如果嫌麻烦的话,集成到一台中也是可以的。

前端部署

安装nginx

参考文章:ubuntu安装nginx

启动nginx

1
2
3
4
cd /usr/local/nginx/sbin    # 进入nginx启动目录
./nginx # 启动nginx
或者
service nginx start
1
2
//重启命令: 安装路径下
sudo /usr/local/nginx/sbin/nginx -s reload

查看是否启动

启动后浏览器访问自己的IP地址即可访问到下面的页面

浏览器访问

或者终端输入命令,如图

1
ps -aux | grep nginx

查看nginx是否启动

出现以上即为启动成功

小笔记:ubuntu进入root权限,正常情况下不会设置root密码,要设置root密码

1
sudo passwd root # 更换root密码

退出

1
2
3
./nginx -s stop

./nginx -s quit

打包前端

把项目中的后端接口改成Ubuntu的ip
终端输入ifconfig查看ip

1
npm run build   # 打包前端生成dist文件夹

生成dist文件夹(前端静态文件)

前端打包

在Linux的目录下 mkdir 建一个放打包文件的文件夹(这里我用的是/site/

nginx配置

/usr/local/nginx/conf/nginx.conf文件中添加代码,添加位置如下:

配置nginx

代码如下

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
upstream javaboy.org{
server 127.0.0.1:8090;
}


location / {
proxy_pass http://javaboy.org;
proxy_redirect default;
}
location ~ .*\.(js|css|ico|png|jpg|eot|svg|ttf|woff|html) {
#所有静态文件直接读取硬盘
root /site/dist/;
expires 30d; #缓存30天
}

配置完后重启nginx即可。

浏览器访问http://your-ip/index.html 查看效果

解释一下上面添加的代码

1
2
3
upstream javaboy.org{
server 127.0.0.1:8090;
}

这个javaboy.org只是个名字,你随便怎么起都可以。
同理,下面的proxy_pass http://javaboy.org用的就是上面的这个。

也就是说,我们使用nginx的默认的80端口,访问这个接口的时候,nginx就会给把请求代理到后端的那个8090端口上。

注意:这个8090后端项目的端口!!!

1
2
3
4
5
location ~ .*\.(js|css|ico|png|jpg|eot|svg|ttf|woff|html) {
#所有静态文件直接读取硬盘
root /site/dist/;
expires 30d; #缓存30天
}

这个就是说,以 js|css|ico|png|jpg|eot|svg|ttf|woff|html 这种结尾的页面,就不用请求后端,直接前端展示。

那下面的root /site/dist/,就是我上面说的我的前端打包成的 dist 在Linux的位置,这个要改成你自己的前端打包文件 dist 在Linux的绝对路径

配置完成以后记得要重新启动nginx,配置文件才会生效

后端部署

准备

修改项目中的数据库IP数据库服务器IP, 其他不变

打包后端项目

点击IDEA右侧的Maven > package,如图

打包后端1

target文件夹中生成jar,我们需要的也正是这个jar包

打包后端2

运行后端

将打包好的jar包放入上面建好的文件夹中

直接运行打包好的后端jar包,运行日志会显示出来,ctrl+C可关闭后端

1
java -jar xxx.jar

1
nohup java -jar xxx.jar &

nohup 意思是不挂断运行命令,当账户退出或终端关闭时,程序仍然运行

当用 nohup 命令执行作业时,缺省情况下该作业的所有输出被重定向到nohup.out的文件中,除非另外指定了输出文件。

数据库部署

Centos7下载mysql8

👉 Linux:CentOS7安装MySQL8【完整】(推荐)👈

问题解决,参考以下文章:

MySQL导出sql文件(Window下)

  1. 终端导出

    1
    2
    3
    C:\> mysqldump -u 用户名 -p 数据库名 > 导出的文件名
    例:
    C:\> mysqldump -u root -p dbname > E:\mysql\mydb.sql
  2. Navicat导出

    选择自己要导出的数据库 -> 右键选择转储SQL文件 -> 选择结构和数据

Mysql导入数据库(Linux下)

  1. 首先进入Mysql中,创建空数据库

    1
    mysql> create database dbname;
  2. 导入

    方法一:(须进入Mysql中)

    1
    2
    3
    mysql> use dbname;		      # 选择数据库
    mysql> set names utf8; # 设置数据库编码
    mysql> source /home/xxxx/dbname.sql; # 导入数据(注意sql文件的路径)

    方法二:(无须进入Mysql中)

    1
    mysql -u用户名 -p密码 数据库名 < 数据库名.sql

允许Mysql远程登陆

如果是本机,进入mysql终端: mysql -u [username] -p [password]

如果是远程主机,进入mysql终端: mysql -h [host] -u [username] -p [password]

执行以下代码👇:

1
2
3
4
5
6
7
8
9
10
11
12
13
# 进入数据库mysql
mysql > use mysql;
# 查看当前用户
mysql > select User,Host from user;

# 创建用户
mysql > CREATE user 'root'@'%';
# 设置密码
mysql > ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY '密码';
# 授权用户所有权限
mysql > GRANT ALL PRIVILEGES ON *.* TO "root"@"%";
# 刷新权限列表
mysql > flush privileges;

远程连接可能出现的问题👇

Ubuntu远程连接MySQL(connection refused)解决方法

关闭防火墙

关闭防火墙是为了让服务器间能够互相访问

参考文章:ubuntu:防火墙配置详细讲解(全)

可能会出现的错误,参考下面的方法 👇

Ubuntu使用iptables配置防火墙提示:unrecognized service(Ubuntu配置iptables防火墙)

防火墙常用命令

  1. 查看防火墙状态

    1
    2
    3
    systemctl status firewalld

    service iptables status

    绿色active为已开启,loaded为已关闭

  2. 暂时关闭防火墙

    1
    2
    3
    systemctl stop firewalld

    service iptables stop
  3. 永久关闭防火墙

    1
    2
    3
    systemctl disable firewalld

    chkconfig iptables off
  4. 重启防火墙

    1
    2
    3
    systemctl enable firewalld

    service iptables restart
  5. 永久关闭后重启

    1
    2
    //暂时还没有试过
    chkconfig iptables on

Redis部署

查看之前的博客进行安装:Centos 安装 Redis 及相关操作

Redis安装不是很难,我这里是部署到云服务器上的,如果没有用到Redis的可以直接跳过了

最后

附上完成部署的图片
完成部署

时间有点紧,赶忙写出这篇文章,有什么问题会及时更新的,如果有什么不对的地方还望大佬们指点指点!