被判死刑的苏格拉底,拒绝逃亡选择了遵守他所认同的法律并走向死亡。如果连自己所认同的法律都不去遵守,那法律就会失去他的权威和功能。如果法律失去了权威和功能,正义也就不复存在。如果正义不复存在,那社会就再也没有秩序和文明可言,主体道德、文化、经济、艺术、科学都将被连根拔起。这位人类文明的逻辑学之父,在用生命诠释法律的真正含义。这是一首能为后世带来无限财富的挽歌。这是一个某些理念值得用生命去守护的铁证。
[工具] Shell 半自动化部署 LNMP 平台 + SSL (CentOS Linux 7 版)
介绍
基本信息
作者:朱明宇
脚本名称:半自动化部署 LNMP 平台 + SSL
作用:半自动化安装 LNMP,即 Nginx、Mariadb、PHP、php-fpm,实现 HTTPS
使用方法
为了安全起见,设置系统用户和数据库用户和数据库权限的工作请按照脚本最后的步骤进行手动设置
注意
1. 执行本脚本之前请确保 Nginx、PHP、网站程序文件、SQL、SSL 的公钥、SSL 的私钥、shell、本脚本 8 个文件,如果是新建网站的话,不用准备 SQL 文件
2. Nginx 文件:请将 Nginx 源码安装包放在 /root/
3. PHP 文件:请将 PHP 源码安装包放在 /root/
4. 网站程序文件:请将网站程序文件的名字中包含“eternalcenter-backup-”字段,并且是 tar 包,并放在 /root/
5. SQL 文件:如果是恢复网站的话,请将备份的数据文件 *.sql 放在 /root/,注意这是一个 MySQL 备份文件
6. SSL 的公钥文件和 SSL 私钥文件:请将网站安全证书的公钥和私钥分别命名为:eternalcenter.com.crt 和 eternalcenter.com.key,并放在 /root/
7. shell 文件:请将监控脚本命名为 port_monitoring.sh 并放在 /root/
8. 除此之外 /root/ 目录下请不要放任何文件
9. 服务器的系统需要是 CentOS 7 版本
10. 服务器系统要配置好可用的软件源(最好是软件数量最多的官方版本)
11. 服务器要能够连接外网
补充
1. Nginx 下载网址:https://nginx.org/
2. PHP 下载网址:https://www.php.net/downloads.php
3. WordPress 是一款开源的 php 网站程序,建议使用,下载网址:https://cn.wordpress.org/download/
4. 网站安全证书的公钥和私钥可以在这里申请:https://freessl.cn/
其他
运行此脚本所需要的文件如下,请尽量使用图中的命名规则给他们命名,并将他们全部放在 /root/ 目录下,请保证 /root/ 下有且仅有这些文件,并以 root 的身份运行,否则脚本会执行失败。其中:
eternalcenter-backup-2019-08-12-13.sql 指的是 mariadb 的数据库备份文件,如果是新建网站的话可以不要。
eternalcenter-backup-2019-08-13.tar 指的是网页程序的压缩包,必须是 tar 格式,如果是新建的网站的话,这个也可以换成,新网站的网页程序。
eternalcenter.com.crt 指的是网站的公钥,需要单独申请,方法可以在搜索引擎上搜索。
eternalcenter.com.key 指的是网站的私钥,需要单独申请,方法可以在搜索引擎上搜索。
install.sh 就是指的本脚本。
nginx-1.16.0.tar.gz 指的是 nginx 的源码安装包,这里的 -1.16.0.tar.gz 可以任意命名,只用保证这个文件名字里包含 nginx 就行了,这个文件可以在 nginx 官网上下载。
php-7.2.2-.tar.xz 指的是 php 的源码安装包,同样 这里的 -7.2.2-tar.xz 可以任意命名,只用保证这个文件名字包含 php 就行了,这个文件可以在 php 官网上下载。
port_monitoring.sh 只是一个监控端口的脚本,可以不要,使用者可以根据自我需求写一个,站主是通过这个脚本定期检查并自动启动需要启动但是没有启动的端口,关闭不需要但是启动了的端口。
脚本
#!/bin/bash
# variable initialization
cd
nginxp=`ls | grep "nginx"`
phpp=`ls | grep "php"`
webp=`ls | egrep "eternalcenter-backup-.*tar$"`
nginxr=${nginxp%%.tar*}
phpr=${phpp%%.tar*}
# upgrade system
yum makecache
yum -y update
yum clean all
yum repolist
# remove useless software
yum -y remove php*
yum -y remove mariadb*
systemctl stop postfix
yum -y remove postfix
systemctl stop chronyd
yum -y remove chrony
yum -y update
# install dependency package
yum -y install gcc pcre-devel openssl-devel libxml2-devel curl-devel libpng libpng-devel
# install nginx
cd
tar -xvf $nginxp -C /root/
cd $nginxr
useradd -s /sbin/nologin nginx
./configure --user=nginx --group=nginx --with-http_ssl_module
make && make install
echo 'worker_processes 1;
events {
worker_connections 65536;
}
http {
limit_req_zone $binary_remote_addr zone=one:10m rate=1r/s;
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
server {
listen 80;
limit_req zone=one burst=5;
server_name www.eternalcenter.com eternalcenter.com;
rewrite ^/(.*)$ https://eternalcenter.com/$1 permanent;
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
server {
listen 443 ssl;
server_name www.eternalcenter.com eternalcenter.com;
if ($request_method !~ ^(GET|POST)$){
return 444;
}
ssl_certificate /usr/local/nginx/ssl/eternalcenter.com.crt;
ssl_certificate_key /usr/local/nginx/ssl/eternalcenter.com.key;
ssl_session_cache shared:SSL:1m;
ssl_session_timeout 5m;
ssl_ciphers HIGH:!aNULL:!MD5;
ssl_prefer_server_ciphers on;
location ~ \.php$ {
fastcgi_pass 127.0.0.1:9000;
include fastcgi.conf;
}
location / {
root html;
index index.php index.html index.htm;
}
location ~ ^/\.user\.ini {
deny all;
}
location ~*\.(jpd|jpeg|gif|png|css|js|ico|xml)$ {
expires 30d;
}
error_page 404 /404.html;
}
gzip on;
gzip_min_length 1000;
gzip_comp_level 4;
gzip_types text/plain test/css application/json application/x-javascript text/xml application/xml
application/xml+rss text/javascripts;
client_header_buffer_size 1k;
large_client_header_buffers 4 4k;
open_file_cache max=2000 inactive=20s;
open_file_cache_valid 60s;
open_file_cache_min_uses 5;
open_file_cache_errors off;
}' > /usr/local/nginx/conf/nginx.conf
cd
mkdir /usr/local/nginx/ssl
mv eternalcenter.com.crt /usr/local/nginx/ssl
mv eternalcenter.com.key /usr/local/nginx/ssl
# install php
cd
tar -xvf $phpp -C /root/
cd $phpr
useradd -s /sbin/nologin php-fpm
./configure --with-config-file-path=/usr/local/php/etc --enable-fpm --with-fpm-user=php-fpm --with-fpm-group=php-fpm --prefix=/usr/local/php --with-mysqli=mysqlnd --with-pdo-mysql=mysqlnd --enable-mysqlnd --enable-mbstring --with-curl --with-gd --with-zlib
make && make install
cp /usr/local/php/etc/php-fpm.conf.default /usr/local/php/etc/php-fpm.conf
cp /usr/local/php/etc/php-fpm.d/www.conf.default /usr/local/php/etc/php-fpm.d/www.conf
chown -R php-fpm:php-fpm /usr/local/nginx/html/
# install mariadb
yum -y install mariadb mariadb-server mariadb-devel
sed -i "/^datadir/a log_bin=ec" /etc/my.cnf
sed -i "/^datadir/a binlog_format="mixed"" /etc/my.cnf
sed -i "/^datadir/a server_id=51" /etc/my.cnf
systemctl enable mariadb
# deploy web software
cd
rm -rf /usr/local/nginx/html/*
mkdir websoftcache
tar -xvf $webp -C websoftcache
cd websoftcache
websoftcachen=`ls | wc -l`
if [ $websoftcachen -ne 1 ];then
cd
tar -xvf $webp -C /usr/local/nginx/html/
else
webdir=`ls`
cd $webdir
mv * /usr/local/nginx/html/
fi
chown -R php-fpm:php-fpm /usr/local/nginx/html
# recover database
systemctl start mariadb
cd
mysql -uroot < *.sql &> /dev/null
systemctl stop mariadb
# set the concurrency number accepted by the system to 65535
echo '* soft nofile 65535
* hard nofile 65535' >> /etc/security/limits.conf
# open firewall port
firewall-cmd --add-port=80/tcp --permanent
firewall-cmd --add-port=443/tcp --permanent
systemctl restart firewalld
# move the monitoring scripts that need to be used regularly to the specified location(/root/shell/port_monitoring.sh you need to write it yourself)
mkdir /shell
mv port_monitoring.sh /shell
chmod u+x /shell/*
# set up regular automatic running monitoring script(/root/shell/port_monitoring.sh you need to write it yourself)
echo '*/1 * * * * root /shell/port_monitoring.sh' >> /etc/crontab
# add another user(for data backup)
useradd zhumingyu
mkdir /cache
chown -R zhumingyu:zhumingyu /cache
# delete redundant files
cd
rm -rf *
# restart the server
reboot
[步骤] Linux 开机自启 (通过 chkconfig 实现)
案例一:添加一个受 chkconfig 管理的服务(脚本)
1.1 编写一个脚本
# vim /etc/init.d/start.sh
创建以下内容:
#!/bin/bash
systemctl start httpd
# chkconfig: 345 85 15
# description: This is a script of starting httpd
(补充:chkconfig:后面的 3 个含义为 httpd 的级别为 3、4 和 5,启动序号为 85,关闭序号为 15)
1.2 给脚本添加执行权限
# chmod +x /etc/init.d/start.sh
1.3 将脚本添加到 chkconfig 中
# chkconfig --add start.sh
1.4 显示刚刚添加到 chkconfig 的应用
# chkconfig --list
案例二:通过 chkconfig 管理一个服务或脚本
2.1 设定 start.sh 在 3 和 5 等级为 on
# chkconfig --level 35 start.sh on
2.2 设定 start.sh 在各等级为 on,“各等级”包括 2、3、4、5 等级
# chkconfig start.sh on
2.3 设定 start.sh 在各等级为 off,“各等级”包括 2、3、4、5 等级
# chkconfig start.sh off
[内容] Linux 运行级别的设置 (切换命令行模式和图形界面模式)
内容一:显示运行级别
1.1 显示正在使用的运行级别
# who -r
1.2 显示系统重启后会进入的运行级别
# systemctl get-default
内容二:设置运行级别的命令格式
2.1 命令行设置运行级别的命令格式
# systemctl <command> <unit.target>
2.2 设置运行级别命令的参数
2.2.1 command 参数选项
1) get-default 显示默认运行的 target(重启后默认进入的运行级别)
2) set-default 设置指定的 target 为默认的运行级别(重启后默认进入的运行级别)
3 isolate 切换到指定的运行级别(立刻切换到指定的运行级别)
2.2.2 unit.target 参数选项
1) multi-user.target 普通的命令行模式
2) graphical.target 图形界面模式
内容四:快捷键设置运行级别的方法
1) 同时按下 “ctrl” 键和 “f2” 键,将当前屏幕切换到图形界面
2) 同时按下 “ctrl” 键和 “f3” 键,将当前屏幕切换到第一个命令行界面
3) 同时按下 “ctrl” 键和 “f4” 键,将当前屏幕切换到第二个命令行界面
4) 同时按下 “ctrl” 键和 “f5” 键,将当前屏幕切换到第三个命令行界面
5) 同时按下 “ctrl” 键和 “f6” 键,将当前屏幕切换到第四个命令行界面
内容五:设置运行级别的案例
5.1 显示默认运行的 target(系统重启后会默认进入的运行级别)
# systemctl get-default
5.2 设置默认运行级别为普通的命令行模式
# systemctl set-default multi-user.target
5.3 在不重启情况下,立刻切换到普通的命令行模式
# systemctl isolate multi-user.target
5.4 在不重启情况下,立刻切换到普通的命令行模式
# init 3
5.5 在不重启的情况下,立刻切换到图形界面模式
# systemctl isolate graphical.target
5.6 在不重启的情况下,立刻切换到图形界面模式
# init 5
[步骤] Linux 防火墙的设置 (通过设置 iptables 的配置文件实现)
步骤一:修改 iptables 的配置文件
# vim /etc/sysconfig/iptables
添加以下内容:
......
-A INPUT -s 154.223.167.236 -j ACCEPT
......
(补充:需要添加的规则可以这样一行行地添加进去)
(注意:建议配置 iptables 之前先关闭 firewalld 防火墙)
步骤二:重启 iptables
# service iptables restart
步骤三:显示生效的 iptables 策略
# service iptables -nL