一、安装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

    ##### 配置访问同一个项目下不同的文件夹
    先将原本的&lt;host&gt;配置注释掉,然后新增如下内容:

    <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



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