将《牛客高薪项目求职课》部署到阿里云centos服务器

历时1个半月的牛客高薪项目求职课总算是做完了,今天跟着视频把项目部署到了阿里云上,为了便于以后复习,所以记录了部署过程,通过这个部署线上过程,确实学到了很多,对Linux也没有这么恐惧了

总共的过程为:

一、安装 PuTTY
二、安装unzip工具
三、下载 Jre
四、安装Maven
五、安装 MySQL
六、安装 Redis
七、安装kafka
八、安装elasticSearch和中文分词插件
九、安装wkhtmltopdf
十、安装tomcat  
十一、安装nginx
十二、修改项目本身

服务器环境

阿里云 2CPU/4G, Centos7.6。项目课老师说部署这个项目服务器不能少于4G内存,否则带不起来。

写在前面

1、centos 优先采用yum命令来安装各种软件

因为这个命令会自动安装好软件,并且配置好环境变量和各种依赖服务;但是yum命令安装的软件版本可能不是最新的, 但是这些版本一般比较稳定。这个命令必须在"/"目录中使用。

yum list aaa*; 可以在yum镜像版本库查找aaa, 如果版本库中存在想要的软件,则可以直接使用yum命令安装

yum install -y aaa.101;   可以在yum镜像版本库中搜索名为 aaa.101的软件,并安装到本机的/etc目录下,且配置好环境变量和各种依赖服务;

比如:安装unzip工具来解压文件;必须在 "/" 主目录使用yum list unzip*命令才能搜到,复制版本号;yum install -y unzip.x86_64;进行安装;

2、linux 的复制和粘贴快捷键,后面可能用的很频繁

复制命令:Ctrl + Insert  组合键

粘贴命令:Shift + Insert  组合键

一、安装 PuTTY

下载putty, 这个软件的功能和xshell一样,都是用来远程登录服务器的
官网下载64位且后缀为.msi的安装包
下载好后一路下一步即可安装成功;

使用

把ip和端口配置好;
Connection-> keep alive 设置为10,这个设置可以使得连接时间变得比较长,不会动不动就断开连接。最后点击 "open" 按钮即可
 
使用root账户登陆;shift + insert 快捷键可以粘贴密码;输入正确的密码即可远程连接到服务器,现在就可以通过这个终端来访问服务器了。

二、安装unzip工具

安装unzip工具来解压文件;
进入到 "/" 根目录,使用yum list unzip*命令搜索unzip在yum镜像版本库中的存在的版本,复制版本号;
cd /
yum list unzip*
yum install -y unzip.x86_64 进行安装;

远程文件传输

下载一个 PSCP 工具,放到C:/windows/System32目录下即可

使用
远程传输到本地
pscp [options] [user@]host:sourcePath targetPath
比如:pscp root@192.168.50.5:/root C:\Users\324014978\Desktop\aaa.txt
即可把服务器中/root路径下的aaa.txt传输到本地桌面
本地传输到远程
pscp [options] sourcePath1 [source....] [user@]host:targetPath
比如:pscp -P 22 aaa.txt bbb.txt root@192.168.50.5:/root 
即可把本地的aaa.txt 和 bbb.txt传输到服务器的/root目录下

可能的遇到的问题

本地传输文件到服务器,pscp sql.zip root@192.168.50.5:/root报了下面这个错误
ssh_init: Network error: Cannot assign requested address

解决方法是加上端口号,如下所示:

pscp -P 22 sql.zip root@192.168.50.5:/root

参考:pscp ssh_init: Network error: Cannot assign requested address

三、下载 Jre

进入到根目录,搜索 java*
cd /
yum list java*
 
把上图中两个版本都复制下来,分别安装
yum install -y java-1.8.0-openjdk.x86_64
yum install -y java-1.8.0-openjdk-devel.x86_64 
安装完后使用 java -version 和 javac 命令测试是否安装成功,通过结果信息来看,jdk 安装成功

四、安装Maven

去官网下载地址复制下载链接

