本篇记录在centos7.3上部署web项目的全流程及一些问题的解决方案
工具准备
putty安装及使用
- PuTTY可用来在windows上连接linux服务器,可去PuTTY官网下载安装
- 如果不想每次登录都输入密码,可在快捷方式目标后追加
https://codeyarns.com/2013/01/29/how-to-auto-login-with-username-using-putty/
设置connection data 中 auto-login username-load -ssh -l root -pw 123456
root是用户名,123456是密码
这样每次登录输入用户名即可登录
-
设置每30秒给服务器发送空包,保持连接不中断 (如不需要请忽略)
-
保存session,每次双击即可连接
pscp安装及使用
pscp可用来在windows与linux间传输文件,可在PuTTY官网下载安装
-
windows上传文件至linux
pscp .\dev.war root@xxxx.xx.xx.xx:/usr/deva/downloads
windows从linux下载文件
pscp -r root@xxxx.xx.xx.xx:/usr/src "D:/test"
上述操作针对文件无需 -r,针对目录需要加 -r
root是你的用户名,xxxx.xx.xx.xx为你的服务器ip
环境安装及配置
serverjre(或jdk)安装及配置
- serverjre可去oracle官网下载,可在linux中wget下载,也可以windows上下载好通过pscp上传至服务器
- 解压tar.gz
--strip-components N 可以去除压缩文件的N级目录tar -zxvf serverjre-9.0.4_linux-x64_bin.tar.gz -C /opt/serverjre --strip-components 1
- 配置环境变量
vim /etc/profile 添加下列配置# serverjre config export JAVA_HOME=/opt/serverjre export JRE_HOME=${JAVA_HOME} export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib export PATH=${JAVA_HOME}/bin:$PATH # end serverjre config
- 测试
上述命令使配置生效,java -version 测试是否成功source /etc/profile
mysql安装及配置
- 在mysql官网下载对应的yum源安装包
- 参考A Quick Guide to Using the MySQL Yum Repository安装即可
- 上述过程如果想用yum-config-manager可用如下命令安装
yum -y install yum-utils
- 配置远程连接数据库
授权远程连接
1.1.1.1为你要授权的ip,如果不限制ip,则为 “%”GRANT ALL PRIVILEGES ON *.* TO root@"1.1.1.1" IDENTIFIED BY "youpassword" WITH GRANT OPTION;
重载授权表
查看授权FLUSH PRIVILEGES;
select user,host from mysql.user;
-
云服务器安全组配置
授权成功后仍不能远程连接,需要配置安全组规则
这边使用的是阿里云,去阿里云控制台给实例添加安全组规则
选择协议类型为mysql 3306 (此处为默认配置,如果你的端口改变,请选择自定义)
授权对象为你想要授权的ip,如果不限制,则为 0.0.0.0/0 - 如果添加规则后,仍然报上述错误,检查服务器防火墙
查看防火墙是否开启
如果开启,关闭防火墙查看是否可连接,判断是否是防火墙的问题systemctl status firewalld
如果是防火墙的问题且需要开启防火墙,请配置防火墙规则systemctl stop firewalld
Tomcat 安装及配置
- 从tomcat官网下载对应版本
- 解压
tar -zxvf apache-tomcat-9.0.16.tar.gz --strip-components 1 -C /opt/tomcat
- 去tomcat的bin目录启动tomcat
cd /opt/tomcat/bin ./startup.sh
- 外部尝试访问tomcat根目录,无法访问,添加安全组规则
授权外部访问8080端口
开启防火墙的配置开放8080端口 - 配置tomcat管理员页面权限
cd /opt/tomcat/conf vim tomcat-users.xml
取消底部role 及user的注释,按需配置角色
三个rolename 分别对应tomcat
在未配置前可点击进去会出配置教程,按需配置
server status 页面可查看服务器当前资源使用情况
manager app 页面可查看当前session,可部署项目(直接上传文件部署)
项目部署
上传war包至服务器
pscp .\qqq.war root@1.1.1.1:/opt/tomcat/webapps/
- 重启tomcat
tomcat无法启动常见问题
- 跟踪日志
tail -f ../logs/catalina.out
- org.apache.catalina.LifecycleException: Failed to initialize component
检查端口(8080替换为你自己的端口)是否被占用
如被占用可查看该进程详情(2310为占用进程号)netstat -lnp|grep 8080
kill 该进程尝试重新启动tomcatps 2310
kill -9 2310
- 无任何异常,启动极慢或卡死
Tocmat的Session ID是通过SHA1算法计算得到的,计算Session ID的时候必须有一个密钥。为了提高安全性Tomcat在启动的时候回通过随机生成一个密钥,没有足够的熵来产生随机数
安装熵服务增大熵池并启动该服务yum install rng-tools systemctl start rngd
去除端口号和目录名访问项目
- 去端口号,将 8080 改为默认的 80
修改 tomcat/conf 目录下的 server.xml
<Connector port="8080" 这一行 8080 改为 80 - 注意安全组和防火墙需要开放80端口
- 去项目名,无路径映射至自己的项目名
修改 tomcat/conf 目录下的 server.xml
找到 <Host name="localhost" appBase="webapps" 这行
在Host标签内添加
虚拟路径也可在此处配置<Context path="" docBase="myProject" debug="0"></Context>
如果没有效果或者发现不带项目名访问仍然是去ROOT,检查配置文件是否有拼写错误,比如 docBase写成了doBase
项目无法连接mysql常见问题
- 检查项目中mysql用户名密码是否正确
- 连接数据库的url如果是通过服务器的ip(包括127.0.0.1)连接
需要在安全组/防火墙中配置3306端口授权该ip
需给mysql对应用户名在此ip授权- 如仍未解决,参考此文章,未验证是否有效
- 如果再不行就别坚持了,localhost多好?
项目中数据乱码
- 登录mysql查看字符集设置
show variables like '%char%';
发现有latin1编码
- 修改配置文件
在 [mysqld] 下添加vim /etc/my.cnf
重启mysql服务character_set_server=utf8
再次检查字符集变为utf8,则不再乱码systemctl restart mysqld
如仍看到乱码请检查数据库中是否是乱码,将乱码数据清理掉即可
将 tomcat 加入 systemctl 服务设置开机自启动
- 在 tomcat/bin 目录下创建 setenv.sh 文件添加
tomcat启动时会创建pid文件存储tomact进程id,该路径可自定义JAVA_HOME=/opt/java CATALINA_PID=$CATALINA_BASE/temp/tomcat.pid # 如不需要请忽略
此处耽误两三天,可能是tomcat 9 bug,无法生成pid文件,调试catalina.sh时CATALINA_PID的重定向输出并没有执行,更换为tomcat 8.0.53 之后正常生成。为了避免后续问题,也已将jdk换为1.8版本。此处如果不是必须使用pid文件可忽略,因为公司项目需要使用此pid文件,所以耽误两三天来处理此问题。 - 在 /etc/systemd/system 目录下创建 tomcat.service 添加
之后就可以使用[Unit] Description=Apache Tomcat Web Application Container After=syslog.target network.target [Service] Type=forking CATALINA_PID=/opt/tomcat/temp/tomcat.pid ExecStart=/opt/tomcat/bin/startup.sh ExecStop=/opt/tomcat/bin/shutdown.sh PrivateTmp=True User=root Group=root [Install] WantedBy=multi-user.target
systemctl start tomcat # 启动tomcat systemctl stop tomcat # 停止tomcat systemctl status tomcat # 查看tomcat状态 systemctl enable tomcat # 设置开机启动tomcat systemctl is-enabled tomcat # 查看tomcat是否开机自启动 systemctl disable tomcat # 关闭开机自启动
稍做优化
jvm参数优化
vim /opt/tomcat/bin/catalina.sh
第一行添加
set JAVA_OPTS='-server -Xms1024m -Xmx1024m'
-server 启用服务器模式,提升性能
-Xms 初始内存
-Xmx 最大内存
二值根据服务器配置设置,建议二值相等,避免在GC后调整堆大小带来的压力
开启线程池
vim /opt/tomcat/bin/server.xml
取消红框的注释
根据服务器配置调整
maxThreads="800" # 线程池最大线程数
minSpareThreads="100" # 最小线程数
maxQueueSize="100" # 最大等待数
给Connector指定线程池
Connector 关键属性
maxConnections="800" # 并发请求数
acceptCount="200" # 最大等待数
神器APR
参考CentOS安装配置APR
安装依赖
yum install apr-devel apr apr-util
安装tomcat-native
yum install tomcat-native
配置环境变量
vim /etc/profile
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/apr/lib
source /etc/profile
配置成功重启tomcat可见