CentOS7手工装机教程

C 2018-7-22 7661

【说明】

屌丝论坛(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

#查询计划任务是否成功添加


最新回复 (0)