阿里云服务器(centos)安装mysql、tomcat、php、nginx,自动邮箱数据备份

第一次写博客,内容是我实际使用的一些心得,希望有所帮助。

所需资源

  1. oneinstack-full.tar.gz
  2. jdk-8u192-linux-x64.tar.gz
  3. tomcat8

系统更新及自动处理

更新系统并清除升级包

yum -y update --skip-broken && yum clean packages

在定时文件,加入上面命令,让系统自动更新

vi /etc/crontab

在上面文件结尾加入如下内容,每天4点40分开始更新操作

40 4 * * * root yum -y update --skip-broken && yum clean packages

修改crond配置文件后,需要重启crond服务,让配置生效。

systemctl stop crond
systemctl start crond

安装iptables防火墙

#先检查是否安装了iptables
service iptables status
#安装iptables
yum install -y iptables
#升级iptables
yum update iptables 
#安装iptables-services
yum install iptables-services

#停止firewalld服务
systemctl stop firewalld
#禁用firewalld服务
systemctl mask firewalld

修改/etc/sysconfig/iptables内容如下

*filter
:INPUT DROP [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [2:416]
:syn-flood - [0:0]
-A INPUT -i lo -j ACCEPT
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 80 -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 443 -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 3306 -j ACCEPT
-A INPUT -p icmp -m limit --limit 1/sec --limit-burst 10 -j ACCEPT
-A INPUT -f -m limit --limit 100/sec --limit-burst 100 -j ACCEPT
-A INPUT -p tcp -m tcp --tcp-flags FIN,SYN,RST,ACK SYN -j syn-flood
-A INPUT -j REJECT --reject-with icmp-host-prohibited
-A syn-flood -p tcp -m limit --limit 3/sec --limit-burst 6 -j RETURN
-A syn-flood -j REJECT --reject-with icmp-port-unreachable
COMMIT

重启iptables,使配置生效。

#自动启动
systemctl enable iptables.service
systemctl stop iptables
systemctl start iptables

使用oneinstack安装nginx、Mysql、php等

解压oneinstack-full.tar.gz并运行

tar zxvf oneinstack-full.tar.gz
cd oneinstack
./install.sh

安装java

tar zxvf jdk-8u192-linux-x64.tar.gz
mkdir /usr/local/java
mv jdk1.8.0_192 /usr/local/java

在/etc/profile文件最后增加如下信息

export JAVA_HOME=/usr/local/java/jdk1.8.0_192
export CLASSPATH=$JAVA_HOME/lib/tools.jar:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib
export PATH=/usr/local/nginx/sbin:/usr/local/mysql/bin:$JAVA_HOME/bin:$PATH
#使配置文件生效
source /etc/profile

安装tomcat

将文件解压后放在指定的路径下,如/data/tomact,修改/data/tomact/conf/server.xml文件,修改Connector节点

    <Connector executor="tomcatThreadPool" port="65080" protocol="org.apache.coyote.http11.Http11Nio2Protocol"
               connectionTimeout="20000"
               redirectPort="65443"
               enableLookups="false" maxPostSize="10485760" URIEncoding="UTF-8" acceptCount="100" acceptorThreadCount="2" disableUploadTimeout="true" maxConnections="10000" SSLEnabled="false" />

修改/data/tomact/bin/catalina.sh,在头部增加配置信息

export JAVA_HOME=/usr/local/java/jdk1.8.0_192
export JRE_HOME=/usr/local/java/jdk1.8.0_192/jre
JAVA_OPTS=" -server -Xmx256m -Xms256m -Xss256k -XX:+UseG1GC -XX:MaxGCPauseMillis=200"

将项目文件放在/data/tomact/webapp路径下(访问路径含项目名),或者/data/tomact/webapp/ROOT路径下(访问路径不含项目名称)。运行/data/tomcat/bin/startup.sh启动tomcat,此时tomcat在65080端口中启动,外部访问需要服务器器开启65080端口才能访问。下一步通过配置nginx,使用指定域名访问tomcat。

配置nginx,将指定的域名转到tomcat服务处理

将test.ffhome.top.conf文件放入/usr/local/nginx/conf/vhost(nginx配置路径)路径中。内容如下:

server {
  listen 80;
  server_name test.ffhome.top test2.ffhome.top;

  location ~ .*\.(js|css|gif|jpg|jpeg|png|bmp|swf|flv|mp4|ico)$ {
    expires max;
    valid_referers none blocked *.ffhome.top;
    if ($invalid_referer) {
        return 403;
    }
    proxy_pass http://127.0.0.1:65080;
  }
  location ~ {
    proxy_pass http://127.0.0.1:65080;
  }
  proxy_set_header X-Real-IP $remote_addr;
  proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
  proxy_set_header Host $http_host;  
}

然后重启nginx,使配置生效。即可通过http://test.ffhome.top来访问服务了。

数据库账号配置

网络安全组增加3306,用于远程备份数据等功能

#管理账号
grant all privileges on *.* to 'manager'@'%' identified by 'xxxxxxxx' with grant option;
#备份账号
grant select,show view,lock tables,trigger on *.* to 'backup'@'%' identified by 'xxxxxxxx';
grant process on *.* to 'backup'@'%';
flush privileges;

备份数据处理

备份数据是通过定时备份数据实现。并通过zip压缩文件后,发邮件到指定的邮箱实现备份处理的。此处通过php实现发邮件功能。sendMail.php将指定文件夹的文件发送到邮箱。代码如下:

#!/usr/local/php/bin/php -d disable_functions -d safe_mode=Off
<?php
set_time_limit(0);
error_reporting(E_ALL);
if(!isset($_SERVER)){
  die('This script cannot be executed within web browser.');
}
//函数文件
include('/data/wwwroot/thinkphp-expand/Library/Vendor/PHPMailer/class.phpmailer.php');

$dir = '/data/temp';
$fp = opendir($dir);
while(false!=($file=readdir($fp))){
        if($file!='.' && $file!='..'){
                echo $file . "\n";
                sendMail($file, $dir);
                sleep(10);
        }
}
closedir($fp);

function sendMail($file, $dir){
        $mail = new \PHPMailer(); //PHPMailer对象
        $mail->CharSet = 'UTF-8'; //设定邮件编码,默认ISO-8859-1,如果发中文此项必须设置,否则乱码
        $mail->IsSMTP(); // 设定使用SMTP服务
        $mail->SMTPDebug = 0; // 关闭SMTP调试功能  1 = errors and messages  2 = messages only
        $mail->SMTPAuth = true; // 启用 SMTP 验证功能
        $mail->Host = 'smtp.ffhome.top'; // SMTP 服务器
        $mail->Username = 'backup@ffhome.top'; // SMTP服务器用户名
        $mail->Password = 'XXXXXX'; // SMTP服务器密码
        $mail->SetFrom('backup@ffhome.top', '系统备份');//设置发送者
        $mail->AddAddress('58248450@qq.com');

        $mail->Subject = $file;
        $mail->MsgHTML($file);
        $mail->AddAttachment($dir . '/' . $file);
        if($mail->Send()){
                echo $file . " success\n";
        }else{
                echo $file . " fail\n";
                echo $mail->ErrorInfo . "\n";
        }
}

backup.sh主要是将数据加密备份压缩并分割到指定定文件夹,调用发送邮件进行备份,代码如下:

#!/bin/bash
# 常规定义
t=$(date "+%Y%m%d%H%M%S")

MYSQL_USER="backup"
MYSQL_PASS="XXXXXX"
TEMP_DIR="/data/temp"
# 判断本地备份目录,不存在则创建
if [ ! -d $TEMP_DIR ] ;
  then
   mkdir -p "$TEMP_DIR"
fi

# 进入备份目录
cd $TEMP_DIR

# 备份所有数据库
# 导出需要备份的数据库,清除不需要备份的库
/usr/local/mysql/bin/mysql -u$MYSQL_USER -p$MYSQL_PASS -B -N -e 'SHOW DATABASES' > databases.db
sed -i '/performance_schema/d' databases.db
sed -i '/information_schema/d' databases.db
sed -i '/mysql/d' databases.db

for db in $(cat databases.db)
 do
   /usr/local/mysql/bin/mysqldump -u$MYSQL_USER -p$MYSQL_PASS ${db} > ${db}.sql
   zip -s 45m -q -r -P password ${db}_$t.zip ${db}.sql
   rm -f ${db}.sql
done
rm -f databases.db

# upload
cd ~
/usr/local/backup/sendMail.php

# Delete all local backup
rm -rf $TEMP_DIR

exit 0

可以将backup.sh命令加入到crond中,已实现自动备份,可以参照系统自动更新处理。

其他

在tomcat中有时重启时会发生上个服务无法正常关闭,导致新的服务因端口占用而无法启动的问题。

此处提供killPort.sh用于关闭指定的端口程序。代码如下:

#!/bin/bash

if [ $# -lt 1 ]; then
    echo "must one param. e.g. $0 80"
    exit
fi

pid=`netstat -lnp|grep :$1|awk '{print $7}'`
pid=${pid%/java}
echo $pid
if [ -n "$pid" ]; then
    echo "waiting ......"
    sleep 5
fi

pid=`netstat -lnp|grep :$1|awk '{print $7}'`
pid=${pid%/java}
echo $pid
if [ -n "$pid" ]; then
    echo "kill ......"
    kill -9 $pid
    sleep 5
fi

exit 0

如果想关闭65080端口的tomcat程序,可执行:

./killPort.sh 65080

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值