记录首次在云服务器部署spring boot项目,并实现域名访问
第一次写博客,对初次服务器部署配置做一个记录,写的有错或者纰漏欢迎指正
前言
情况是这样的,年前老师教过我们部署项目到虚拟机,我最近突然想到为什么不能部署到服务器上,用域名访问,我手中刚好有服务器,也有域名。
所以
我看了很多文章,因为我不知道域名解析到服务器后,服务器应该怎样去绑定
以前都是直接拿bt一键绑定,没有去深究过具体,在看了大量文章后,略懂了一点,直接开始实战
一、服务器准备
因为之前虚拟机部署是用的centos7加docker,所以在服务器上也继续用这两个,熟悉一点
我用的是腾讯云的服务器,之前系统上有bt面板,而且有其他东西,所以备份后重装了,重装系统页面有docker容器的镜像,放在以前的话,我会选择先重装centos,再手动安装docker,但是这次我直接用了腾讯的镜像,体验一下
ps:之前学习的时候,docker容器是需要改仓库地址的,不然下载巨慢,但是用国内的服务器自带的docker的话是不用改仓库的,因为仓库地址都在中国
服务器上除了docker以为,为了项目能运行,还需要一些其他东西
jdk
redis
MySQL
二、安装需要的东西
1.jdk
因为我项目用的jdk是1.8,所以这里我也安装1.8
yum -y list java*
获取到的列表中下载了java-1.8.0-openjdk.x86_64
yum install -y java-1.8.0-openjdk.x86_64
安装结束后检查一下安装情况,和Windows一样
java -version
2.redis
redis我电脑上用的其实是5,服务器上我也不知道装的哪个版本,因为我是直接拉取的,没有加版本号,应该区别不大,如果后期有问题再换版本
现在有了docker就可以用这个命令直接从镜像仓库拉取,速度也会快很多
docker pull redis
拉取完成后查看一下镜像,是可以看到拉取的镜像的
docker images
安装完成后需要设置自启动
docker update redis --restart=always
然后配置启动参数,因为服务器只放一个项目,所以直接映射到6379
docker run -p 6379:6379 --name redis -d redis redis-server
然后查看一下启动情况
docker ps
3.MySQL
项目驱动是8.0的,这次我加上了版本号下载,我害怕会下载低版本的
docker pull mysql:8.0.25
和redis一样,需要设置自启动
docker update mysql --restart=always
然后启动,启动参数的话,我也没具体了解,大概就是docker run是启动命令,-p是映射端口用的,-e后面是初始化的账号和密码,其他的就不懂了,有空再了解了解
docker run -p 3306:3306 --name mysql -e MYSQL_ROOT_PASSWORD=123456 -d mysql:8.0.25 --lower_case_table_names=1
到这里基本上需要的都安装完了,与域名有关的后面再写
部署项目
这一步的话就简单了,就是上传jar包,然后直接用java命令执行。
但是这样有个不好的地方,就是ssh断开或者关了窗口,服务也就停了,运行的话,应该可以写个Linux定时执行命令来实现每天定时运行,然后到点中断,这个后面再学习一下
忘了,还有数据库
三.域名访问
其实刚开始是我把这个想复杂了,域名解析直接解析到服务器公网就行了,然后域名加项目设定的端口号就可以访问了,我一直在想域名解析过来,服务器怎么绑定到项目的事,但是到这里好像瞬间懂了,域名解析前,公网ip加端口号是可以直接访问项目的,域名解析后域名加端口号也可以访问,那就说明这里域名代替了ip,通过不同端口实现访问不同项目,不加端口号是访问不到的。
现在我不希望端口显示,我希望可以直接用域名就能访问到项目,剩下的可以用nginx做反向代理来实现了
nginx安装
在/usr/local文件夹下创建nginx文件夹,用来存放安装包
安装nginx需要安装编译环境
GCC-C++
openssl
zlib
pcre
草鸟教程上是把命令写成了一句话
yum -y install make zlib zlib-devel gcc-c++ libtool openssl openssl-devel
感觉不容易理解
对我这种菜鸟,还是拆分成四句容易看懂,不过效果是一样的
安装c++
yum install gcc-c++
安装ssl,这个好像我暂时用不到,但是以防没有这个运行不了,也还是安装一下把
yum install -y openssl openssl-devel
安装pcre
yum install -y pcre pcre-devel
安装zlib
yum install -y zlib zlib-devel
然后就可以下载nginx了
wget https://nginx.org/download/nginx-1.19.9.tar.gz
安装我参考了Linux安装nginx这篇文章,写的很详细(我上面安装命令也是和这个一样的)
安装的话就不提了,看这个文章就行
但是文章第六条和第七条可能不是那么好理解,有二义性,容易理解为只是查看一下安装位置,sbin还在之前的目录
这个地方其实是查找到安装位置,然后切换到安装位置才能看到这个sbin文件夹
尤其注意后面端口开放,我在虚拟机测试的时候,安装完也是因为端口没开发,访问不了,幸好大佬提到了这一点,不然又要费老大劲去查了(感谢大佬)
实际服务器部署的时候,我这个端口是开放的,就没有再做修改
nginx启动以后访问ip,不加端口号可以看到这个内容就是没有问题了,端口号是默认的80
现在只需要把端口号改成项目的端口号,隐藏端口,并且用域名来访问,举个例子,例如项目本地访问是localhost:8080,隐藏端口后就成了localhost,再用域名访问就是www.xxx.com,后面就不再出现端口号了
nginx安装后默认就是隐藏端口号的,所以不需要修改
然后就是代理域名,这里我依旧遇到了问题
我的项目端口是8080,在另外一个窗口也已经启动了项目,ip访问正常,域名加端口号也是正常的,唯独域名访问只能出现默认的nginx页面
我的server块是这样配置的,之前有文章提到需要改hosts文件不确定是否与这个有关系
在hosts文件里面加了域名也没有变化
后来跟老师排查了一下,发现我犯了个低级错误,我修改的是解压位置的,而不是安装位置的配置文件
重新修改以后访问发现还是无法访问,带80端口也访问不到默认页面了,直接报502错误(现在也不确定原因,有人指点一下吗)
在这儿卡了一下午,第二天我安装另外一个方法,新建了一个nginx.conf,指定为配置文件,curl了一下,各个端口都是拒绝连接,然后我把指定的配置文件删了,又确认了一遍,确认nginx.conf和hosts文件没有问题之后。我启动了项目,这时候我curl一下发现居然可以直接通过域名访问了。
想了想,应该是昨天重载没有刷新,也有可能是我浏览器缓存没有更新,回想一下,我昨天修改配置以后用的都是重载命令,也可能与这个有关系。
这是我最后改的内容
展示一下最终成果,做个记录
总结
这次的内容是我这几天在学习的内容,做了一个实战,包括文章都是边实战边写出来的,所以前前后后光写就写了三天,过程中也遇到一些其他小问题,卡住之后就查百度,看社区,看各种平台的文章,不过最后也总算是成功了,文章里只写了一部分遇到的问题,其他的都是一些简单问题,很容易排查,还有操作也只写了一些对我而言的重点,基础的就没写。
对于一些技术点,可能我的理解有误,写的不对,欢迎指导。