一、安装centos 7.0

选择最小安装,将相关的"调试工具"、“兼容性程序库”、“开发工具”选中。 此操作是为了减少后期安装或编译相关服务时出现依赖、或环境的问题。 硬盘分区,可根据个人的习惯而定,不清楚的可以直接选择系统自动分区, 由于个人的习惯,本人的分区如下,仅供参考: /boot        500M                 用于启动Linux的核心文件 swap        8192M(8G)        Linux下的交换分区,又称为虚拟内存,一般是物理内存的2倍,但不建议超过8G /                剩下的空间        用户主目录,新建的用户的目录将会出现在这里 /home        不需要单独创建,会自动产生的。这里就不需要了。

二、关闭不需要的安全设置,使用其他的安全管理

sed -i "s/SELINUX=enforcing/SELINUX=disabled/" /etc/selinux/config
setenforce 0
systemctl stop firewalld    //停止系统默认的防火墙
systemctl mask firewalld   //屏蔽服务(让它不能启动)

三、CentOS7彻底关闭IPV6

编辑/etc/default/grub,在GRUB_CMDLINE_LINUX加上的后面句首加上ipv6.disable=1 修改前:

[root@localhost Desktop]# cat /etc/default/grub 
GRUB_TIMEOUT=5
GRUB_DISTRIBUTOR="$(sed 's, release .*$,,g' /etc/system-release)"
GRUB_DEFAULT=saved
GRUB_DISABLE_SUBMENU=true
GRUB_TERMINAL_OUTPUT="console"
GRUB_CMDLINE_LINUX="rd.lvm.lv=centos/root rd.lvm.lv=centos/swap rhgb quiet"
GRUB_DISABLE_RECOVERY="true"

修改后:

[root@localhost Desktop]# cat /etc/default/grub 
GRUB_TIMEOUT=5
GRUB_DISTRIBUTOR="$(sed 's, release .*$,,g' /etc/system-release)"
GRUB_DEFAULT=saved
GRUB_DISABLE_SUBMENU=true
GRUB_TERMINAL_OUTPUT="console"
GRUB_CMDLINE_LINUX="ipv6.disable=1 rd.lvm.lv=centos/root rd.lvm.lv=centos/swap rhgb quiet"
GRUB_DISABLE_RECOVERY="true"

修改完毕后保存,运行grub2-mkconfig -o /boot/grub2/grub.cfg重新生成grub.cfg文件

[root@localhost Desktop]# grub2-mkconfig -o /boot/grub2/grub.cfg 
Generating grub configuration file ...
Found linux image: /boot/vmlinuz-3.10.0-514.2.2.el7.x86_64
Found initrd image: /boot/initramfs-3.10.0-514.2.2.el7.x86_64.img
Found linux image: /boot/vmlinuz-3.10.0-327.36.3.el7.x86_64
Found initrd image: /boot/initramfs-3.10.0-327.36.3.el7.x86_64.img
Found linux image: /boot/vmlinuz-3.10.0-327.el7.x86_64
Found initrd image: /boot/initramfs-3.10.0-327.el7.x86_64.img
Found linux image: /boot/vmlinuz-0-rescue-d885883cdb4944609bc5e3493dd2b680
Found initrd image: /boot/initramfs-0-rescue-d885883cdb4944609bc5e3493dd2b680.img
done

重启系统,运行lsmod|grep ipv6,可以看到ipv6已经关闭。

reboot    //重启让selinux、IPv6等配置生效

四、管理工具安装

安装ifconfig、ntsysv、updatedb、lrzsz(上传下载)、wget(远程http下载)功能

yum install -y chkconfig  net-tools telnet ntsysv mlocate lrzsz wget lsof setuptool tcpdump
yum install -y system-config-securitylevel-tui system-config-network-gui system-config-network-tui system-config-date
yum install -y vim nano             //安装编辑器

五、更新Centos 7.0 repo源

yum install -y epel-release
rpm -ivh http://rpms.famillecollet.com/enterprise/remi-release-7.rpm
rpm  -Uvh  http://mirror.webtatic.com/yum/el7/epel-release.rpm
rpm  -Uvh  http://mirror.webtatic.com/yum/el7/webtatic-release.rpm

5.1、CentOS 7阿里云源

curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
yum clean all
yum makecache
yum install -y python-pip
pip install --upgrade pip
pip install requests

5.2、安装nginx yum安装的第三方repo源文件(使用编译安装则不需要)

mkdir /root/software
cd /root/software
wget https://mirrors.ustc.edu.cn/epel/7/x86_64/Packages/e/epel-release-7-12.noarch.rpm
rpm -ivh epel-release-7-12.noarch.rpm
rpm -ivh http://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7.ngx.noarch.rpm

5.3、安装mysql yum安装的第三方repo源文件(使用编译安装则不需要)

