DevOps程序员

Linux下生产环境的搭建

2019-03-02  本文已影响189人  PirateD

1.前言

这是一个生产环境d的经验分享,也可以当操作指南。记录从全新的linux到业务部署上线的过程,涵盖基本的安装、常用的性能调优配置、安全配置、运维监控等,单机单节点。

1.1 环境信息

系统版本:Linux Centos 7.3
服务器架构:Nginx + Node / PHP + Mongodb/Mysql + Redis

1.2 安装列表

文章中涉及的所有软件的清单

#业务软件
nginx git mysql php php-fpm mongodb nodejs 
#系统软件
unzip pm2 wget iptools iptable ipset firewalld netdata

2 安装步骤

在centos系统安装环境,最快也最方便的选择当然是大部分软件都用yum搞定,可以理解为Centos系统的软件包管理器、应用市场。有了他,就不用大小软件都下源码、编译、配环境变量,中间的各种依赖、编译先后顺序简直让人头大。

2.1 Nginx

2.2 Git

2.3 mysql客户端与服务端

虽然叫mysql,但其实人家早已改名为mariadb
sudo yum install mariadb-server mariadb

进入mysql数据库
grant all privileges on *.* to 'root'@'%' identified by 'password';
flush privileges;
修改my.cnf配置文件,去掉bind-address
重启服务器
如果有防火墙,需要开启数据库端口的TCP链接,默认3306
如:iptables -A INPUT -p tcp -s 0/0 --dport 3306 -j ACCEPT
firewall-cmd --permanent --add-port=3306/tcp

参考:

2.4 PHP

如果采用nginx+php+mysql的方式,没有xampp集成环境方便,需要一个个安装,如果代码对php、mysql版本有要求的,注意安装时的版本号。
yum install php php-mysql php-fpm php-mbstring php-gd -y
这里php-fpm是php的进程管理器,是php代码真正执行的环境,nginx只是将请求反向代理过去。原理及配置参考
如果需要其他php模块,可以自己用yum查找安装。
参考: php模块安装 php版本切换 php-fpm性能调优

2.5 MongoDB

因为yum里的mongodb版本太老,这里直接下载安装mongo官网的最新社区版,新的4+版本担心兼容性,这里就选择3.6了
wget https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-3.6.10.tgz
解压之: tar -xzvf mongodb-linux-x86_64-3.6.10.tgz
查看bin路径,并添加进用户的PATH环境变量中,这里修改环境变量的方法就不讲了,不会的自行google
cd mongodb-linux-x86_64-3.6.10/bin ; pwd

2.6 Nodejs

这里直接下载官网的nodejs linux平台二进制包
wget https://nodejs.org/dist/v10.15.1/node-v10.15.1-linux-x64.tar.xz
解压:xz -d node-v10.15.1-linux-x64.tar.xz;
tar -xvf node-v10.15.1-linux-x64.tar;
与Mongo类似,将bin目录添加进用户PATH中。

2.7 Redis

3 配置与启动

大部分软件的默认配置都只满足基础应用,对性能、安全等有需求时都需要弄懂他们的配置文件,并进行相应修改。下面记录我们业务中用到的调优配置,目前8核16G的机器,支撑每日8千万以上PV+ddos攻击广告业务,平均响应市场100ms以内,峰值并发2w左右。

3.1 Nginx配置与启动

nginx主要需要配置性能调优的设置,和反向代理到php-fpm或者nodejs程序的配置,还有https等

3.1.1性能调优

直接上参考文档,自己也是学的别人的经验
nginx - 性能优化,突破十万并发
Nginx性能调优
nginx下php-fpm的配置文件调整优化解决方案
我个人的总结就是,主要需要优化的有:
1.系统内核对TCP连接数、文件打开数等的限制
2.Nginx的进程协同模式、最大请求数、一些超时时间、静态缓存配置等
3.php-fpm的进程数、工作模式、处理请求数、打开文件数等限制

3.1.2反向代理

反向代理是nginx最强大和实用的地方之一,个人理解就是用一个接入点,将TCP请求按规则分发给其他后端服务或网络节点的能力,大家可以自行google学习理解。这部分不难,更多是结合实际去操作、理解,解决实际的系统需求。

