saltstack二

配置管理

haproxy的安裝部署

haproxy各版本安裝包下載路徑https://www.haproxy.org/download/1.6/src/,跳轉地址為http,改為https即可

創建相關目錄

# 創建配置目錄
[root@linux-node1 ~]# mkdir /srv/salt/prod/pkg/
[root@linux-node1 ~]# mkdir /srv/salt/prod/haproxy/
# 啟動腳本、配置文件放在這里
[root@linux-node1 ~]# mkdir /srv/salt/prod/haproxy/files

?

編寫pkg-init文件

[root@linux-node1 ~]# cd /srv/salt/prod/pkg/
[root@linux-node1 pkg]# vim pkg-init.sls
pkg-init:                            # ID describepkg.installed:                    # pkg模塊 installed方法- names:- gcc- gcc-c++- glibc- make- autoconf- openssl- openssl-devel

?

編寫方法:

????? 首先自己先安裝一遍,然后將步驟移植到sls文件中。

[root@linux-node1 prod]# cd /srv/salt/prod/haproxy/files/
[root@linux-node1 files]# ll
-rw-r--r-- 1 root root 1538976 11月  7 09:04 haproxy-1.6.2.tar.gz
[root@linux-node1 files]# cp haproxy-1.6.2.tar.gz  /usr/local/src/
[root@linux-node1 files]# cd /usr/local/src/
[root@linux-node1 src]# tar zxf haproxy-1.6.2.tar.gz 
[root@linux-node1 src]# cd haproxy-1.6.2
[root@linux-node1 haproxy-1.6.2]# make TARGET=linux26 PREFIX=/usr/local/haproxy && make install PREFIX=/usr/local/haproxy

?

修改啟動文件

[root@linux-node1 examples]# pwd
/usr/local/src/haproxy-1.6.2/examples
[root@linux-node1 examples]# vim haproxy.init 
BIN=/usr/local/haproxy/sbin/$BASENAME
# 拷貝啟動文件到salt目錄
[root@linux-node1 examples]# cp haproxy.init /srv/salt/prod/haproxy/files/

?

編寫安裝文件

[root@linux-node1 examples]# cd /srv/salt/prod/haproxy/
[root@linux-node1 haproxy]# vim install.slsinclude:                                                   # 導入pkg目錄下的pkg-init.sls文件- pkg.pkg-inithaproxy-install:                                           # 定義聲明一個ID,方便調用,如果不寫,就必須在這兒寫上下面name聲明,表文件路徑file.managed:                                            # file模塊下的managed方法- name: /usr/local/src/haproxy-1.6.2.tar.gz            # name聲明,文件路徑。說明:minion端是沒有這個路徑和文件的,但是它會從下面source路徑將文件拷貝到該路徑,沒有文件夾就創建
- source: salt://haproxy/files/haproxy-1.6.2.tar.gz # 文件源,minion端從這里拷貝- user: root # 用戶- group: root # 組- mode: 755 # 權限cmd.run: # 執行命令- name: cd /usr/local/src/ && tar zxf haproxy-1.6.2.tar.gz && cd haproxy-1.6.2 && make TARGET=linux26 PREFIX=/usr/local/haproxy && make install PREFIX=/usr/local/haproxy- unless: test -d /usr/local/haproxy # 判斷是否存在,unless返回值是false時,才執行命令- require: # 依賴下面的內容- pkg: pkg-init # pkg是模塊- file: haproxy-install # file也是模塊 格式: - 模塊: ID 依賴文件如果有ID聲明就寫ID聲明,如果沒有就寫name聲明haproxy-init: # 定義聲明一個IDfile.managed: - name: /etc/init.d/haproxy- source: salt://haproxy/files/haproxy.init       #修改啟動文件并將其放入該目錄- user: root- group: root- mode: 755- require:- cmd: haproxy-installcmd.run:- name: chkconfig --add haproxy- unless: chkconfig --list |grep haproxy- require:- file: haproxy-initnet.ipv4.ip_nonlocal_bind: # 定義聲明一個IDsysctl.present: # 修改系統的kernel值- value: 1 # 改值為1haproxy-config-dir: file.directory:- name: /etc/haproxy- user: root- group: root- mode: 755

?

