云服务器搭建部署全流程

本篇记录在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 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
    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包至服务器

  • 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替换为你自己的端口)是否被占用
    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
    <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编码

  • 修改配置文件
    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配置成功
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 200,302评论 5 470
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 84,232评论 2 377
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 147,337评论 0 332
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 53,977评论 1 272
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 62,920评论 5 360
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,194评论 1 277
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,638评论 3 390
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,319评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,455评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,379评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,426评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,106评论 3 315
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,696评论 3 303
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,786评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,996评论 1 255
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,467评论 2 346
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,043评论 2 341

推荐阅读更多精彩内容