server { 
        listen       80 default_server;
        listen       [::]:80 default_server;
        server_name  *.你的域名.com ;
        #你的php代码根路径
        root         /var/www/html/xxxx;
        index index.html index.php index.htm;

        # Load configuration files for the default server block.
        include /etc/nginx/default.d/*.conf;

    # set expiration of assets to MAX for caching
    location ~* \.(ico|css|js|gif|jpe?g|png|ogg|ogv|svg|svgz|eot|otf|woff)(\?.+)?$ {
        expires max;
        log_not_found off;
    }

    # framework rewrite
    location / {
         try_files $uri $uri/ /index.php?q=$uri&$args;
    }
    location ~* \.php$ {
       fastcgi_pass 127.0.0.1:9000;
       fastcgi_index index.php;
       fastcgi_split_path_info ^(.+\.php)(.*)$;
       include fastcgi_params;
#修改成你自己的代码路径
       fastcgi_param SCRIPT_FILENAME /var/www/html/advert/htdocs/$fastcgi_script_name;
try_files $uri $uri/ /index.php?q=$uri&$args;
    }
    error_page 404 /404.html;
       location = /40x.html {
    }
    error_page 500 502 503 504 /50x.html;
       location = /50x.html {
    }
}

3.1.3 Https链接

3.2 防火墙

目前的网络环境,业务上线肯定不能裸奔的,太容易被攻击,我们业务上线后,就遭遇了DDOS攻击和持续的漏洞扫描,防火墙与业务安全、容灾、性能都是上线后重点需要关注的点。
linux防火墙以iptable和firewall两个为主,如果是云服务,厂商的控制台也会再提供一层防火墙。
以我们的业务为例,物理机,用iptable,公网只开启80、22、443端口,专门写了一个自动处理nginx链接日志,识别疑似攻击的ip的程序,用iptable + ipset进行自动批量拉黑,每天都能拉黑3w个左右的攻击或机房ip。

常用命令
#firewall-cmd开放端口
firewall-cmd --permanent --add-port=80/tcp
firewall-cmd --permanent --add-port=443/tcp
firewall-cmd --reload
#iptable 显示所有规则
iptables -nL 
#iptable 添加端口
iptables -A INPUT -p tcp -s 0/0 --dport 80 -j ACCEPT
#iptable 封ip
iptables -I INPUT -s ***.***.***.*** -j DROP
#ipset 创建集合
ipset create banlist hash:net
#ipset 添加ip
ipset add banlist 203.171.228.159
#iptable 添加ipset集合进黑名单
iptables -I INPUT -m set --match-set banlist src -p tcp --destination-port 80 -j DROP
#ipset 查看
ipset list banlist
#ipset 查看ip数
ipset list banlist |wc -l

参考文档:

3.3 运维监控

装好了软件,配置好了环境,其实你的业务就已经可以开始正常运作了,只是在过程中难免会出问题,这时候就需要一套监控程序随时监控你的服务器状态、业务状态等,这些其实都是运维的职责,不过小公司小团队就都得技术负责人一肩挑了,比如我。。。

3.3.1 云平台

如果你是用的xx云,那么你基本不用做什么,服务商会给你提供从cpu到网络的全方位监控,也有很多如告警、巡检、业务监控等服务。本人资深阿里云用户,后面准备补一篇阿里云使用的经验总结。

3.3.2 物理机

如果是物理机,那就得自己建设了,总不能一直连着服务器看top。这里推荐netdata,功能全面,性能优秀,界面炫酷,界面炫酷,界面炫酷。
Linux服务器监控的神器:Netdata

3 结语

至此,linux环境的基础软件,服务器的基础软件与运行环境,以及安全、性能和运维监控所需的处理,就都已完成。一定是满足初创项目或企业要求的,如有不足欢迎指出~
本篇的记录都是以单服务器单节点作为样例,更优的架构应该是将数据库、业务服务器、接入服务器(负载均衡服务器)全部分离,考虑业务的备份容灾、平滑升级、横向扩容、节点同步等等需求,目前没有这方面的需求和实战经验,业务发展到了一定规模,就一定要在系统架构层面保证稳定性、安全性了。
另外,也可以把搭建好的这种环境,制作成docker镜像,这样再次安装新环境时也会省心省力。

上一篇 下一篇

猜你喜欢

热点阅读