查看安裝文件并執行

[root@linux-node1 haproxy]# pwd
/srv/salt/prod/haproxy
[root@linux-node1 haproxy]# tree
.
├── files
│   ├── haproxy-1.6.2.tar.gz
│   └── haproxy.init
└── install.sls
# 單個執行,另外需要指定環境是prod,不指定默認為base
[root@linux-node1 haproxy]# salt 'linux-node1.*' state.sls haproxy.install saltenv='prod'

?注意上面的saltenv對應的master配置文件為

file_roots:base:- /srv/salt/basetest:- /srv/salt/testdev:- /srv/salt/dev/services- /srv/salt/dev/statesprod:- /srv/salt/prod

?

編輯配置文件

# 編輯top文件
[root@linux-node1 cluster]# cd /srv/salt/base/
[root@linux-node1 base]# vim top.sls 
base:'*':- init.env_init
prod:'linux-node1.example.com':- cluster.haproxy-outside'linux-node2.example.com':- cluster.haproxy-outside

?

修改后端RS的端口

[root@linux-node1 base]# vim /etc/httpd/conf/httpd.conf     
# 端口改成8080,與上面haproxy的配置一樣

?

測試通過后,執行高級狀態

[root@linux-node1 base]# salt '*' state.highstate test=True
[root@linux-node1 base]# salt '*' state.highstate

?

在RS上設置index.html

分別色設置,沒有的話會報錯403

[root@linux-node2 ~]# vim /var/www/html/index.html

?

訪問haproxy的狀態

# 用戶名密碼在haproxy-outside.cfg中配置

image

keepalived的安裝部署

首先自己安裝一次

[root@linux-node1 base]# cd /usr/local/src
[root@linux-node1 src]# wget http://www.keepalived.org/software/keepalived-1.2.19.tar.gz
[root@linux-node1 src]# tar zxf keepalived-1.2.19.tar.gz 
[root@linux-node1 src]# cd keepalived-1.2.19
[root@linux-node1 keepalived-1.2.19]# ./configure --prefix=/usr/local/keepalived --disable-fwmark
[root@linux-node1 keepalived-1.2.19]# make && make install

?

建立文件放置目錄

[root@linux-node1 etc]# pwd
/usr/local/src/keepalived-1.2.19/keepalived/etc
[root@linux-node1 etc]# mkdir /srv/salt/prod/keepalived/
[root@linux-node1 etc]# mkdir /srv/salt/prod/keepalived/files
[root@linux-node1 etc]# cp init.d/keepalived.init /srv/salt/prod/keepalived/files/
[root@linux-node1 etc]# cp keepalived/keepalived.conf /srv/salt/prod/keepalived/files/
[root@linux-node1 etc]# cp /usr/local/src/keepalived-1.2.19.tar.gz /srv/salt/prod/keepalived/files/
[root@linux-node1 init.d]# cp /usr/local/src/keepalived-1.2.19/keepalived/etc/init.d/keepalived.sysconfig /srv/salt/prod/keepalived/files/
# files中的文件有
[root@linux-node1 sysconfig]# cd /srv/salt/prod/keepalived/files/
[root@linux-node1 files]# ll
總用量 336
-rw-r--r-- 1 root root 330164 1月   2 23:47 keepalived-1.2.19.tar.gz
-rw-r--r-- 1 root root   3562 1月   2 23:46 keepalived.conf
-rwxr-xr-x 1 root root   1335 1月   2 23:51 keepalived.init
-rw-r--r-- 1 root root    667 1月   3 00:13 keepalived.sysconfig

?

修改啟動腳本

[root@linux-node1 files]# vim keepalived.init 
daemon /usr/local/keepalived/sbin/keepalived ${KEEPALIVED_OPTIONS}

?

編輯安裝文件

