云服务器搭建部署全流程

本篇记录在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是密码


    设置putty自动登录

    这样每次登录输入用户名即可登录

  • 设置每30秒给服务器发送空包,保持连接不中断 (如不需要请忽略)


    保持putty连接
  • 保存session,每次双击即可连接


    保存puttysession

pscp安装及使用

  • pscp可用来在windows与linux间传输文件,可在PuTTY官网下载安装

  • windows上传文件至linux

     pscp .\dev.war [email protected]:/usr/deva/downloads
    

    windows从linux下载文件

    pscp -r [email protected]:/usr/src "D:/test"
    

    上述操作针对文件无需 -r,针对目录需要加 -r
    root是你的用户名,xxxx.xx.xx.xx为你的服务器ip

环境安装及配置

serverjre(或jdk)安装及配置

  • serverjre可去oracle官网下载,可在linux中wget下载,也可以windows上下载好通过pscp上传至服务器
  • 解压tar.gz
    tar -zxvf serverjre-9.0.4_linux-x64_bin.tar.gz -C /opt/serverjre --strip-components 1
    
    --strip-components N 可以去除压缩文件的N级目录
  • 配置环境变量
    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
    
  • 测试
    source /etc/profile
    
    上述命令使配置生效,java -version 测试是否成功

mysql安装及配置

  • 在mysql官网下载对应的yum源安装包
  • 参考A Quick Guide to Using the MySQL Yum Repository安装即可
  • 上述过程如果想用yum-config-manager可用如下命令安装
    yum -y install yum-utils
    
  • 配置远程连接数据库
    授权远程连接
     GRANT ALL PRIVILEGES ON *.* TO root@"1.1.1.1" IDENTIFIED BY "youpassword" WITH GRANT OPTION;
    
    1.1.1.1为你要授权的ip,如果不限制ip,则为 “%”
    重载授权表
    FLUSH PRIVILEGES;
    
    查看授权
    select user,host from mysql.user;
    
  • 云服务器安全组配置


    无法连接mysql

    授权成功后仍不能远程连接,需要配置安全组规则
    这边使用的是阿里云,去阿里云控制台给实例添加安全组规则


    添加安全组规则

    选择协议类型为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的注释,按需配置角色


    tomcat角色权限

    三个rolename 分别对应tomcat
    tomcat角色权限

    在未配置前可点击进去会出配置教程,按需配置
    server status 页面可查看服务器当前资源使用情况

    manager app 页面可查看当前session,可部署项目(直接上传文件部署)

项目部署

上传war包至服务器

tomcat无法启动常见问题

  • 跟踪日志
    tail -f ../logs/catalina.out
    
  • org.apache.catalina.LifecycleException: Failed to initialize component
    检查端口(8080替换为你自己的端口)是否被占用
    netstat -lnp|grep 8080
    
    如被占用可查看该进程详情(2310为占用进程号)
    ps 2310
    
    kill 该进程尝试重新启动tomcat
    kill -9 2310
    
  • 无任何异常,启动极慢或卡死
    Tocmat的Session ID是通过SHA1算法计算得到的,计算Session ID的时候必须有一个密钥。为了提高安全性Tomcat在启动的时候回通过随机生成一个密钥,没有足够的熵来产生随机数
    安装熵服务增大熵池并启动该服务
    yum install rng-tools
    systemctl start rngd
    

去除端口号和目录名访问项目

  • 去端口号,将 8080 改为默认的 80
    修改 tomcat/conf 目录下的 server.xml
  • 注意安全组和防火墙需要开放80端口
  • 去项目名,无路径映射至自己的项目名
    修改 tomcat/conf 目录下的 server.xml
    找到 在Host标签内添加
    
    
    虚拟路径也可在此处配置
    如果没有效果或者发现不带项目名访问仍然是去ROOT,检查配置文件是否有拼写错误,比如 docBase写成了doBase

项目无法连接mysql常见问题

  • 检查项目中mysql用户名密码是否正确
  • 连接数据库的url如果是通过服务器的ip(包括127.0.0.1)连接
    需要在安全组/防火墙中配置3306端口授权该ip
    需给mysql对应用户名在此ip授权
    • 如仍未解决,参考此文章,未验证是否有效
    • 如果再不行就别坚持了,localhost多好?

项目中数据乱码

  • 登录mysql查看字符集设置
    show variables like '%char%';
    
    字符集

    发现有latin1编码

  • 修改配置文件
    vim  /etc/my.cnf
    
    在 [mysqld] 下添加
    character_set_server=utf8
    
    重启mysql服务
    systemctl restart mysqld
    
    再次检查字符集变为utf8,则不再乱码
    如仍看到乱码请检查数据库中是否是乱码,将乱码数据清理掉即可

将 tomcat 加入 systemctl 服务设置开机自启动

  • 在 tomcat/bin 目录下创建 setenv.sh 文件添加
    JAVA_HOME=/opt/java
    CATALINA_PID=$CATALINA_BASE/temp/tomcat.pid # 如不需要请忽略
    
    tomcat启动时会创建pid文件存储tomact进程id,该路径可自定义
    此处耽误两三天,可能是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    # 关闭开机自启动
    

稍做优化

参考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可见


apr配置成功

你可能感兴趣的:(云服务器搭建部署全流程)