CentOs云服务器部署项目全流程

2023-05-16

目录

  • 工具准备
    • putty安装及使用
    • pscp安装及使用
  • 环境安装及配置
    • serverjre(或jdk)安装及配置
    • mysql安装及配置
    • Tomcat 安装及配置
  • 项目部署
    • 上传war包至服务器
    • tomcat无法启动常见问题
    • 去除端口号和目录名访问项目
    • 项目无法连接mysql常见问题
    • 项目中数据乱码
    • 将 tomcat 加入 systemctl 服务设置开机自启动
  • 稍做优化
    • jvm参数优化
    • 开启线程池
    • 神器APR

本篇记录在centos7.3上部署web项目的全流程及一些问题的解决方案

工具准备

putty安装及使用

  • PuTTY可用来在windows上连接linux服务器,可去PuTTY官网下载安装
  • 如果不想每次登录都输入密码,可在快捷方式目标后追加
     -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配置成功

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

CentOs云服务器部署项目全流程 的相关文章

  • messages,CentOS 7不收集日志或不存在 /var/log/messages

    var log message var log secure等都不记录了 并且都是空文件 重启机器 reboot 无效 重启日志 systemctl start rsyslog 无效 怀疑空间不足 删除 var log messages 重
  • 在 docker 容器内挂载 nfs 共享

    有谁知道如何使用 centos 基础镜像在 docker 容器内挂载 nfs 共享 我试过这个命令 mount server dir mount point 并得到下一个错误 mount nfs rpc statd is not runni
  • unixODBC (DB2) + PHP + CentOS 的段错误

    经过两天的战斗 我尝试在这里寻求帮助 我正在使用 unixODBC 2 2 11 在 CentOS 5 4 服务器上使用 DB2 iSeries 和 PHP 5 3 我猜是因为 PHP 从 5 1 升级到 5 3 我让 PHP 在某些查询上
  • 调用未定义函数 Doctrine\ORM\Mapping\Driver\simplexml_load_file()

    我正在使用 Symfony2 并将我的网络部署到 CentOs6 服务器 我得到了这个异常 FatalErrorException Error Call to undefined function Doctrine ORM Mapping
  • 无法获取 Flask 应用程序中设置的环境变量

    我尝试在 CentOS 中将敏感信息设置为环境变量 并将它们传递给主文件中使用的 Flask 配置文件 即init py 但这没有用 Flask 应用程序在 Apache 下运行 我首先以 root 用户身份编辑 etc environme
  • 在 CentOS 中使用 /etc/resolv.conf 解析 AD 域

    我已使用 Realm 配置 SSSD 以使用 AD 凭据登录 centOS VM 请参考设置here https stackoverflow com questions 63705156 sssd integration with micr
  • 在centos 6.4上安装numpy&scipy

    我在虚拟环境中工作 安装 numpy 和 scipy 时遇到问题 据我了解 在使用 scipy 之前我必须完全安装 numpy 但是我在安装 numpy 时遇到了问题 I usedpip install numpy并将 numpy 安装到我
  • 在Linux中使用自定义规则在多个端口上运行的SSH服务[关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我正在努力设置一台在多个端口上运行 SSH 服务的服务器 例如端口 22 和 5522 这些端口应该具有一组不同的规则 即 我们为端口 2
  • PHP 5.3.8 上的 Mime 类型检测失败并显示 fileinfo

    我在 CentOS 服务器上安装了 PHP 5 3 8 时 无法使用 fileinfo 检测简单 PNG 文件的 mime 类型 问题 基本上 如果我有以下代码 如您所见 该文件是 PNG 图像 文件的头字节已被检查并
  • 如何正确处理分块编码请求?

    我有两个网站 一个使用 PHP 的 Lighttpd 第二个使用 Apache 这两个网站都不能正确处理分块传输编码 我从我的手机 J2ME 发送此请求 并且无法将此传输类型更改为任何其他类型 所以我唯一的方法是以其他方式处理分块传输编码请
  • 在 php.ini 上启用curl_exec

    我想运行带有curl 的php 脚本 但以下功能被 php ini 禁用 exec passthru shell exec 系统 proc open popen curl exec curl multi exec show source 我
  • 无法在 CentOS 7 上的 PHP 中打开 file_put_contents 上的流

    我知道这是许多线程的常见错误 但我厌倦了搜索 但仍然没有解决它 当我尝试运行该函数时文件放置内容我收到以下错误 Warning file put contents test txt failed to open stream Permiss
  • 无法使用 git 克隆任何存储库

    我尝试克隆一些存储库 但总是遇到相同的错误 我在哪里可以找到有关此错误的更多信息 错误日志文件或类似的文件 或者也许有人知道可能出了什么问题 git clone http github com creationix nvm git nvm
  • 在 systemd 服务文件内/内联添加 shell 命令

    我正在运行gunicorn通过 systemd 将服务器作为服务 这是示例service file Unit Description Gunicorn NGINX After network target Service User root
  • PCRE 库版本太旧

    Bug Genie 3 需要 PCRE 库 8 0 或更高版本 你有 版本 7 8 2008 09 05 将您的系统更新到最新版本 你常用的来源 在我查看问题并尝试通过以下步骤更新我的 PCRE 库后 wget the latest sou
  • CentOS目录结构是树形的吗?

    CentOS 上有相当于树的东西吗 如果你的 Centos 系统上没有安装 tree 无论如何我通常建议服务器设置使用最小安装磁盘 你应该在命令行中输入以下内容 yum install tree y 如果没有安装 那是因为您没有正确的存储库
  • proc_open() 失败并显示“权限被拒绝”

    我正在尝试使用proc open 执行程序并打印结果 但是 我不断收到 许可被拒绝 的消息 已将脚本和可执行文件的 chmod 设置为 0777 但无济于事 ini get safe mode 是假的 可能出什么问题了 我正在使用 Cent
  • CentOS:无法安装 Chromium 浏览器

    我正在尝试在 centOS 6 i 中安装 chromium 以 root 用户身份运行以下命令 cd etc yum repos d wget http repos fedorapeople org repos spot chromium
  • 套接字错误 10054

    我有一个C S程序 客户端使用socket向服务器发送文件 发送后大约超过700k数据 客户端 在win7上 将收到套接字10054错误 这意味着连接被对等方重置 服务器运行在CentOS 5 4上 客户端是在virtual box中运行的
  • Monkeyrunner/jython 中未找到 JDBC 驱动程序错误

    我需要在中插入一些东西DB 我在用着JDBC as a connector jython the script mysql数据库和脚本正在运行CentOS 我的代码看起来像这样 from com android monkeyrunner i

随机推荐