[root@linux-node1 keepalived]# pwd
/srv/salt/prod/keepalived
[root@linux-node1 keepalived]# cat install.sls 
include:- pkg.pkg-initkeepalived-install:file.managed:- name: /usr/local/src/keepalived-1.2.19.tar.gz- source: salt://keepalived/files/keepalived-1.2.19.tar.gz- user: root- group: root- mode: 755cmd.run:- name: cd /usr/local/src && tar zxf keepalived-1.2.19.tar.gz  && cd keepalived-1.2.19 && ./configure --prefix=/usr/local/keepalived --disable-fwmark && make && make install && ln -s /usr/local/keepalived/sbin/keepalived /usr/sbin- unless: test -d /usr/local/keepalived- require:- pkg: pkg-init- file: keepalived-installkeepalived-init:file.managed:- name: /etc/init.d/keepalived- source: salt://keepalived/files/keepalived.init- user: root- group: root- mode: 755cmd.run:- name: chkconfig --add keepalived- unless: chkconfig --list | grep keepalived- require:- file: keepalived-init/etc/sysconfig/keepalived:file.managed:- source: salt://keepalived/files/keepalived.sysconfig- user: root- group: root- mode: 644keepalived-config:    //配置文件這塊在這兒只是舉個例子,實際是在下面單獨配置修改(因為在實際應用中,每個keepalived的配置文件都不相同,這里就需要用到jinja對應傳參)file.managed:
    - name: /etc/keepalived/keepalived.conf
    - source: salt://keepalived/files/keepalived.conf- user: root
    - group: root
    - mode: 644/etc/keepalived:file.directory:- user: root- group: root- mode: 755

?

?

執行安裝

[root@linux-node1 keepalived]# salt '*' state.sls keepalived.install env=prod

?

業務模塊

keepalived的配置文件

