目录
(二)Point a Domain Name to a Server域名指向
(三)CentOS8系统-进程监控和bandwidth带宽监控
(五)CentOS 8.0 LEMP (with Nginx, MySQL , and PHP-FPM)安装
之前我的一个CentOS 7 Apache的站点被攻击,导致流量过载损失了一笔钱,由于也是边学习边部署的,有不少安全隐患,为了避免常见安全隐患再次发生,后来找出大概的原因后决定重新部署一个基于CentOS 8 Nginx的服务器。这也是充分利用Google和自己探索的一些从零部署的技巧和方法。
注意:请按照由上至下的顺序操作,不保证每个人的Linux服务器都没有差错,如果保证服务器系统的纯净,大体上是没有问题的,如果出现问题可以自己根据问题日志谷歌一下寻找原因。我自己也是这么一步一步过来的。我的其中一个网站购买的是 Vultr 的(以前也用过Bluehost、Linode公司的),用了很多年了,作为国外服务器的品牌来说是很不错的一个选择。性价比不错,对于非土豪的我来说是绝佳选择。
购买完CentOS 8.0版本的服务器之后,就可以正式开始从零部署咯,因为我的主系统是使用WordPress,因此我的配置也是需要支持PHP的,当然Node也是需要的(同理你可以配置支持其它后端语言),我把一些用到的配置和命令都整理成文章,也方便自己未来查阅巩固。同时对于一个从来没有部署过或者使用过其它配置的Linux服务器的你,相信也能够提供不少帮助。目前自己的那个网站运营三个月以上暂没有受到相同的攻击和流量注入,对于一个新人来说我还是比较满意的,不求人,靠自己稳定运营下去:)
服务器需要支持的基础功能关系如下:
整体步骤分为下面的八个:
(一)购买VPS,设置Server Hostname
(二)Point a Domain Name to a Server域名指向
(三)CentOS8系统-进程监控和bandwidth带宽监控
(四)安装解压软件
(五)CentOS 8.0 LEMP (with Nginx, MySQL , and PHP-FPM)安装
(六)增加Nginx维护页面,临时维护使用
(七)完成 LEMP基础配置后,升级性能和安全性,其它配置
(八)Node环境配置(请完成此文档上面所有步骤后再继续)
开始之前,我们先熟悉一些整个过程常用的一些命令:
#在用vi创建文件后,点击 i 即可进入编辑文本模式的insert状态,再点击ESC即可退出编辑,然后输入 :wq 即可保存文本并退出 #后面不要有空格,在「命令行模式(command mode)」下,按一下 : 冒号键进入「Last line mode」) #先按 / 键,再输入您想寻找的字符,如果第一次找的关键字不是您想要的,可以一直按 n 会往后寻找到您要的关键字为止。 #先按 ? 键,再输入您想寻找的字符,如果第一次找的关键字不是您想要的,可以一直按 n 会往前寻找到您要的关键字为止。 #查找后再 i 修改即可 #向下查找关键字,按 n 可继续查找 vi /path/filename.ext #修改/新增文件 : w filename #输入 「w filename」将文章以指定的文件名filename保存 : wq #输入「wq」,存盘并退出vi : q! #输入q!, 不存盘强制退出vi /word #这个是查找文件中“word”这个单词,是从文件上面到下面查找 ?word #这个是查找文件中“word”这个单词,是从文件下上面到面查找 dd #删除游标所在的一整行(非编辑模式) #退出当前正在执行的命令 ctrl z #(字母是L)查看某文件夹内文件或者文件夹的权限 ll /var/lib/nginx/ #(字母是L)查看当前目录的文件夹和文件 ls -d * #根据文件名查找文件路径 find / -xdev -name filename.suffix #查看某属性 cat /etc/vsftpd/vsftpd.conf | grep write_enable #查看centOS版本 (目前版本:CentOS Linux release 7.1.1503 (Core) ) cat /etc/redhat-release #远程连接终端 ssh root@12.34.56.789 ssh -vv root@12.34.56.789 (可查看连接日志错误) 密码:****** #如果无法登陆远程终端,尝试 ssh-keygen -R 12.34.56.789 #然后再登陆 #新建文件夹 mkdir /??? #文件夹改名 mv ??? ??? #列出目录下所有文件 ls #查找安装的程序的路径(比如查看Node) which node #重装系统登录失败要清楚公钥使用命令: sudo rm /Users/mac/.ssh/known_hosts #或者 sudo rm ~/.ssh/known_hosts #若登陆成功后出现” warning: setlocale: LC_CTYPE: cannot change locale (UTF-8): No such file or directory”,则添加一个文件即可: #如果访问被拒绝,可能是IP原因,日本东京无法登陆,轻换VPN。 sudo vi /etc/environment #添加以下代码: LANG=en_US.utf-8 LC_ALL=en_US.utf-8 #出现『Connection closed by 12.34.56.789』错误,尝试修正权限错误: sudo chmod 700 /etc/ssh_host_dsa_key #查看网络进程(比如httpd, mysqld, sshd等) netstat -plntu #查看所有端口的进程 ss -tpln #访问URL获取请求信息 curl -I https://yoursite.com #检查httpd进程状态 systemctl list-unit-files # 输出激活的单元列表 systemctl list-units # 列出Nginx日志文件 ls -laZ /var/log/nginx/ #打开错误或访问日志 cat /var/log/nginx/access.log cat /var/log/nginx/error.log #查看最新100条错误日志 sudo tail -100 /var/log/nginx/error.log #错误日志会占用很多性能,要定期清理(配置 logrotate 来维护日志文件。 #删除日志 find /var/log/nginx/error.log -type f -delete find /var/log/nginx/error.log-* -type f -delete #查看日志及其大小 ls -la /var/log/nginx/ #下载解压 wget https://wordpress.org/latest.tar.gz tar -xzvf latest.tar.gz #删除文件 rm xxxxxx.zip #删除文件夹和文件 (强制删除) rm -rf xxxxx #改名 mv file1.txt file2.txt #查找5天内修改过的文件 find /usr/share/nginx/html/wordpress/ -type f -mtime -5 #5days #查找包含某字符串的文件 grep -r "jqueryeasyui" /usr/share/nginx/html/wordpress/ #将新解压的位于/usr/share/nginx/html/wordpress/目录中的wordpress 文件夹的文件移动 cp -r /usr/share/nginx/html/wordpress/wordpress/* /usr/share/nginx/html/wordpress/
熟悉一下此次从零开始部署服务器过程中我常用的这些命令,好了,接下去我们正式开始。
(一)购买VPS,设置Server Hostname
设置为你的域名比如 yoursite.com
类似:root@mysitename:~$ 提示符,@后面的就是hostname
在本机的/etc/hosts文件中添加经常访问的机器的ip地址和主机名的映射关系,下次访问时,可以ssh root@mysitename来登录,不用记住IP地址
(二)Point a Domain Name to a Server域名指向
1、域名注册商绑定IP,并设置DNS指向到VPS注册商,
比如
点击自助解析DNS(这里我修改为Vultr 的DNS信息)
2.注册商配置NDS
(三)CentOS8系统-进程监控和bandwidth带宽监控
添加 EPEL 存储库
sudo yum install epel-release
安装进程监控软件
sudo yum install htop
运行
htop
安装带宽监控软件iftop
iftop 是一个简单、易用、实时的类似 top 的基于命令行的网络带宽监控工具,用于快速了解界面上的网络活动。 它平均每 2、10 和 40 秒显示一次网络使用带宽更新。
sudo yum install iftop -y
运行 interface top 命令以查看终端上的网络带宽活动。
iftop
运行后如图:
(四)安装解压软件
Tar 不再默认安装在 RHEL 8 / CentOS 8 上,需要安装
yum install -y tar
P7Zip用于zip文件包的解压
dnf install p7zip p7zip-plugins
解压命令如:
tar -zxvf /path/***.tar.gz 7za x /path/***.zip
备份整站压缩命令如:
cd /usr/share/nginx/html/wordpress/ 7za a /usr/share/nginx/html/wordpress/xxx.7z /usr/share/nginx/html/wordpress rm -rf /usr/share/nginx/html/wordpress/xxx.7z #下载后删除
(五)CentOS 8.0 LEMP (with Nginx, MySQL , and PHP-FPM)安装
注意:请严格按1~11的步骤进行
1.安装Nginx
2.安装MariaDB
3.安装PHP7.4
4.配置PHP到Nginx服务器
5.新建WordPress数据库需要的表,测试是否能连接
6.安装WordPress
7.Nginx 基础配置和基本安全配置
8. WordPress命令配置(不通过网址进入UI界面,参考)
9. 安装SFTP
10.配置HTTPS
11.修改Nginx配置,将http跳转到https
12.Nginx配置https支持PHP和常用功能,重装配置WordPress
我们先查看一下CentOS版本
cat /etc/os-release
1.安装Nginx
当前版本:1.14.1
yum install nginx -y
运行:
systemctl start nginx
开机时启动
systemctl enable nginx
状态查看
systemctl status nginx
查看版本(目前使用1.14.1)
nginx -v
RHEL 8 / CentOS 8 默认没有配置 firewalld 来服务 Web 流量,运行以下命令
允许 HTTP 和 https 的 Web 服务器流量的命令,具有永久规则,这些规则将在一段时间后持续存在
重启。
firewall-cmd --permanent --zone=public --add-service=http firewall-cmd --permanent --zone=public --add-service=https
重新加载防火墙守护程序以进行更改
firewall-cmd --reload
重启
systemctl restart nginx
运行绑定好的域名,可以看到:
2.安装MariaDB
使用 dnf 安装 MariaDB 包
sudo dnf install mariadb-server
启动
sudo systemctl start mariadb
检查状态
sudo systemctl status mariadb
设置开机启动
sudo systemctl enable mariadb
保护 MariaDB 服务器,MariaDB 包含一个安全脚本,用于更改一些不太安全的默认选项,例如远程 root 登录和示例用户。 使用此命令运行安全脚本:
sudo mysql_secure_installation
键入 Y 然后按 ENTER 输入 root 数据库用户的密码,然后按照提示操作。更新密码后,我们将通过按 y 然后按 ENTER 接受所有安全建议。 这将删除匿名用户,禁止远程 root 登录,删除测试数据库,并重新加载权限表。现在我们已经保护了安装,我们将通过连接到数据库来验证它是否正常工作。
根据提示设置密码。
测试登录
mysqladmin -u root -p version
重启MariaDB
systemctl restart mariadb.service
3.安装PHP7.4
Nginx本身不能处理PHP,它只是个web服务器,当接收到请求后,如果是php请求,则发给php解释器处理,并把结果返回给客户端。nginx一般是把请求发fastcgi管理进程处理,fascgi管理进程选择cgi子进程处理结果并返回被Nginx。
PHP-FPM是一个PHP FastCGI进程管理器,此版本安装默认就附带。
使用dnf安装
dnf install https://dl.fedoraproject.org/pub/epel/epel-release-latest-8.noarch.rpm
要确认 EPEL 存储库是否存在,请运行以下 rpm 命令
rpm -qa | grep epel
接下来,运行以下命令以添加 Remi 存储库
dnf install https://rpms.remirepo.net/enterprise/remi-release-8.rpm
再次,要验证 Remi 存储库是否存在,请运行该命令
rpm -qa | grep remi
成功添加 EPEL 和 Remi 存储库后,执行以下命令以获取可用 PHP 模块流的列表
dnf module list php