美文网首页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