目录
- 0.购买服务器
- 1.端口开启
- 2.环境安装
- 2.1使用宝塔可视化安装
- 2.2 Linux常用操作
- 3.项目部署
- 3.1 JSP项目部署
- 3.1.1 打war包
- 3.1.2 部署到服务器
- 3.1.3 数据库连接
- 3.1.4 排错指南
- 3.1.5 绑定域名
- 3.1.5 网站备案
- 3.2 SSM项目部署
- 3.3 SpringBoot/Vue项目部署
- 4.踩的一些坑
- 4.1mysql莫名其妙看不到自己的数据库
- 4.2宝塔安装Nginx
- 4.3 关于部署vue到nginx访问空白
- 4.4 Nginx跨域问题
- 4.5 关于打包失败
- 4.6 关于如何让springboot持续运行
- 4.7 关于端口占用
0.购买服务器
首先来到阿里云官网 传送门(点我)
这里我选择的是学生计划,通过认证和测试后,可免费使用2个月(这个时间根据官网活动不等)
学生计划链接 传送门(点我)
购买(获得)云服务后,利用官网给的公网IP和账户密码登陆。这里我使用的是Putty
Putty下载链接:传送门(点我)
账号默认为root,密码可在控制台重置
1.端口开启
由于阿里云的安全组默认没有放行一些我们需要的端口,为了正常访问,我们需要开启这些我们所需要的端口。教程 传送门(点我)
常用端口 | 工具 |
8888 | 宝塔面板 |
22 | SSH |
80、443 | 网站及SSL |
3306 | 数据库远程连接 |
888 | phpmyadmin |
如果你进入面板里修改了面板端口或FTP端口,记得要在安全组和面板防火墙放行相应端口
2.环境安装
2.1使用宝塔可视化安装
宝塔面板官网 传送门(点我)
在Linux中安装完成后,会给出一个 URL 、账号、密码
将URL复制到浏览器中,使用账号密码登陆
则可以在此面板中完成傻瓜式的环境安装。记得一定要在阿里云中开启8888端口(第一步已经提到)
同时,我们也需要在Linux中放行我们需要的端口例如8080,3306等,这里通过宝塔面板操作
2.2 Linux常用操作
Linux教程 传送门(点我)
3.项目部署
3.1 JSP项目部署
3.1.1 打war包
关于Web Application:Exploded和Web Application:Archive的区别可以去看这几篇文章传送门1(点我) 传送门2(点我) 传送门3(点我)简单总结如下
方式 | |
web Application Exploded | 以文件夹形式发布项目,发布项目时就会自动生成文件夹在指定的output directory |
Web Application Archive | 就是war包形式,将项目打成一个war包在指定位置 |
artifacts是maven中的一个概念,表示项目/modules如何打包,比如jar,war,war exploded,ear等打包形式,一个项目或者说module有了artifacts就可以部署到web应用服务器上了(注意artifact的前提是已经配置好module,如果连项目都不是,怎么配置artifacts来定义发布项目的形式呢)
打包方式 | 作用 |
jar | 通常是开发时要引用通用(JAVA)类,打成包便于存放管理 |
war | 是做好一个(web)应用后,通常是网站,打成包部署到容器中是做好一个(web)应用后,通常是网站,打成包部署到容器中 |
ear | 企业级应用,实际上EAR包中包含WAR包和几个企业级项目的配置文件而已,一般服务器选择WebSphere等,都会使用EAR包。通常是EJB打成ear包。 |
war包的组成部分 | 作用 |
WebContent目录 | 代表其是一个web项目, 主要存放的是前端代码、Web.xml、lib等文件 |
classes目录 | 编译过后的java文件的二进制文件.( .class ) 后台逻辑都是由这里管控 |
WebContent目录里面有一个名为WEB-INF的文件夹,我们将classess文件放入这个文件夹,再将整个WebContent目录进行打包,就形成了我们在tomcat发布时使用的war包。
选中当前项目的Web根目录
点击ApplyOK,然后按Ctrl+F9,就会看到在你设置的目录下出现了一个war包
或者 Build Artifacts 然后选中你刚刚配置的,效果也是一样
3.1.2 部署到服务器
首先需下载Xftp用来 将windows的文件传输到Linux服务器上。
这里我提供一个Xftp个人版的链接(仅供学习使用),也可以自行在网上搜索 下载链接:点我
连接成功后,右侧会出现Linux文件显示
将打好的war包拖到Tomcat webapp目录下
这个时候在宝塔面板中重启Tomcat
重启之后会发现Webapp目录下多出来这个文件夹
3.1.3 数据库连接
- 在Linux环境的mysql中允许远程连接
use mysql;
select user,host from user;
update user set host="%" where user="root";
flush privileges;
这里我使用IDEA自带的远程工具(这个其实挺好用的,可以自动补全和提示,不知道为什么有人黑)来连接,注意:使用之前一定要记得在宝塔中放行端口。(如果你是按照步骤来的,这步肯定已经完成了)可翻到最上面查看目录,端口放行。
- 在IDEA最右侧找到Database点击+号
- 如果右侧没有可以,这个不同版本的IDEA略有不同,可自行搜索 连接成功后就和本地一样操作数据库了。一个坑,搞完之后一定要把之前项目中的数据配置文件的localhost换成服务器IP,我找半天才发现这个错
到这里,我们就可以通过公网IP的方式来访问自己的项目了
例如我的
3.1.4 排错指南
如果没有成功部署,需检查这几个地方
①阿里云面板中安全组设置端口是否放行 上面已提到
②宝塔面板中设置Linux端口是否放行 上面已提到
③Linux中是否设置mysql运行远程访问 上面已提到
④Linux环境是否安装
部署JSP项目时,我安装了如下环境,如下环境足够用IP+端口号+项目名的方式去访问项目了。
这里对Tomcat提个建议,因为我开始安装的是Tomcat7,结果发现JDK是JDK7。所以建议安装Tomcat8。Tomcat9是否默认为JDK9这个我没有测试。关于Apache的作用可以参考下面文章。 传送门(点我)
3.1.5 绑定域名
域名购买地址(新人一块钱)传送门(点我) 为了方便绑定域名等其它操作我又安装了一些工具
当我们购买完域名之后,要对此域名进行解析,所谓解析,也就是将我们买的域名和IP关联起来。
在宝塔面板中添加站点
接着在网址栏输入自己的域名
3.1.5 网站备案
尬住了,要3个月以上的服务器才能备案,按照指示填身份证等信息就行。 白嫖的两个月的服务器备案不了。。。
3.2 SSM项目部署
使用maven打成war包,然后和上面操作一样
3.3 SpringBoot/Vue项目部署
安装如下插件即可
将使用npm run build生成的dist文件夹(我重命名为web了),放入linux服务器如下目录下
将springboot生成的jar包,放入任意一个目录下并执行
nohup java -jar 包名 &
查看运行情况
ps -ef|grep 包名
这个grep进程的意思是,我们这个查询本身也是一个进程
查看所有运行的进程
ps aux | less
4.踩的一些坑
4.1mysql莫名其妙看不到自己的数据库
第二天在linux登录mysql数据库时,发现之前新建的数据库都消失了, 而且明明修改了root的密码,却可以不输入密码直接回车登录。更离谱的是我通过远程连接又可以连接到之前的数据库。也就是说,数据库没消失,只是当前权限不够了。 搜索了一下,找到了解决办法:删除匿名用户。传送门(点我)
service mysqld stop
mysqld_safe --skip-grant-table
mysql -u root mysql
delete from mysql.user where user='';
flush privileges
service mysqld restart
4.2宝塔安装Nginx
配置路径在这里。。。
而且如果你访问出现了这个情况
那是因为宝塔无聊,他的index.html居然是这个,真的害人了。
4.3 关于部署vue到nginx访问空白
传送门(点我)
location /aaa {
alias D:/bbb/ccc;
index index.html index.htm;
try_files $uri $uri/ /aaa/index.html;
}
其中/aaa是需要访问的地址, D:/bbb/ccc是你文件真实存放的路径,index指的就是你的入口文件,你的文件名如果不是index.html的话就替换成你的入口文件的名字,这里面最重要的是 try_files $uri $uri/ /aaa/index.html 这句话,这句话主要就是用来处理vue的历史模式的,在配置完nginx后, 还要在项目里面加点东西, 其实也很简单, 就在项目的src目录里面加上
4.4 Nginx跨域问题
详细情况见 传送门(点我)
4.5 关于打包失败
如果出现打包失败,在本地又可以运行的情况下。可以尝试注释掉单元测试的类。
4.6 关于如何让springboot持续运行
在部署的时候我发现,如果关闭了远程连接,跑起来的springboot服务也停止了。 解决如下
nohup java -jar 包名 &
查看运行情况
ps -ef|grep 包名
这个grep进程的意思是,我们这个查询本身也是一个进程
查看所有运行的进程
ps aux | less
4.7 关于端口占用
netstat -lnp|grep 80
kill -9 5574