通知设置 新通知
基于CMDB与SALTSTACK的运维自动化之路
OS小编 发表了文章 0 个评论 3946 次浏览 2017-06-29 01:10
作者介绍
张延礼,现苏州蜗牛高级运维经理,就职于腾讯多年,熟悉基础架构运维及业务运维,在运维技术实施、流程及标准化体系建设、运维自动化架构设计及实现,运维支撑体系规划和执行团队管理等方面具有丰富经验。
正文
本文基于蜗牛从零开始建设运维自动化的一些实践,总结自动化建设过程中涉及的体系规划、实施路线、产品设计及架构设计等方面的经验。
一、自动化体系规划
1、自动化要解决什么问题
运维层面的工作可以归结为如下三大块
服务管理层面主要是从运维总体支撑的角度来管理运维质量、规范、成本等等,处在运维工作的最高层;技术决策主要是为实现管理目标去制定总体方案,实施路径;技术执行则是落地的最后一环,这一环工作往往呈现零散、杂乱、重复、频繁变更的特点,承接的需求量最多,但价值体现却是较低的一环。
当前运维自动化的首要目标还是在解决”技术执行”这一层面的问题:将大量重复低价值含量的人力实施变成自动化执行,最大化地降低人力依赖,提升运维效率及业务支撑能力。
2、自动化建设思路
对于如何建设自动化运维,个人认为首要的是要有建设思路与方法论,以下供参考:
3、自动化建设总体框架
自动化的建设水平在行业内差异化还是明显的,如果处于运维自动化起步的阶段,建议是组建运维开发团队,从整体规划,基于ESB思想,分层建设,让支撑平台从业务逻辑中解耦。比如就业务运维而言,整个操作工作面无非就是对业务运营环境的各种操作、配置,以及对业务应用程序的管理,简单来说就是OS层和应用层。
要做自动化实施首先得有准确对称的数据,然后需要一个统一的管控平台,能并发的控制和操作远程大量主机,这解决了OS层面的操作问题,但需要管理应用层面的东西还需要与应用的研发人员规范相关接口,这对于开源组件应用而言一般不会有什么问题。因此如果是从零开始做自动化,个人认为CMDB、管控平台、业务进程管理工具这三部分是地基。在此基础之上,可以针对运维各类场景和业务逻辑去做相应的垂直功能系统,再上一层,可以使用流程引擎之类的组件来实现业务运维流程的纵向整合,最终实现运维各类业务流程的纯线上自动化。
二、自动化实施路线
业务发展往往带来运维块面的应用形态、运营环境、、部署结构、基础架构规模及组织流程等多样化、复杂化;如无统一的标准及规范,运维支撑工作将异常混乱,自动化也难以实施。因此自动化有一个基础:标准化,标准化是将一切杂乱无章、千头万绪的运维工作变得有序及可控,流程规范与执行标准的落地是自动化的一大基石。结合我司实际运维现状及需求,基于以上自动化体系建设思路,前期规划的建设线路如下
1、信息的标准化管理:CMDB
在运维工作中,信息的管理往往是难点,运维侧涉及的信息太多,且也与其他职能部门多点关联,信息流转于整个流程的多个职能部门、多个环节
中小型企业中,手工线下记录的方式居多,线上线下信息一致性保持、内部外部信息传递、共享、同步等均存在较大问题,经常出现:
- 线下表格有,实际位置找不到,或信息不对称
- 不清楚设备状态,不清楚哪个业务在使用
- 一个部门做了变更,其他部门不知情
- 变更一条上联链路,无法及时判断影响范围及程度
- CI及属性需要贴合实际环境,同时考虑长期的运维规划
- 管理的不仅是CI及其属性,还有CI之间的关系,状态流转机制等等
- 充分考虑扩展性及灵活性,如引入自定义属性来满足未来或暂时不可预见的需求
- 良好的scale-up/scale-out,灵活扩展,支持复杂网络结构
- 轻量级、高效的后端通信机制,成千上万的管理规模
- 跨平台,支持windows、unix-like多平台,无需重复开发
- 全网统一的一套基于web的用户界面,将所有操作逻辑通过web层来调用salt-api,web前端提供与直接登录机器操作一样的灵活性和自由度,运维人员在web上完成所有操作。
- 对运维操作进行建模,将其分解为几大原子操作类型,一切复杂的序列化操作逻辑可通过原子的自由组合来实现,给用户提供自由灵活的操作方式
- 基于以上逻辑,再给salt加一层应用接口,便于后续其他系统平台可直接调用或整合UJOBS以建设更高层次的平台。
后端salt的逻辑这里不赘述,由于实际网络环境的特殊性,我们采用了二层架构,即master-syndic-minion,公网与内网相结合的方式最大限度提升系统性能。
权限控制、执行对象等等与CMDB打通,可以非常灵活的适应各类业务,各种场景。
如运维人员可以在界面定义好一个版本发布作业:xx业务发布,分解整个发布流程中到每一步骤,并写脚本或调用外部接口来实现具体的操作,最终线上操作只需在页面点击开始执行就可:
当然用户自定义作业可以复用,通过传参的方式实现实例化,避免必要每次发布都建作业。
3、建设过程中的问题总结
做好产品设计及架构设计
充分解析运维内部需求,各具体平台或产品业务区分明确,产品定位一定要清晰,不要想着让微波炉具备电冰箱的功能,自动化整个体系不是一个产品能解决所有问题,需要自顶向下分层设计,产品之间相互解耦且又对外提供接口,能方便的整合与被整合。
组建运维内部开发团队
运维自动化的建设,最好是组建运维内部团队来进行开发,直接丢给业务研发部门往往做出来的东西不是运维侧想要的,因其不易理解运维侧的需求场景、痛点,操作方式等等;如实在没有运维开发团队,那就找个深度理解运维场景的PM去跟开发团队吧。
推动业务开发侧的标准化
其实产品开发团队的研发管理水平及标准化程度直接决定了运维人员爽与不爽,绝大多数研发人员往往只考虑产品功能实现,而很少关注可维护性设计,导致业务给运维人员带来很大的无价值工作量,更有甚者直接是将运维人员当成代码逻辑的一部分。让运维人员参与产品研发的可维护性设计是很多必要的,运维侧需形成可维护性标准规范,推动业务开发遵循将非常利于运维自动化的建设。
文章来源:微信订阅号"运维帮"
地址:http://dwz.cn/6c2Yqz
org.apache.hadoop.hbase.NotServingRegionException: Region
空心菜 回复了问题 2 人关注 1 个回复 7810 次浏览 2017-06-27 17:44
利用ITIL建立高效能IT服务
Something 发表了文章 0 个评论 2719 次浏览 2017-06-27 00:03
在企业里,IT部门一般是作为服务部门而存在,大部分企业IT部门是以提供基础架构服务和通用IT服务为主,如何提高系统的可用性和提升响应速度就变成IT服务管理内容的核心。
目前,国内企业的IT管理经历了系统管理、网络管理之后,现在正逐渐向IT服务管理阶段过渡。但许多企业IT服务远没有实现主动式管理,依然停留在服务支持管理的层面上。
IT服务管理的必要理念
目前,IT已成为许多业务流程中必不可少的部分,IT服务地位的提升意味着IT要承担更大的责任。一方面,IT必须满足业务流程不断变化的需求;另一方面,IT服务的相关成本也要随之不断降低。但是我们看见,IT在这两个方面都没有做出令人满意的答案。
IT服务管理的根本目标
IT服务管理的根本目标有三个:
- 第一,以用户为中心提供IT服务
- 第二,提供高质量、低成本的服务
- 第三,提供可量化计价的服务。
如果简单说明,IT服务管理可概括为"二次转换",第一次是"梳理",第二次是"打包"。
首先,将纵向的各种IT技术管理工作(传统IT管理的重点),如服务器管理、网络管理和系统软件管理等进行“梳理”,形成典型的流程,这是第一次转换。这主要是供IT部门内部使用,用户对此并不感兴趣。但是,仅是这些流程还不能保证服务质量或客户满意,还需将流程按需”打包“成特定的IT服务,提供给用户,这是第二次转换。
简单来说,第一次转换是将IT技术管理转化为IT流程管理,第二次转换是将IT流程管理转化为IT服务管理。
从用户的角度来说, IT只是提高运营业务效率的一种工具,用户不需要对IT有太多的了解,用户需要的是IT所实现的功能。用户和IT部门之间的交流,使用的是”商业语言“而不是”技术语言“,IT部门需要向用户提供的是 IT服务。
为了能够灵活、及时和有效地提供IT服务,并保证服务质量、理化计算有关成本,IT服务就必须事先对服务进行一定程度上的分类和打包。
ITIL高效解决IT服务问题
ITIL的全名是IT基础设施库,简单的说,就是一套针对各行业的IT服务管理标准库。 ITIL结合流程、人员和技术三要素,为企业的IT构建一套从计划、研发、实施到运行维护的最佳实践方案。
一套协同流程是ITIL框架的核心,它通过服务级别协议(SLA)来保证IT服务的质量。它融合了系统管理、网络管理、系统开发管理等管理活动,以及关于变更管理、资产管理、问题管理等许多流程的理论和实践。
ITIL提供的是一种流程处理的IT服务管理方案,它通过工作单形成IT服务流程闭环,以确保整个IT服务过程有据可查。同时,ITIL还制定了明确的服务流程规范,员工需要严格按照流程进行操作。ITIL不断高效地解决IT服务问题,提高IT部门服务效率,以此使用户感到满意,从而达到优质的服务。ITIL是一个很好的手段, 它简化了IT服务管理,变得优质与高效。
建立高效能IT服务告别危机时代
清晰IT服务质量SLA目标
IT服务的质量目标是各方对IT服务管理的期望,它是业务部门和IT部门双方根据业务目标制定的。一个好的IT服务目标要有这几个方面的作用:明确持续服务管理,改进活动的方向;促使有关人员朝正确方向采取行动;协调不同人员的多个行动;简要有力地说明高层管理者的意图。
分析IT服务管理的现状
评估企业目前的IT服务管理现状和成熟度级别是核心步骤之一。ITIL自我评估手册提供了一个全面的评估方法。因为,用户的需求和IT服务现状是决定所提供IT服务的基础,而服务流程、职能、技能、企业结构和文化等则是根据用户需求和所提供的服务类型决定的。
分析和评价的现状要从这几个方面考虑:IT部门是否理解业务战略和方向、业务面临的问题;IT部门是否理解技术对业务的作用;IT部门和业务部门对当前IT服务成熟度和IT服务质量的看法是否一致;IT部门是否清楚了解利益相关者的需求; IT部门是否清楚了解不改进IT服务质量的后果等。
制定高效的IT服务管理方案
管理方案包括两个方面,一是选用何种服务管理工具,二是进行教育、培训、文化变革。经验表明,成功的IT服务管理实施,更多的是要依靠后者。
这一阶段的IT服务工作包括以下几点:
文件和制度制定:主要有IT制度文件准备、编制用户手册、工作记录手册及IT管理人员工作指南等。
员工培训工作:对与IT系统相关的每位员工都要进行适当的培训,一方面是对IT人员要加强业务知识技能的培训,理解业务原理及本质
对业务人员要加强IT知识技能的培训,通过培训可以使IT业务人员都能理解IT服务管理各流程的基本原则。
关键成功因素和绩效指标决定IT服务考核标准
检查IT服务效果是保障IT服务高质量的关键过程之一。这需要事先明确定义一系列可测量的目标和指标,然后在每个时期内进行评审,检查IT服务目标是否达到,服务质量是否得到提高。否则,就需要提出和采取补救和改进措施来实现预期目标。
因此,可以先为每个IT服务确定和定义一些关键成功因素(CSF)和关键绩效指标 (KPI)。关键成功因素是使每个IT服务达到高质量所需达到的最低要素,关键绩效指标是测量每个关键成功因素是否实现的具体数量指标。关键成功因素和关键绩效指标建立了每个IT服务的绩效考核基准。
总结
俗语说:创业难,守业更难。逆水行舟,不进则退。先前的IT服务活动已经达到目标,继而就要巩固取得的成果并采取进一步的改进行动。我们必须明白一个道理,提高IT服务质量是一个永无止境的持续过程。
摩卡业务服务管理(Mocha BSM)能够监控基础设施和应用,也能够将复杂的IT设施转化为简单的业务视图,它帮助我们从IT服务的角度出发,保障IT部门提供稳定可靠的服务。
阅读分享:http://www.sootoo.com/content/47944.shtml
Centos7下使用Yum安装Zabbix2.4
Geek小A 发表了文章 0 个评论 2754 次浏览 2017-06-17 18:09
一、Zabbix简介
zabbix是一个基于WEB界面的提供分布式系统监视以及网络监视功能的企业级的开源解决方案。zabbix能监视各种网络参数,保证服务器系统的安全运营;并提供灵活的通知机制以让系统管理员快速定位/解决存在的各种问题。
二、Zabbix安装
本文档在同一台机器上安装了zabbix-server 和zabbix-agent 自己监控自己。
1、配置LAMP
这个可以参考之前的文章:http://openskill.cn/article/578
2、配置Yum源
Zabbix在CentOS基本源里不可获得,因此必须配置EPEL 和Zabbix 官方repository
安装EPEL repository
yum install epel-release配置ZabbixZone package repository and GPG key
rpm --import http://repo.zabbix.com/RPM-GPG-KEY-ZABBIX3、安装Zabbix server and agent(agent是可选的)
rpm -Uv http://repo.zabbix.com/zabbix/2.4/rhel/7/x86_64/zabbix-release-2.4-1.el7.noarch.rpm
安装Zabbix server and agent:(配置自己监控自己,所以安装了zabbix-agent)
yum install zabbix-server-mysql zabbix-web-mysql zabbix-agent zabbix-java-gateway编辑 file /etc/httpd/conf.d/zabbix:
vi /etc/httpd/conf.d/zabbix.conf更新时区:
php_value date.timezone Asia/Shanghai重启httpd
systemctl restart httpd
4、创建MySQL 数据库和用户
登录MariaDB:
mysql –u root –p创建一个数据库‘zabbixdb’和数据库用户‘zabbix’
MariaDB [(none)]> create database zabbix character set utf8;
MariaDB [(none)]> grant all privileges on zabbix.* to 'zabbix'@'localhost' identified by 'zabbix';
MariaDB [(none)]> flush privileges;
5、数据库导入zabbix template
使用数据库用户zabbix登录数据库
mysql –uzabbix –p切换到zabbix数据库
use zabbix导入模板数据
MariaDB [zabbix]> source /usr/share/doc/zabbix-server-mysql-2.4.7/create/schema.sql
MariaDB [zabbix]> source /usr/share/doc/zabbix-server-mysql-2.4.7/create/images.sql
MariaDB [zabbix]> source /usr/share/doc/zabbix-server-mysql-2.4.7/create/data.sql
6、配置Zabbix server
编辑文件/etc/zabbix/zabbix_server.conf
vi /etc/zabbix/zabbix_server.conf配置下面的三个参数
[...]
DBName=zabbix
[...]
DBUser=zabbix
[...]
DBPassword=zabbix
[...]
7、配置zabbix-agent
vi /etc/zabbix/zabbix_agentd.conf配置zabbix server 的ip
[...]
## Line 85 - Specify Zabbix server ##
Server=127.0.0.1
[...]
## Line 126 - Specify Zabbix server ##
ServerActive=127.0.0.1
[...]
## Line 137 - Specify Zabbix server Hostname or IP address ##
Hostname=127.0.0.1
[...]
8、修改PHP 设置
修改php.ini为zabbix 建议的设置
编辑文件 php.ini
vi /etc/php.ini设置下面的参数
max_execution_time = 600
max_input_time = 600
memory_limit = 256
Mpost_max_size = 32M
upload_max_filesize = 16M
date.timezone = Asia/Shanghai
9、修改Firewall 和SELinux 设置
开放zabbix端口10050 and 10051.
firewall-cmd --permanent --add-port=10050/tcp重启firewall
firewall-cmd --permanent --add-port=10051/tcp
systemctl restart firewalld如果使用 SELinux, 运行以下命令使 Apache 可以和 Zabbix通信
setsebool -P httpd_can_connect_zabbix=1
10、允许Zabbix web console 对特定IP段可用 (可选)
编辑文件 /etc/httpd/conf.d/zabbix.conf
vi /etc/httpd/conf.d/zabbix.conf添加允许访问 zabbix web interface的ip段. 如果设置 ‘Allow from All’, 这可以允许全部可以访问
#启动zabbix-server 和zabbix-agent。重启httpd,,并设置zabbix-server和zabbix-agent开机自动启动
# Zabbix monitoring system php web frontend
#
Alias /zabbix /usr/share/zabbix
Options FollowSymLinks
AllowOverride None
Require all granted
php_value max_execution_time 300
php_value memory_limit 128M
php_value post_max_size 16M
php_value upload_max_filesize 2M
php_value max_input_time 300
php_value date.timezone Asia/Shanghai
Require all denied
Require all denied
systemctl start zabbix-server
systemctl start zabbix-agent
systemctl restart httpd
systemctl restart mariadb
systemctl enable zabbix-server
systemctl enable zabbix-agent ---- (可选)
11、通过控制台配置Zabbix
浏览器访问http://ip-address/zabbix
检查包的完整性和参数配置
数据zabbix数据库名、数据库用户和密码,并测试
输入Server name(可选)
预安装summary
点击完成,完成安装
安装完成后,重定向到zabbix控制台登录页面. 输入用户名和密码,默认的用户名和密码为admin/zabbix.
管理仪表盘页面如下
英文原文地址:http://www.unixmen.com/how-to-install-zabbix-server-on-centos-7/
Centos7下配置LAMP过程记录
Geek小A 发表了文章 0 个评论 3287 次浏览 2017-06-17 00:45
下面讨论如何在RHEL/CentOS/Scientific Linux 7上搭建LAMP环境.
一、Install Apache
Apache HTTP Server(简称Apache)是Apache软件基金会的一个开放源码的网页服务器,可以在大多数计算机操作系统中运行,由于其多平台和安全性被广泛使用,是最流行的Web服务器端软件之一。它快速、可靠并且可通过简单的API扩展,将Perl/Python等解释器编译到服务器中。
在终端以root权限运行以下命令:
yum install httpd -y启动Apache
systemctl start httpd设置开机启动
systemctl enable httpdfirewall设置允许远程登录:
firewall-cmd --permanent --add-service=http测试Apache
systemctl restart firewalld
浏览器访问 http://localhost/ or http://server-ip-address/
二、Install MariaDB
MariaDB数据库管理系统是MySQL的一个分支,主要由开源社区在维护,采用GPL授权许可 MariaDB的目的是完全兼容MySQL,包括API和命令行,使之能轻松成为MySQL的代替品。 MariaDB由MySQL的创始人Michael Widenius(英语:Michael Widenius)主导开发,他早前曾以10亿美元的价格,将自己创建的公司MySQL AB卖给了SUN,此后,随着SUN被甲骨文收购,MySQL的所有权也落入Oracle的手中。MariaDB名称来自Michael Widenius的女儿Maria的名字。
安装MariaDB:
yum install mariadb-server mariadb -y启动MariaDB
systemctl start mariadb设置开机启动
systemctl enable mariadb设置root密码
默认情况下,root密码为空。为防止未授权的访问,我们设置root密码
mysql_secure_installation
三、Install PHP
PHP(外文名:PHP: Hypertext Preprocessor,中文名:“超文本预处理器”)是一种通用开源脚本语言,主要适用于Web开发领域。
使用以下的命令安装php
yum install php php-mysql php-gd php-pear -y测试PHP:
在Apache文档根目录创建“testphp.php”
vi /var/www/html/testphp.php编辑内容如下
phpinfo();重启 httpd 服务:
?>
systemctl restart httpd浏览器访问 http://server-ip-address/testphp.php. 将会显示php的版本信息.
也可以使用如下命令安装所有php modules,重启httpd服务,查看http://server-ip-address/testphp.php ,可以看到所有安装的modules
yum install php* -y
四、Install phpMyAdmin (可选)
phpMyAdmin 是一个以PHP为基础,以Web-Base方式架构在网站主机上的MySQL的数据库管理工具,让管理者可用Web接口管理MySQL数据库。由于phpMyAdmin跟其他PHP程式一样在网页服务器上执行,您可以在任何地方使用这些程式产生的HTML页面,也就是于远端管理MySQL数据库,方便的建立、修改、删除数据库及资料表。也可借由phpMyAdmin建立常用的php语法,方便编写网页时所需要的sql语法正确性。
添加 EPEL repository 参照(Install EPEL Repository on RHEL/CentOS/Scientific Linux 7)
yum install epel-release安装 phpMyAdmin:
yum install phpmyadmin -y配置phpMyAdmin
默认,phpMyAdmin只能由本机访问。为了能够远程访问,编辑phpmyadmin.conf file:
vi /etc/httpd/conf.d/phpMyAdmin.conf查找/
AddDefaultCharset UTF-8
# Apache 2.4
Require ip 127.0.0.1
Require ip ::1
# Apache 2.2
Order Deny,Allow
Deny from All
Allow from 127.0.0.1
Allow from ::1
# Apache 2.4
Require ip 127.0.0.1
Require ip ::1
# Apache 2.2
Order Deny,Allow
Deny from All
Allow from 127.0.0.1
Allow from ::1
添加
编辑“config.inc.php” 改变phpMyAdmin的authentication,修改“cookie” 为 “http”
Options none
AllowOverride Limit
Require all granted
vi /etc/phpMyAdmin/config.inc.phpChange ‘cookie’ to ‘http’.
重启the Apache service:
systemctl restart httpd访问 phpmyadmin 的控制台 http://server-ip-address/phpmyadmin/
输入MySQL username and password,将重定向到PhpMyAdmin main web interface.
现在你可以通过phpMyAdmin web interface 管理你的MariaDB数据库了。
Centos6下安装PHP7和Nginx
Geek小A 发表了文章 0 个评论 3704 次浏览 2017-06-15 22:29
一、安装PHP
PHP源码包下载地址:
# wget http://cn2.php.net/distributions/php-5.6.22.tar.bz2
# wget http://cn2.php.net/distributions/php-7.0.7.tar.bz2
更新yum源
这里将Centos的yum源更换为国内的阿里云源。yum安装正常的可以跳过本步骤, 阿里云Linux安装镜像源地址: http://mirrors.aliyun.com/
1、备份你的原镜像文件,以免出错后可以恢复:
mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup
2、下载新的CentOS-Base.repo 到/etc/yum.repos.d/
# CentOS 5
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-5.repo
# CentOS 6
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-6.repo
# CentOS 7
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
3、生成缓存
yum clean all
yum makecache
安装依赖
yum install -y gcc gcc-c++ make cmake bison autoconf wget lrzsz需要编译libmcrypt、mhash、mcrypt库
yum install -y libtool libtool-ltdl-devel
yum install -y freetype-devel libjpeg.x86_64 libjpeg-devel libpng-devel gd-devel
yum install -y python-devel patch sudo
yum install -y openssl* openssl openssl-devel ncurses-devel
yum install -y bzip* bzip2 unzip zlib-devel
yum install -y libevent*
yum install -y libxml* libxml2-devel
yum install -y libcurl* curl-devel
yum install -y readline-devel
tar zxvf /libmcrypt-2.5.8.tar.gz \
&& cd /libmcrypt-2.5.8 && ./configure && make && make install && cd - / && rm -rf /libmcrypt* \
&& tar zxvf /mhash-0.9.9.9.tar.gz && cd mhash-0.9.9.9 && ./configure && make && make install && cd - / && rm -rf /mhash* \
&& tar zxvf /mcrypt-2.6.8.tar.gz && cd mcrypt-2.6.8 && LD_LIBRARY_PATH=/usr/local/lib ./configure && make && make install && cd - / && rm -rf /mcrypt*
开始安装
使用./configure --help查看编译支持的选项。如果写了不支持的选项,如php7里不支持--with-mysql=mysqlnd会提示:
configure: WARNING: unrecognized options: --with-mysql
wget http://cn2.php.net/distributions/php-7.0.7.tar.bz2可选项:
tar jxvf php-7.0.7.tar.bz2
cd php-7.0.7
$ ./configure --prefix=/usr/local/php --with-config-file-scan-dir=/usr/local/php/etc/ --enable-inline-optimization --enable-opcache --enable-session --enable-fpm --with-mysql=mysqlnd --with-mysqli=mysqlnd --with-pdo-mysql=mysqlnd --with-pdo-sqlite --with-sqlite3 --with-gettext --enable-mbregex --enable-mbstring --enable-xml --with-iconv --with-mcrypt --with-mhash --with-openssl --enable-bcmath --enable-soap --with-xmlrpc --with-libxml-dir --enable-pcntl --enable-shmop --enable-sysvmsg --enable-sysvsem --enable-sysvshm --enable-sockets --with-curl --with-curlwrappers --with-zlib --enable-zip --with-bz2 --with-gd --enable-gd-native-ttf --with-jpeg-dir --with-png-dir --with-freetype-dir --with-iconv-dir --with-readline
$ make
$ make install
--with-fpm-user=www --with-fpm-group=www这里面开启了很多扩展。如果这时候忘了开启,以后还能加上吗?答案是可以的。以后只需要进入源码的ext目录,例如忘了pdo_mysql,进入ext/pdo_mysql,使用phpize工具,像安装普通扩展一样即可生成pdo_mysql.so。
关于:--enable-safe-mode
开启的话php可以执行一下系统函数,建议关闭(可搜索受此函数影响的php函数)
#如果只需要配置某一个目录可以执行则 设置为on并指定 safe_mode_exec_dir=string目录来执行系统函数。php7编译不用加这个配置。
#本特性已自 PHP 5.3.0 起废弃并将自 PHP 5.4.0 起移除。
safe_mode = off
编译比较耗内存和CPU。等待半小时左右,编译完成:
Build complete.
Don't forget to run 'make test'.
Installing shared extensions: /usr/local/php/lib/php/extensions/no-debug-non-zts-20151012/
Installing PHP CLI binary: /usr/local/php/bin/
Installing PHP CLI man page: /usr/local/php/php/man/man1/
Installing PHP FPM binary: /usr/local/php/sbin/
Installing PHP FPM config: /usr/local/php/etc/
Installing PHP FPM man page: /usr/local/php/php/man/man8/
Installing PHP FPM status page: /usr/local/php/php/php/fpm/
Installing phpdbg binary: /usr/local/php/bin/
Installing phpdbg man page: /usr/local/php/php/man/man1/
Installing PHP CGI binary: /usr/local/php/bin/
Installing PHP CGI man page: /usr/local/php/php/man/man1/
Installing build environment: /usr/local/php/lib/php/build/
Installing header files: /usr/local/php/include/php/
Installing helper programs: /usr/local/php/bin/
program: phpize
program: php-config
Installing man pages: /usr/local/php/php/man/man1/
page: phpize.1
page: php-config.1
Installing PEAR environment: /usr/local/php/lib/php/
[PEAR] Archive_Tar - installed: 1.4.0
[PEAR] Console_Getopt - installed: 1.4.1
[PEAR] Structures_Graph- installed: 1.1.1
[PEAR] XML_Util - installed: 1.3.0
[PEAR] PEAR - installed: 1.10.1
Wrote PEAR system config file at: /usr/local/php/etc/pear.conf
You may want to add: /usr/local/php/lib/php to your php.ini include_path
/php-7.0.7/build/shtool install -c ext/phar/phar.phar /usr/local/php/bin
ln -s -f phar.phar /usr/local/php/bin/phar
Installing PDO headers: /usr/local/php/include/php/ext/pdo/
[root@e8ed9b00e80c php-7.0.7]# /usr/local/php/bin/php -m
[PHP Modules]
bcmath
bz2
Core
ctype
curl
date
dom
fileinfo
filter
gd
gettext
hash
iconv
json
libxml
mbstring
mcrypt
mysqli
mysqlnd
openssl
pcntl
pcre
PDO
pdo_mysql
pdo_sqlite
Phar
posix
readline
Reflection
session
shmop
SimpleXML
soap
sockets
SPL
sqlite3
standard
sysvmsg
sysvsem
sysvshm
tokenizer
xml
xmlreader
xmlrpc
xmlwriter
zip
zlib
[Zend Modules]
配置文件
需要从安装包里复制php.ini、php-fpm.conf到安装目录:
$ cp php-7.0.7/php.ini* /usr/local/php/etc/
$ cd /usr/local/php/etc/
$ cp php.ini-production php.ini
$ cp php-fpm.conf.default php-fpm.conf
$ cp php-fpm.d/www.conf.default php-fpm.d/www.conf
$ ls
pear.conf php-fpm.conf.default php.ini-development php.ini-production
配置php.ini
# 不显示错误,默认
display_errors = Off
# 在关闭display_errors后开启PHP错误日志(路径在php-fpm.conf中配置),默认
log_errors = On
# 字符集,默认
default_charset = "UTF-8"
# 文件上传大小,默认
upload_max_filesize = 2M
# 设置PHP的扩展库路径,,默认被注释了。
extension_dir = "/usr/local/php7/lib/php/extensions/no-debug-non-zts-20151012/"
# 如果不设置extension_dir,也可以直接写绝对位置:
# extension=/usr/local/php/lib/php/extensions/no-debug-non-zts-20151012/redis.so
# 设置PHP的时区
date.timezone = PRC
# 开启opcache,默认是0
[opcache]
; Determines if Zend OPCache is enabled
opcache.enable=1
配置php-fpm.conf
; 去掉里分号,方便以后重启。建议修改
; Default Value: none
; 下面的值最终目录是/usr/local/php/var/run/php-fpm.pid
; 开启后可以平滑重启php-fpm
pid = run/php-fpm.pid
; 设置错误日志的路径,可以默认值
; Note: the default prefix is /usr/local/php/var
; Default Value: log/php-fpm.log, 即/usr/local/php/var/log/php-fpm.log
error_log = /var/log/php-fpm/error.log
; Log等级,可以默认值
; Possible Values: alert, error, warning, notice, debug
; Default Value: notice
log_level = notice
; 后台运行,默认yes,可以默认值
; Default Value: yes
;daemonize = yes
; 引入www.conf文件中的配置,可以默认值
include=/usr/local/php/etc/php-fpm.d/*.conf
配置www.conf(在php-fpm.d目录下)
www.conf这是php-fpm进程服务的扩展配置文件:
; 设置用户和用户组,默认都是nobody。可以默认值保存配置文件后,检验配置是否正确的方法为:
user = nginx
group = nginx
; 设置PHP监听
; 下面是默认值,不建议使用。可以默认值
; listen = 127.0.0.1:9000
; 根据nginx.conf中的配置fastcgi_pass unix:/var/run/php-fpm/php-fpm.sock;
listen = /var/run/php-fpm/php-fpm.sock
######开启慢日志。可以默认值
slowlog = /var/log/php-fpm/$pool-slow.log
request_slowlog_timeout = 10s
/usr/local/php/sbin/php-fpm -t如果出现诸如 test is successful 字样,说明配置没有问题。另外该命令也可以让我们知道php-fpm的配置文件在哪。
建立软连接:
ln -sf /usr/local/php/sbin/php-fpm /usr/bin/或者将php编译生成的bin目录添加到当前Linux系统的环境变量中:
ln -sf /usr/local/php/bin/php /usr/bin/
ln -sf /usr/local/php/bin/phpize /usr/bin/
ln -sf /usr/local/php/bin/php-config /usr/bin/
ln -sf /usr/local/php/bin/php-cig /usr/bin/
echo -e '\nexport PATH=/usr/local/php/bin:/usr/local/php/sbin:$PATH\n' >> /etc/profile && source /etc/profile
启动php-fpm
/usr/local/php/sbin/php-fpm如果提示没有www用户(www.conf里填写了www而不是nobody),则新增:
useradd www检测是否启动:
chown -R www:www /www
ps aux |grep php-fpm # 另外该命令也可以让我们知道fpm的配置文件在哪。查看php-fpm进程数:
netstat -ant |grep 9000
ps aux | grep -c php-fpmphp-fpm操作汇总:
/usr/local/php/sbin/php-fpm # php-fpm启动重启方法二:
kill -INT `cat /usr/local/php/var/run/php-fpm.pid` # php-fpm关闭
kill -USR2 `cat /usr/local/php/var/run/php-fpm.pid` #php-fpm重启
killall php-fpm如果无法平滑启动,那就终止进程id:
/usr/local/php/sbin/php-fpm &
ps aux | grep php-fpm
kill -9 1210 #1210指php-fpm进程id
二、安装Nginx
安装包下载地址: http://nginx.org/download/nginx-1.11.1.tar.gz
依赖:
# 为了支持rewrite功能,我们需要安装pcre配置编译参数
yum install pcre-devel
# 需要ssl的支持,如果不需要ssl支持,请跳过这一步
# yum install openssl*
# gzip 类库安装,按需安装
# yum install zlib zlib-devel
$ tar -zxvf nginx-1.11.1.tar.gz配置ok:
$ cd nginx-1.11.1
$ ./configure \
--prefix=/usr/local/nginx \
--with-http_stub_status_module \
--with-http_ssl_module \
--with-http_realip_module \
--with-http_sub_module \
--with-http_gzip_static_module \
--with-pcre
Configuration summary编译安装nginx
+ using system PCRE library
+ using system OpenSSL library
+ md5: using OpenSSL library
+ sha1: using OpenSSL library
+ using system zlib library
nginx path prefix: "/usr/local/nginx"
nginx binary file: "/usr/local/nginx/sbin/nginx"
nginx modules path: "/usr/local/nginx/modules"
nginx configuration prefix: "/usr/local/nginx/conf"
nginx configuration file: "/usr/local/nginx/conf/nginx.conf"
nginx pid file: "/usr/local/nginx/logs/nginx.pid"
nginx error log file: "/usr/local/nginx/logs/error.log"
nginx http access log file: "/usr/local/nginx/logs/access.log"
nginx http client request body temporary files: "client_body_temp"
nginx http proxy temporary files: "proxy_temp"
nginx http fastcgi temporary files: "fastcgi_temp"
nginx http uwsgi temporary files: "uwsgi_temp"
nginx http scgi temporary files: "scgi_temp"
make设置软连接:
make install
ln -sf /usr/local/nginx/sbin/nginx /usr/sbin检测nginx:
nginx -t显示:nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful
成功了。我们重新配置下nginx.conf:
#user nobody;配置localhost:
worker_processes 1;
#error_log logs/error.log;
#error_log logs/error.log notice;
#error_log logs/error.log info;
#pid logs/nginx.pid;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
# 解决虚拟主机名字过长 http://www.jb51.net/article/26412.htm
server_names_hash_bucket_size 128;
#log_format main '$remote_addr - $remote_user [$time_local] "$request" '
# '$status $body_bytes_sent "$http_referer" '
# '"$http_user_agent" "$http_x_forwarded_for"';
#access_log logs/access.log main;
sendfile on;
#tcp_nopush on;
#keepalive_timeout 0;
keepalive_timeout 65;
#gzip on;
autoindex on;# 显示目录
autoindex_exact_size on;# 显示文件大小
autoindex_localtime on;# 显示文件时间
include vhosts/*.conf;
}
vim ./vhosts/localhost.conf
server {启动nginx:
listen 80;
server_name localhost;
#charset utf-8;
#access_log logs/host.access.log main;
location / {
root /www/www/;
index index.php index.html index.htm;
}
#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 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 /www/www/;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
}
/usr/local/nginx/sbin/nginx重启:
# 或者
nginx
/usr/local/nginx/sbin/nginx -s reload停止:
# 或者
nginx -s reload
/usr/local/nginx/sbin/nginx -s stop如果提示80端口被占用了,可以使用ps aunx | grep 80查看。一般是apache占用了。可以使用:
# 或者
nginx -s stop
chkconfig --list禁止apache启动并关闭apache服务。
chkconfig nginx on
service apache off
三、安装扩展
1、安装swoole
Swoole: PHP的异步、并行、高性能网络通信引擎:http://www.swoole.com/
wget https://github.com/swoole/swoole-src/archive/swoole-1.8.5-stable.zip
unzip swoole-1.8.5-stable.zip
cd swoole-1.8.5-stable
phpize
./configure
make && make install
2、安装redis
wget https://github.com/nicolasff/phpredis/archive/2.2.4.tar.gz
tar -zxvf 2.2.4
cd phpredis-2.2.4/
phpize
./configure
make && make install
四、信号管理
不重载配置启动新/旧工作进程
kill -HUP 旧/新版主进程号从容关闭旧/新进程
kill -QUIT 旧/新主进程号如果此时报错,提示还有进程没有结束就用下面命令先关闭旧/新工作进程,再关闭主进程号:
kill -TERM 旧/新工作进程号升级、添加或删除模块时,我们需要停掉服务器
kill -USR2 旧版程序的主进程号或进程文件名
crontab执行之后发送邮件给root
空心菜 回复了问题 2 人关注 1 个回复 5858 次浏览 2017-06-15 14:23
单独编译添加PHP的pdo_mysql模块
being 发表了文章 0 个评论 3329 次浏览 2017-06-14 22:53
先找需要的版本,我用的是稳定的版本。要先看看说明,特别是要注意mysql的php的版本
# wget http://pecl.php.net/get/PDO_MYSQL-1.0.2.tgz执行完以后,报如下错误:
# tar xzvf PDO_MYSQL-1.0.2.tgz
# cd PDO_MYSQL-1.0.2
# /usr/local/php/bin/phpize
Configuring for:
PHP Api Version: 20041225
Zend Module Api No: 20060613
Zend Extension Api No: 220060519
# ./configure
checking for mysql_config... not found这个错误表明系统缺省没有找到你的mysql安装目录,因此可以使用这个命令解决:
configure: error: Cannot find MySQL header files under
ln -s /usr/local/mysql/bin/mysql_config /usr/bin/mysql_config这样建立了你的实际msyql安装目录和mysql_config命令的管理
经过configure就可以make了
在执行:./configure 时,又出现了一个问题:
checking for PDO includes... checking for PDO includes...检查的时候,不能找到php_pdo_driver.h,经过检查,发现在读php-config的时候,在读以前的配置。
configure: error: Cannot find php_pdo_driver.h.
解决方法:
./configure –with-php-config=/usr/local/php/bin/php-config (根据实际的路径的来指定)在执行./configure --with-php-config=/usr/local/php/bin/php-config,又出现了一个问题:
error: mysql_query missing!?解决方法:
./configure --with-php-config=/opt/php5/bin/php-config --with-pdo-mysql=/usr/local/mysql(根据自己的实际路径,设定编译安装mysql的位置).
make && make install注意pdo_mysql的全路径,我的是:
/usr/local/php/lib/php/extensions/no-debug-non-zts-20060613/pdo_mysql.so
然后在/usr/local/lib/php.ini加上一句:
extension=/usr/local/php/lib/php/extensions/no-debug-non-zts-20060613/pdo_mysql.so重新启动apache即可看到已经加载pdo_mysql成功。
Centos6.8下编译安装Apache 2.4.25详细过程
Ansible 发表了文章 0 个评论 2689 次浏览 2017-06-02 19:34
# cd /usr/local/src
# wget 'http://mirror.bit.edu.cn/apache//httpd/httpd-2.4.25.tar.gz'
二、解压安装
# tar zxf httpd-2.4.25.tar.gz在这过程中报错如下:
# cd httpd-2.4.25
# ./configure --prefix=/usr/local/apache --enable-so --enable-rewrite --with-mpm=worker
checking for chosen layout... Apache
checking for working mkdir -p... yes
checking for grep that handles long lines and -e... /bin/grep
checking for egrep... /bin/grep -E
checking build system type... x86_64-unknown-linux-gnu
checking host system type... x86_64-unknown-linux-gnu
checking target system type... x86_64-unknown-linux-gnu
configure:
configure: Configuring Apache Portable Runtime library...
configure:
checking for APR... no
configure: error: APR not found. Please read the documentation.
解决APR not found 过程如下:
# cd /usr/local/src
# wget http://archive.apache.org/dist/apr/apr-1.5.2.tar.gz
# tar zxf apr-1.5.2.tar.gz
# ./configure --prefix=/usr/local/apr
# make && make install
在编译apr的的过程中报错如下:
configure: creating ./config.status
config.status: creating Makefile
config.status: creating include/apr.h
config.status: creating build/apr_rules.mk
config.status: creating build/pkg/pkginfo
config.status: creating apr-1-config
config.status: creating apr.pc
config.status: creating test/Makefile
config.status: creating test/internal/Makefile
config.status: creating include/arch/unix/apr_private.h
config.status: executing libtool commands
rm: cannot remove `libtoolT': No such file or directory
config.status: executing default commands
解决方法如下:
在configure里面 RM='$RM -f' 这里的$RM后面一定有一个空格。 如果后面没有空格,直接连接减号,就依
然会报错。把RM='$RM'改为RM='$RM -f'
接着重新编译Apache:
./configure --prefix=/usr/local/apache --enable-so --enable-rewrite --with-mpm=worker --with-apr=/usr/local/apr报错如下:
checking for chosen layout... Apache
checking for working mkdir -p... yes
checking for grep that handles long lines and -e... /bin/grep
checking for egrep... /bin/grep -E
checking build system type... x86_64-unknown-linux-gnu
checking host system type... x86_64-unknown-linux-gnu
checking target system type... x86_64-unknown-linux-gnu
configure:
configure: Configuring Apache Portable Runtime library...
configure:
checking for APR... yes
setting CC to "gcc"
setting CPP to "gcc -E"
setting CFLAGS to " -g -O2 -pthread"
setting CPPFLAGS to " -DLINUX -D_REENTRANT -D_GNU_SOURCE"
setting LDFLAGS to " "
configure:
configure: Configuring Apache Portable Runtime Utility library...
configure:
checking for APR-util... no
configure: error: APR-util not found. Please read the documentation.
解决APR-util not found过程:
# wget 'http://archive.apache.org/dist/apr/apr-util-1.5.2.tar.gz'
# tar zxf apr-util-1.5.2.tar.gz
# cd apr-util-1.5.2
# ./configure --prefix=/usr/local/apr-util --with-apr=/usr/local/apr/bin/apr-1-config
# make && make install
编译完成后,我们再次重新编译Apache:
# ./configure --prefix=/usr/local/apache --enable-so --enable-rewrite --with-mpm=worker --with-apr=/usr/local/apr --with-apr-util=/usr/local/apr-utilenable-so 允许apache支持动态模块 enable-rewrite 支持URL重定向 with-mpm=worker apache进程模型为worker 默认为prefork
最后:
# make && make install到这编译就算完成了。
Sudo本地提权漏洞安全预警
OS小编 发表了文章 0 个评论 2904 次浏览 2017-05-31 15:53
影响范围
Centos 5、6、7
Redhat Enterprise Linux 5、6、7
Ubuntu 14.04、15.04、16.04、16.10、17.04、17.10
Debian wheezy、jessie、jessie、sid
SUSE Linux Enterprise Software Development Kit 12 SP1、SP2
SUSE Linux Enterprise Server for SAP 12
SUSE Linux Enterprise Server 12 SP1 、SP2
SUSE Linux Enterprise Server 12-LTSS
SUSE Linux Enterprise Desktop 12 SP1 、SP2
SUSE Linux Enterprise Server for Raspberry Pi 12 SP2
OpenSuse
修复方案
【CentOS/RHEL】
yum update
或 yum install sudo
【Ubuntu/Debian】
sudo apt update $ sudo apt upgrade
或sudo apt-get install sudo
备注:部分官方版本还未发布可用修复包,请时刻关注,官网发布后UCloud软件源也会在第一时间更新。
【修复版本】
1、Centos /Redhat
Centos /RHEL 7 :1.8.6p7-22.el7_3
Centos /RHEL 6 :1.8.6p3-28.el6_9
Centos /RHEL 5 :1.7.2p1-30.el5_11
2、Ubuntu
Ubuntu 14.04:1.8.9p5-1ubuntu1.4
Ubuntu 16.04:1.8.16-0ubuntu1.4
Ubuntu 16.10:1.8.16-0ubuntu3.2
Ubuntu 17.04:1.8.19p1-1ubuntu1.1
3、Debian
Debian wheezy:1.8.5p2-1+nmu3+deb7u3
Debian jessie:1.8.10p3-1+deb8u4
4、SUSE /OpenSuse
1.8.10p3-2.11.1
1.8.10p3-10.5.1
漏洞详情
CVE-2017-1000367:当确定tty时,Sudo没有正确解析/ proc / [pid] / stat的内容,本地攻击者可能会使用此方法来覆盖文件系统上的任何文件,从而绕过预期权限或获取root shell。
sudo版本查看方法:
Centos /RHEL /SUSE /OpenSuse:rpm -qa|grep sudo
Ubuntu /Debian:dpkg -l sudo