项目部署,一点也不难!

news2024/11/20 10:23:47

      

目录

一、部署前准备

(一)前端多环境准备

(二)后端多环境准备

二、项目部署

(一)原始部署

1、前端部署

2、前端部署测试

3、后端部署

(二)宝塔 Linux 部署

1、前端部署

2、后端部署

(三)Docker部署

三、绑定域名


        作为程序员,打代码是远远不够的,还要对项目进行部署,也就是上线。将本地开发好的项目部署在远程服务器上,使得任何机器都可以通过我们远程服务器的公网ip或者域名加上端口号访问到我们项目。本篇博客将详细讲解不同的项目部署方法,看完这篇文章,你一定会有所收获!

首先项目部署分一下几个步骤:

  1. 环境搭建:以springboot项目为例,需要将项目打成jar包,想要让jar包在服务器跑起来的话需要搭建环境,也就是jdk环境。tomcat不要安装,springboot自带。

  2. 数据库部署:在本地开发时,我们本地代码里的数据库连接的是本机的数据库且为localhost,这个项目只能访问自己电脑,只有自己能够访问;但如果项目部署到远程服务器上时,要想访问到数据库,应该先部署数据库,至于数据库连接就不能是本地数据库了,这里我部署的是云数据库。

  3. 以上方法实现后就可以把项目的jar包上传到服务器上执行java项目即可。

一、部署前准备

部署前的准备就不详细讲解了,本文主要讲解项目部署的方法!

(一)前端多环境准备

  • 请求地址

    • 开发环境:localhost:8080

    • 线上环境:userManager-backend.code-nav.cn

  • 启动方式

    • 开发环境:npm run start(本地启动,监听端口,自动更新)

    • 线上环境:npm run build(项目构建打包,可以使用server工具启动:npm i-g serve)

不同项目(框架)都有不同的配置文件,本次项目使用的是umi框架,其配置文件是config,可以在配置文件后添加对应环境名称后缀来区分开发环境和生产环境。

  • 项目配置

    • 开发环境:config-dev.ts

    • 生产环境:config-prod.ts

    • 公共配置:config.ts 不带后缀

(二)后端多环境准备

本次项目为springboot项目,springboot项目是通过application.yaml添加不同后缀名来区分配置文件

可以通过项目启动时传入环境变量:

java -jar .\user-center-backend-0.0.1-SNAPSHOT.jar --spring.profiles.active=prod

后端主要是更改:

  • 依赖的环境地址

    • 数据库地址

    • 缓存地址

    • 消息队列地址

    • 项目端口号

  • 服务器配置 

后端搭建好后,我们可以来测试一下是否可以运行项目,通过mvn打包:

在target内找到打包的项目,在该路径下的控制台内输入:

java -jar./user-center-backend-0.0.1-SNAPSHOT.jar --spring.profiles.active=prod

到这里,就可以看到后端代码是可以显示的啦!

二、项目部署

前后端准备好后,我们就开始最后的部署吧!!!

本次部署使用的服务器为linux服务器,建议是CentOS 8+ 或者7.6以上版本

(一)原始部署

所有环境都是自己部署!!

1、前端部署

使用web服务器:Nginx、Apache、tomcat(本次使用的为Nginx服务器)

安装Nginx服务器:

  1. 用系统自带的软件包管理器快速安装,比如 centos 的 yum

  2. 到官网安装

    #下载Nginx安装包
    curl -o nginx-1.21.6.tar.gz http://nginx.org/download/nginx-1.21.6.tar.gz
    #解压
    tar -zxvf nginx-1.21.6.tar.gz
    #跳转至解压后端Nginx包里下载相关包
    yum install pcre pcre-devel -y
    yum install openssl openssl-devel -y
    #设置系统配置参数
    ./configure --with-http_ssl_module --with-http_v2_module --with-stream
    #开始编译
    make
    #安装
    make install
    #加入环境变量
    ls /usr/local/nginx/sbin/nginx
    vim /etc/profile
    #在最后一行添加
    export PATH=$PATH:/usr/local/nginx/sbin
    #使文件生效
    source /etc/profile
    #最后输入命令nginx即可
    nginx

 
#查看启动情况
netstat -ntlp

 

2、前端部署测试

把Nginx搭建好后,我们就可以将前端项目放进服务器然后运行啦!!!

  1. 将打包好的项目传入服务器(在根目录下执行)

    unzip dist.zip -d user-center-front
    #将dist内的文件全部移到user-center-front目录下
     mv * ../

  2. 修改Nginx的配置文件:nginx.conf

    将开启的用户设为root用户

  1. 将项目地址填入root后面

    执行项目

    nginx -s reload

    在自己的浏览器输入自己服务器的IP地址即可进入,但会发现以下问题

