又一次迁移主机–LAMP迁移至LNMP

之前使用的是阿里云轻量云服务器,今年年底到期,因为阿里云主机续费就是大大大大大大坑,因此迁移主机是迟早都要解决的问题。正好最近6.18促销活动,新用户购买ECS-T5突发20%性能的云主机400多元3年,1核2G-3M-40G,难道这不香吗?可惜最长只能买3年。

买!买!买!

6月15日下单购买了ECS-T5,3年。

购买之后,确实不会怎么玩。首先熟悉了一下控制台大概的内容,有点无从下手,各种功能点来点去。尝试编译LAMP源码看看好不好玩的,于是用putty连上服务器,各种操作之后编译了最新版的apache2.4.43与php7.4.7,但是apache无法解析php………烦,没时间搞了。

服务器闲置了1天之后,进入控制台看看吧,然后控制台提示存在xxx个漏洞,建议修复#@¥@#%。然后反正没有部署任何东西,编译的源码又由于配置不合适没法工作,就让他修复一下吧。又这样闲置了一天,在本地的主机研究了编译apache与php源码,解决了各种问题,终于成功工作了。正准备在ECS上面再次编译,测试的时候,却发现putty无法连接ECS服务器!进入控制台重启ECS服务器,重启了很长时间,才成功重启,但是依然无法连接服务器,ping服务器公网地址也无响应。

不得不说阿里云那个云安全中心修复漏洞实在是太坑人了。centos系统居然被他给修坏了,怪不得修复漏洞的时候总提示建立快照,谁不知道建立快照呢,快照又得收费,而且怎么计费我实在是看不懂。为了避免不必要的麻烦,后续搞不清楚的按时,按量付费的,一律不玩。所以,快照功能,对于我等于没有的功能。现在云安全中心修漏洞修坏了系统,幸运的是我没有部署有用的东西到服务器,直接重新初始化硬盘,问题解决了。

云安全中心只是免费试用7天,之后如果需要,是要收费才能使用的。第一印象就给我修坏系统,即使免费使用,我也不用。

废话之后,切入正题。

为何从LAMP迁移至LNMP

自从购买了ECS-T5之后,才着手尝试编译apache与php源码,遇到各种乱七八糟的问题,各种找资料解决,之后成功的运行起来后发现,也就那样。运行WordPress的速度也许是快了点点 30ms 左右(非常不准确的估计,心理作用占比更大),最重要的是不小心 yum update 之后从centos7.3升级到centos7.8,apache居然无法启动了,提示libonig.so.2 …@#$#%$^ 反正我用 find / -name libonig.so 只找到 libonig.so 与 libonig.so.5 没有找到 libonig.so.2。哎……!2天时间折腾编译apache与php,浪费,没意义,直接 yum install 不香吗?yum install 版本太老,就用centos scl软件集,虽然不是最新的版本,已经是非常新的稳定版本了。所以,再次在本地测试使用 scl 软件集,干脆尝试 nginx + php + mysql 组合。

