牛客论坛项目部署,看这一篇就足够了
前言
项目部署到Linux服务器有两种方式,一个是部署到云服务器上,可以在阿里云、腾讯云购买服务器,再用远程连接工具进行连接操作,这里需要注意的是所购买的云服务器的起步配置为:双核、4G(ROM)、CentOS7(OS),二是部署到本地的CentOS7虚拟机上,这种方式和第一种方式相比:第一种方式可以通过公网ip进行访问,第二种方式只能通过本机访问Web应用(应该也能操作成通过公网ip进行访问,但是博主水平有限,这里就不介绍了),且第一种所需要花费的费用至少为130~150(截止到2023年4月22日),第二种方式不需要任何费用。
博主选择的是第二种,在CentOS7虚拟机上进行部署,需要注意的是虚拟机的配置也应当至少是双核、4G(ROM)、CentOS7(OS)。
其实选择云服务器还是本地的虚拟机配置的方式都是一样的,只是一个需要花费钱,可以通过公网ip或者域名进行访问,另外一个只能在本机上访问,我们需要的是熟悉这个过程,积累部署项目的经验,所以需要参考资料配置服务器的同学看这一篇就足够了。
准备工作
在VMware中准备一个新装的CentOS7虚拟机,再准备项目所依赖的大部分文件:
这些文件的下载比较简单,我本想放到github上的,后来想想没有必要,自己在搜索框内搜索对应的文件名下载即可。另外,这些文件在Linux下不好下载,我们选择先在Windows下下载好,然后在CentOS中进行绿色安装(即解压就可以使用了)。
项目所依赖的其他工具,如jdk,我们选择直接通过yum安装。
提前在家目录下新建一个community文件夹
然后把这些文件通过Xftp传到CentOS中的家目录的community下~\community,至此准备工作已全部完成。
在CentOS中安装工具
先安装一个在Linux中的解压工具
yum install -y unzip.x86_64
安装JDK
# 命令
yum install -y java-1.8.0-openjdk.x86_64
# 查看版本,检查是否安装成功
java -version
安装MySQL8.0
cd /root # 切目录
yum install -y mysql80-community-release-el7-3.noarch.rpm # 下载资源
yum install -y mysql-community-server.x86_64 # 安装mysql8
systemctl start mysqld # 启动mysql
systemctl status mysqld # 查看mysql服务的状态
grep 'password' /var/log/mysqld.log # 查看自动生成的密码
mysql -u root -p # 登录mysql
alter user root@localhost identified by '自己设置一个密码'; 比如(Nowcoder_123) # 设置密码
导入SQL文件
导入 SQL 文件
cd /root
解压community_init_sql.zip 文件: unzip -d /root init_sql.zip
create database community;
use community;
source /root/init_sql.sql;
show tables;
select id, username, header_url from user;
update user set header_url = 'http://images.nowcoder.com/head/760t.png' where header_url like
'%localhost%';
安装和配置maven
- 解压 maven
tar -zvxf apache-maven-3.6.1-bin.tar.gz -C /opt
cd /opt
- 配置环境变量
vim /etc/profile
export PATH=$PATH:/opt/apache-maven-3.6.1/bin
文件生效: source /etc/profile
查看版本: mvn -version
- 将 maven 的镜像设置为阿里云
vim settings.xml
将本地的 maven 镜像拷贝到服务器上
<!-- 配置阿里云的maven远程仓库 -->
<mirrors>
<mirror>
<id>alimaven</id>
<name>aliyun maven</name>
<url>http://maven.aliyun.com/nexus/content/groups/public/</url>
<mirrorOf>central</mirrorOf>
</mirror>
</mirrors>
安装Redis
cd / # 切目录
yum install -y redis.x86_64 # 安装redis
systemctl start redis # 启动redis服务
systemctl status redis # 查看redis服务的状态(应该为active)
安装Kafka
cd /root/community # 切目录(因为我的文件都放在这里的)
tar -zvxf kafka_2.12-2.3.0.gz -C /opt # 解压到/opt下
配置Kafka
进入到Kafka的config目录下,我们需要对两个文件进行更改,一个是zookeeper的,另外一个是kafka的
vim zookeeper.properties # 打开配置文件,我们发现并不要对该文件进行修改
vim server.properties # 打开配置文件,我们发现并不要对该文件进行修改
启动zookeeper和kafka
# 注意,一定要将目录切到kafka的安装目录下,采用后台开启的模式
[root@hadoop100 kafka_2.12-2.3.0]# bin/zookeeper-server-start.sh -daemon config/zookeeper.properties
# kafka的启动也是如此,但是命令上有些许不同
[root@hadoop100 kafka_2.12-2.3.0]# nohup bin/kafka-server-start.sh config/server.properties 1>/dev/null 2>&1 &
验证Kafka是否安装成功
# 命令执行后,不应该提示错误,就算安装成功
[root@hadoop100 kafka_2.12-2.3.0]# bin/kafka-topics.sh --list --bootstrap-server localhost:9092
安装ElasticSearch
cd /root/community # 切目录(因为我的文件都放在这里的)
tar -zvxf elasticsearch-6.4.3.tar.gz -C /opt # 解压es
unzip -d /opt/elasticsearch-6.4.3/plugins/ik elasticsearch-analysis-ik-6.4.3.zip # 将中文分词插件解压到对应的目录下
更改es的配置文件
vim elasticsearch.yml # 打开配置文件
做以下三处修改即可,不了解vim操作的同学可以看我之前的博客,有比较详细的介绍。
vim jvm.options # 打开配置文件,配置运行空间的占用
为了访问es,我们需要用普通用户身份进行访问,所以我们新建用户
groupadd nowcoder # 新建组
useradd nowcoder1 -p 12345678(至少8位) -g nowcoder # 在 nowcoder 组下新建用户
cd /opt/ # 切到opt
chown -R nowcoder1:nowcoder * # 授权
cd /tmp/ # 切到tmp
chown -R nowcoder1:nowcoder * # 授权
su - nowcoder1 # 登录nowcoder1用户
cd /opt/elasticsearch-6.4.3/ # 切到es目录
[root@hadoop100 elasticsearch-6.4.3]# bin/elasticsearch -d # 启动es服务
su - # 登录root用户-需要输入密码
curl -X GET "localhost:9200/_cat/health?v" # 查看es服务器的情况
安装wkthmltopdf
yum install -y wkhtmltopdf.x86_64 # 安装wkhtmltopdf
yum install -y xorg-x11-server-Xvfb.x86_64 # 安装显示gui的服务器
cd /opt # 切目录
vim wkhtmltoimage.sh # 编写脚本
内容:xvfb-run --server-args="-screen 0, 1024x768x24" wkhtmltoimage "$@"
chmod +x wkhtmltoimage.sh # 添加执行权限
cd /root/test # 切目录
/opt/wkhtmltoimage.sh https://www.baidu.com 2.png # 执行命令即可
安装Tomcat
cd /root/community # 切到文件放置的位置
tar -zvxf apache-tomcat-9.0.22.tar.gz -C /opt # 解压到/opt目录下
vim /etc/profile # 打开配置文件,配置如下的环境变量
startup.sh # 启动tomcat
ip addr # 查看本机的ip
在浏览器中输入ip:8080来查看tomcat是否成功启动
安装Nginx
[root@hadoop100 /]# yum install -y nginx.x86_64
vim /etc/nginx/nginx.conf # 打开配置文件,做以下修改
systemctl start nginx # 启动nginx服务
systemctl status nginx # 查看nginx服务状态(如下图)
出现此问题的原因是 SELinux 基于最小权限原则默认拦截了 Nginx 的请求,SELinux 是 Linux 的安全子系统,提供更安全的访问控制,许多运维人员嫌麻烦可能会直接关闭此组件,但是治标不治本,本文演示在启用 SELinux 基础上完成对 Nginx 请求的放行。
setsebool -P httpd_can_network_connect 1 # 使用该命令即可,需要重启nginx服务
准备项目部署
浏览器、Nginx 、服务器之间的关系
了解上述关系后,我们有必要做以下的操作:
删除tomcat\webapps下的所有文件
[root@hadoop100 webapps]# rm -rf *
将项目做一些更改,项目中的配置文件需要拆分成至少两套,开发环境(develop)和生产环境(produce),如下图:
还有一点就是配置文件中设置路径的地方,生产环境一般是在Linux下的,我们需要规定好相应的文件放在哪里,以便于后续排错和查找日志。
由于我们的项目最终是放入到服务器中的tomcat服务器中的,所以我们需要再pom.xml文件
设置打包方式为war<packaging>war</packaging>
,并且最终生成的war名称为ROOT<finalName>ROOT</finalName>
。
打包项目
我们利用maven将项目clean,去除厚重的target包,将源程序通过Xftp传到服务器中后,再利用maven进行打包:
[root@hadoop100 community]# mvn package -Dmaven.test.skip=true
yum install java-devel # 如果maven报错,找不到jdk或者jre,我们执行这里的安装即可
运行项目
成功运行了,很开心hh