【说明】
屌丝论坛(assbbs.com)独家教程,不需要宝塔面板也可以搭建网站环境。
参照此可以安装Nginx+PHP+MySQL,非CentOS7千万不要乱试!
必须使用全新系统安装,如果有重要文件务必先备份。
新手啥都不懂就别试了,安心用宝塔面板吧。
【更新】 // 需要底下的部分配置完后再定期执行此命令
yum --enablerepo=elrepo-kernel upgrade
#更新组件及内核
grub2-mkconfig -o /boot/grub2/grub.cfg && reboot
#切换新内核并重启主机生效
uname -r && package-cleanup --oldkernels --count=1 && yum autoremove && yum clean all && rm -rf /var/cache/yum && rm -rf /root/.pki && rm -rf /root/.bash_history && rm -rf /root/dead.letter && find /tmp /var/log /var/crash -type f -exec rm -fv {} \;
#重启后清理旧内核及各种系统垃圾
【初始】 // 在装机最开始就要安装的初始环境
mkdir /www
#建立网站文件夹
ulimit -c 0
#关闭内核错误缓存
/usr/sbin/sestatus
#看看没啥卵用的SELinux状态
setenforce 0
#如果不是disabled状态则先把它临时停用
sed -i 's/SELINUX=.*/SELINUX=disabled/g' /etc/selinux/config
#替换配置彻底禁用SELinux
yum remove man-*; rm -rf /var/cache/man; rm -rf /usr/share/man;
#删除没啥卵用还占地的帮助文件
yum install epel-release yum-utils rpm openssl rsync xinetd
#安装基础组件和守护进程
yum install cronie && systemctl enable crond && systemctl start crond
#安装计划任务并设置自启动
yum install firewalld && systemctl enable firewalld && systemctl start firewalld
#安装防火墙并设置自启动
openssl req -nodes -new -x509 -newkey ec:<(openssl ecparam -name prime256v1) -keyout /www/ssl.key -out /www/ssl.crt
#建立一个空证书以备后用
【内核】 // 让系统可以安装最新内核
https://www.elrepo.org
#查看ElRepo找到底下密钥及CentOS-7源导入命令,类似于:
rpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org
rpm -Uvh https://www.elrepo.org/elrepo-release-7.0-3.el7.elrepo.noarch.rpm
#不一定就是上面这两行,具体根据网站上的而定
yum --enablerepo=elrepo-kernel install kernel-ml
#安装最新版内核
sed -i 's/GRUB_DEFAULT=saved/GRUB_DEFAULT=0/g' /etc/default/grub
#将默认启动顺序设置为最新内核优先
grub2-mkconfig -o /boot/grub2/grub.cfg
#使用最新版内核启动系统
reboot
#重启系统以确保最新内核生效(如果这步以后系统启动不了,那么在开机时选择使用旧内核启动)
【防御】 // 配置防火墙
firewall-cmd --list-port
#查看当前所有放行的端口
firewall-cmd --permanent --zone=public --add-port=2222/tcp
#放行SSH端口,请把2222改成你想用的SSH端口
firewall-cmd --permanent --zone=public --add-port=80/tcp
#放行80端口,http用
firewall-cmd --permanent --zone=public --add-port=443/tcp
#放行443端口,https用
systemctl restart firewalld
#重启防火墙使规则生效
wget https://raw.githubusercontent.com/FunctionClub/Fail2ban/master/fail2ban.sh && chmod +x fail2ban.sh && ./fail2ban.sh
#安装fail2ban,按照提示修改成你想用的SSH端口(修改后会卡死,需要用新端口重启SSH会话)
wget --no-check-certificate https://github.com/teddysun/across/raw/master/bbr.sh && chmod +x bbr.sh && ./bbr.sh && lsmod | grep bbr
#安装BBR加速
firewall-cmd --permanent --zone=public --remove-port=22/tcp
#确保上面都没问题后移除SSH默认的22端口
【/etc/NetworkManager/NetworkManager.conf】 // 修改网络配置文件下列项,其余不要动!
[main]
dns=none
#将main段中的dns=改为none,禁止DNS自动修改
【/etc/resolv.conf】 // 将DNS修改为Cloudflare
nameserver 1.1.1.1
nameserver 1.0.0.1
systemctl restart NetworkManager
#修改后重启网络管理器
【Nginx】 // 安装Nginx
http://nginx.org/packages/centos/7/noarch/RPMS
#找到CentOS7适用的最新Repo
rpm -ivh http://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7.ngx.noarch.rpm
#安装Repo,不一定就是上面这两行,具体根据网站上的而定
yum install nginx
#安装最新版Nginx
systemctl enable nginx && systemctl start nginx
#开机自启动Nginx
【/etc/nginx/nginx.conf】 // 修改Nginx配置文件下列项,其余不要动
worker_processes 8;
#将线城一行改为你的CPU核心数,比如我CPU是8核那就改成8
error_log /var/log/nginx/error.log emerg;
#报错级别改为紧急,防止大量错误日志产生
access_log off;
#关闭访问日志,防止大量访问日志产生
gzip on;
#开启页面压缩
ssl_session_tickets off;
#关闭SSL缓存防止证书错误
client_max_body_size 5M;
#设置最大可上传5MB文件,这项在http{}段中,如果没有手动添加
【/etc/nginx/conf.d/_.conf】 // 屏蔽默认IP访问,将整个文件替换成下面这几行
server {
listen 80 default_server;
server_name _;
return 444;
listen 443 ssl;
ssl_certificate /www/ssl.crt;
ssl_certificate_key /www/ssl.key;
}
【/www/abc.com】 // 建立网站目录
建立上面这个目录并授予777权限,这就是你abc.com的网站根目录了
【/etc/nginx/conf.d/abc.com.conf】 // 新增一个abc.com网站配置,完成后SSH端重启Nginx:systemctl restart nginx
server {
listen 80;
server_name abc.com www.abc.com;
index index.html index.htm index.php;
root /www/abc.com
if ($scheme != https) {
rewrite ^/(.*) https://$server_name/$1 permanent;
} #强制使用SSL访问,SSL证书请按照后面的教程安装
location ~* \.php$ {
include fastcgi_params;
fastcgi_pass 127.0.0.1:9000;
fastcgi_param SCRIPT_FILENAME $request_filename;
fastcgi_param PHP_VALUE "open_basedir=$document_root:/tmp/:/proc/";
location / {
try_files $uri $uri/ /index.php?$args;
} #默认伪静态自动尝试index.php,具体根据程序修改
}
【SSL】 // 给域名安装SSL证书
wget https://dl.eff.org/certbot-auto --no-check-certificate && chmod a+x certbot-auto
#下载certbot安装器
./certbot-auto --nginx --no-redirect
#安装certbot,按提示输入邮箱,再输入要安装SSL的域名编号生成证书
crontab -e
#使用Vim编辑器打开计划任务,按大写G和A进入编辑模式,结尾写入此行:
66 6 * * * /root/certbot-auto renew --post-hook "systemctl reload nginx"
#设置每天6点66自动检测SSL证书状态并续期
#按Ctrl+C退出编辑模式
:wq
#输入上面的冒号、w、q,按回车保存并退出计划任务设置
service crond status && crontab -l
#查询计划任务是否成功添加
【FTP】 // 配置FTP(可选)
yum install pure-ftpd
#安装Pure-FTP
groupadd ftpgroup
#创建FTP权限GID
useradd ftpuser -g ftpgroup -d /home/ftp -s /sbin/nologin
#创建FTP权限UID
sed -i 's/# PureDB/PureDB/g' /etc/pure-ftpd/pure-ftpd.conf
#开启PureDB(自带数据库存储FTP用户信息)
sed -i 's/# PassivePortRange/PassivePortRange/g' /etc/pure-ftpd/pure-ftpd.conf
#开启被动模式,避免被防火墙过滤等问题
systemctl enable pure-ftpd && systemctl start pure-ftpd
#开机自启动PureFTP
firewall-cmd --permanent --zone=public --add-port=21/tcp
#放行FTP通讯端口21
firewall-cmd --permanent --zone=public --add-port=30000-50000/tcp
#放行FTP被动端口30000-50000
systemctl restart firewalld
#重启防火墙使规则生效
pure-pw useradd abc -u ftpuser -g ftpgroup -d /www/abc
#增加用户abc并绑定目录/www/abc,会提示你设置密码
pure-pw userdel abc
#删除用户abc
pure-pw passwd abc
#修改用户abc的密码
pure-pw mkdb && systemctl restart pure-ftpd
#更新PureDB保存用户信息(上面增加/删除/修改后都要执行本条指令)
chown -R ftpgroup:ftpuser /www/abc
#把网站目录和全部文件权限交给FTP用户组
【PHP】 // 安装PHP
rpm -Uvh http://rpms.remirepo.net/enterprise/remi-release-7.rpm
#导入Remi软件源
yum-config-manager --enable remi-php73
#启用PHP最新版7.3(如果有比它新的则改成最新的版本)
yum-config-manager --disable remi-php72
#禁用PHP旧版本7.2(如果有更旧的也一块禁用)
yum install php-fpm php-opcache php-xml php-mbstring
#安装PHP核心组件
yum install php-gd
#按需安装PHP图片处理GD库
yum install php-sqlite3
#按需安装PHP数据库SQLITE3
yum install php-mysql
#按需安装PHP数据库MySQL接口(适用于MySQL和MariaDB)
systemctl enable php-fpm && systemctl start php-fpm
#开机自启动PHP
systemctl restart nginx
#重启Nginx以使PHP挂载
【/etc/php.ini】 // 修改PHP配置,然后在SSH端重启PHP:systemctl restart php-fpm
memory_limit = 512M
#设置单PHP程序最大内存占用512MB
post_max_size = 6M
#设置POST提交最大6MB(就是单次提交的表单和上传的文件总大小,必须大于最大上传文件大小)
upload_max_filesize = 100M
#设置最大上传文件5MB
【SQL】 // 安装MySQL,这里使用更加好用的MariaDB代替
wget https://downloads.mariadb.com/MariaDB/mariadb_repo_setup && chmod +x mariadb_repo_setup && ./mariadb_repo_setup
#下载官方源安装脚本
yum install MariaDB-server MariaDB-client
#安装MariaDB服务和挂载
systemctl enable mariadb && systemctl start mariadb
#开机自启动MariaDB
mysql_secure_installation
#运行配置向导,首次会让你直接按回车(空密码)进入设置,然后按提示设置(全选是),最后更改root密码
【/etc/my.cnf】 // 如果内存小于2GB,请关掉查询缓存,之然SSH重启MariaDB:systemctl restart mariadb
[mysqld]
performance_schema = off
【SQL Command】 // 增加SQL用户并授权
mysql -u root -p
#在SSH运行上面的命令,输入刚才设置的ROOT密码,进入SQL控制台
CREATE USER 'abc'@'localhost' IDENTIFIED BY '123';
#设置新的SQL用户“abc”,密码是“123”
CREATE DATABASE `abc` CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
#创建一个支持emoji,准确度更高(unicode)的MySQL8标准数据库“abc”
GRANT ALL ON abc.* TO 'abc'@'localhost';
#给用户赋予数据库“abc”的所有操作权
【SQL Dump】 // 设置定期备份Mysql到本地
mkdir /www/sqlbackup
#建立备份文件夹
crontab -e
#使用Vim编辑器打开计划任务,按大写G和A进入编辑模式,结尾写入此行:
0 1 * * * /usr/bin/mysqldump --user=abc --password=123 mybase | gzip > /www/sqlbackup/abc_$(date +\%Y\%m\%d_\%H\%M\%S).sql.gz
#每天1点0分执行mysql导出,用户“abc”,密码“123”,数据库“abc”,压缩存入/www/sqlbackup,日期格式必须有转义符\
#按Ctrl+C退出编辑模式
:wq
#输入上面的冒号、w、q,按回车保存并退出计划任务设置
service crond status && crontab -l
#查询计划任务是否成功添加
【RSYNC】 // 在另外一台VPS执行SSH,备份网站端VPS的内容,假设网站端IP为1.2.3.4,SSH端口2222
ssh-keygen
#生成一个SSH密钥,保存时填写路径为 /root/.ssh/abc
ssh-copy-id -i ~/.ssh/abc.pub -p 2222 root@1.2.3.4
#将abc.pub公钥复制进网站端VPS,使用root用户和2222端口登录1.2.3.4
crontab -e
#使用Vim编辑器打开计划任务,按大写G和A进入编辑模式,结尾写入此行:
22 2 * * * /usr/bin/rsync -avz -e 'ssh -i ~/.ssh/abc -p 2222' root@1.2.3.4:/www/ /www
#设置每天2点22分使用abc这个密钥登录你的VPS并备份/www目录下全部内容到备份端/www目录下
#按Ctrl+C退出编辑模式
:wq
#输入上面的冒号、w、q,按回车保存并退出计划任务设置
service crond status && crontab -l
#查询计划任务是否成功添加