美文网首页DevOps程序员
Linux下生产环境的搭建

Linux下生产环境的搭建

作者: PirateD | 来源:发表于2019-03-02 23:39 被阅读189次

    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系统的软件包管理器、应用市场。有了他,就不用大小软件都下源码、编译、配环境变量,中间的各种依赖、编译先后顺序简直让人头大。

    • yum的安装 :Centos系统自带
    • yum源的更新:步骤很简单,下最新的源地址+清缓存+update+耐心等待... 详见参考
    • 添加 EPEL仓库 yum install epel-release

    2.1 Nginx

    • 使用 yum search nginx检查yum是有已有nginx源
      添加nginx 源地址
      rpm -Uvh http://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7.ngx.noarch.rpm
    • 安装 yum install nginx -y
    • 启动 service nginx startnginx 关闭/重启 service nginx stop/restartnginx -s stop测试配置 nginx -t
    • 默认nginx安装路径在/etc/nginx,配置文件目录/etc/nginx/nginx.conf
    • 生产环境中,一般需要对nginx进行参数调优、反向代理配置、https配置、安全性配置等,结合自己需求去配置就好,见3.1相关参考

    2.2 Git

    • 使用yum直接安装 yum install git -y

    2.3 mysql客户端与服务端

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

    • 启动mysql服务:mysqld_safe &(&结尾为后台执行的意思)
    • 设置root用户密码:mysqladmin -u root password "xxxx"
    • 链接mysql:mysql -u xxx -p
    • 开启远程访问:
    进入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性能调优

    • 启动php-fpm service php-fpm start
    • 查看php安装了哪些模块 php -m
    • 默认php配置文件路径 /etc/php.ini
    • 默认php-fpm配置文件路径/etc/php-fpm.conf
    • 参考文档: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

    • 启动mongodb:创建数据库路径,默认/data/db,启动:mongod.真正使用都会以配置文件启动mongod -f mongodb.conf,修改外网链接条件、后台运行等等配置,详细参考

    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

    • 安装与启动:yum install redis -y; redis-server redis.conf
    • redis后台启动:修改redis.conf 中daemonize 为yes

    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学习理解。这部分不难,更多是结合实际去操作、理解,解决实际的系统需求。

    • 创建反向代理的配置文件
      touch /etc/nginx/reverse-proxy.conf
    • 编辑反向代理至php-fpm
    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 {
        }
    }
    
    • 引入反向代理配置
      在nginx的配置文件的http模块添加:include /etc/nginx/reverse-proxy.conf; #反向代理配置
    • 使用nginx -t测试配置是否有错,使用 service nginx restart重启nginx服务器
    • 将php代码放在对应路径下就能访问到了
    • 代理后后端Node程序的配置更简单一些,网上很容易找到,注意如果需要拿到客户端ip的话,将remote_ip的http头特殊处理下就好
    • 可以用nginx搭建静态服务器、屏蔽一些特殊的地址、屏蔽特殊请求等等

    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镜像,这样再次安装新环境时也会省心省力。

    相关文章

      网友评论

        本文标题:Linux下生产环境的搭建

        本文链接:https://www.haomeiwen.com/subject/glhjsqtx.html