JavaWeb项目(包含SSM项目)部署到Linux云服务器

news2024/11/16 2:51:01

目录

一、云服务器环境部署

1、安装JDK

查看JDK的命令为:

安装JDK命令:

2、安装Tomcat

2.1 安装步骤

2.2 验证Tomcat是否启动成功

3、安装MySQL

二、部署 Web 项目到 Linux

2.1  在云服务器中数据库建库建表

2.2 修改部署项目连接数据库密码

2.3 使用maven 进行打包

2.4 将jar包打包上传云服务器

2.5 使用java指令运行项目jar包


当我们构建完JavaWeb项目后,如果需要许多人来访问我们的项目,此时就需要将项目部署到服务器上,使用外网IP,此时大家就可以访问你的项目了。

在Linux云服务器上部署JavaWeb项目需要完成如下操作步骤:

1、安装JDK

2、安装Tomcat  (若为SSM项目则可以跳过此步骤,因为Spring项目打包jar会自动打包Tomcat)

3、安装MySQL数据库


一、云服务器环境部署

1、安装JDK

安装文件可以使用yum来安装,yumLinux下非常常用的一种包管理器,包管理器就好像我们手机里面的应用商店,直接在应用商店里面下载App。

查看JDK的命令为:

​yum list | grep jdk
  • yum list  表示列出可以安装的包
  • |  为管道,效果为把第一个命令的输出当做第二个命令的输入
  • grep 为筛选包含jdk关键字的结果

 选择安装jdk版本1.8,devel表示为开发版,x86_64为64位操作系统

安装JDK命令:

执行以下命令并在后续界面输入 y 表示确认下载

yum install java-1.8.0-openjdk-devel.x86_64

出现以上界面就安装成功JDK了。

2、安装Tomcat

2.1 安装步骤

查看Tomcat列表命令

yum list | grep tomcat

在筛选出来的Tomcat版本中发现Tomcat版本都太低,我们尽量选择Tomcat版本为8.0以上。因此我们就需要自己去Tomcat官网下载自己对应的版本。

我这里下载的Tomcat压缩包版本为 apache-tomcat-8.0.0-RC1.zip

如果我们需要将外部的文件上传到Linux系统中,可以将文件拖拽到命令框中,但在这之前需要安装Linux上传依赖的命令:

yum install lrzsz
  • rz 命令:将 windows 上的文件传给 Linux 服务器
  • sz 命令:将 Linux 上的文件传给 windows

直接将下载好的Tomcat版本压缩包文件拖拽到xshell命令框中

对下载好的apache-tomcat-8.0.0-RC1.zip进行解压缩

1、先执行解压缩的依赖命令

yum install unzip

2、执行解压缩文件apache-tomcat-8.0.0-RC1.zip

unzip apache-tomcat-8.0.0-RC1.zip

解压缩Tomcat压缩包后就可以启动Tomcat了,此时需要进入bin目录文件下的startup脚本

  • startup.bat 指在windows下运行
  • startup.sh 指在Linux下运行

因此我们就需要给.sh赋予可执行权限,使用如下命令:

chomd +x *.sh

所有的后缀为.sh全部变为了绿色,绿色表示可执行

2.2 验证Tomcat是否启动成功

1、启动Tomcat

sh startup.sh

 2、验证Tomcat是否成功启动

方式一:查看端口号8080 是否被占用

netstat -anp | grep 8080

方式二:查看Tomcat 进程是否存在

ps aux | grep tomcat

3、安装MySQL

接下来在云服务器里面安装MySQL详细步骤见以下2篇博客

文章:https://blog.csdn.net/qq_45441466/article/details/109670194

和保姆级部署SpringBoot项目到服务器

在xshell里面连接数据库命令为

mysql -uroot -p

退出数据库命令为: Ctrl键 + d

二、部署 Web 项目到 Linux

2.1  在云服务器中数据库建库建表

将个人项目的数据库sql文件复制到云服务器中的数据库里面

以我自己部署的个人博客项目为例:

-- 创建数据库
drop database if exists mycnblog;
create database mycnblog DEFAULT CHARACTER SET utf8mb4;
 
-- 使用数据数据
use mycnblog;

