起因
项目上线运行已经六个月,经过六个月的观察以及摸索,发现目前的服务器资源是过剩的,决定降配。
正好阿里云双十一新购服务器半价,就打算重新购买一台包年包月的(之前服务器按月付费)。
于是,除了更改配置以外,还绑定了按量付费的弹性IP,带宽峰值可以任意调整。
另外,如果有什么大的活动,对服务资源要求极高的话,会有所预期,经过计算做出临时升级配置。
目的是,减少在服务器资源这块不必要的浪费;另一方面也能让服务器资源有更好的弹性。
过程
阿里云有镜像和快照功能,但不能垮区域,如华东1的镜像不能给香港用。
另外,阿里云镜像如果是从100G硬盘 ECS上刻录下来的,则无法恢复到40G硬盘上。所以,刻录镜像时用40G ECS灵活性会更好。
由于新购ECS,镜像又无法使用,只有重新配置环境和部署项目。
1.配置安全组
阿里云为ECS提供了很好的安全防火墙(安全组)功能。这个功能能够设定IP、端口等,基本与centos的iptables、firewall相似,但过滤优先级会高于iptables和firewall,因为后两个是运行在系统的,而阿里云的安全组则在进入系统之前就进行了过滤。
2.修改sshd端口
一般连接linux服务器会通过ssh服务,它的默认端口为22。出于安全方面的考虑,我将它改成其他非主流数字,这样可以减少被入侵的风险。
修改方式:
// 打开sshd服务的配置
vi /etc/ssh/sshd_config
// 修改Port的值,若有#注释,则把#去掉
// 保存
// 重启sshd服务
systemctl restart sshd
改完之后,可以使用xshell等工具用改掉的端口号重新连接测试。
小常识:一般linux系统的功能都有分客户端和服务端,带d的一般是服务端。如mysql和mysqld,mysql是客户端,mysqld则为服务端。ssh也是如此。
3.关闭firewall防火墙
因为阿里云已经存在了安全组防火墙,该防火墙在一个连接请求还没有到达服务器就已经生效,所以,理论上,安全组的功能和firewall的功能差不多。
因此,我使用安全组,直接关闭centos的firewall,毕竟firewall在ecs上运行,一来也消耗资源,二来也不必要的每次过滤已经被安全组过滤过的连接请求。
小常识:centos7之后,默认用firewall替代了iptables了。
关闭firewall:
systemctl stop firewalld
4.安装lnmp集成环境
选用lnmp继承安装包,能省不少事。
过程看这里:lnmp官方安装过程
我一般选用php7
5.配置php-fpm
小常识:nginx和apache不一样,apache可以解析PHP脚本,而nginx则只是把请求导向给php-fpm,由php-fpm来解析。在这里,fastCGI就不做解释了,有兴趣可以百度下。
php-fpm是php的fastCGI进程管理器,php5.4之后已经集成在php中一起安装,即不需要单独安装。
打开配置文件:
vi /usr/local/php/etc/php-fpm.conf
简单解释:
# 全局
[global]
# 进程位置
pid = /usr/local/php/var/run/php-fpm.pid
# 错误日志存放日志
error_log = /usr/local/php/var/log/php-fpm.log
# 日志级别
log_level = notice
# 用户
[www]
listen = /tmp/php-cgi.sock
listen.backlog = -1
listen.allowed_clients = 127.0.0.1
listen.owner = www
listen.group = www
listen.mode = 0666
user = www
group = www
# 子进程动态分配
pm = dynamic
# 允许同时存在的最大子进程数
pm.max_children = 10000
# 运行时初始化的子进程数
pm.start_servers = 2000
# 最小空闲子进程数
pm.min_spare_servers = 2000
# 最大空闲子进程数
pm.max_spare_servers = 1000
# 最大请求处理时间
request_terminate_timeout = 580
# 超过多少算慢日志
request_slowlog_timeout = 1
# 慢日志存放位置
slowlog = var/log/slow.log
重启fpm
service php-fpm restart
php-fpm的配置还是要根据自己的服务器配置进行计算,乱搞的话,分分钟撑爆内存。
6.安装PHP扩展
这一步是至关重要的,比如laravel框架,在手册中就明确表示了有哪些依赖是必须存在的,如fileinfo扩展。
php高版本有许多扩展都已经被编译在php里面了,比如curl、pdo、pdo_mysql、tokenizer等,这个可以通过phpinfo函数或php探针来查看。
安装php_fileinfo扩展:
// lnmp一键安装包,直接已经有fileinfo的源代码
// 只要解压之后就能进行编译安装
7.修改php.ini配置
要改的配置根据不同的项目可能有很多,但一般的有这些:
post_max_size
max_input_time(fpm的request_terminate_timeout优先级更高)
disabled_function
……
8.关闭mysql
之所以关闭mysql,是因为使用了阿里云的RDS。
mysql就没必要开着了。
service stop mysql
9.安装composer
10.设置composer中国镜像
小常识:中国镜像和packagist.org会有一定时间的延迟(传说是1分钟),不过国内一般项目不会要求实时根据github上库的更新。
11.安装git
yum install git
12.生成多个ssh key
有这样一种场景,当同一台服务器,需要绑定多个github或阿里云code这样的仓库管理平台。
如:
- a在github有一个帐号,b在github有一个帐号
- a和b都用了这台服务器,并往项目push代码
- github要求一个ssh key只能被一个用户使用
- 即,服务器如果只有一个ssh key,要么只能被a用,要么只能被b用
为了解决这个问题,就要知道,github是认ssh key的。这样我们只需要在一台服务器上生成多个key就可以了。
13.修改项目git配置
14.pull项目
因为直接从本地复制了一份项目文件到服务器中,.git文件也复制过去了。
结果git status的时候,加了一堆莫名其妙的东西
后来push了,本地pull的时候报错
git error: unable to create file 111111? Invalid argument
参考资料
大致意思是说,windows的文件系统不支持这样的文件名,所以无法创建这个文件,并且报了参数错误
那就要从git的缓存中进行删除,使用git rm --cache
但不能从windows,而是从linux,linux上处理完push,然后windows才pull的下来
15.开启文件夹权限
Laravel手册有说清楚,该开起来的文件夹权限都要开起来。
16.下载ab工具
yum -y install httpd-tools
ab -V
17.迁移服务器要注意的点
迁移服务器,ip发生了变化。一方面要修改解析,另一方面也要去如友盟、云片、微信、支付等第三方把ip加入白名单里,本地脚本如果存有ip类的配置,也需要修改。
结语
这个过程,主要可以记录一些遇到的问题,过程,经验,以后用于参考,避免某些环节出现疏忽,造成问题。
另一方面,在服务器配置方面,也有所心得,像阿里云,完全可以根据现有情况进行大致估算,以找到较为合适的配置,节省资源,等需要资源的时候再升级配置。
这种灵活的方式,也是弹性计算带来的福利。
网友评论