使用wget 命令下载安装包, url 是刚才复制的链接url
wget -i -c https://mirrors.bfsu.edu.cn/apache/maven/maven-3/3.6.3/binaries/apache-maven-3.6.3-bin.tar.gz
在/root目录下查看是否有maven安装包,可以看到是有的,说明下载成功
把Maven解压到 /opt 目录下 
tar -zxvf apache-maven-3.6.3-bin.tar.gz -C /opt
因为解压缩方式安装系统识别不了,不会自动配置环境变量,所以我们要手动配置环境变量。
进入到/opt目录下的 maven里,再进入到 bin目录下,使用pwd 查看路径
修改 /etc/profile
vim /etc/profile
export PATH=$PATH:/opt/apache-maven-3.6.3/bin
source /etc/profile是使文件配置生效;
测试Maven 是否安装成功
echo $PATH; 
mvn -version; 
通过上面的信息知道Maven应该是安装成功了
修改maven的镜像到阿里云;因为国内从阿里云下载 Maven依赖更快。在 conf/setting.xml中的<mirrors></mirrors>加入下面这个语句块
<mirror>
    <id>alimaven</id>
    <mirrorOf>central</mirrorOf>
    <name>aliyun maven</name>
    <url>http://maven.aliyun.com/nexus/content/repositories/central/</url>
</mirror>

五、安装 MySQL

mysql下载地址:https://dev.mysql.com/downloads/repo/yum/

不要下载第一个,下载第二个linux7的,否则会出现相关依赖的问题;导致一直安装不上去;万一不小心点了第一个安装失败可以参考来centos误安装了Linux8的mysql, 安装到一半不成功怎么办来解决
接下来使用weget -i -c https://dev.mysql.com/get/mysql80-community-release-el7-3.noarch.rpm重新下载linux7版本的mysql yum包 
使用yum install -y mysql80-community-release-el7-3.noarch.rpm 把这个包加入到版本库
进入到根目录后查看版本,
cd /
yum list mysql*
复制mysql-community-server.x86_64后使用yum执行安装
执行yum install -y mysql-community-server.x86_64即可正常安装成功
启动数据库并查看数据库的状态
systemctl start mysqld
systemctl status mysqld

数据库启动的时候会生成一个默认密码,保存在/var/log/mysqld.log这个日志文件中,所以使用grep 'password' /var/log/mysqld.log命令来搜索;如果搜索结果有多个,取一个时间最新的密码;

使用root账户和刚才查找到的密码登录mysql;

alert user username@localhost identified by 'new password'修改密码;新密码必须有大小字符,数字,特殊字符;
退出后重新登录;登录成功,所以说刚才修改密码成功。
cd 到sql.zip目录;  
  unzip -d dest_path zip_name解压缩;可以看到得到了三个.sql文件
登录mysql;    建一个名为community的数据库;
create database community;
use community;
 
导入sql数据;source path; souce 所有的表;   
必须先导入init_schema.sql; 因为这里面是所有的基础表,init_data.sql里面的都是数据。

六、安装 Redis

进入到根目录下搜yum list redis*; 
复制版本后使用yum 安装;   
 systemctl start redis启动redis;    systemctl status redis;查看启动状态
redis-cli进入redis进行测试;

七、安装kafka

页面跳转后如下
进入/root目录,使用wegt 下载包
查看是否下载成功
然后tar -zvxf path -C /opt;解压;
进入/opt下的kafka中,
进入kafka的config目录,查看是否需要修改zookeeper.properties和server.properties;
 zookeeper.properties如果是tmp目录则不需要改;