不试不知道,试过才知道,也就那样!!nginx1.18.0 + rh-php73 + rh-mysql80 貌似比编译好的 apache2.4.43 + php7.4.7 + mysql8 快了点点 (20ms可能也是心理作用

最重要的是,没有配置过 nginx 却比 apache 更容易接受,就凭这点,我决定了转投 nginx

从LAMP迁移至LNMP的操作记录

一、备份旧网站数据库与网站文件

我之前已经设置好每天自动备份MySQL与wp-content目录,下载到本地准备上传到新环境。

二、搭建LNMP环境并导入旧网站备份

系统选择的是阿里云centos7.6镜像。

1、安装NMP环境

在安装NMP环境之前,先升级一下系统,据说有漏洞,那么就在centos里升级吧。

查看当前系统版本

cat /etc/redhat-release #查看centos系统版本
cat /proc/version #查看linux内核版本

既然选择的是centos7.6,就肯定不需要更新到7.8,所以更新时不升级系统与内核。

修改yum的配置文件,不更新centos系统版本与Linux内核版本

vi /etc/yum.conf
在[main]的最后添加
exclude=kernel* #不更新Linux内核版本
exclude=centos-release* #不更新centos系统版本

修改保存 yum.conf 之后,执行更新。

yum update #执行更新

顺利的话,会更新一堆的东西。报警告等无法更新的话,那就别更新了,不如直接ECS选高版本的系统。比如要使用centos7的版本,直接在ECS控制台选7版本最高版本号的那个使用即可。

更新完成之后,reboot 一下,开始部署NMP环境。

检查并关闭防火墙与 selinux ,因为ECS自带内外网出入端口自定义。(这样处理不知合理与否

安装 Software Collections 软件集 centos-release-scl

因为之前修改了 yum.conf 排除了 centos 更新系统版本,会导致无法安装 centos-release-scl ,所以,要再次修改 yum.conf

vi /etc/yum.conf
在[main]的最后添加
exclude=kernel* #不更新Linux内核版本
#exclude=centos-release* #把这行注释掉

然后执行安装 centos-release-scl

yum install -y centos-release-scl

安装好 centos-release-scl 之后再把 yum.conf 改回禁止更新centos系统版本即可。

安装 epel、webtatic 源

rpm -Uvh https://mirror.webtatic.com/yum/el7/epel-release.rpm
rpm -Uvh https://mirror.webtatic.com/yum/el7/webtatic-release.rpm

安装 nginx

创建 nginx 安装源

vi /etc/yum.repos.d/nginx.repo #创建安装源
#编辑nginx.repo内容如下

[nginx-stable]
name=nginx stable repo
baseurl=http://nginx.org/packages/centos/$releasever/$basearch/
gpgcheck=1
enabled=1
gpgkey=https://nginx.org/keys/nginx_signing.key
module_hotfixes=true

[nginx-mainline]
name=nginx mainline repo
baseurl=http://nginx.org/packages/mainline/centos/$releasever/$basearch/
gpgcheck=1
enabled=0
gpgkey=https://nginx.org/keys/nginx_signing.key
module_hotfixes=true

先安装 yum-utils

yum install yum-utils -y

再安装 nginx

yum install nginx -y

安装 rh-mysql80

yum install rh-mysql80 -y

安装 rh-php73

yum install -y rh-php73 rh-php73-php rh-php73-php-fpm rh-php73-php-gd rh-php73-php-mbstring \
rh-php73-php-intl rh-php73-php-pecl-apcu rh-php73-php-mysqlnd rh-php73-php-pecl-redis \
rh-php73-php-opcache rh-php73-php-imagick rh-php73-php-bcmath rh-php73-php-gmp \

2、配置NMP

MySQL初始化

启动 rh-mysql80

service rh-mysql80-mysqld start

启用 bash 命令

scl enable rh-mysql80 bash

查看 mysql 版本

mysql -V

设置开机启动 mysql

systemctl enable --now rh-mysql80-mysqld

创建 mysql 启动脚本

vi /etc/profile.d/rh-mysql80.sh
#rh-mysql80.sh内容如下
source /opt/rh/rh-mysql80/enable
export X_SCLS="`scl enable rh-mysql80 'echo $X_SCLS'`"

设置 mysql 字符集

vi /etc/opt/rh/rh-mysql80/my.cnf.d/mysql-server.cnf

[mysqld]
character-set-server=utf8mb4 # 在[mysqld]下加入此行

重启 mysql

service rh-mysql80-mysqld stop
service rh-mysql80-mysqld start

初始化 mysql 数据库

mysql_secure_installation

然后按照步骤设置即可。我的设置:y,1,输入root密码,y,y,y,y,y

查看 mysql 数据库字符集

mysql -u root -p #以root身份登录数据库
show variables like '%character%';
+--------------------------+---------------------------------------------------+
| Variable_name            | Value                                             |
+--------------------------+---------------------------------------------------+
| character_set_client     | utf8mb4                                           |
| character_set_connection | utf8mb4                                           |
| character_set_database   | utf8mb4                                           |
| character_set_filesystem | binary                                            |
| character_set_results    | utf8mb4                                           |
| character_set_server     | utf8mb4                                           |
| character_set_system     | utf8                                              |
| character_sets_dir       | /**************************************/charsets/ |
+--------------------------+---------------------------------------------------+

然后创建 mysql 数据库数据表,用户、密码(与之前旧网站的数据表、用户、密码一样,以便导入旧数据,不知是否合理)

将旧网站备份的数据库文件上传到服务器,然后导入数据库

#选择数据表
use db1; # db1 为数据表名称

#导入数据
source /sqlbak/db1_bak.sql; # db1_bak.sql 为数据库备份文件名称

配置 php-fpm

修改 php-fpm 配置文件

vi /etc/opt/rh/rh-php73/php-fpm.d/www.conf
# 用户 = nginx ,组 = nginx
; RPM: apache user chosen to provide access to the same directories as httpd
user = nginx  #安装好默认值apache
; RPM: Keep a group allowed to write in log dir.
group = nginx  #安装好默认值apache

启动 php-fpm

service rh-php73-php-fpm start

设置 php-fpm 开机启动

systemctl enable --now rh-php73-php-fpm

隐藏 php 版本号

vi /etc/opt/rh/rh-php73/php.ini

; Decides whether PHP may expose the fact that it is installed on the server
; (e.g. by adding its signature to the Web server header).  It is no security
; threat in any way, but it makes it possible to determine whether you use PHP
; on your server or not.
; http://php.net/expose-php
expose_php = Off #默认On,修改为Off

配置 nginx

查看 nginx 版本,以及确认 http_ssl_module 模块

nginx -V

修改 nginx 辅配置文件 支持 SSL

vi /etc/nginx/conf.d/default.conf

server {
    listen       80;
    server_name  www.域名.com;
    #80端口访问跳转443端口
    rewrite ^(.*)$ https://${server_name}$1 permanent;
}
server {
    #开启ssl https访问
    listen 443 ssl;
    server_name  www.域名.com;
    ssl on; 
    #root html;
    #index index.html index.htm;
    ssl_certificate /证书/实际/路径/ssl证书名.pem;
    ssl_certificate_key /证书/实际/路径/ssl证书名.key;
    ssl_session_timeout 5m;
    ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
    ssl_prefer_server_ciphers on;

    #charset koi8-r;
    #access_log  /var/log/nginx/host.access.log  main;

    location / {
        root   /usr/share/nginx/html;
        #增加支持php
        index  index.html index.php;
        #解决除了首页外,所有页面404的问题。
        try_files $uri $uri/ /index.php?$query_string;
        if (!-e $request_filename){  
            rewrite ^/(.*) /index.php last;  
        }
    }

    #error_page  404              /404.html;

    # redirect server error pages to the static page /50x.html
    #
    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   /usr/share/nginx/html;
    }

    # proxy the PHP scripts to Apache listening on 127.0.0.1:80
    #
    #location ~ \.php$ {
    #    proxy_pass   http://127.0.0.1;
    #}

    # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
    #
    location ~ \.php$ {
    #    root           html;
        fastcgi_pass   127.0.0.1:9000;
        fastcgi_index  index.php;
        fastcgi_param  SCRIPT_FILENAME  /网站/根目录/路径/html$fastcgi_script_name;
        include        fastcgi_params;
    }

    # deny access to .htaccess files, if Apache's document root
    # concurs with nginx's one
    #
    #location ~ /\.ht {
    #    deny  all;
    #}
}

隐藏 nginx 版本号

vi /etc/nginx/nginx.conf
# 主配置文件 http {内容}
http {
    server_tokens off; #隐藏nginx版本号
}

启动 nginx 并设置开机启动

systemctl start nginx
systemctl enable nginx

所有配置基本完成,reboot ,测试网站。

上传网站文件备份至对应目录,测试网站正常运行,一切都是那么的熟悉!响应速度完全上了一个档次!!(→_→)

记录可能有错漏,有时间再优化一下,因为阿里云控制台又给我找出了安全漏洞 (@_@;)

发表评论

电子邮件地址不会被公开。 必填项已用*标注