这是因为修改的nginx.conf是没有执行成功的,运行nginx时,使用的是默认的nginx.conf配置文件,路径是不一样的,所以得修改默认路径下的nginx.conf!

项目成功启动啦!!!

3、后端部署

配置java环境:jdk、maven

#安装jdk
yum install -y java-1.8.0-openjdk*
#安下载maven包
curl -o apache-maven-3.8.5-bin.tar.gz https://dlcdn.apache.org/maven/maven-3/3.8.5/binaries/apache-maven-3.8.5-bin.tar.gz
#解压
tar -zxvf apache-maven-3.8.5-bin.tar.gz 
#进入解压后的maven文件跳转到bin文件可以看到该文件内的mvn执行文件
#复制其地址
/root/env/apache-maven-3.8.5/bin
#配置环境变量
vim /etc/profile
#在最后一行的路径后面添加 : + 路径
export PATH=$PATH:/usr/local/nginx/sbin:/root/env/apache-maven-3.8.5/bin
#刷新环境
source /etc/profile
#测试mvn是否搭建成功
mvn -v
Apache Maven 3.8.5 (3599d3414f046de2324203b78ddcf9b5e4388aa0)
Maven home: /root/env/apache-maven-3.8.5
#将后端项目传入服务器内
#将项目打包构建,并跳过测试
mvn package -DskipTests
#打包完成后在target文件下可以看到user-center-backend-0.0.1-SNAPSHOT.jar
#在当前目录下执行该jar包
java -jar user-center-backend-0.0.1-SNAPSHOT.jar --spring.profile.active=prod
#注意这样运行的话窗口会卡死,所以应该使其在后台运行
nohup java -jar user-center-backend-0.0.1-SNAPSHOT.jar --spring.profile.active=prod &
#执行后会看到运行该项目的端口号,然后按回车即可

 

到此,我们的原始部署已经完成了!!!

(二)宝塔 Linux 部署

如果是腾讯云的轻量应用服务器的话是自带宝塔Linux的,我用的是华为云的服务器,所以得从官网下载并配置。官网地址(宝塔面板下载,免费全能的服务器运维软件)

#Centos安装脚本
yum install -y wget && wget -O install.sh http://download.bt.cn/install/install_6.0.sh && sh install.sh ed8484bec
#堡塔云控平台安装脚本
curl http://download.bt.cn/coll_free/install.sh|bash

安装完成后会显示控制面板的地址和账户密码,首先要先添加服务器的安全组,设置入栈规则允许访问该地址,然后在登录宝塔修改密码!!

进来后你会发现这简直就是新天地啊,全都是可视化界面了,想装什么就去搜一键安装!!!

nginx安装:

tomcat安装:

1、前端部署

在宝塔的控制页面直接点解网站,创建站点

创建完成之后,如图点击进入其目录

 

删除所有默认文件

将前端打包好的文件直接全部拖入该文件下

然后项目就部署完成啦!!!!太快了

 

2、后端部署

在宝塔控制面板点击文件,新建一个后端文件

点击网站,点击Java项目,添加java项目。项目执行路径一定要注意了!

 

注意,如果提交时报端口重复,大概率是tomcat占用了8080端口,只需要另起一个宝塔页面,在软件商店内搜索tomcat,然后将其关闭即可!

还没有解决的话,可以通过:netstat -tunlp 用于显示 tcp,udp 的端口和进程等相关情况。在查到端口占用的进程后,如果你要杀掉对应的进程可以使用 kill 命令 :kill -9 PID

启动成功!

启动成功后要去看一下服务器有没有开启8080端口,如果没有的话就要去开启,宝塔内也要开启8080端口!!

 

(三)Docker部署

Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux或Windows操作系统的机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口。

简单的说,docker就是一个容器,可以将项目的环境(比如java、nginx)和项目的代码一起打包成镜像,所有人都可以下载镜像,更加容易分发和移植。在启动项目时就不再需要敲过多命令,而是直接下载镜像,启动镜像即可。相当于软件的安装包!

Docker安装:

  • 官网:Developers - Docker

  • 直接使用宝塔软件商店进行安装

用于指定构建Docker镜像的方法是通过Dockerfile文件来完成的,Dockerfile一般都是去cv下来的,不需要太深入理解。