[root@linux-node1 ~]# cd /srv/salt/prod/cluster/files/
[root@linux-node1 files]# vim haproxy-outside-keepalived.conf! Configuration File for keepalived
global_defs {notification_email {saltstack@example.com}notification_email_from keepalived@example.comsmtp_server 127.0.0.1smtp_connect_timeout 30router_id {{ROUTEID}}
}vrrp_instance haproxy_ha {
state {{STATEID}}
interface eth0virtual_router_id 36
priority {{PRIORITYID}}advert_int 1
authentication {
auth_type PASSauth_pass 1111}virtual_ipaddress {10.0.0.11                        #  這個VIP在haproxy的配置文件中也有}
}

?

keepalived的啟動文件

其中定義了上面需要的變量,用到了jinja模版

[root@linux-node1 cluster]# cd /srv/salt/prod/cluster/
[root@linux-node1 cluster]# vim haproxy-outside-keepalived.sls
include:- keepalived.installkeepalived-service:file.managed:- name: /etc/keepalived/keepalived.conf- source: salt://cluster/files/haproxy-outside-keepalived.conf- user: root- group: root- mode: 644- template: jinja{% if grains['fqdn'] == 'linux-node1.example.com' %}- ROUTEID: haproxy_ha     //格式 變量: 值- STATEID: MASTER- PRIORITYID: 150{% elif grains['fqdn'] == 'linux-node2.example.com' %}- ROUTEID: haproxy_ha- STATEID: BACKUP- PRIORITYID: 100{% endif %}service.running:- name: keepalived- enable: True- watch:- file: keepalived-service

注:require依賴監聽軟件包是否安裝(沒有安裝就安裝),watch是監聽文件是否發生改變(發生改變就執行相應功能,如上例則為:監聽文件改變,如果改變就重啟服務)

?

編輯top文件

[root@linux-node1 base]# cd /srv/salt/base/
[root@linux-node1 base]# cat top.sls 
base:'*':- init.env_init
prod:'linux-node1.example.com':- cluster.haproxy-outside- cluster.haproxy-outside-keepalived       //配置sls文件,其中include有keepalived.install,即執行該配置sls文件即可執行keepalived安裝sls'linux-node2.example.com':- cluster.haproxy-outside- cluster.haproxy-outside-keepalived

?

執行高級狀態

先單獨執行下,看有沒有錯誤在執行高級狀態

[root@linux-node1 cluster]# salt '*' state.sls cluster.haproxy-outside-keepalived env=prod
[root@linux-node1 cluster]# salt '*' state.highstate

?

查看結果

[root@linux-node1 base]# ip a |grep eth0
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000inet 10.0.0.7/24 brd 10.0.0.255 scope global eth0inet 10.0.0.11/32 scope global eth0當master的keepaliveddown掉后,VIP會飄到backup上

?

haproxy的調度設置

[root@linux-node1 base]# grep "balance" /srv/salt/prod/cluster/files/haproxy-outside.cfg 
balance roundrobin                         #輪詢;source:固定不變可以在haproxy-status頁面上查看到變化

?

如圖

image

? zabbix-agent的安裝部署

開啟pillar

[root@linux-node1 init]# vim /etc/salt/master
pillar_roots:base:- /srv/pillar/base[root@linux-node1 init]# mkdir /srv/pillar/base
[root@linux-node1 init]# /etc/init.d/salt-master restart
Stopping salt-master daemon:                               [確定]
Starting salt-master daemon:                               [確定]

?

編寫zabbix-agent安裝文件

[root@linux-node1 base]# cd /srv/salt/base/init/
[root@linux-node1 init]# vim zabbix_agent.sls
zabbix-agent-install:pkg.installed:- name: zabbix-agentfile.managed:- name: /etc/zabbix/zabbix_agentd.conf- source: salt://init/files/zabbix_agentd.conf- template: jinja- defaults:Server: {{ pillar['zabbix-agent']['Zabbix_Server'] }}- require:- pkg: zabbix-agent-installservice.running:- name: zabbix-agent- enable: True- watch:- pkg: zabbix-agent-install- file: zabbix-agent-install

?

編寫top文件

[root@linux-node1 base]# cd /srv/pillar/base/
[root@linux-node1 base]# vim top.sls
base:'*':- zabbix

?

編寫zabbix.sls

[root@linux-node1 base]# vim zabbix.sls
zabbix-agent:Zabbix_Server: 10.0.0.7
這里對應上面Server: {{ pillar['zabbix-agent']['Zabbix_Server'] }}

?

配置文件拷貝修改

[root@linux-node1 base]# cd /srv/salt/base/init/files
[root@linux-node1 init]# cp /etc/zabbix/zabbix_agentd.conf .[root@linux-node1 init]# grep 'Server' zabbix_agentd.conf 
Server={{ Server }}                                      # 對應上面zabbix_agent.sls中的server

?

編輯env_init文件

[root@linux-node1 init]# vim env_init.sls 
include:- init.dns- init.history- init.audit- init.sysctl- init.zabbix_agent
[root@linux-node1 init]# tree /srv/salt/base/init/ 
/srv/salt/base/init/ 
├── audit.sls 
├── dns.sls 
├── env_init.sls 
├── files 
│   ├── resolv.conf 
│   └── zabbix_agentd.conf 
├── history.sls 
├── sysctl.sls 
└── zabbix_agent.sls

?

另外epel的sls文件

[root@linux-node1 init]# vim epel.slsyum_repo_release:pkg.installed:- sources:- epel-release: http://mirrors.aliyun.com/epel/6/x86_64/epel-release-6-8.noarch.rpm- unless: rpm -qa | grep epel-release-6-8

?

安裝libevent

[root@linux-node1 ~]# cd /srv/salt/prod/
[root@linux-node1 prod]# mkdir -pv libevent/files
[root@linux-node1 prod]# cd /srv/salt/prod/libevent
[root@linux-node1 libevent]# vim install.sls
libevent-source-install:file.managed:- name: /usr/local/src/libevent-2.0.22-stable.tar.gz- source: salt://libevent/files/libevent-2.0.22-stable.tar.gz- user: root- group: root- mode: 644cmd.run:- name: cd /usr/local/src && tar zxf libevent-2.0.22-stable.tar.gz && cd libevent-2.0.22-stable &&  ./configure --prefix=/usr/local/libevent && make && make install- unless: test -d /usr/local/libevent- require:- file: libevent-source-install[root@linux-node1 libevent]# pwd
/srv/salt/prod/libevent
[root@linux-node1 libevent]# tree
.
├── files
│   └── libevent-2.0.22-stable.tar.gz
└── install.sls[root@linux-node1 files]# salt '*' state.sls libevent.install env=prod
[root@linux-node1 files]# salt '*' state.highstate

?

新建用戶,且不允許登錄

[root@linux-node1 prod]# mkdir user
[root@linux-node1 prod]# cd user/
[root@linux-node1 user]# vim www.sls
www-user-group:group.present:- name: www- gid: 1000user.present:- name: www- fullname: www- shell: /sbin/nologin- uid: 1000- gid: 1000

?

安裝memcahe

[root@linux-node1 prod]# cd /srv/salt/prod/
[root@linux-node1 prod]# mkdir -p memcache/files
[root@linux-node1 prod]# cd memcache/files/
[root@linux-node1 files]# cp memcached-1.4.24.tar.gz /usr/local/src/[root@linux-node1 memcache]# vim install.sls
include:- libevent.install                                # 將libevent文件包含進來memcached-source-install:file.managed:- name: /usr/local/src/memcached-1.4.24.tar.gz- source: salt://memcached/files/memcached-1.4.24.tar.gz- user: root- group: root- mode: 644cmd.run:- name: cd /usr/local/src && tar zxf memcached-1.4.24.tar.gz && cd memcached-1.4.24&& ./configure --prefix=/usr/local/memcached --enable-64bit --with-libevent=/usr/local/libevent && make && make install- unless: test -d /usr/local/memcached- require:- cmd: libevent-source-install                # libevent的ID- file: memcached-source-install

?

安裝pcre

[root@linux-node1 prod]# mkdir /srv/salt/prod/pcre/files -p
[root@linux-node1 prod]# cd /srv/salt/prod/pcre/files/
[root@linux-node1 files]# cp pcre-8.37.tar.gz  /usr/local/src/
[root@linux-node1 prod]# cd /srv/salt/prod/pcre
[root@linux-node1 pcre]# cat install.sls 
pcre-source-install:file.managed:- name: /usr/local/src/pcre-8.37.tar.gz- source: salt://pcre/files/pcre-8.37.tar.gz- user: root- group: root- mode: 755cmd.run:- name: cd /usr/local/src && tar zxf pcre-8.37.tar.gz && cd pcre-8.37 && ./configure --prefix=/usr/local/pcre && make && make install- unless: test -d /usr/local/pcre- require:- file: pcre-source-install

?

安裝nginx

[root@linux-node1 nginx]# mkdir -p /srv/salt/prod/nginx/files
[root@linux-node1 nginx]# cd /srv/salt/prod/nginx/files/
[root@linux-node1 files]# cp nginx-1.9.1.tar.gz /usr/local/src/
[root@linux-node1 nginx]# cat install.sls 
include:- pcre.install- user.www- pkg.pkg-init
nginx-source-install:file.managed:- name: /usr/local/src/nginx-1.9.1.tar.gz- source: salt://nginx/files/nginx-1.9.1.tar.gz- user: root- group: root- mode: 755cmd.run:- name: cd /usr/local/src && tar zxf nginx-1.9.1.tar.gz && cd nginx-1.9.1&& ./configure --prefix=/usr/local/nginx --user=www --group=www --with-http_ssl_module --with-http_stub_status_module --with-file-aio --with-http_dav_module --with-pcre=/usr/local/src/pcre-8.37 && make && make install && chown -R www:www /usr/local/nginx- unless: test -d /usr/local/nginx- require:- user: www-user-group- file: nginx-source-install- pkg: pkg-init- cmd: pcre-source-install[root@linux-node1 nginx]# cat service.sls 
include:- nginx.installnginx-init:file.managed:- name: /etc/init.d/nginx- source: salt://nginx/files/nginx-init- mode: 755- user: root- group: rootcmd.run:- name: chkconfig --add nginx- unless: chkconfig --list | grep nginx- require:- file: nginx-init/usr/local/nginx/conf/nginx.conf:file.managed:- source: salt://nginx/files/nginx.conf- user: www- group: www- mode: 644 nginx-service:file.directory:- name: /usr/local/nginx/conf/vhost- require:- cmd: nginx-source-installservice.running:- name: nginx- enable: True- reload: True- require:- cmd: nginx-init- watch:- file: /usr/local/nginx/conf/nginx.conf[root@linux-node1 nginx]# tree
.
├── files
│   ├── nginx-1.9.1.tar.gz
│   ├── nginx.conf
│   └── nginx-init
├── install.sls
└── service.sls

?

PHP+memcahce/redis的安裝

基礎環境

[root@linux-node1 ~]# mkdir /srv/salt/prod/php/files -p
[root@linux-node1 ~]# cd /srv/salt/prod/php/files/
[root@linux-node1 files]# ll
總用量 18120
-rw-r--r-- 1 root root     2362 11月 14 23:06 init.d.php-fpm
-rw-r--r-- 1 root root    36459 11月 14 23:06 memcache-2.2.7.tgz
-rw-r--r-- 1 root root 18281659 11月 14 23:06 php-5.6.9.tar.gz
-rw-r--r-- 1 root root    22252 11月 14 23:06 php-fpm.conf.default
-rw-r--r-- 1 root root    69599 11月 14 23:06 php.ini-production
-rw-r--r-- 1 root root   134340 11月 14 23:06 redis-2.2.7.tgz

?

安裝文件

[root@linux-node1 files]# cd ..
[root@linux-node1 php]# vim install.sls
pkg-php:pkg.installed:- names:- mysql-devel- openssl-devel- swig- libjpeg-turbo- libjpeg-turbo-devel- libpng- libpng-devel- freetype- freetype-devel- libxml2- libxml2-devel- zlib- zlib-devel- libcurl- libcurl-develphp-source-install:file.managed:- name: /usr/local/src/php-5.6.9.tar.gz- source: salt://php/files/php-5.6.9.tar.gz- user: root- group: root- mode: 755cmd.run:- name: cd /usr/local/src && tar zxf php-5.6.9.tar.gz && cd php-5.6.9&&  ./configure --prefix=/usr/local/php-fastcgi --with-pdo-mysql=mysqlnd --with-mysqli=mysqlnd --with-mysql=mysqlnd --with-jpeg-dir --with-png-dir --with-zlib --enable-xml  --with-libxml-dir --with-curl --enable-bcmath --enable-shmop --enable-sysvsem  --enable-inline-optimization --enable-mbregex --with-openssl --enable-mbstring --with-gd --enable-gd-native-ttf --with-freetype-dir=/usr/lib64 --with-gettext=/usr/lib64 --enable-sockets --with-xmlrpc --enable-zip --enable-soap --disable-debug --enable-opcache --enable-zip --with-config-file-path=/usr/local/php-fastcgi/etc --enable-fpm --with-fpm-user=www --with-fpm-group=www && make && make install- require:- file: php-source-install- user: www-user-group- unless: test -d /usr/local/php-fastcgipdo-plugin:cmd.run:- name: cd /usr/local/src/php-5.6.9/ext/pdo_mysql/ && /usr/local/php-fastcgi/bin/phpize && ./configure --with-php-config=/usr/local/php-fastcgi/bin/php-config &&  make&& make install- unless: test -f /usr/local/php-fastcgi/lib/php/extensions/*/pdo_mysql.so- require:- cmd: php-source-installphp-ini:file.managed:- name: /usr/local/php-fastcgi/etc/php.ini- source: salt://php/files/php.ini-production- user: root- group: root- mode: 644php-fpm:file.managed:- name: /usr/local/php-fastcgi/etc/php-fpm.conf- source: salt://php/files/php-fpm.conf.default- user: root- group: root- mode: 644php-fastcgi-service:file.managed:- name: /etc/init.d/php-fpm- source: salt://php/files/init.d.php-fpm- user: root- group: root- mode: 755cmd.run:- name: chkconfig --add php-fpm- unless: chkconfig --list | grep php-fpm- require:- file: php-fastcgi-serviceservice.running:- name: php-fpm- enable: True- require:- cmd: php-fastcgi-service- watch:- file: php-ini- file: php-fpm

?

memcache

[root@linux-node1 php]# cat php-memcache.sls 
memcache-plugin:file.managed:- name: /usr/local/src/memcache-2.2.7.tgz- source: salt://php/files/memcache-2.2.7.tgz- user: root- group: root- mode: 755cmd.run:- name: cd /usr/local/src && tar zxf memcache-2.2.7.tgz && cd memcache-2.2.7&& /usr/local/php-fastcgi/bin/phpize && ./configure --enable-memcache --with-php-config=/usr/local/php-fastcgi/bin/php-config &&  make&& make install- unless: test -f /usr/local/php-fastcgi/lib/php/extensions/*/memcache.sorequire:- file: memcache-plugin- cmd: php-install/usr/local/php-fastcgi/etc/php.ini:file.append:- text:- extension=memcache.so

?

redis

[root@linux-node1 php]# cat php-redis.sls 
redis-plugin:file.managed:- name: /usr/local/src/phpredis-2.2.7.tgz- source: salt://php/files/phpredis-2.2.7.tgz- user: root- group: root- mode: 755cmd.run:- name: cd /usr/local/src && tar zxf phpredis-2.2.7.tgz && cd phpredis-2.2.7&& /usr/local/php-fastcgi/bin/phpize && ./configure --with-php-config=/usr/local/php-fastcgi/bin/php-config &&  make&& make install- unless: test -f /usr/local/php-fastcgi/lib/php/extensions/*/redis.sorequire:- file: redis-plugin- cmd: php-install/usr/local/php-fastcgi/etc/php.ini:file.append:- text:- extension=redis.so

?

出處:http://www.cnblogs.com/caoxiaojian/

轉載于:https://www.cnblogs.com/dannylinux/p/8962461.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/389771.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/389771.shtml
英文地址,請注明出處:http://en.pswp.cn/news/389771.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

319. 燈泡開關

319. 燈泡開關 初始時有 n 個燈泡處于關閉狀態。第一輪&#xff0c;你將會打開所有燈泡。接下來的第二輪&#xff0c;你將會每兩個燈泡關閉一個。 第三輪&#xff0c;你每三個燈泡就切換一個燈泡的開關&#xff08;即&#xff0c;打開變關閉&#xff0c;關閉變打開&#xff0…

如何生成隨機不重復的11位數字

要求 不重復隨機11位數字不占存儲我們都知道11位數字(random)對應有最大值max和最小值min99999999999和10000000000.很簡單的從最小值開始按順序分發到最大值&#xff0c;就滿足了不重復&#xff0c;不占存儲&#xff0c;11位數字的特性。那么接下來就要考慮如何生成隨機數字這…

因為你的電腦安裝了即點即用_即你所愛

因為你的電腦安裝了即點即用Data visualization is a great way to celebrate our favorite pieces of art as well as reveal connections and ideas that were previously invisible. More importantly, it’s a fun way to connect things we love — visualizing data and …

關于前端緩存問題

Cookie、localStorage、sessionStorage的異同 之前沒怎接觸過前端緩存&#xff0c;請教了前端同事之后他給我粘了幾行代碼&#xff0c;用localStorage存取信息&#xff0c;后來老大review代碼的時候發現&#xff0c;被批了一頓&#xff0c;現在好好看看這幾個前端緩存的區別&am…

2074. 反轉偶數長度組的節點

2074. 反轉偶數長度組的節點 給你一個鏈表的頭節點 head 。 鏈表中的節點 按順序 劃分成若干 非空 組&#xff0c;這些非空組的長度構成一個自然數序列&#xff08;1, 2, 3, 4, …&#xff09;。一個組的 長度 就是組中分配到的節點數目。換句話說&#xff1a; 節點 1 分配給…

阿里云云服務器硬盤分區及掛載

云服務器環境&#xff1a;CentOS 6.2 64位 客戶端環境&#xff1a;Mac OSX 遠程連接方式&#xff1a;運行 Terminal&#xff0c;輸入命令 ssh usernameip 硬盤分區及掛載操作步驟&#xff1a; 查看未掛載的硬盤&#xff08;名稱為/dev/xvdb&#xff09;fdisk -l Disk /dev/xvdb…

團隊管理新思考_需要一個新的空間來思考討論和行動

團隊管理新思考andrew wong安德魯黃 Follow跟隨 Sep 4 九月4 There is a need for a new space to think, discuss, and act. This need are being felt by the majority of AI / ML / Data Product Managers out there. They are exhausted by the ever increasing data volum…

Uva201

原題地址&#xff1a;https://uva.onlinejudge.org/index.php?optioncom_onlinejudge&Itemid9 題意&#xff1a; 就是要你輸入一系列橫邊的起始點&#xff0c;和豎邊的起始點&#xff0c;然后你去找出這些邊里面構成的所有正方形。 心得體會 一道難度適中的模擬題&#xf…

2075. 解碼斜向換位密碼

2075. 解碼斜向換位密碼 字符串 originalText 使用 斜向換位密碼 &#xff0c;經由 行數固定 為 rows 的矩陣輔助&#xff0c;加密得到一個字符串 encodedText 。 originalText 先按從左上到右下的方式放置到矩陣中。 先填充藍色單元格&#xff0c;接著是紅色單元格&#xff…

微服務實戰(六):落地微服務架構到直銷系統(事件存儲)

在CQRS架構中&#xff0c;一個比較重要的內容就是當命令處理器從命令隊列中接收到相關的命令數據后&#xff0c;通過調用領域對象邏輯&#xff0c;然后將當前事件的對象數據持久化到事件存儲中。主要的用途是能夠快速持久化對象此次的狀態&#xff0c;另外也可以通過未來最終一…

時間序列數據的多元回歸_清理和理解多元時間序列數據

時間序列數據的多元回歸No matter what kind of data science project one is assigned to, making sense of the dataset and cleaning it always critical for success. The first step is to understand the data using exploratory data analysis (EDA)as it helps us crea…

vue-cli搭建項目的目錄結構及說明

vue-cli基于webpack搭建項目的目錄結構 build文件夾 ├── build // 項目構建的(webpack)相關代碼 │ ├── build.js // 生產環境構建代碼&#xff08;在npm run build的時候會用到這個文件夾&#xff09;│ ├── check-versions.js // 檢查node&am…

391. 完美矩形

391. 完美矩形 給你一個數組 rectangles &#xff0c;其中 rectangles[i] [xi, yi, ai, bi] 表示一個坐標軸平行的矩形。這個矩形的左下頂點是 (xi, yi) &#xff0c;右上頂點是 (ai, bi) 。 如果所有矩形一起精確覆蓋了某個矩形區域&#xff0c;則返回 true &#xff1b;否…

bigquery 教程_bigquery挑戰實驗室教程從數據中獲取見解

bigquery 教程This medium article focusses on the detailed walkthrough of the steps I took to solve the challenge lab of the Insights from Data with BigQuery Skill Badge on the Google Cloud Platform (Qwiklabs). I got access to this lab in the Google Cloud R…

學習linux系統到底有沒捷徑?

2019獨角獸企業重金招聘Python工程師標準>>> 說起linux操作系&#xff0c;可能對于很多不了解的人來說&#xff0c;第一個想到的就是類似于黑客帝國中的黑框框以及一串串不知所云的代碼&#xff0c;總之這些感覺都可以總結成為一個字&#xff0c;那就是——酷&#…

機器學習之路:python k近鄰回歸 預測波士頓房價

python3 學習機器學習api 使用兩種k近鄰回歸模型 分別是 平均k近鄰回歸 和 距離加權k近鄰回歸 進行預測 git: https://github.com/linyi0604/MachineLearning 代碼&#xff1a; 1 from sklearn.datasets import load_boston2 from sklearn.cross_validation import train_test_…

大話數據結構 (程杰 著)

1轉載于:https://www.cnblogs.com/revoid/p/9605734.html

wxpython實現界面跳轉

wxPython實現Frame之間的跳轉/更新的一種方法 wxPython是Python中重要的GUI框架&#xff0c;下面通過自己的方法實現模擬類似PC版微信登錄&#xff0c;并跳轉到主界面&#xff08;朋友圈&#xff09;的流程。 &#xff08;一&#xff09;項目目錄 【說明】 icon : 保存項目使用…

java職業技能了解精通_如何通過精通數字分析來提升職業生涯的發展,第8部分...

java職業技能了解精通Continuing from the seventh article in this series, we are going to explore ways to present data. Over the past few years, Marketing and SEO field has become more data-driven than in the past thanks to tools like Google Webmaster Tools …

2028. 找出缺失的觀測數據

2028. 找出缺失的觀測數據 現有一份 n m 次投擲單個 六面 骰子的觀測數據&#xff0c;骰子的每個面從 1 到 6 編號。觀測數據中缺失了 n 份&#xff0c;你手上只拿到剩余 m 次投擲的數據。幸好你有之前計算過的這 n m 次投擲數據的 平均值 。 給你一個長度為 m 的整數數組 …