DROP TABLE IF EXISTS `articleinfo`;
CREATE TABLE `articleinfo`  (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `title` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL,
  `content` text CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL,
  `createtime` datetime NULL DEFAULT CURRENT_TIMESTAMP,
  `updatetime` datetime NULL DEFAULT CURRENT_TIMESTAMP,
  `uid` int(11) NOT NULL,
  `rcount` int(11) NOT NULL DEFAULT 1,
  `state` int(11) NULL DEFAULT 1,
  PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 11 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = Dynamic;

-- ----------------------------
-- Records of articleinfo
-- ----------------------------
INSERT INTO `articleinfo` VALUES (5, '第一篇文章', '# 这是第一篇文章\n哈我一定要去看看那美丽的西湖,说到西湖,我脑海里就浮现出那绿油油的大树,', '2023-07-06 16:53:31', '2023-07-06 18:21:52', 17, 12, 1);
INSERT INTO `articleinfo` VALUES (6, '第二篇文章', '# 这是第二篇文章\n这是什么声音?是我们班正在玩的游戏,你猜是什么游戏?对了,就是吹气球!吹气球游戏开始了,\n', '2023-07-06 16:54:28', '2023-07-06 16:54:28', 17, 1, 1);
INSERT INTO `articleinfo` VALUES (7, '第三篇文章', '# 在这里写下一篇博客\n哈哈哈哈哈哈哈哈接啊哈哈哈哈哈', '2023-07-06 16:54:54', '2023-07-06 16:54:54', 17, 1, 1);
INSERT INTO `articleinfo` VALUES (8, '第四篇文章', '# 在这里写下一篇博客\n你们知道这是谁吗?这就是我的姐姐。她今年十岁,高高的个子,长长的头发,一双水汪汪的大眼睛,', '2023-07-06 16:55:32', '2023-07-06 16:55:32', 17, 1, 1);
INSERT INTO `articleinfo` VALUES (9, '第五篇文章', '# 这是第五篇文章\n在数字化时代,技术的发展给各行各业带来了巨大的改变,包括写作领域。传统的人工写作已经逐渐被AI文章生成器所取代,为我们提供了更便捷和高效的写作体验。今天,我将为大家推荐五款优秀的免费版文章生成器,它们能够帮助你实现自动化写作,解放你的时间和精力。', '2023-07-06 16:56:18', '2023-07-06 16:56:18', 17, 1, 1);
INSERT INTO `articleinfo` VALUES (10, '第六篇文章', '# 在这里写下一篇博客\n1111', '2023-07-06 17:30:23', '2023-07-06 17:30:23', 17, 1, 1);

-- ----------------------------
-- Table structure for userinfo
-- ----------------------------
DROP TABLE IF EXISTS `userinfo`;
CREATE TABLE `userinfo`  (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `username` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL,
  `password` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL,
  `photo` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '',
  `createtime` datetime NULL DEFAULT CURRENT_TIMESTAMP,
  `updatetime` datetime NULL DEFAULT CURRENT_TIMESTAMP,
  `state` int(11) NULL DEFAULT 1,
  PRIMARY KEY (`id`) USING BTREE,
  UNIQUE INDEX `username`(`username`) USING BTREE,
  UNIQUE INDEX `username_2`(`username`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 18 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = Dynamic;

-- ----------------------------
-- Records of userinfo
-- ----------------------------
INSERT INTO `userinfo` VALUES (1, 'admin', '7517b8aa67a2483ba8835cd3baa92ee0$27b4681cf298f199817c8cce79bf38f3', '', '2021-12-06 17:10:48', '2021-12-06 17:10:48', 1);
INSERT INTO `userinfo` VALUES (15, '张三', '7f6e6e1ee2af49288531e10c960d3cdc$211916150ec1fda2f2e01a262d94e1a2', '', '2023-07-04 22:34:16', '2023-07-04 22:34:16', 1);
INSERT INTO `userinfo` VALUES (17, '是烟花哈', '7517b8aa67a2483ba8835cd3baa92ee0$27b4681cf298f199817c8cce79bf38f3', '', '2023-07-06 16:47:13', '2023-07-06 16:47:13', 1);

-- ----------------------------
-- Table structure for videoinfo
-- ----------------------------
DROP TABLE IF EXISTS `videoinfo`;
CREATE TABLE `videoinfo`  (
  `vid` int(11) NOT NULL,
  `title` varchar(250) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL,
  `url` varchar(1000) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL,
  `createtime` datetime NULL DEFAULT CURRENT_TIMESTAMP,
  `updatetime` datetime NULL DEFAULT CURRENT_TIMESTAMP,
  `uid` int(11) NULL DEFAULT NULL,
  PRIMARY KEY (`vid`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = Dynamic;

-- ----------------------------
-- Records of videoinfo
-- ----------------------------
INSERT INTO `videoinfo` VALUES (1, 'java title', 'http://www.baidu.com', '2023-06-28 10:44:44', '2023-06-28 10:44:44', 1);

 

2.2 修改部署项目连接数据库密码

 查看MySQL 的端口号命令:

netstat -anp | grep mysql

 可以看到我们下载的Mysql的端口号为3306

2.3 使用maven 进行打包

打包有jar和war包两种方式。

jar包: SpringBoot官网提到最多的是使用jar打包,tomcat一起打进去了,直接java -jar …your.jar就可以了。

war包: 当你要部署到自己安装的weblogic、Tomcat里,这种传统方式通常使用war包。

我这里演示使用SpringBoot项目来上传云服务器

在pom.xml中添加打包依赖

	<packaging>jar</packaging>
	<build>
        <finalName>mycnblog</finalName>
    </build>

// mycnblog为打包名字

双击moven中的package选项

得到一个mycnblog.jar压缩包

 ​​​​​​​

 

2.4 将jar包打包上传云服务器

进入到根目录下,下载jar包拖拽命令rz

yum install lrzsz

执行上面命令后,j就可以直接将jar包就可以直接拖拽到命令框中了

使用命令ls,查看,如下图,有jar包存在,表明上传成功

 

 

2.5 使用java指令运行项目jar包

此处命令为一次性命令,解决方法见下面说明原因

java -jar ***.jar  //***为你的jar包名

​​​​​​​

        这种启动方式是一次启动,当我们关掉Xshell的时候,我们的网站又访问不上了,又得重新打开Xshell,执行 java -jar ***.jar。所以我们要使用下面的方法让这个项目在服务器上自动不间断地跑.

因此需要修改命令运行项目jar包:

nohup java -jar  ***.jar &     //***为你的jar包名

     

当使用 nohup 的时候,一般会出现问题 当你 输入 nohup --version 时,会出现

nohup: missing operand

这个标志 说明,没有配置 nohup ,系统目前还不认识这个命令。

推荐 看这篇 博客 可以很完美的解决这个问题。

现在,默认你配置好了 nohup ,那么现在就开始放大招了。

nohup java -jar xxx.jar & 
# 这个时候就可以 不挂断运行了

但是,到这个时候,可能还会出现一个问题

# nohup: ignoring input and appending output to ‘nohup.out’

出现这个之后,不用管,直接回车。会出现

  Exit 1                  nohup java -jar ludans.jar
[root@iZ2zehpy6o4zloocwwg9tsZ home]# # nohup: ignoring input and appending output to ‘nohup.out’

这个问题,简单描述,就是 忽略输入并将输出附加到“nohup.out”文件中。

这时候再在浏览器中输入 公网IP:8800/项目界面文件html

  

 如果出现输入公网IP:8080 ,无法运行项目,此时需要考虑云服务器是否放开端口号8080以及3306 

解决方法:阿里云轻量级服务器为例,配置防火墙规则如下图

 

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

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

相关文章

Qt(Day2)

实现登录框中&#xff0c;当登录成功时&#xff0c;关闭登录界面&#xff0c;并跳转到其他界面&#xff1a;

Go实现在线词典翻译(三种翻译接口,结合sync)

火山翻译 首先介绍用火山翻译英译汉。 package mainimport ("bufio""bytes""encoding/json""fmt""io""log""net/http""os""strings""unicode" )type DictRequestHS st…

第四章:角色和菜单管理功能【基于Servlet+JSP的图书管理系统】

角色和菜单功能 一、角色功能 接下来我们可以完成角色管理的增删改查操作 1. Bean对象 创建sys_role对应的实体对象SysRole Data public class SysRole {private Integer id;private String name;private String notes;private Date createTime; }2. Dao层 现在我们就可以在D…

JVM(Java虚拟机)详解

目录 一、JVM内存区域划分 1. 什么是内存区域划分以及为啥要进行区域划分 2. JVM内存区域划分详解 3. 堆区详解&#xff1a; 4. 给一段代码&#xff0c;问某个变量是在那个区域上&#xff1f; 二、JVM类加载机制 1.类加载的过程 2. 类加载的时机 3. 双亲委派模型&#xff08…

下班前几分钟,我彻底玩懂了tmux

目录 1. tmux简介2. Session3. Window4. Pane5. 自定义tmux配置6. 在shell脚本中操纵tmuxReferences 1. tmux简介 tmux&#xff08;terminal multiplexer&#xff09;是一个非常强大的工具&#xff0c;主要有以下几点功能&#xff1a; 终端复用&#xff1a; tmux 使你能够在一…

Linux分布式应用 Zabbix监控配置[添加主机 自定义监控内容 邮件报警 自动发现/注册 代理服务器 高可用集群]

-------------------- 添加 zabbix 客户端主机 -------------------- 关闭防火墙 systemctl disable --now firewalld setenforce 0 hostnamectl set-hostname zbx-agent01 服务端和客户端都配置时间同步 yum install -y ntpdate ntpdate -u ntp.aliyun.com 服务端和客户端都设…

基于simulink跟踪火车站对象检测遗弃物体(附源码)

一、前言 此示例演示如何跟踪火车站的对象并确定哪些对象保持静止。公共场所的遗弃物品会引起当局的关注&#xff0c;因为它们可能会构成安全风险。算法&#xff08;例如本例中使用的算法&#xff09;可用于通过将他们的注意力引导到潜在的感兴趣区域来协助监控实时监控视频的…

二十五、传输层协议(上)

文章目录 一、再谈端口号&#xff08;一&#xff09;端口号定义&#xff08;二&#xff09;端口号范围划分1.一共有 2^16 个端口2.认识知名端口号(Well-Know Port Number)3.端口号和进程就是K-V关系4.netstat&#xff08;1&#xff09;示例1&#xff1a; n 拒绝显示别名&#x…

CentOS Linux上安装JDK11、MySQL8.0、Minio等软件(rpm脚本模式)

本地环境&#xff1a;Windows 10家庭版 16G内存 512G硬盘 软件&#xff1a;VMWare WorkStation 16.0 FinalShell 4.0.1 一、下载必要软件包 下载软件均选择x86架构64位&#xff01;&#xff01;&#xff01;&#xff08;可根据自己的电脑配置选择&#xff09; CentOS Linu…

基础算法-前缀和

1 算法笔记 2.代码示例 3.代码解析 #include<iostream> using namespace std; const int maxn 1010000; int a[maxn],s[maxn];//a数组是用来存放数组的&#xff0c;s是用来存放前n项数组的和 int m,n;int main(){scanf("%d%d",&n,&m);for(int i1;i&l…

【react】插件react-tsparticles和tsparticles实现粒子特效:

文章目录 一、效果图:二、实现思路:三、实现代码:【1】安装依赖【2】 一、效果图: 二、实现思路: particles&#xff08;npm i react-particles-js&#xff09;目前已被弃用&#xff1b;取代它的是tsparticles&#xff08;npm i react-tsparticles 和npm install tsparticles&a…

docker 安装应用

前文介绍&#xff1a;我们再阿里云领取的ECS服务器&#xff0c;服务器选择应用模板&#xff0c;他会自动帮我们的服务器安装docker的一些相关插件。如果没有&#xff0c;则需要自己安装docker docker 安装Jenkins 1.下载Jenkins镜像 推荐版本 jenkins/jenkins:lts 命令&…

python 实现简易的学员管理系统

文章目录 前言基本思路需求实现1.实现菜单的功能2.提示用户输入需要进行的操作&#xff0c;并执行相关操作3.具体函数功能的实现增加学员信息显示所有学员信息删除学员信息修改学员信息查询学员信息 整体代码展示 前言 前面我们已经学习了 python 的输入输出、条件语句、循环、…

面向对象编程主线三

面向对象编程 三、第三阶段 高内聚&#xff1a;类的内部数据操作细节自己完成&#xff0c;不允许外部干涉&#xff1b; 低耦合&#xff1a;仅对外暴露少量的方法用于使用。 封装性的设计思想&#xff1a;把该隐藏的隐藏起来&#xff0c;该暴露的暴露出来。 3.1、面向对象的特…

[物理层]传输方式

传输方式 串行传输与并行传输 穿行传输是指数据是一个比特一个比特依次发送的&#xff0c;在发送端与接收端只用一条数据线路 并行传输是指一次发n个比特&#xff0c;在发送端与接收端需要n条数据线路 在网络中计算机通信通常采用串行传输&#xff1b;而在计算机内部&#x…

Minio在Windows的部署并使用Python来操作桶

什么是Minio? MinIO 是一个开源的对象存储服务器&#xff0c;具有高可用性、高性能和可伸缩性。它兼容 Amazon S3 API&#xff0c;因此可以无缝地替代 Amazon S3 作为对象存储的解决方案。 MinIO 可以让你在自己的基础设施中搭建一个对象存储服务&#xff0c;使你能够存储和…

HTML5+CSS3+JS小实例:背景动态变化的登录界面2.0

实例:背景动态变化的登录界面2.0 技术栈:HTML+CSS+JS 效果: 源码: 【html】 <!DOCTYPE html> <html><head><meta http-equiv="content-type" content="text/html; charset=utf-8"><meta name="viewport" con…

malloc()与calloc()的辨析

malloc()与calloc()的相同点 两者都是常用的内存分配函数&#xff0c;用于动态分配内存 两者返回值类型都为void*&#xff0c;需要强制转换为所需类型 使用完分配的内存后&#xff0c;都需使用free()函数来释放该内存&#xff0c;防止内存泄漏 malloc()与calloc()的不同点 mal…

你可能不知道现在的Java面试有多卷

大家好&#xff0c;最近有不少小伙伴在后台留言&#xff0c;今年面试实在是太卷了&#xff0c;不知道从何下手&#xff01; 不论是跳槽涨薪&#xff0c;还是学习提升&#xff01;先给自己定一个小目标&#xff0c;然后再朝着目标去努力就完事儿了&#xff01; 为了帮大家节约…