项目部署须知
前提:需要购买阿里云服务器,新用户可免费体验,centos版本要求为7.6,但在选择的时候没看到7.6版本,就选了7.9的。同2核4G。
购买云服务器后,一定记得要重置密码,后续需要使用putty
客户端连接云服务器,要输入密码验证root身份。使用FinalShell
或者XShell
都可以。
下载
下载putty(windows),在官网下载即可
putty客户端连接云服务器
下载所需安装包
注意:如果直接在putty中使用wget命令下载,文件小还好说,文件大起来,下载的速度巨慢,可以先将文件下载到本地,然后通过命令pscp
将文件上传到服务器上。(后面会介绍)
连接进入putty客户端(省略输入用户名密码的步骤)
以下下载链接都可以在官网上找到
- Maven
wget -i -c
https://dlcdn.apache.org/maven/maven-3/3.9.4/binaries/apache-maven-3.9.4-bin.tar.gz
- MySQL
wget -i -c https://dev.mysql.com/get/mysql80-community-release-el7-10.noarch.rpm
- Kakfa
wget -i -c https://downloads.apache.org/kafka/3.5.1/kafka_2.12-3.5.1.tgz
- Elasticsearch
wget -i -c https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-7.17.6-linux-x86_64.tar.gz
- ik分词器
wget -i -c https://github.com/medcl/elasticsearch-analysis-ik/releases/download/v7.17.6/elasticsearch-analysis-ik-7.17.6.zip
- Tomcat
wget -i -c https://dlcdn.apache.org/tomcat/tomcat-9/v9.0.80/bin/apache-tomcat-9.0.80.tar.gz
从本地上传压缩文件到服务器上
进入到你需要上传文件的文件目录
在当前目录下进入cmd输入(以上传到root目录为例)
pscp community-init-sql-1.5.zip root@自己的公网ip:/root
输完命令后回车会提示你需要验证密码,可以将密码添加到缓存(y/n),输入密码后回车,就能在服务器上看到当前上传的文件啦。
- 安装解压缩工具unzip
yum install -y unzip.x86_64
- 安装jdk
# 可以先看下yum中关于java开头的安装包
yum list java*
# 找到合适的安装包(这里安装jdk1.8)
yum install -y java-1.8.0-openjdk.x86_64
# 安装完成后,查看jdk版本
java -version
添加相关配置
接下来对安装包进行解压缩,并做相关配置
配置Maven(将Maven解压缩到opt目录下)
tar -zvxf apache-maven-3.9.4-bin.tar.gz -C /opt
将Maven的目录配置到环境变量
配置环境变量需要使用vi编辑,以下是vi编辑器的常用命令(扫盲,我自己也不熟)
# insert,表示需要在当前位置进行编辑
i
# 编辑完成后要保存。退出编辑模式(esc),保存写入的内容(w),退出(q)
esc
:wq
进入修改环境变量path的文件:profile
vim /etc/profile
# 修改环境变量path后,让环境变量生效
source /etc/profile
# 测试环境变量是否已经生效
# 查看maven版本
mvn -v
还需要修改Maven的配置文件,将镜像仓库设置为阿里云仓库
同样使用vi命令,编辑maven目录下,conf目录下的settings.xml文件
# 假设当前目录为:/opt/apche-maven-3.9.4
vim conf/settings.xml
安装MySQL
# 我们可以先看下yum中关于mysql的安装包,切换到"/"目录,输入以下命令
yum list mysql*
# 可以看到很多都是低版本的,我们需要使用高版本的mysql
# 切换到root目录下安装,安装mysql的yum仓库
yum install -y mysql80-community-release-el7-10.noarch.rpm
# 切换回"/"目录下,会发现多了很多新版本的安装包
# 安装一个mysql的服务端
yum install -y mysql-community-server.x86_64
安装好以后,我们可以启动mysql,查看mysql的启动状态
# 启动mysql
systemctl start mysqld
# 查看mysql状态
systemctl status mysqld
mysql在安装完成之后,会自动生成一个登录密码,这个登录密码在mysql的日志文件中,我们可以通过以下命令来查找以下mysql日志中的密码。
grep 'password' /var/log/mysqld.log
访问mysql,修改密码
输入mysql -uroot -p回车,会提示你输入密码,把刚刚复制的密码粘贴
进入后输入新密码(注意:新密码需要:大小写字母、特殊符号、数字)
alter user root@localhost identified by '新密码';
回车
然后退出mysql,输入exit,重新登录
msql -uroot -p回车,输入新密码
登录成功后,说明mysql配置好啦
接下来需要向MySQL中添加数据,切换到root目录下,解压缩sql文件
unzip -d /root community-init-sql-1.5.zip
解压sql文件后,登录mysql,准备导入数据
# 创建数据库
create database community
# 使用这个数据库
use commmuntiy
# 导入数据,注意导入顺序
source /root/init_schema.sql;
source /root/tables_mysql_innodb.sql;
source /root/init_data.sql;
# 查看当前数据库中的表
show tables;
# 处理user表中header_url字段带有localhost的头像路径,模糊匹配
# 如果导入的是老师资料中的sql脚本就不用修改header_url
update user set header_url = 'http://images.nowcoder.com/head/333t.png' where header_url like '%localhost%';
安装Redis
# 切换到“/”目录,查看redis相关的库
yum list redis*
# 安装redis
yum install -y redis.x86_64
# 启动redis
systemctl start redis
# 查看redis的启动状态
systemctl status redis
安装Kafka
切换到root目录下,解压缩kafka到opt目录
注意:亲测使用kafka_2.13-3.5.1的版本在测试kafka是否正常启动那一步的时候会报错,报错信息:Error: Could not find or load main class kafka.admin.TopicCommand,最后没找到解决方法,就换了kafka的版本,换了2.12-3.5.1的就好了。
cd root
# 解压缩kafka到opt目录下
tar -zvxf kafka_2.12-3.5.1.tgz -C /opt
# 进入到opt/kafka_2.12-3.5.1目录,查看kafka有没有需要修改的地方
# 主要看zookeeper.properties和server.properties这两个配置文件
vim zookeeper.properties
vim server.properties
# 都没啥需要改的,数据和日志存放的目录都是符合规范的
启动zookeeper和kafka,设置为后台启动
# 进入到kafka目录下
cd /opt/kafka_2.12-3.5.1
# 后台启动zookeeper
bin/zookeeper-server-start.sh -daemon config/zookeeper.properties
# 后台启动kafka
nohup bin/kafka-server-start.sh config/server.properties 1>/dev/null 2>&1 &
# 测试kafka是否正常启动(查看当前kafka下的所有主题)
bin/kafka-topics.sh --list --bootstrap-server localhost:9092
安装Elasticsearch
切换到root目录下
# 解压缩es到opt目录下
tar -zvxf elasticsearch-7.17.6-linux-x86_64.tar.gz -C /opt
# 解压缩ik分词器到es的plugins目录下,放到ik目录下,ik目录不存在,这样写会自动创建
unzip -d /opt/elasticsearch-7.17.6/plugins/ik elasticsearch-analysis-ik-7.17.6.zip
# 对es做配置,进入到conifg目录下对elasticsearch.yml文件做修改
vim elasticsearch.yml
# 修改es服务器对于整个服务的内存占用,默认占用4G
# 不同版本的es,默认占用也不一样。视频中使用的6.4.3默认占用1g,我使用的7.17.6默认占用4g
vim jvm.options
es的启动不能通过root用户,因此这里要创建普通用户
# 建立用户组,一个组可以包含多个用户
groupadd nowcoder
# 创建用户nowcoder1,设置密码为123,并将用户添加到用户组
useradd nowcoder1 -p 123 -g nowcoder
# 不知道为啥我这里直接创建用户然后添加到组没成功,只创建了用户
# 手动将用户添加到组
usermod -G nowcoder nowcoder1
# 修改opt目录和tmp目录的访问权限,允许nowcoder1访问
cd /opt
chown -R nowcoder1:nowcoder *
cd /tmp
chown -R nowcoder1:nowcoder *
# 切换nowcoder1用户登录
su - nowcoder1
cd /opt/elasticsearch-7.17.6
# 后台启动es
bin/elasticsearch -d
# 启动后,切换回root用户登录,需要输入密码
su -
# 测试访问es
curl -X GET "localhost:9200/_cat/health?v"
安装wkhtmltopdf
# yum安装,切换到"/"目录
cd /
yum list wkhtmltopdf*
yum install -y wkhtmltopdf.x86_64
wk工具在linux中需要GUI程序的支持,因此在这里安装一个虚拟的GUI
yum list *xvfb*
yum install -y xorg-x11-server-Xvfb.x86_64
# 测试wk工具的使用,进入到测试文件夹test
cd /root
mkdir test
cd test
# 设置生成图片的分辨率等信息,生成百度网页为图片1.png
xvfb-run --server-args="-screen 0, 1024x768x24" wkhtmltoimage https://www.baidu.com 1.png
# 将上面的一长串命令封装为一个脚本,方便执行
cd /opt
vim wkhtmltoimage.sh
# 把复制的命令粘贴上去,然后esc :wq保存
# 保存后给这个脚本添加可执行的权限
chmod +x wkhtmltoimage.sh
# 切换回test目录测试,完成
/opt/wkhtmltoimage.sh https://www.zhihu.com 2.png
安装Tomcat
# 解压缩tomcat到opt目录
cd /root
tar -zvxf apache-tomcat-9.0.80.tar.gz -C /opt
# 配置tomcat的环境变量
vim /etc/profile
source /etc/profile
# 启动tomcat
startup.sh
# 关闭tomcat
shutdown.sh
流泪,这里弄了好久都没找到问题,一直访问不了,原来是这个规则
安装Nginx
# 切换到“/”
yum list nginx*
yum install -y nginx.x86_64
# 配置nginx分发请求给tomcat服务器,在nginx的配置文件中
vim /etc/nginx/nginx.conf
添加以下配置
# 启动nginx(使用yum安装的都可以用systemctl启动)
systemctl start nginx
systemctl status nginx
注意:这里即使把nginx开启了,在浏览器直接输入ip可能还是不能访问(不加端口号)
# 设置这行参数
setsebool -P httpd_can_network_connect 1
# 如果提示seLInux未开启,参考这篇文章:https://help.aliyun.com/zh/ecs/use-cases/enable-or-disable-selinux
# 另一个考虑的原因可能是云服务器的安全组规则:没有把80端口的访问打开
具体原因不知道(应该就是说要开启80端口的访问权限意思)
项目部署
# 删除tomcat下webapps目录下的所有项目
cd /opt/apache-tomcat-9.0.80/webapps
rm -rf *
对原有代码修改的部分略…
修改完成后将本地项目压缩为zip,传到服务器的root目录下
# windows中,切换到项目zip所在路径,打开cmd
pscp community.zip root@8.134.100.218:/root
# linux中,切换到root目录,解压community.zip
unzip -d /root community.zip
cd community
# 编译,打包,不执行测试类
mvn clean package -Dmaven.test.skip=true
# target就打包好了
cd target
# 将ROOT.war移动到tomcat的webapps目录下
mv ROOT.war /opt/apache-tomcat-9.0.80/webapps/
# 这时就可以启动tomcat,访问我们的项目了
startup.sh
在进行mvn打包的时候报错:好像是说,没有提供可运行的环境,不能只有jre,还需要有jdk【不明白安装jdk的时候,变成只安装了jre了】
[ERROR] COMPILATION ERROR :
[INFO] -------------------------------------------------------------
[ERROR] No compiler is provided in this environment. Perhaps you are running on a JRE rather than a JDK?
[INFO] 1 error
[INFO] -------------------------------------------------------------
[INFO] ------------------------------------------------------------------------
[INFO] BUILD FAILURE
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 1.584 s
[INFO] Finished at: 2023-10-06T11:42:59+08:00
[INFO] ------------------------------------------------------------------------
[ERROR] Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.10.1:compile (default-compile) on project community: Compilation failure
[ERROR] No compiler is provided in this environment. Perhaps you are running on a JRE rather than a JDK?
[ERROR]
[ERROR] -> [Help 1]
解决办法:通过yum再安装一个java-devel就可以了
yum install -y java-devel
牛客评论区中也有小伙伴遇到了这样的报错
这个问题我一开始本来不想通过安装java-devel的方式解决,我看了我的jdk安装目录【/usr/lib/jvm/java-1.8.0…】,发现里面只有一个jre文件夹【很奇怪,本来应该包含其他诸如bin,lib之类的文件夹的】,我猜想是不是少了这些文件夹的原因,导致我mvn打包的时候报错失败,是不是我安装jdk的时候安错了安少了等等。如果有小伙伴知道什么原因可以在评论区留言,不吝感谢!
【需要启动的应用:redis zookeeper kafka es tomcat】
一切都启动完成之后,就可以通过公网ip直接访问到我们自己的项目啦~