部署 Web 项目到 Linux,可以使他人也访问项目的方法

目录

一、环境配置

二、建构项目并打包

三、上传Jar包到服务器, 并运行

3.1 上传Jar包

3.2 运行 jar 包

3.3 开放端口号

四、其他问题

4.1 运行异常问题

4.2 杀掉进程

五、总结


一、环境配置

如果本地项目是SpringBoot项目,使用的数据库是MySQL,那么就需要在Linux系统上安装JDK,MySQL,需要跟本地项目使用的版本一致。可参考上篇内容:

Linux搭建Java部署环境:安装 JDK 和 MySQL 的教程

接着在Linux系统上导入本地项目所用的sql文件,完成之后,修改本地项目里的数据库配置,改为Linux系统上的数据库用户名和密码。并且将日志文件的位置改为Linux系统上的文件位置(位置随意,没有的话可以提前建一个)。

如果配置文件有两个,专门设置了本地环境运行和线上环境运行的配置文件,那么可以如下操作:

针对不同平台创建不同的配置文件,要求名字为 application-XXX.yml 或者 application-XXX.properties 。以下以 application-XXX.yml为例:

(固定格式,只有后面的字母可以修改)
application-dev.yml
spring:datasource:url: jdbc:mysql://127.0.0.1:3306/java_blog_spring?characterEncoding=utf8&useSSL=falseusername: rootpassword: rootdriver-class-name: com.mysql.cj.jdbc.Driver
application-prod.yml
spring:datasource:url: jdbc:mysql://127.0.0.1:3306/java_blog_spring?characterEncoding=utf8&useSSL=falseusername: rootpassword: 123456driver-class-name: com.mysql.cj.jdbc.Driver
在主配置文件  application.yml 中指定配置文件, 并删除数据库相关配置
spring:profiles:active: prod

二、建构项目并打包

在本地使用maven进行打包。如果Test代码中有与环境配置相关的操作(比如数据库相关的操作),打包会失败,点击如下图标,可以跳过测试打包,随后点击点击 clean->package :

三、上传Jar包到服务器, 并运行

3.1 上传Jar包

直接拖动打好的jar包到xshell窗口即可完成文件的上传:
Xshell 可以直接拖动文件到窗口,达到上传文件的目的,如果使用其他客户端,不支持文件的上传,需要借助 lrzsz 命令:
上传文件:
sz filename
下载文件:
rz
执行该命令后,在弹出框中选择要上传的文件即可,上传的速度取决于网络。
问题: 如果执行上述命令之后,提示 Command 'XX' not found,表示当前云服务器未安装lrzsz 命令,需要先进行安装。
安装 lrzsz:
apt-get install lrzsz

3.2 运行 jar 包

nohup java -jar blog-spring-0.0.1-SNAPSHOT.jar &
nohup : 后台运行程序,用于在系统后台不挂断地运行命令,退出终端不会影响程序的运行。
语法格式:
 nohup Command [ Arg … ] [ & ]
参数说明:
Command:要执行的命令。
Arg:一些参数,可以指定输出文件。
&:让命令在后台执行,终端退出后命令仍旧执行。

3.3 开放端口号

如果外网需要访问该服务,需要先服务器防火墙开放对应的端口号。
本着服务器安全的原则,云服务器上的端口非必要不开启。比如常见端口号:数据库 3306 , Redis 6379,尽可能避免开放,而是采用其他方式来连接,比如配置隧道的方式。
以腾讯云服务器举例:
1) 进入防火墙管理页面

 

2) 添加规则

端口号写需要开放的端口号,多个端口号以逗号分割。

完成之后就可以验证了。访问项目: http://IP:Port/blog_login.html 。IP改为云服务器的IP,Port改为项目的端口号,可以正常访问即可。

四、其他问题

4.1 运行异常问题

一个程序的正常运行,需要程序的正确和环境的正确。同样的代码在Windows上可以运行成功,不一定在 Linux上运行成功。不同的系统对代码的理解和支持是不同的。比如Windows系统对MySQL不区分大小写,Linux区分大小写。
服务不能正常访问的原因有很多,主要分以下方面:
1. 服务未启动:
  • 使用 ps -ef|grep java 查看程序是否在运行。
  • 使用 curl http://127.0.0.1:8080/blog_login.html 看下是否有返回html页面, 如果有返回, 说明程序启动成功了, 考虑端口未开放。
  • 如果未启动成功, 需要查看对应的日志, 根据原因来分析:数据库不存在;表不存在(区分大小写) 数据库密码不正确Jdk 安装版本不对, 或者未安装;mysql未设置密码 等等。