Dockerfile 编写:

  • FROM 依赖的基础镜像

  • WORKDIR 工作目录

  • COPY 从本机复制文件

  • RUN 执行命令

  • CMD / ENTRYPOINT(附加额外参数)指定运行容器时默认执行的命令

#后端Dockfile
    
FROM maven:3.5-jdk-8-alpine as builder

# Copy local code to the container image.
WORKDIR /app
COPY pom.xml .
COPY src ./src

# Build a release artifact.
RUN mvn package -DskipTests

# Run the web service on container startup.
CMD ["java","-jar","/app/target/user-center-backend-0.0.1-SNAPSHOT.jar","--spring.profiles.active=prod"]
#前端的Dockfile
    
FROM nginx

WORKDIR /usr/share/nginx/html/
USER root

COPY ./docker/nginx.conf /etc/nginx/conf.d/default.conf
#./dist 前端构建的代码包
COPY ./dist  /usr/share/nginx/html/

EXPOSE 80

CMD ["nginx", "-g", "daemon off;"]

直接在项目的根目录下创建该文件即可

根据 Dockerfile 构建镜像:

添加新文件后需要重新打包并重新上传打包好的项目

# 后端
docker build -t user-center-backend:v0.0.1 .

# 前端
docker build -t user-center-frontend:v0.0.1 .

 

docker run 启动

# 前端
docker run -p 80:80 -d user-center-frontend:v0.0.1

# 后端
docker run -p 8080:8080 user-center-backend:v0.0.1

虚拟化

  1. 端口映射:把本机的资源(实际访问地址)和容器内部的资源(应用启动端口)进行关联

  2. 目录映射:把本机的端口和容器应用的端口进行关联

三、绑定域名

前端项目访问:

用户输入网址 => 域名解析服务器(把网址解析为 ip 地址 / 交给其他的域名解析服务) => 服务器 =>(防火墙)=> nginx 接收请求,找到对应的文件,返回文件给前端 => 前端加载文件到浏览器中(js、css) => 渲染页面

后端项目访问:用户输入网址 => 域名解析服务器 => 服务器 => nginx 接收请求 => 后端项目(比如 8080端口)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/408928.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

前端面试八股文--Vue篇(持续更新)

一. Vue2 篇 1.MVC MVVM区别 首先呢这是两种模式 MVC指的是 modal,view, controller MVVM 指的是 modal ,view, view modal mvc和mvvm区别是:1、处理业务的模式不同,MVC里,View是可以直接访…

在 Vue3 中使用 Vuex