查看server.properties的log-dir是否符合linux路径规范,符合则不需要改动;
修改consumer.properties中的group-id为 community-consumer-group(这个修改是因为我的项目的配置文件中用的是“community-consumer-group"所以需要改,如果你没这个需要,可以不用改动这个)
退到kafka根目录:
后台启动zookeeper后启动kafka; 
bin/zookeeper-server-start.sh -daemon config/zookeeper.properties 
启动kafka: 
nohup bin/kafka-sever-start.sh config/server.properties 1>/dev/null 2>&1 &
测试是否安装成功;查看kafka的所有主题;bin/kafka-topics.sh --list --bootstrap-server localhost:9092;
一直启动不成功,连不上broker
网上百度了阿里云部署kafka, 发现需要在安全组中设置开放9092这个端口
 
 在配置列表中加上开发9092端口的配置
 
重启zookeeper 和 kafka, 因为我不知道怎么重启,我就直接杀进程了,因为刚才重试了好多次,所以使用ps命令查看有好几个java进程,把这三个java进程都杀掉
再次输入刚才启动zookeeer 和 kafka的命令
查看 topc 列表判断是否启动成功,输入命令后控制台停顿几秒后没有输出任何东西后打印出了终端提示符,说明应该是启动成功了的,因为现在的kafka本来就是空的,不存在任何topic
如果到这 kafka 还是启动失败,可以试着参考kafka启动后闪退-已解决来解决

八、安装elasticSearch

先wegt下载好elasticSearch.tar.gz和一个分词插件;

下载elasticsearch

在官网找到下载地址后复制链接
点击自己想要的版本
页面跳转到下面的页面,鼠标右键 linux 版本后复制链接
进入到/root 目录后使用下面的命令开始下载安装包,下面的url是你刚才复制的url
 wget -i -c https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-7.6.2-linux-x86_64.tar.gz
查看/root当前目录是否有elasticsearch的安装包,通过查看,发现已经有了

下载中文分词插件

在github https://github.com/medcl/elasticsearch-analysis-ik/releases找到自己想要的版本,点击链接
页面跳转后
查看当前目录是否有ik安装包
使用tar -zxvf path -C /opt解压elasticsearch 到/opt目录下;   
unzip -d /opt/ES目录/plugins/ik 包名;来解压分词插件;
unzip -d /opt/elasticsearch-7.6.2/plugins/ik elasticsearch-analysis-ik-7.6.2.zip
进入到es目录;查看后进入到plugin目录,查看后进入到ik目录;查看分词插件的文件
退回到es/config中,修改es.yml; 配置cluster.name:nowcoder
配置path.data: /tmp/elastic/data; 配置path:logs: /tmp/elastic/logs;
cluster.name: nowcoder
path.data: /tmp/elastic/data
path.logs: /tmp/elastic/logs
修改jvm.opstions; 修改所占内存大小;
 ElasticSearch 不允许root用户启动,所以必须创建一个用户;新建用户并赋予权限,
 groupadd nowcoder
 useradd nowcoder1 -p 123456 -g nowcoder
cd /opt
chown -R nowcoder1:nowcoder *
cd /tmp
chown -R nowcoder1:nowcoder *
切换到新用户,启动ElasticSearch
su - nowcoder1
cd /opt/elasticsearch-7.6.2/
elasticsearch-7.6.2]$ bin/elasticsearch -d
切换回root用户,查看 ElasticSearch是否健康,成功打印出来了状态信息,所以Elasticsearch应该是安装且启动成功了
su -
curl -X GET "localhost:9200/_cat/health?v"

九、安装wkhtmltopdf

进入根目录下使用yum搜索wkhtmlpdf;
yum list wkhtmltopdf*
复制版本后使用yum命令安装;
yum install -y wkhtmltopdf.x86_64
-- 安装一个gui工具,yum list *vfb*;
yum list *xvfb*
复制版本后使用yum命令安装;
yum install -y xorg-x11-server-Xvfb.x86_64
测试生成长图
xvfb-run --server-args="-screen 0, 1024x768x24" wkhtmltoimage https://www.baidu.com 1.png
上面这个命令太长了,所以我们尝试使用脚本封装上面这个长命令,把命令中url 前面的部分都封装到一个脚本中
cd /opt/
vim wkhtmltoImage.sh
xvfb-run --server-args="-screen 0, 1024x768x24" wkhtmltoimage "$@"
给这个脚本加上可执行权限:chomod +x wkhtmltoimage.sh
回到test目录,测试生成图片
cd /root/test
/opt/wkhtmltoimage.sh https://www.baidu.com 2.png

十、安装tomcat 

官网 https://tomcat.apache.org/ 获取下载链接,复制该链接
回到上一级/root目录,我们把所有安装包都统一安装在/root 目录下,使用wegt下载tomcat包,
wget -i -c https://mirrors.bfsu.edu.cn/apache/tomcat/tomcat-9/v9.0.40/bin/apache-tomcat-9.0.40.tar.gz
查看当前目录的文件,可以看到tomcat确实已经下载完成了
解压缩到/opt目录下;   
进入到/opt目录,确实已经解压成功
配置环境变量;配置好tomcat的bin路径加到/etc/profile中;
修改完后保存退出,使用 source /etc/profile 来使刚才配置的环境变量生效
因为服务器上的8080端口容易遭到较多攻击,也为了不和其他项目的端口冲突,所以这里把tomcat的默认端口修改成8090,进入tomcat目录的conf目录中,
修改server.xml文件,把8080修改成8090
在tomcat的 bin目录下输入 startup.sh 启动tomcat
测试是否能通过浏览器访问tomcat;
在浏览器中使用ip:port访问,x.x.x.x:8090, (x.x.x.x替换为你的服务器公网ip); 在浏览器中输入ip:port后发现页面找不到,
一开始以为是tomcat还启动,所以等了一会,再次访问,还是页面没找到,找到原因是阿里云的8090端口没有开放,需要在安全组中配置8090端口开