2. http端口未开放:
检查云服务器防火墙/安全组是否开放相应端口(如8080)

4.2 杀掉进程

如果我们需要重启服务,或者重新部署等,都需要先停止之前的服务。
查看当前服务的进程:
ps -ef|grep java

上图35443 就是该服务的进程。
杀掉进程:
kill -9 PID

五、总结

  1. 连接Linux服务器的方式有很多,xshell只是其中一种,xshell是一个客户端,而非服务器。
  2. Ubuntu 软件管理工具是apt,其他的linux发性版本软件包管理工具不同,比如CentOS是使用yum来管理软件的。
  3. SpringBoot可以使用多个配置文件来完成不同平台的配置。
  4. 在Window上可以运性成功的代码,在Linux上不一定能运性成功。
  5. 启动程序需要使用nohup后台运行,需要停止服务时, 使用kill命令。

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

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

相关文章

ES6 类-总结

我们现在用一段代码, 在注释中总结所有关于JavaScript类的所有用法 class Student extends Person {//这里的Student是子类,Person是父类,extends是实现类之间的继承,它可以自动设置原型university 家里蹲大学; //公共字段(类似…

APP 数据抓取 - Charles 抓包工具的使用(Charles 端口配置、CA 证书配置、Charles Android 模拟器配置)

前言说明 此文章是我在学习 Charles APP 抓包时编写,内容都是亲测有效,文章内容也有参考其他人,参考文章如下: Android 手机使用 charles 抓 https 请求(保姆级教程)网易 mumu 模拟器安装下载 charles 的…

计算机网络(八股文)

这里写目录标题 计算机网络一、网络分层模型1. TCP/IP四层架构和OSI七层架构⭐️⭐️⭐️⭐️⭐️2. 为什么网络要分层?⭐️⭐️⭐️3. 各层都有那些协议?⭐️⭐️⭐️⭐️ 二、HTTP【重要】1. http状态码?⭐️⭐️⭐️2. 从输入URL到页面展示…

XSLT 实例:掌握 XML 转换的艺术

XSLT 实例:掌握 XML 转换的艺术 引言 XSLT(可扩展样式表语言转换)是一种强大的工具,用于将 XML(可扩展标记语言)文档转换为其他格式,如 HTML、PDF 或纯文本。在本文中,我们将通过一…

从Vuex 到 Pinia,Vue 状态管理的进化

Vue.js,一个轻量级且易于上手的 JavaScript 框架,已经在全球范围内获得了广泛的应用。 Vue.js 的状态管理库 Vuex,也为开发者提供了一个统一的状态管理方案。然而,随著 Vue.js 的发展和进化,我们看到了一个新的状态管理库的诞生 — Pinia。在这篇文章中,我们将探讨 Vuex…

2024年9月3日嵌入式学习

数据结构 1定义 一组用来保存一种或者多种特定关系的数据的集合(组织和存储数据) 程序的设计:将现实中大量而复杂的问题以特定的数据类型和特定的存储结构存储在内存中, 并在此基础上实现某个特定的功能的操作&am…

Springboot集成WebSocket客户端,发送消息并监测心跳

jar包&#xff08;主要jar包&#xff09; <dependency><groupId>org.java-websocket</groupId><artifactId>Java-WebSocket</artifactId><version>1.5.7</version></dependency>服务类 import cn.hutool.json.JSONUtil; impor…

「Python程序设计」条件控制:if-elif-else语句

我们在进行程序设计的过程中&#xff0c;基本上遵循的过程是&#xff0c;找出变量和常量&#xff0c;通过python编程语言&#xff0c;设置变量和常量&#xff0c;以及考虑是否需要赋予初始值。 设计变量和常量&#xff0c;其实就是为了模拟和计算我们的现实世界中&#xff0c;…

学习笔记--Docker

安装 1.卸载旧版 首先如果系统中已经存在旧的Docker&#xff0c;则先卸载&#xff1a; yum remove docker \docker-client \docker-client-latest \docker-common \docker-latest \docker-latest-logrotate \docker-logrotate \docker-engine 2.配置Docker的yum库 首先要安…

深入理解 JavaScript DOM 操作

一、DOM 操作分类 &#xff08;一&#xff09;元素查找 根据 ID 值查找&#xff1a;getElementById()&#xff0c;返回符合条件的第一个对象。 var aa document.getElementById("aa");console.log(aa);根据类名查找&#xff1a;getElementsByClassName()&#xff…

IntelliJ IDEA 自定义字体大小

常用编程软件自定义字体大全首页 文章目录 前言具体操作1. 打开设置对话框2. 设置编辑器字体3. 设置编译软件整体字体 前言 IntelliJ IDEA 自定义字体大小&#xff0c;统一设置为 JetBrains Mono 具体操作 【File】>【Settings...】>【Editor】>【Font】 统一设置…

C++:list篇

前言: 观看C的list前需要对链表有一些了解&#xff0c;如C语言的链表结构。本片仅介绍list容器中常用的接口函数概念以及使用。 list的概念&#xff1a; 简而言之&#xff0c;C的list是一个双向带哨兵位的链表容器模板 list的构造&#xff1a; 1.list():默认构造 2.li…

spring之异常和测试相关注解

原文地址 ControllerAdvice和ExceptionHandler 通常组合使用&#xff0c;用于处理全局异常&#xff0c;示例代码如下&#xff1a; ControllerAdvice Configuration Slf4j public class GlobalExceptionConfig {private static final Integer GLOBAL_ERROR_CODE 500;Excepti…

认识git和git的基本使用,本地仓库,远程仓库和克隆远程仓库

本地仓库 #安装git https://git-scm.com/download/win #git是什么&#xff1f;有什么用&#xff1f; git相当于一个版本控制系统&#xff0c;版本控制是一种记录一个或若干文件内容变化&#xff0c;以便将来查阅特定版本修订情况的系统。 作用: 记录&#xff08;项目&#…

[Qt5] 使用QtConcurrent::run在异步线程中执行耗时函数

&#x1f4e2;博客主页&#xff1a;https://loewen.blog.csdn.net&#x1f4e2;欢迎点赞 &#x1f44d; 收藏 ⭐留言 &#x1f4dd; 如有错误敬请指正&#xff01;&#x1f4e2;本文由 丶布布原创&#xff0c;首发于 CSDN&#xff0c;转载注明出处&#x1f649;&#x1f4e2;现…

Java-树形图工具类TreeUtil

TreeUtil 工具类,包括列表转树形结构、遍历、查找和删除节点等功能。 import java.util.*;public class TreeUtil {/*** 将列表转换为树形结构。** @param target 扁平化的节点列表* @param getId 获取节点ID的函数* @param getParentId 获取节点父ID的函数* @…

物联网(IoT)支持的小型水处理厂实时硬件在环(HIL)仿真

这篇论文的标题是《Real-Time Hardware-In-The-Loop Simulation of IoT-Enabled Mini Water Treatment Plant》&#xff0c;作者是 Mohamad Taib Miskon 等人&#xff0c;发表在 2024 年 IEEE 自动控制与智能系统国际会议&#xff08;I2CACIS&#xff09;上。以下是该论文的主要…

【Agent】Agent Q: Advanced Reasoning and Learning for Autonomous AI Agents

1、问题背景 传统的训练Agent方法是在静态数据集上进行监督预训练&#xff0c;这种方式对于要求Agent能够自主的在动态环境中可进行复杂决策的能力存在不足。例如&#xff0c;要求Agent在web导航等动态设置中执行复杂决策。 现有的方式是用高质量数据进行微调来增强Agent在动…

学习日志29

论文阅读&#xff1a;IBM Q Experience as a versatile experimental testbed for simulating open quantum systems 引言部分&#xff1a; 引言部分首先介绍了开放量子系统的理论研究的重要性&#xff0c;这些理论描述了量子系统与其环境相互作用的动力学。这种理论对于理解量…

C++复习day01

这篇博客主要复习C语言的数组和指针 1.指针数组和数组指针 问&#xff1a;指针数组和数组指针&#xff0c;哪一个是指针&#xff0c;哪一个是数组&#xff1f; 我们来类比一下&#xff0c;整型数组是存放整型的数组&#xff0c;那么指针数组就是一个存放指针的数组&#xff0…