Time:2021-4-7
终于走到这一步了。
主要记录了关于使用服务器部署个人网站的流程。
Author:雾雨霜星
欢迎来我的网站学习:
https://www.shuangxing.top/#/passage?id=18
我选择了腾讯云的学生优惠服务器,1核2G,5Mbps带宽,60G硬盘,费用是108元/年。
按照众多大佬的说法,比较推荐的就是阿里云的ECS共享型服务器或者腾讯云的轻量应用服务器,一般最低配置(带宽建议>=5)就够用了。
最好开通学生认证,或者买活动的云服务器,然后到期换个号再买活动云服务器。
至于操作系统,想顺路学一下Linux,因此选了centOS7。
官方教程:https://www.bt.cn/bbs/thread-19376-1-1.html
Linux系统下,首先使用su指令,获取根权限。
然后就按照Linux操作系统安装软件的方法来安装即可,安装宝塔,一般输入如下指令:
yum install -y wget && wget -O install.sh http://download.bt.cn/install/install_6.0.sh && sh install.sh
这里使用了yum这种包管理工具,在以前学习webpack我用的是npm,不过原理与方法几乎一样就是了。
安装后命令行会输出宝塔相应的入口和用户名密码。
宝塔安装成功后,在系统的根目录下,会有一个www文件夹(注意不是home目录里面的),该文件夹就是宝塔的默认根目录文件夹。
似乎宝塔的登录需要在云服务器的安全组(或者防火墙)放行8888端口,我不记得自己当时是否自己设置了放行。
宝塔可以通过在自己的Windows电脑上,进入浏览器,输入入口url后登录,即可使用图形化界面管理云服务器了。
安装好Nginx后,会有一个nginx文件夹。
如果是使用宝塔安装nginx,那么该文件夹一般在宝塔的根目录(名字一般是www)里面的serve目录里面。
nginx的html文件夹中放置前端需要部署的东西,比如Html文件,或者是VueCLI项目的打包后的dist文件夹。
VueCLI前端部署:
上传打包文件:
进入到nginx的html文件夹中,使用宝塔的文件上传,选择上传目录,选择相应的打后的dist文件夹,上传即可。
配置nginx代理:
在nginx文件夹中,找到conf文件夹,在里面找到nginx.conf文件,双击打开进行编辑。在html字段内,加入一个server字段,例如:
server
{
listen 80; #nginx监听的端口,腾讯云可以在防火墙栏目看到有哪些端口开发的
server_name http://121.5.253.71/; #安装nginx的服务器的ip
location /dist/ {
root html;
index index.html index.htm;
try_files $uri $uri/ /dist/index.html;
}
location /api/ { #配置前端请求的代理
proxy_pass http://localhost:8080; #前端http请求转发的地址
rewrite ^/api/(.*)$ /$1 break;
}
}
测试:
在浏览器输入如下:
http://121.5.253.71:80/dist/index.html
正常来说就可以访问到dist文件夹里面的index.html了。
注意端口是需要看云服务器防火墙(安全组)那里的设置的。
如果安装了宝塔面板,还需要在宝塔面板的安全栏目处检查是否放行了HTTP端口或HTTPS端口。
普通Html文件的部署:
类似上述操作,在nginx目录下的html目录中,上传相应的文件,然后配置在conf文件夹中找到nginx.conf,在html字段中加入server字段,格式如上。
安装JDK1.8:
登录进入centos的界面,输入指令:
yum install java-1.8.0-openjdk java-1.8.0openjdk-devel
会要求获取root权限,输入su回车,输入密码后回车即可。注意密码是隐藏的,所以输入的时候是看不到的。
然后等待下载结束,输入java -version查看安装是否成功。
接着配置jdk环境,在宝塔中进入文件栏目,找到etc文件夹,里面有个profile文件,双击打开进行编辑,增加如下内容:
# set java env
JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.212.b04-0.el7_6.x86_64
JRE_HOME=$JAVA_HOME/jre CLASS_PATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$JRE_HOME/lib
PATH=$PATH:$JAVA_HOME/bin:$JRE_HOME/bin
export JAVA_HOME JRE_HOME CLASS_PATH PATH
注意上述第一行中,java-1.8.0-openjdk-1.8.0.212.b04-0.el7_6.x86_64,不一定是这样的。需要到/usr/lib/jvm目录中查看,第一个文件夹的名字就是这串代码,我的就是上述,但是不同的安装结果可能是不一样的,最好查看一下。
然后重新登录进入centos界面,输入指令,java,若出现如下类似提示,则表示配置成功:
Usage: java [-options] class [args...]
(to execute a class)
or java [-options] -jar jarfile [args...]
(to execute a jar file)
where options include:
-d32 use a 32-bit data model if available
-d64 use a 64-bit data model if available
-server to select the "server" VM
The default VM is server.
-cp
-classpath
A : separated list of directories, JAR archives,
and ZIP archives to search for class files.
-D=
set a system property
-verbose:[class|gc|jni]
enable verbose output
-version print product version and exit
-version:
Warning: this feature is deprecated and will be removed
in a future release.
require the specified version to run
-showversion print product version and continue
-jre-restrict-search | -no-jre-restrict-search
Warning: this feature is deprecated and will be removed
in a future release.
include/exclude user private JREs in the version search
-? -help print this help message
-X print help on non-standard options
-ea[:...|:]
-enableassertions[:...|:]
enable assertions with specified granularity
-da[:...|:]
-disableassertions[:...|:]
disable assertions with specified granularity
-esa | -enablesystemassertions
enable system assertions
-dsa | -disablesystemassertions
disable system assertions
-agentlib:[=]
load native agent library , e.g. -agentlib:hprof
see also, -agentlib:jdwp=help and -agentlib:hprof=help
-agentpath:[=]
load native agent library by full pathname
-javaagent:[=]
load Java programming language agent, see java.lang.instrument
-splash:
show splash screen with specified image
See http://www.oracle.com/technetwork/java/javase/documentation/index.html for more details.
安装MySQL:
在宝塔面板的软件商店栏目,找到MySQL,选择版本5.7(内存需求相对8而言小一些),选择快速安装。
安装使用图形化界面对MySQL管理的工具:
第一个选择:在宝塔中使用phpMyAdmin进行管理
在宝塔软件商店安装php7.1。然后安装phpMyAdmin。
在软件商店的phpMyAdmin处选择设置,打开phpMyAdmin的设置面板,选择安全设置选项卡,设置授权账号与访问密码,选择保存。
进入宝塔的数据库栏目,选择phpMyAdmin。打开需要先输入phpMyAdmin刚才设置的账号和密码,然后看到phpMyAdmin的登录页面,账户名是数据库账户名字,一般是root,密码是数据库的root密码,可以在宝塔是数据库栏目中找到。
登录进入,即可对数据库进行界面操作管理。
然后到宝塔的安全栏目中,设置放行3306端口,在云服务器的防火墙栏目中设置3306端口开发规则。方便数据库的访问。
第二个选择:选择在自己的电脑上使用Navicat进行管理
在自己电脑上安装好Navicat。
在宝塔面板的安全栏目中,设置放行3306端口。在云服务器的防火墙栏目中设置3306端口开放规则。
在宝塔面板的数据库栏目中,添加数据库,注意保存数据库名和数据库密码。
设置数据库权限,设置所有人或者指定IP。
在Navicat中建立连接,主机是云服务器的外网IP地址,端口一般是3306(除非自己做了修改),用户名是数据库的名字,密码是相应数据库的密码。
我服了被这搞了一天,居然是我连navicat都不会用,直到最后才觉悟,我连接的是云数据库又不是云服务器的root,我在干嘛…
相关报错参考:
关于未开启数据库访问权限时连接数据库的报错:
Navicat连接时:
1130-"Host '121.5.253.71' is not allowed to connect to this MySQL server"
出现1130错误。
在自己电脑上使用springboot的MyBatisPlus连接时:
java.sql.SQLException: null, message from server: "Host '121.5.253.71' is not allowed to connect to this MySQL server"
从而导致该springboot项目application启动失败。
需要设置数据库的访问权限,如果有宝塔面板,直接在数据库栏目进行设置即可。
关于未放行3306端口连接云服务器上的数据库时:
Navicat连接时:
10060-The last packet sent successfully to the server was 0 milliseconds ago.
出现10060错误。
springboot的MybatisPlus进行连接时:
com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link failure
The last packet sent successfully to the server was 0 milliseconds ago. The driver has not received any packets from the server.
需要设置宝塔的安全组合云服务器的防火墙,放行3306端口。
连接的用户名或者密码出现错误:
Navicat连接时:
1045-Access denied for ...... 'root'@'......'
出现1045错误,主要是,建立连接的用户名是数据库名,密码是相应数据库的密码,不是root和root密码!
如果是SpringBoot会报错:
java.sql.SQLException: Access denied for user 'root'@'221.4.34.247' (using password: YES)
原因就是因为非loaclhost下的远程数据库连接,必须是对数据库的,因此usernam要是数据库名,password是相应的数据库密码,而非root与root密码。
如果是loacalhost的访问,是可以直接连数据库的root的。
数据库驱动设置不当:
SpringBoot进行数据库连接时:
Registered driver with driverClassName=com.mysql.jdbc.Driver was not found
数据库驱动需要换成com.mysql.cj.jdbc.Driver
SpringBoot使用MyBatisPlus连接云服务器上数据库时的配置:
application.properties文件应该修改如下:
spring.datasource.url=jdbc:mysql://localhost:3306/qsjblog?useSSL=false&characterEncoding=utf-8
spring.datasource.username=root
spring.datasource.password= "root密码"
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
因为我的云服务器上的MySQL使用的版本是5.7,因此不需要另外设置时区。
这种方法,如果该springboot项目打包所得jar包是运行在云服务器上,即使不修改数据库的权限也应该是可以连接成功。
主要是在CentOS7中运行Springboot工程用Mavan打包得到的jar:
详细参考:https://blog.csdn.net/u012240455/article/details/86571644
登录进入CentOS的命令行界面,cd进入到jar所在目录,输入如下指令即可:
jave -jar "后端打包得到的jar包名字(例如:blogsys-1.0-SNAPSHOT.jar)"
回车即可看到jar的开始运行,如果一切正常,最终可以看到运行的端口与相关的日志,例如:
Initializing ExecutorService 'applicationTaskExecutor'
2021-04-08 19:00:11.364 INFO 17487 --- [main] com.zaxxer.hikari.HikariDataSource
: HikariPool-1 - Starting...
2021-04-08 19:00:11.775 INFO 17487 --- [main] com.zaxxer.hikari.HikariDataSource
: HikariPool-1 - Start completed.
2021-04-08 19:00:11.948 INFO 17487 --- [main] o.s.b.w.embedded.tomcat.TomcatWebServer
: Tomcat started on port(s): 8080 (http) with context path ''
2021-04-08 19:00:11.982 INFO 17487 --- [main] com.blogsys.boot.MainApplication
: Started MainApplication in 6.536 seconds (JVM running for 7.344)
如上可见此时Springboot搭建的后端使用内置的Tomcat运行于8080端口。
使用该方法运行后端存在一个问题,当目前窗口关闭的时候,该jar的运行也会被终止,或者可按CTRL + C打断程序运行。
或者使用"&"符号结尾时程序在后台运行,即:
jave -jar "后端打包得到的jar包名字(例如:blogsys-1.0-SNAPSHOT.jar)" &
&:让命令在后台执行,终端退出后命令仍旧执行。
但是此时关闭窗口,jar的运行也是会被中断的。
最终选择使用nohup命令。
详细参考:https://www.runoob.com/linux/linux-comm-nohup.html
nohup命令:no hang up (不挂起) ,用于在系统后台不挂断地运行命令 ,退出终端不会影响程序的运行。
如下:
nohup java -jar "后端打包得到的jar包名字(例如:blogsys-1.0-SNAPSHOT.jar)" &
执行后会输出一个名叫 nohup.out 的文件到当前目录下,若当前目录不可写,输出重定向到 $HOME/nohup.out文件中。
指定相关日志文件的输出:
nohup java -jar xxx.jar >logs.txt &
使用nohup指令后的进程关闭方法:
直接杀死相关进程即可,nohup命令运行成功后,会返回一个进程号,可以通过 kill -9 命令杀死这个进程来直接关闭。
kill -9 进程号PID
若要查看相关进程号,可以使用如下指令:
ps -ef|grep "后端打包得到的jar包名字(例如:blogsys-1.0-SNAPSHOT.jar)"
会显示出一条信息,一般相应的内容是:进程所属用户、进程PID、父级进程PID、CPU占用百分比、进程开启时间、进程占用CPU时间、进程结束时间
其中第一个数字一般就是进程PID,一般应该是21561这样大3的数字。
ps aux命令:查看相应进程号PID。
Author:雾雨霜星
欢迎来我的网站学习:
https://www.shuangxing.top/#/passage?id=18
转载请注明出处!!!
Thanks!
PS: 毕竟,霜星酱水平有限,如果发现任何错误还请及时邮箱告知我,我会去改哦!