开放端口后再次使用 ip:8090就能成功获取到tomcat的默认页面了,所以tomcat是安装成功了的。

十一、安装nginx

进入到根目录,yum 命令搜索nginx,复制找到的版本
cd /
yum list nginx*
使用yum安装 nginx
使用yum命令安装的软件都会默认安装到 /etc/目录下,所以我们修改 nginx目录下的nginx.conf配置文件时,路径必须带上/etc/前缀
vim /etc/nginx/nginx.conf
配置分发请求;注释掉server{};
增加upsteam myserver{}和server{}语句块;
    upstream myserver{
        server 127.0.0.1:8090 max_fails=3 fail_timeout=30s;
    }
 
    server{
        listen 80;
        server_name 服务器外网ip;
        location / {
                proxy_pass http://myserver;
        }
    }
安全组中增加 80 端口
启动nginx;
systemctl start nginx;
systemctl status nginx;
启动完nginx后,我们就可以通过nginx来代理tomcat了,所以可以直接使用ip来访问项目;而不需要端口号
 
关闭nginx;
在当前路径下输入shutdown.sh;   
因为我们将来想直接通过ip访问到我们自己的项目,而且tomcat的默认项目,所以我们必须删除掉 tomcat路径中的
webapp中的ROOT项目,这个项目就是tomcat的默认项目,将来我们把我们自己的项目war包也取名为ROOT.war,
这样tomcat启动的时候就会自动加载我们的项目
所以进入到tomcat/webapp; 删掉 ROOT 项目, 因为webapp下的项目都是我不需要的,所以我就把webapp下的所有项目都删了

十二、修改项目本身

1. 修改项目路径为""; global.js中项目名也要改为"";    
2. 在HomeController中转发"/"到"/index";    
3. 在pom.xml中申明打包为war包,
build中申明;pakage打包为root.war   
4. 拷贝配置文件两份;我的项目resources有两个配置文件,分别是 application.properties 和 logback-spring.xml ,所以我把这两个文件都分别拷贝了2份,
分别以develop 和 produce 为后缀
在默认配置文件中申明使用的文件;
 
在后缀为produce的文件中修改相应的参数(mysql密码;domain改成ip; upload路径;wk命令改成我们的脚本),
logback文件的路径改一下   
5. 改变项目的启动的方式,启动tomcat即启动项目,而不用启动Applicaiton.class;     创建CommunityServlet.class;
5. clean掉target目录;对项目进行压缩
6. 传到root目录下;使用 unzip 命令解压到当前目录;
在项目根目录下Maven构建,使用mvn clean package -Dmaven.test.skip=true,跳过测试;   
构建成功了 (如果此处构建失败,且提示No compiler is provided in this environment. Perhaps you are running,请参考链接解决)
进入到target目录下;移动root.war到tomcat/webapp目录下;   
mv ROOT.war /opt/apache-tomcat-9.0.40/webapps/
systemctl start tomcat启动tomcat;
startup.sh启动nginx
进入到tomcat 的 webapp目录,观察发现ROOT.war已经自动解压成了一个ROOT可运行项目
进入到tomcat的logs目录,查看catalina.xxx.log;通过启动日志,没有看到异常
进入到/tmp目录下看我们项目的日志
浏览器访问项目,测试所有功能,可以正常通过ip地址访问到项目,其他功能也是正常可以使用的
至此,项目部署成功

ElasticSearch数据的导入

我本来想把本地的Elasticsearch的配置文件ip改为服务器ip, 然后在本地运行测试方法,把把数据插入到服务器的Elasticsearch中,但是发现连不上服务器的这个9200端口,所以放弃了这种方法。
所以改用下面这种方式:
先复制原来的community项目,但是把测试方法放在HomeController下,即
所以如果把这个项目部署到服务器上,那只需访问“/"路径即可完成Elasticesarch的数据初始化。
但是注意把这个项目部署到服务器上之前要先把当前服务器中tomcat/webapps目录下的ROOT.war保存在其他文件夹中,然后把这个项目的war包放到webapps目录下,因为两个项目如果路径冲突的话会优先考虑名为ROOT的项目。

 

posted @ 2020-11-25 10:27  Lucky小黄人^_^  阅读(516)  评论(0编辑  收藏  举报