cd /root/software   //进入源文件集中文件夹
wget https://repo.mysql.com/mysql57-community-release-el7-11.noarch.rpm  //下载
yum localinstall -y mysql57-community-release-el7-11.noarch.rpm   //通过rpm安装得到repo源
yum repolist enabled | grep "mysql.*-community.*"    //检查mysql源是否安装成功

六、环境安装

现在开始正式配置各种应用环境。

6.1 环境的预装

yum install -y make cmake gcc gcc-c++ autoconf libjpeg libjpeg-devel libpng libpng-devel freetype freetype-devel libxml2 libxml2-devel zlib zlib-devel glibc glibc-devel glib2 glib2-devel bzip2 bzip2-devel ncurses ncurses-devel curl curl-devel e2fsprogs e2fsprogs-devel krb5 krb5-devel libidn libidn-devel openssl openssl-devel openldap openldap-devel nss_ldap openldap-clients openldap-servers  gd gd-devel perl expat expat-devel nss_ldap unixODBC-devel libxslt-devel libevent-devel libtool-ltdl bison libtool zip unzip gmp-devel pcre pcre-devel python-devel  perl-devel perl-ExtUtils-Embed  //安装各种环境所需要的插件
yum update -y    //升级补丁

6.2 安装iptables(可不安装)

yum install -y iptables-services  //安装iptables
systemctl enable iptables    //开机自启动
service iptables start    //启动服务
iptables -A INPUT -p tcp -m state --state NEW -m tcp --dport 3306 -j ACCEPT //允许远程访问mysql
iptables -A INPUT -p tcp -m state --state NEW -m tcp --dport 80 -j ACCEPT //允许远程访问http
iptables -A INPUT -p tcp -m state --state NEW -m tcp --dport 443 -j ACCEPT //允许远程访问https
service iptables save   //保存相关操作配置
systemctl stop iptables.service   //关闭iptables服务

设置iptables规则

6.2.1 清除所有规则,所有设置从头开始
iptables -F        //清除预设表filter中的所有规则链的规则
iptables -X        //清除预设表filter中使用者自定链中的规则
service iptables save     //保存结果,否则重启后又恢复原来的状态

查询结果:

iptables -L -n
Chain INPUT (policy ACCEPT)
target       prot opt source                 destination         
Chain FORWARD (policy ACCEPT)
target       prot opt source                 destination         
Chain OUTPUT (policy ACCEPT)
target       prot opt source                 destination    `
6.2.2 设定预设规则
iptables -A INPUT -p tcp --dport 22 -j ACCEPT   //允许所有IP,访问22端口(流入)
iptables -A OUTPUT -p tcp --sport 22 -j ACCEPT  //允许所有IP,访问22端口(流出)
iptables -I INPUT -s 10.17.162.137 -p tcp --dport 22 -j ACCEPT  //指定IP访问指定端口
iptables -I OUTPUT -s 10.17.162.137 -p tcp --sport 22 -j ACCEPT  //若流出被禁止,则需要追加该条规则

段落引用注:优先允许SSH端口,否则,在执行下面的规则时,将会直接失去连接,无法管理远程机器。

iptables -P INPUT DROP     //禁止所有流入规则
iptables -P OUTPUT ACCEPT   //允许所有流出规则
iptables -P FORWARD DROP   //禁止所有转发规则
service iptables save     //保存结果,否则重启后又恢复原来的状态

段落引用php-fpm访问的时候,需要用到以下规则,否则将无法访问php文件。

iptables -A INPUT -i lo -j ACCEPT   //允许来自于lo接口接收数据包
iptables -A OUTPUT -o lo -j ACCEPT   //允许向lo接口发送数据包

注:上述规则可根据实际情况而定,而iptables -A的意思是添加到当前规则的最后一条;而iptables -I的意思是添加到当前规则的某一个位置,默认为第一条,若是iptables -I 3 则意思是在第三条插入。

iptables -A INPUT -p tcp --dport 53 -j ACCEPT   //开放53端口,DNS端口,否则无法使用yum安装
iptables -A INPUT -p udp --dport 53 -j ACCEPT   //开放53端口,DNS端口,否则无法使用yum安装
iptables -A INPUT -p tcp --dport 80 -j ACCEPT   //开放80端口
iptables -I INPUT -p tcp --dport 8080 -j ACCEPT   //tomcat服务需用到的端口
iptables -I INPUT 2 -m state --state RELATED,ESTABLISHED -j ACCEPT  //tomcat服务需要
iptables -A INPUT -p tcp --dport 443 -j ACCEPT   //开放443端口
允许icmp包通过,也就是允许ping,
iptables -A OUTPUT -p icmp -j ACCEPT (OUTPUT设置成DROP的话)
iptables -A INPUT -p icmp -j ACCEPT    (INPUT设置成DROP的话)
iptables -A INPUT -i lo -p all -j ACCEPT (如果是INPUT DROP)
iptables -A OUTPUT -o lo -p all -j ACCEPT(如果是OUTPUT DROP)
丢弃坏的TCP包
[root@tp ~]#iptables -A FORWARD -p TCP ! --syn -m state --state NEW -j DROP
处理IP碎片数量,防止被外界攻破,允许每秒100个
iptables -A FORWARD -f -m limit --limit 100/s --limit-burst 100 -j ACCEPT
设置ICMP包过滤,允许每秒1个包,限制触发条件是10个包.
iptables -A FORWARD -p icmp -m limit --limit 1/s --limit-burst 10 -j ACCEPT
防止外网用内网IP欺骗
iptables -t nat -A PREROUTING -i eth0 -s 10.0.0.0/8 -j DROP
iptables -t nat -A PREROUTING -i eth0 -s 172.16.0.0/12 -j DROP
iptables -t nat -A PREROUTING -i eth0 -s 192.168.0.0/16 -j DROP
禁止与某个具体IP的所有连接
iptables -t nat -A PREROUTING -d ip地址(0.0.0.0) -j DROP
禁用FTP(21)端口
iptables -t nat -A PREROUTING -p tcp --dport 21 -j DROP
禁止某个IP连接FTP(21)端口.
iptables -t nat -A PREROUTING    -p tcp --dport 21 -d ip地址 -j DROP
drop非法连接
iptables -A INPUT     -m state --state INVALID -j DROP
iptables -A OUTPUT    -m state --state INVALID -j DROP
iptables -A FORWARD -m state --state INVALID -j DROP
允许所有已经建立的和相关的连接
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
保存并重启
service iptables save
service iptables restart 

6.3、安装mysql及初始设置mysql

yum install -y bison-devel libaio-devel  //预装mysql环境
yum install -y perl-Data-Dumper  //预装mysql所需环境 
yum install -y mysql-server   //安装mysqld
service mysqld start  //启动mysql
systemctl enable mysqld.service  //开机自启动
grep 'temporary password' /var/log/mysqld.log     //mysql5.7版本后,初始密码不再为空,默认随机生成,可通过该命令查询
mysql -u root -p   //进入mysql
alter user root@localhost identified by '三种或以上的八位字符';   默认需要先修改密码,才能其他操作
exit;    //退出mysql管理
设置mysql 不分大小写
vi /etc/my.cnf
[mysqld]
lower_case_table_names=1       //必须在[mysqld] 中
配置mysql支持UTF-8
[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
lower_case_table_names=1 
character-set-server=utf8
max_connections=500
innodb_log_file_size=60M
innodb_buffer_pool_size=128M
symbolic-links=0
interactive_timeout=20                //下面有说明
wait_timeout=20

[client]
default-character-set=utf8
socket=/var/lib/mysql/mysql.sock

[mysqld_safe]
open-files-limit = 8192
log-error=/var/log/mysqld.log
socket=/var/lib/mysql/mysql.sock
pid-file=/var/run/mysqld/mysqld.pid
service mysqld restart  //重启mysql
MySQL运维小知识

MySQL高占用CPU、内存,有可能是由于进程未能及时释放,可以通过简单的设置,可以有效的解决这个问题。

mysql -uroot -p
mysql> show global variables like '%timeout';
mysql> set global interactive_timeout=100;

段落引用上述的,在重启mysqld.service后失效

vi /etc/my.cnf
[mysqld]
interactive_timeout=20
wait_timeout=20

段落引用上述,任何时候都生效

mysql创建远程用户并授权,尽量不建议,因为这样不安全
mysql -uroot -p
mysql> create user root identified by 'Jeson.123.com';
mysql> grant all privileges on *.* to 'root'@'%'identified by 'Jeson.123.com' with grant option;
mysql> flush privileges;
mysql创建数据库
mysql> CREATE DATABASE lottery DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;
mysql修改指定用户的密码
update mysql.user set password=password('新密码') where User="test" and Host="localhost";
mysql删除指定用户
delete from user where User='test' and Host='localhost';

6.4、安装PHP环境

yum install -y php56w php56w-cli php56w-common php56w-gd php56w-ldap php56w-mbstring php56w-mcrypt php56w-mysql php56w-pdo php56w-devel
yum install -y traceroute net-snmp-devel vim sysstat tree mysql-devel ntpdate libjpeg* bind-utils
yum install -y php56w-imap php56w-odbc php56w-pear php56w-xml php56w-xmlrpc php56w-mhash libmcrypt php56w-bcmath
yum install -y php56w-fpm
vi /etc/php-fpm.d/www.conf

user = nginx        //默认为apache,修改与nginx一致的用户  需要安装nginx后才能改
group = nginx      //默认为apache,修改与nginx一致的组  需要安装nginx后才能改
vi /etc/php.ini
session.save_path = "/var/lib/php/session"   //设置session的位置,否则PHP运行会出错
chmod 777  /var/lib/php/session     //设置文件夹属性
chkconfig php-fpm on

6.5、安装 REDIS 及 REDIS-php 服务

yum install -y tcl   //若不安装tcl,在make test时会出现错误
cd /usr/local/src
wget http://download.redis.io/releases/redis-4.0.9.tar.gz   //下载redis安装包
tar zxvf redis-4.0.9.tar.gz     //解压
cd redis-4.0.9   //进入redis安装文件夹中,该文件为二进制文件,可直接make操作。
make distclean      //清理旧的一些编译过的文件
make
make test
make PREFIX=/opt/redis USE_TCMALLOC=yes install
mkdir -p /opt/redis/etc
mkdir -p /opt/redis/run
mkdir -p /opt/redis/data/6379
mkdir -p /opt/redis/log
cp redis.conf /opt/redis/etc/redis.conf
cp /opt/redis/etc/redis.conf /opt/redis/etc/redis_6379.conf
创建自动启动脚本
touch /etc/init.d/redis
vi /etc/init.d/redis 

段落引用内容如下:

#!/bin/sh
#chkconfig: 2345 80 90 
# Simple Redis init.d script conceived to work on Linux systems 
# as it does use of the /proc filesystem. 

PATH="/opt/redis/bin:$PATH"
EXEC="/opt/redis/bin/redis-server"
CLIEXEC="/opt/redis/bin/redis-cli"
PIDFILE="/opt/redis/run/redis_6379.pid"
CONF="/opt/redis/etc/redis_6379.conf"
PORT="6379"
 
case "$1" in
    start)
        if [ -f $$PIDFILE ]
        then
                echo "$PIDFILE exists, process is already running or crashed."
        else
                echo "Starting Redis server..."
                $EXEC $CONF
        fi
        ;;
    stop)
        if [ ! -f $PIDFILE ]
        then
                echo "$PIDFILE does not exist, process is not running."
        else
                PID=$(cat $PIDFILE)
                echo "Stopping ..."
                $CLIEXEC -p $PORT shutdown
                while [ -x /proc/${PID} ]
                do
                    echo "Waiting for Redis to shutdown ..."
                    sleep 1
                done
                echo "Redis stopped."
        fi
        ;;
    restart)
        $0 stop && $0 start
        ;;
    *)
        echo "Usage: $0 {start|stop|restart}" >&2
        exit 1
        ;;
esac

赋予运行权限

 chmod +x /etc/init.d/redis 
修改时区
vi /etc/php.ini

date.timezone = Asia/Shanghai
修改redis配置
cp -r src/redis-* /opt/redis/
cd /opt/redis/
./redis-server etc/redis.conf 
vi /opt/redis/etc/redis.conf 

daemonize no   ==>   daemonize yes
安装phpredis
cd /root/software
git clone https://github.com/phpredis/phpredis.git
cd phpredis
phpize
./configure --with-php-config=php-config
make
make test
make install
让PHP支持调用redis
vi /etc/php.ini

在最后面增加以下内容

[redis]
extension = /usr/lib64/php/modules/redis.so

添加到自动启动项中

chkconfig --add redis    //开机自启动

6.6、YAF编译安装

cd /root/software
wget http://pecl.php.net/get/yaf-2.3.5.tgz    //需与PHP(5.6)版本匹配
tar zxvf yaf-2.3.5.tgz
安装yaf
cd yaf-2.3.5
phpize
./configure --with-php-config=/usr/bin/php-config
make
make test
make install 
让PHP支持调用Yaf
vi /etc/php.ini

在最后面增加以下内容

[Yaf]
extension=/usr/lib64/php/modules/yaf.so
yaf.use_namespace = 1
yaf.environ = "develop"
测试是否成功
php -i | grep yaf

出现下面这些内容,说明安装成功

yaf
yaf support => enabled
Supports => http://pecl.php.net/package/yaf
yaf.action_prefer => Off => Off
yaf.cache_config => Off => Off
yaf.environ => develop => develop
yaf.forward_limit => 5 => 5
yaf.library => no value => no value
yaf.lowcase_path => Off => Off
yaf.name_separator => no value => no value
yaf.name_suffix => On => On
yaf.st_compatible => Off => Off
yaf.use_namespace => On => On
yaf.use_spl_autoload => Off => Off

6.7、安装nginx

yum install -y automake autoconf libtool make
yum install -y nginx
chkconfig nginx on
配置虚拟机
cd /etc/nginx
mkdir vhost                //放虚拟主机配置文件的位置
vi nginx.conf

在server{}中添加如下内容 在server的root下添加如下内容,默认首页文件名

index        index.php default.php index.html index.htm;

在server中添加支持PHP的语句

        location ~ .php$ {
            root html;
            fastcgi_pass 127.0.0.1:9000;
            fastcgi_index index.php;
            fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
            include fastcgi_params;
        }

在http{}的最后,添加如下内容

    include vhost/*.conf;        //添加完成后保存退出
检查配置结果
nginx -t                 //检查nginx.conf及vhost下的配置文件是否正确
service php-fpm start  //启动PHP-FPM
service nginx restart    //重启nginx服务
虚拟主机配置示例
server {
listen 808;
server_name 10.17.162.113:808;
root /home/website/phpmyadmin/wwwroot;
location / {
index index.php index.html index.shtml;
}

location ~ \.php$ {
fastcgi_pass   127.0.0.1:9000;
fastcgi_index  index.php;
fastcgi_param  SCRIPT_FILENAME  /home/website/phpmyadmin/wwwroot$fastcgi_script_name;
include        fastcgi_params;
}

#log...
}
Nginx 反向代理转发(无条件访问HTTPS)
server {
         listen     80;
        server_name  域名;
        rewrite ^(.*)$  https://$host$1 permanent; 
        }
  server {
        listen       443;
        server_name  域名;
        ssl                  on;
        ssl_certificate      /etc/nginx/vhost/ssl/certificate.crt;
        ssl_certificate_key   /etc/nginx/vhost/ssl/private.key;
        ssl_session_timeout  5m;
        ssl_protocols TLSv1;
        ssl_ciphers  HIGH:!aNULL:!MD5;
        ssl_prefer_server_ciphers   on;
         location / {
              client_max_body_size    16m;
              client_body_buffer_size 128k;
              proxy_pass                          https://10.17.162.113:6443;
              proxy_set_header    REMOTE-HOST $remote_addr;
              proxy_set_header        Host $host;
              proxy_set_header        X-Real-IP $remote_addr;
              proxy_set_header        X-Forwarded-For $proxy_add_x_forwarded_for;
              proxy_set_header           X-Forwarded-Proto https;
              proxy_next_upstream   off;
              proxy_buffer_size 32k;
              proxy_buffers 64 32k;
              proxy_busy_buffers_size 1m;
              proxy_temp_file_write_size 512k;
              proxy_connect_timeout   30;
              proxy_read_timeout      300;
              proxy_send_timeout      300;
        }
    }
Nginx访问TomCat WebApps下某个目录
server {
        listen       80;
        server_name  域名;
        #charset koi8-r;
        #access_log  logs/host.access.log  main;
    location / {
                client_max_body_size    16m;
                client_body_buffer_size 128k;
                proxy_pass 具体域名或IP/文件夹/;
                proxy_set_header    REMOTE-HOST $remote_addr;
                proxy_set_header   Host $host; 
                proxy_set_header   X-Real-IP $remote_addr; 
                proxy_set_header   X-Forwarded-For $proxy_add_x_forwarded_for; 
                #root   html;
                #index  index.html;
                proxy_next_upstream   off;
                proxy_buffer_size 32k;
                proxy_buffers 64 32k;
                proxy_busy_buffers_size 1m;
                proxy_temp_file_write_size 512k;
                proxy_connect_timeout   30;
                proxy_read_timeout      300;
                proxy_send_timeout      300;
        }
        location /文件夹/ {
                client_max_body_size    16m;
                client_body_buffer_size 128k;
                proxy_pass 具体域名或IP/文件夹/;
                proxy_set_header    REMOTE-HOST $remote_addr;
                proxy_set_header   Host $host; 
                proxy_set_header   X-Real-IP $remote_addr; 
                proxy_set_header   X-Forwarded-For $proxy_add_x_forwarded_for; 
                #root   html;
                #index  index.html;
                proxy_next_upstream   off;
                proxy_buffer_size 32k;
                proxy_buffers 64 32k;
                proxy_busy_buffers_size 1m;
                proxy_temp_file_write_size 512k;
                proxy_connect_timeout   30;
                proxy_read_timeout      300;
                proxy_send_timeout      300;
        }
    }

6.8、JAVA开发环境安装

yum search java-1.8          //搜索java-1.7的版本
yum install -y java-1.8.0-openjdk-devel.x86_64      //安装java-1.8.0版本开发环境
cd /usr/lib/jvm/java-1.8.0-openjdk-1.8.0.161-0.b14.el7_4.x86_64/   //进入安装目录
环境配置
vi /etc/profile                                  //环境配置

在文件最后面,添加上

export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.171-8.b10.el7_5.x86_64    //版本不同,路径不一样,需要注意这个问题
export PATH=$JAVA_HOME/bin:$PATH
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
立即生效
source /etc/profile            //立即生效
测试
javac                                          //运行测试

显示以下内容说明配置成功

[root@TempLate ~]# javac
用法: javac <options> <source files>
其中, 可能的选项包括:
  -g                         生成所有调试信息
  -g:none                    不生成任何调试信息
  -g:{lines,vars,source}     只生成某些调试信息
  -nowarn                    不生成任何警告
  -verbose                   输出有关编译器正在执行的操作的消息
  -deprecation               输出使用已过时的 API 的源位置
  -classpath <路径>            指定查找用户类文件和注释处理程序的位置
  -cp <路径>                   指定查找用户类文件和注释处理程序的位置
  -sourcepath <路径>           指定查找输入源文件的位置
  -bootclasspath <路径>        覆盖引导类文件的位置
  -extdirs <目录>              覆盖所安装扩展的位置
  -endorseddirs <目录>         覆盖签名的标准路径的位置
  -proc:{none,only}          控制是否执行注释处理和/或编译。
  -processor <class1>[,<class2>,<class3>...] 要运行的注释处理程序的名称; 绕过默认的搜索进程
  -processorpath <路径>        指定查找注释处理程序的位置
  -parameters                生成元数据以用于方法参数的反射
  -d <目录>                    指定放置生成的类文件的位置
  -s <目录>                    指定放置生成的源文件的位置
  -h <目录>                    指定放置生成的本机标头文件的位置
  -implicit:{none,class}     指定是否为隐式引用文件生成类文件
  -encoding <编码>             指定源文件使用的字符编码
  -source <发行版>              提供与指定发行版的源兼容性
  -target <发行版>              生成特定 VM 版本的类文件
  -profile <配置文件>            请确保使用的 API 在指定的配置文件中可用
  -version                   版本信息
  -help                      输出标准选项的提要
  -A关键字[=值]                  传递给注释处理程序的选项
  -X                         输出非标准选项的提要
  -J<标记>                     直接将 <标记> 传递给运行时系统
  -Werror                    出现警告时终止编译
  @<文件名>                     从文件读取选项和文件名

注:若输入javac显示:bash: javac: 未找到命令… 则说明配置失败,检查环境变量路径是否正确。

6.8、Tomcat安装

sudo groupadd tomcat
sudo useradd -s /bin/nologin -g tomcat -d /opt/tomcat tomcat
mkdir /root/software          //创建专用于存放下载的软件,个人习惯,也可放在/usr/local下等。
cd /root/software
wget https://mirrors.tuna.tsinghua.edu.cn/apache/tomcat/tomcat-8/v8.5.30/bin/apache-tomcat-8.5.30.tar.gz
sudo tar -zxvf apache-tomcat-8.5.30.tar.gz -C /opt/tomcat --strip-components=1
cd /opt/tomcat
chmod -R 754 bin/
chgrp -R tomcat /opt/tomcat
chmod -R g+r conf
chmod g+x conf
chown -R tomcat webapps/ work/ temp/ logs/
创建服务启动文件
sudo vi /etc/systemd/system/tomcat.service

脚本内容如下:

[Unit]
Description=Apache Tomcat Web Application Container
After=syslog.target network.target

[Service]
Type=forking

Environment=JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.161-0.b14.el7_4.x86_64
Environment=CATALINA_PID=/opt/tomcat/temp/tomcat.pid
Environment=CATALINA_HOME=/opt/tomcat
Environment=CATALINA_BASE=/opt/tomcat
Environment='CATALINA_OPTS=-Xms1024M -Xmx1024M -server -XX:+UseParallelGC'
Environment='JAVA_OPTS=-Djava.awt.headless=true -Djava.security.egd=file:/dev/./urandom'

ExecStart=/opt/tomcat/bin/startup.sh
ExecStop=/opt/tomcat/latest/bin/shutdown.sh

User=root
Group=root

[Install]
WantedBy=multi-user.target
配置生效
systemctl daemon-reload    //重载一下服务单元
systemctl enable tomcat.service
systemctl start tomcat.service

6.9、安装haveged

sudo yum install -y haveged
sudo systemctl start haveged.service
sudo systemctl enable haveged.service

访问 http://[Your-Host-IP]:8080 预览是否正常。

7.0、配置Tomcat 管理界面

sudo vi /opt/tomcat/tomcat/conf/tomcat-users.xml

在<tomcat-users>与</tomcat-users>内输入以下内容

 <role rolename="admin-gui"/>
  <role rolename="manager-gui"/>
  <role rolename="manager-script"/>
  <role rolename="manager-jmx"/>
  <role rolename="manager-status"/>
  <user username="tomcat" password="s3cret" roles="admin-gui,manager-gui,manager-script,manager-jmx,manager-status"/>
重启生效
sudo systemctl restart tomcat.service
修改service.xml配置(若需端口配置)
cd /opt/tomcat/conf/
vi server.xml 

<Server port="9005" shutdown="SHUTDOWN">   //修改端口
    <Connector port="9080" protocol="HTTP/1.1"     //修改端口
               connectionTimeout="20000"
               redirectPort="8443"
               maxPostSize="-1"
               URIEncoding="UTF-8" />       //上传大小不限,tomcat7以后,值必须为“-1”,不可为"0",
                                                         为“0”会造成参数传输的时候,全部变成"null"
catalina.out 日志分割
yum install -y cronolog

修改bin/catalina.sh文件 下面第2、15、16、23、24需修改的内容,

shift
touch "$CATALINA_OUT"
if [ “$1” = “-security” ] ; then
if [ $have_tty -eq 1 ]; then
echo “Using Security Manager”
fi
shift
eval “\”$_RUNJAVA\”” “\”$LOGGING_CONFIG\”” $LOGGING_MANAGER $JAVA_OPTS $CATALINA_OPTS \
-Djava.endorsed.dirs=”\”$JAVA_ENDORSED_DIRS\”” -classpath “\”$CLASSPATH\”” \
-Djava.security.manager \
-Djava.security.policy==”\”$CATALINA_BASE/conf/catalina.policy\”” \
-Dcatalina.base=”\”$CATALINA_BASE\”” \
-Dcatalina.home=”\”$CATALINA_HOME\”” \
-Djava.io.tmpdir=”\”$CATALINA_TMPDIR\”” \
org.apache.catalina.startup.Bootstrap “$@” start \
>> “$CATALINA_OUT” 2>&1 “&”
else
eval “\”$_RUNJAVA\”” “\”$LOGGING_CONFIG\”” $LOGGING_MANAGER $JAVA_OPTS $CATALINA_OPTS \
-Djava.endorsed.dirs=”\”$JAVA_ENDORSED_DIRS\”” -classpath “\”$CLASSPATH\”” \
-Dcatalina.base=”\”$CATALINA_BASE\”” \
-Dcatalina.home=”\”$CATALINA_HOME\”” \
-Djava.io.tmpdir=”\”$CATALINA_TMPDIR\”” \
org.apache.catalina.startup.Bootstrap “$@” start \
>> “$CATALINA_OUT” 2>&1 “&”
fi
改为(第2行注释掉,原第15、16行改为下面第15行,原23、24行改为下面第22行):
shift
# touch "$CATALINA_OUT" 注释掉
if [ “$1” = “-security” ] ; then
if [ $have_tty -eq 1 ]; then
echo “Using Security Manager”
fi
shift
eval “\”$_RUNJAVA\”” “\”$LOGGING_CONFIG\”” $LOGGING_MANAGER $JAVA_OPTS $CATALINA_OPTS \
-Djava.endorsed.dirs=”\”$JAVA_ENDORSED_DIRS\”” -classpath “\”$CLASSPATH\”” \
-Djava.security.manager \
-Djava.security.policy==”\”$CATALINA_BASE/conf/catalina.policy\”” \
-Dcatalina.base=”\”$CATALINA_BASE\”” \
-Dcatalina.home=”\”$CATALINA_HOME\”” \
-Djava.io.tmpdir=”\”$CATALINA_TMPDIR\”” \
org.apache.catalina.startup.Bootstrap "$@" start 2>&1 | /usr/sbin/cronolog /data/deploy/logs_manage/tomcat_sys/socket/catalina.%Y-%m-%d.out >> /dev/null &
else
eval “\”$_RUNJAVA\”” “\”$LOGGING_CONFIG\”” $LOGGING_MANAGER $JAVA_OPTS $CATALINA_OPTS \
-Djava.endorsed.dirs=”\”$JAVA_ENDORSED_DIRS\”” -classpath “\”$CLASSPATH\”” \
-Dcatalina.base=”\”$CATALINA_BASE\”” \
-Dcatalina.home=”\”$CATALINA_HOME\”” \
-Djava.io.tmpdir=”\”$CATALINA_TMPDIR\”” \
org.apache.catalina.startup.Bootstrap “$@” start 2>&1 | /usr/sbin/cronolog /data/deploy/logs_manage/tomcat_sys/socket/catalina.%Y-%m-%d.out >> /dev/null &
fi
tomcat日志分割定期删除catalina.out

每天晚上11点50切割日志文件,同时删除超过30天的日志

创建脚本/shell/log.sh
log_path=/opt/tomcat/logs
d=`date +%Y-%m-%d`
d90=`date -d'30 day ago' +%Y-%m-%d`
cd ${log_path} && cp catalina.out $log_path/cron/catalina.out.$d.log
echo > catalina.out
rm -rf $log_path/cron/catalina.out.${d90}.log
添加权限
chmod 777 /shell/log.sh
编辑crontab
crontab -e
50 23 * * * sh /shell/log.sh
另一种方法
crontab -e
* 5 * * * find /opt/tomcat/logs/* -name "*.20*" -ctime +7 -exec rm -rf {} \;
重启Tomcat服务
systemctl start tomcat.service
配置访问同一个项目下不同的文件夹

先将原本的<host>配置注释掉,然后新增如下内容:

<Host name="域名" appBase="webapps" unpackWARs="true" autoDeploy="true" xmlValidation="false" xmlNamespaceAware="false">
<Context path="" docBase="/opt/tomcat/webapps/ROOT" debug="0" reloadable="true" />
</Host>
<Host name="域名" appBase="webapps" unpackWARs="true" autoDeploy="true" xmlValidation="false" xmlNamespaceAware="false">
<Context path="" docBase="/opt/tomcat/webapps/文件夹" debug="0" reloadable="true" />
</Host>
SSL环境搭建

在nginx的conf中,进行做对应的修改

server {
         listen     80;
        server_name  lottery001.itrxm.com;
        rewrite ^(.*)$  https://$host$1 permanent; 
        }

  server {
        listen       443;
        server_name  x;
        ssl                  on;
        ssl_certificate      /etc/nginx/vhost/ssl/certificate.crt;
        ssl_certificate_key   /etc/nginx/vhost/ssl/private.key;
        ssl_session_timeout  5m;
        ssl_protocols TLSv1;
        ssl_ciphers  HIGH:!aNULL:!MD5;
        ssl_prefer_server_ciphers   on;

         location / {
              client_max_body_size    16m;
              client_body_buffer_size 128k;
              proxy_pass                          http://10.17.162.113:8080;
              proxy_set_header        Host $host;
              proxy_set_header        X-Real-IP $remote_addr;
              proxy_set_header        X-Forwarded-For $proxy_add_x_forwarded_for;
          proxy_set_header           X-Forwarded-Proto https;
              proxy_next_upstream   off;

              proxy_connect_timeout   30;
              proxy_read_timeout      300;
              proxy_send_timeout      300;
        }
    }

在tomcat 中的server.xml中修改:

<!--
    <Connector port="8443" protocol="org.apache.coyote.http11.Http11Protocol"
               maxThreads="150" SSLEnabled="true" scheme="https" secure="true"
               clientAuth="false" sslProtocol="TLS" />
-->
修改为:
    <Connector port="8443"
    protocol="org.apache.coyote.http11.Http11Protocol"
    maxThreads="150" 
    SSLEnabled="true"
    scheme="https"
    secure="true"
    keystoreFile="/opt/tomcat/huizhong/conf/cert/201802031124.pfx"    //绝对路径,否则容易出错
    keystoreType="PKCS12"
    keystorePass="201802031124"
    clientAuth="false"
    SSLProtocol="TLSv1+TLSv1.1+TLSv1.2"
    ciphers="TLS_RSA_WITH_AES_128_CBC_SHA,TLS_RSA_WITH_AES_256_CBC_SHA,TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA,TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256,TLS_RSA_WITH_AES_128_CBC_SHA256,TLS_RSA_WITH_AES_256_CBC_SHA256"/>
并新加节点:
<Valve className="org.apache.catalina.valves.RemoteIpValve"
            remoteIpHeader="x-forwarded-for"
            remoteIpProxiesHeader="x-forwarded-by"
             protocolHeader="x-forwarded-proto"/>
重启tomcat服务
systemctl restart tomcat.service

注:没有若只有key及crt文件的证书,可以进入 https://www.myssl.cn/tools/merge-pfx-cert.html 中进行生成一个pfx文件的证书,并设置一个密码。

通过VisualVM对Tomcat性能监控

JMX下载地址:http://mirrors.tuna.tsinghua.edu.cn/apache/tomcat/tomcat-7/v7.0.81/bin/extras/catalina-jmx-remote.jar catalina-jmx-remote.jar包下载完成后放到Tomcat的lib目录下

vim catalina.sh

在注释下面添加如下内容

CATALINA_OPTS="$CATALINA_OPTS -Dcom.sun.management.jmxremote
  -Dcom.sun.management.jmxremote.port=7090
  -Dcom.sun.management.jmxremote.ssl=false    
  -Djava.rmi.server.hostname=被监控的服务器IP地址
  -Dcom.sun.management.jmxremote.authenticate=true
  -Dcom.sun.management.jmxremote.password.file=/var/tomcat/tomcat7/conf/jmxremote.password 
  -Dcom.sun.management.jmxremote.access.file=/var/tomcat/tomcat7/conf/jmxremote.access"
cd /var/tomcat/tomcat7/conf
vim jmxremote.access
monitorRole readonly
controlRole readwrite
vim jmxremote.password         //要与运行tomcat的权限一致
monitorRole 25DWdl2&D^W
controlRole 25DWdl2&D^W
赋权及重启Tomcat
chmod 0400 jmxremote.password      //密码文件应该是只读的,只能由Tomcat运行用户
systemctl restart tomcat.service

至此,一个完整的环境就配置完成了。