本篇文章主要记录 Vue3 中使用 Vuex 的步骤和注意事项: 1、安装依赖库 npm install vuex --save-dev2、配置 Vuex 实例 对比 Vue2 和 Vue3 各自创建 Store 实例的区别; Vue2 是用 Vue.use(Vuex)注入 Vuex 插件,然后通过 new Vuex.Store(o…

真正有效解决vue addRoute动态添加路由后刷新页面白屏的靠谱方法及思路,切实可行!

PS:想直接看解决方法的可以跳过前面的废话阶段从后往前看~ 前情回顾:萌新最近从Vue2转战Vue3,一边自学一遍自己做点娱乐项目练练手,这次Vue3项目权限管理用到动态路由,由于以前一直用的addRoutes()方法已经被废弃&…

如何在Windows server 2012配置Web服务器

现在,我们浏览网页已经成为了一种常态,但是你知道网页是怎么运行的吗? 我们浏览网页,首先会打开浏览器,然后输入网页的地址(当然这里现在已经可以不用我们自己输入地址了,一般现在就是直接搜索…

在vite里获取env环境变量

在vite里获取env环境变量.env环境配置文件在cli项目中我们可以是配置.env.[mode]文件来配置环境变量在cli项目中使用.env.[mode]在vite中使用.env文件.env环境配置文件 在项目中总会遇到一些默认的配置,需要我们配置到静态文件中方便我们去获取,这时候就可以用到这个.env环境变…

vue项目中使用vuedraggable

最近在学习一个可视化搭建的项目,里面用的拖拽就是draggable.js。看了几个中文的文档,有很多坑,可能是没有及时更新的原因。 VUe 建议去看vuedraggable的官方文档,只不过是英文的。官方文档:https://github.com/Sor…

【HTML】筑基篇

🍈作者简介:大家好,我是亦世凡华、渴望知识储备自己的一名在校大学生 🍇个人主页:亦世凡华、的csdn博客 🍓系列专栏:HTML专栏 🥝推荐一款模拟面试刷题神器🔥:…

echarts 定制legend内容,显示和位置

echarts 定制legend内容,显示和位置1.type(当图例很多的时候可以用到)2.orient(图例的排版方向)3.top,bottom,left,right(图例在容器中的位置)4.width,height(图例组件的大小);itemWidth,itemHeight(图例图标的大小)5. align(图例…

六、Echart图表 之 tooltip提示框组件配置项大全

🍓 作者主页:💖仙女不下凡💖 🍓 前言介绍:以下👇内容是我个人对于该技术的总结,如有不足与错误敬请指正! 🍓 欢迎点赞👍 收藏⭐ 留言&#x1f4…

【JavaScript 进阶教程】函数的定义 调用 及 this指向问题

这篇文章开始我们函数的进阶篇,和我们JavaScript基础学的函数有了很多拓展,这篇文章首先我们从函数的定义,调用,及其 this指向 来一个总结。 文章目录: 一:函数的定义 1.1 命名函数 1.2 匿名函数 1…

若依(ruoyi)框架:如何实现灵活自定义路由配置

如何灵活自定义路由配置业务背景如何实现方式一:直接在前端路由表(router/index.js)里面某个路由的meta属性里面配置。方式二:在后台返回动态路由的接口中组装meta信息如何改造效果展示使用方法总结业务背景 随着项目的深入开发&a…

使用 iframe出现了缓存,导致页面不会刷新的解决方案

事情是这样的,我在打代码的时候,需要在A页面里引入B页面我使用了iframe 这个标签 来引入页面B但是我发现 当我更改完页面B的内容 将它上传到服务器后,我访问这个A页面,这个我使用iframe 引入的页面B 的内容并没有更新,经过一番研究…

VsCode工具开发vue项目必装插件

VsCode工具开发vue项目必装插件 目录VsCode工具开发vue项目必装插件1.概述2.VsCode插件清单2.1.Vetur插件让vue文件代码高亮2.2.Vue VSCode Snippets自动生成vue模板内容插件1.安装插件2.使用插件生成vue模板代码2.3.LiveServer实时刷新网页1.安装LiveServer2.使用LiveServer打…

若依框架搭建和使用

一.搭建系统 若依官网:RuoYi 若依官方网站 |后台管理系统|权限管理系统|快速开发框架|企业管理系统|开源框架|微服务框架|前后端分离框架|开源后台系统|RuoYi|RuoYi-Vue|RuoYi-Cloud|RuoYi框架|RuoYi开源|RuoYi视频|若依视频|RuoYi开发文档|若依开发文档|Java开源框…

Jasper Report详细使用教程(保姆级教程),整合Springboot使用

Jasper Report详细使用教程1、下载Jaspersoft Studio2、编写jrxml文件3、编译模板文件4、输出PDF报表(SpringBoot整合)5、解决中文乱码(不显示的问题)6、最后1、下载Jaspersoft Studio 官网下载地址:https://communit…

CSS网页布局

📜个人简介 ⭐️个人主页:微风洋洋🙋‍♂️ 🍑博客领域:编程基础💡,后端💡,大数据,信息安全 🍅写作风格:干货,干货,还是tmd的干货 🌸精选专栏:【J…

叮咚,您有一封告白信件待查收(原生HTML+CSS+JS绘制表白信件,代码+链接+步骤详解)

马上就要5月20号啦,准备好如何向心仪的她/他表白了嘛!特此出一篇告白小信件,效果图如下。纯htmlcss绘制,包含详细教程注释,干货满满哦。 链接置于文章结尾总结处。 文章目录一、叮咚!查收您的信件&#x…

js二十五道面试题(含答案)

目录 1.线程和进程是什么?举例说明 2. js中的基础数据类型有哪几种? 了解包装对象吗? 3.对内存泄漏的了解 4.js中数组合并的方法 5.合并对象的方法 6.什么是作用域,什么是作用域链? 7.JS如何实现异步编程(5种&…

1.vite初识、vite搭建项目

1.vite优势 1.1启动速度 解释一下冷启动:它是指输入启动指令后他编译到启动完成的过程; 当你使用vite和webpack后你就会得出这个结论,vite相对于webpack启动速度还是略胜一筹的,当你的项目是小型项目时,不是特别明显…

TypeScript 报错汇总

TypeScript 报错汇总 在这篇文章中将记录我遇到的ts错误,应该会持续更新。 有时候从错误点入手学习似乎是一个不错的选择,所以也欢迎你私信我一些ts的问题。 一、内置工具 1.1 Pick & Partial 先看看Pick和Partial工具的源码: type…