笔记|20170626|创建自定义Docker镜像(Apache+PHP)

下载Centos镜像作为基础模板

docker pull centos

生成临时容器,镜像安装

docker run -i -t centos /bin/bash

安装apache+php

由于docker启动时需要指定脚本运行,脚本执行完成后容器会退出,而且容器中不支持使用systemctl命令来让httpd服务自动启动,所以需要编写特殊的启动脚本。

#!/bin/bash
apachectl -k start #启动apache
while [ 1 ]  #死循环让脚本一直执行
do
sleep 1000
done

登陆腾讯云的镜像仓库

docker login -u ** -p ** url

给镜像打tag

docker tag id ccr.ccs.tencentyun.com/***/***:id

把镜像上传到仓库

docker push ccr.ccs.tencentyun.com/***/***:id

指定ip和端口运行容器

docker run -d –privileged=true -p 192.168.100.50:8082:80 -v /root/docker/by:/var/www/html php_apache /start.sh

-d 后台运行

–privileged=true 使用该参数,container内的root拥有真正的root权限。
否则,container内的root只是外部的一个普通用户权限。

-p 192.168.100.50:8082:80 指定端口

-v /root/docker/by:/var/www/html  映射主机目录

/start.sh 启动脚本

容器关闭后重新运行

docker ps -a  查看所有容器(包括已经关闭的)

docker start id 启动指定的容器

docker exec id /start.sh 运行容器中的启动脚本

批量删除容器

docker rm $(docker ps -qa)
docker ps -qa | xargs -n 1 docker rm

笔记|20170626|Centos中安装配置Docker

安装VMware Tools

首先启动CentOS 7,在VMware中点击上方“VM”,点击“Install VMware Tools…”(如已安装则显示“Reinstall VMware Tools…”)。

在命令行输入“ls /dev”查看光盘挂载情况。

输入“mkdir /mnt/cdrom”在/mnt目录下新建一个名为cdrom的文件夹。

输入“mount -t iso9660 /dev/cdrom /mnt/cdrom”将光盘挂载到/mnt/cdrom目录下。

输入“ls /mnt/cdrom/”查看内容,输入“cp /mnt/cdrom/VMwareTools-9.2.0-799703.tar.gz /root/vm.tar.gz”,将名为“VMwareTools-9.2.0-799703.tar.gz”复制到/root目录下,并重新命名为vm.tar.gz。

在根目录下输入“ls”查看文件,输入“tar -xzf vm.tar.gz”将文件解压,输入“ls”查看文件,可发现新增目录“vmware-tools-distrib”。

输入“cd vmware-tools-distrib/”进入名为“vmware-tools-distrib”的目录,输入“./vmware-install.pl”尝试安装,出现错误“-bash: ./vmware-install.pl: /usr/bin/per: bad interpreter: No such file or directory”,表明未安装编译环境。

安装编译环境,yum -y install perl。

重新输入“./vmware-install.pl”开始安装。

提示找不到ifconfig,安装工具包,Yum install net-tools。

重新输入“./vmware-install.pl”开始安装。

安装完成。

添加永久静态路由,使主机可以正常访问外网,同时可以正常SSH连接

vi /etc/sysconfig/static-routes

添加:

any net 0.0.0.0/0 gw 192.168.88.1

any net 2**.2**.138.0/24 gw 192.168.100.***

any net 2**.2**.136.0/24 gw 192.168.100.***

安装Docker

yum -y install docker

systemctl start docker

systemctl enable docker

登陆腾讯云的Docker仓库

docker login -u 用户名 -p 密码 ccr.ccs.tencentyun.com

尝试拉取镜像

docker pull centos

参考内容

linux静态路由设置:

http://blog.163.com/tianle_han/blog/static/6617826201241611321974/

安装Vmware-tools:

https://www.ytyzx.org/index.php/%E5%A6%82%E4%BD%95%E5%9C%A8Linux(CentOS_7)%E5%91%BD%E4%BB%A4%E8%A1%8C%E6%A8%A1%E5%BC%8F%E5%AE%89%E8%A3%85VMware_Tools

 

笔记|20170524|开源|使用Python批量生成用稿通知PDF(数据来自数据)

源码:

#!/usr/bin/env python
#-*-coding:utf-8-*-
# 20170524 Rebeta F.
import os
import sys
import time
import json #json库
import urllib #网页库
import base64 #Base64加密库
import qrcode #二维码库
import ctypes #printGreen所需库文件
from reportlab.lib.pagesizes import A4, portrait
from reportlab.pdfgen import canvas
from reportlab.pdfbase import pdfmetrics #引入字体库
from reportlab.pdfbase.ttfonts import TTFont #引入字体库
pdfmetrics.registerFont(TTFont(‘msyh’, ‘msyh.ttf’))#注册字体,如果提示文件不存在可以下载文件后与脚本放在同一目录
#fileExt = filename[:filename.rindex(‘.’)]

#生成PDF函数
def info2pdf(nameInfo,timeInfo,titleInfo,codeInfo):
Background = ‘background.png’
Explain = ‘explain.png’
filedir = “./” + time.strftime(‘%Y%m%d’,time.localtime(time.time())) + “/” #按照时间生成目录
isExists = os.path.exists(filedir) #判断目录是否存在
if not isExists:
os.mkdir(filedir) #不存在目录就创建新目录
filename = time.strftime(‘%Y%m%d%H%M%S’,time.localtime(time.time())) + ‘.pdf’ #按照时间生成文件名
fileExt = filedir + filename #拼合目录及文件名
(w, h) = portrait(A4)
c = canvas.Canvas(fileExt, pagesize = portrait(A4))
c.setTitle(‘用稿通知 – 忻州师范学院招生就业处 · 掌上忻师’) #设置标题
c.drawImage(Background, 0, 0, w, h) #绘制证书背景图案
qr = qrcode.QRCode( #设置二维码生成参数
version=2,
error_correction=qrcode.constants.ERROR_CORRECT_H,
box_size=10,
border=0.1,
)
qr.add_data(base64.b64encode(codeInfo))
qr.make(fit=True)
img = qr.make_image() #生成防伪验证码
img.save(“temp.png”) #保存防伪验证码
c.drawImage(“temp.png”, 260, 230, 74, 74) #绘制防伪验证码
c.setFont(“msyh”, 20) #设置字体
c.drawString(100,596,nameInfo[0:1] + ” ” + nameInfo[1:2] + ” ” + nameInfo[2:3] + ” ” + nameInfo[3:4]) #绘制姓名
c.setFont(“msyh”, 22) #重设字体
c.drawString(435,522,timeInfo[0:4])#绘制用稿时间(年)
c.drawString(100,487,timeInfo[5:7]) #绘制用稿时间(月)
c.drawString(150,487,timeInfo[8:10]) #绘制用稿时间(日)
c.setFont(“msyh”, 16) #重设字体
c.drawString(180,345,”《”+ titleInfo +”》”) #绘制稿件标题
c.setFont(“msyh”, 14) #重设字体
c.drawString(285,196,codeInfo) #绘制证书编号
c.setFont(“msyh”, 18) #重设字体
c.drawString(227,145,time.strftime(‘%Y年%m月%d日’,time.localtime(time.time())))#绘制打印时间
c.showPage() #保存上一个画布到页面,并新建一个页面
c.drawImage(Explain, 0, 0, w, h) #绘制说明
c.save() #保存到PDF文件
print time.strftime(‘%Y/%m/%d %H:%M:%S –> ‘,time.localtime(time.time())) + “Save File ” + filename + ” (For:”+ nameInfo +”) Success.”
result = json.loads(urllib.urlopen(“生成信息列表.php”).read()) #取回信息
for res in result:
info2pdf(res[“name”],res[“ctime”],res[“title”].encode(“utf-8”),res[“cid”])

参考:

生成二维码

http://blog.csdn.net/yybmec/article/details/43568013

生成pdf的hello world

http://blog.csdn.net/amy_0626/article/details/52999885

循环对象

http://www.jb51.net/article/54505.htm

解析json

http://www.cnblogs.com/kaituorensheng/p/3877382.html

操作json

http://www.cnblogs.com/loleina/p/5623968.html

reportlab使用示例(修改中文字体)

http://www.jb51.net/article/44074.htm

生成PDF示例

http://john88wang.blog.51cto.com/2165294/1424968

reportlab使用手册

http://www.reportlab.com/docs/reportlab-userguide.pdf

python时间格式化

http://www.cnblogs.com/vipitsoft/p/5628993.html

字符串操作

http://www.cnblogs.com/huangcong/archive/2011/08/29/2158268.html

excel读写

http://www.cnblogs.com/lhj588/archive/2012/01/06/2314181.html

更换字体及背景颜色

https://www.oschina.net/code/snippet_2008177_38590

 

笔记|20170510|CentOS7中Python连接ORACLE数据库的配置

  1. 安装Python
    • yum install -y python
  2. 安装Oracle Client
    • 前往ORACLE官网下载rpm安装包并上传至服务器
    • rpm -ivh oracle-instantclient-basic-10.2.0.5-1.x86_64.rpm
    • rpm -ivh oracle-instantclient-devel-10.2.0.5-1.x86_64.rpm
  3. 测试
    • python
    • >>> import cx_Oracle
      >>> conn=cx_Oracle.connect(‘zfxfzb/zfsoft_xzsy@192.168.100.13/zfxfzb’)
      >>> print conn.version
      10.2.0.1.0
      >>> conn.close()
  4. 如果import cx_Oracle出错
    • export LD_LIBRARY_PATH=/usr/lib/oracle/11.2/client64:/usr/lib/oracle/11.2/client64/lib
  5. 参考文献
    • http://www.cnblogs.com/ylqmf/archive/2012/04/16/2451841.html

笔记|20170506|CentOS7中安装Nginx并配置为负载均衡和反向代理模式

  1. 安装
    • yum install nginx
  2. 配置
    • 反向代理示例(HTTPS)
      • server {
        listen 443;
        server_name api.rebeta.cn;
        ssl on;
        ssl_certificate 1_api.rebeta.cn_bundle.crt;
        ssl_certificate_key 2_api.rebeta.cn.key;
        ssl_session_timeout 5m;
        ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
        ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE;
        ssl_prefer_server_ciphers on;
        location / {
        proxy_next_upstream http_502 http_504 error timeout invalid_header;
        proxy_pass http://***/api/;
        proxy_redirect off;
        proxy_set_header Host api.rebeta.cn;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-proto https;
        index index.htm index.html index.php;
        }
        }
    • 负载均衡示例
      • upstream a.com {
        server 192.168.5.126:80 weight=1;
        server 192.168.5.27:80 weight=1;
        }server{
        listen 80;
        server_name a.com;
        location / {
        proxy_pass http://a.com;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        }
        }
      • 负载均衡在优点
        • 多台服务器提供服务,但域名只解析到主服务器,而真正的服务器IP不会被ping下即可获得,增加一定安全性。
        • upstream里的IP不一定是内网,外网IP也可以。不过经典的案例是,局域网中某台IP暴露在外网下,域名直接解析到此IP。然后又这台主服务器转发到内网服务器IP中。
        • 某台服务器宕机、不会影响网站正常运行,Nginx不会把请求转发到已宕机的IP上。
  3. 其他

upstream模块相关说明
1、upstream模块应放于nginx.conf配置的http{}标签内
2、upstream模块默认算法是wrr (权重轮询 weighted round-robin)

一、分配方式
Nginx的upstream支持5种分配方式,下面将会详细介绍,其中前三种为Nginx原生支持的分配方式,后两种为第三方支持的分配方式。

1、轮询
轮询是upstream的默认分配方式,即每个请求按照时间顺序轮流分配到不同的后端服务器,如果某个后端服务器down掉后,能自动剔除。

upstream backend {
    server 192.168.1.101:8888;
    server 192.168.1.102:8888;
    server 192.168.1.103:8888;
}

2、weight
轮询的加强版,即可以指定轮询比率,weight和访问几率成正比,主要应用于后端服务器异质的场景下。

upstream backend {
    server 192.168.1.101 weight=1;
    server 192.168.1.102 weight=2;
    server 192.168.1.103 weight=3;
}

3、ip_hash
每个请求按照访问ip(即Nginx的前置服务器或者客户端IP)的hash结果分配,这样每个访客会固定访问一个后端服务器,可以解决session一致问题。

upstream backend {
    ip_hash;
    server 192.168.1.101:7777;
    server 192.168.1.102:8888;
    server 192.168.1.103:9999;
}

 

注意:
1、当负载调度算法为ip_hash时,后端服务器在负载均衡调度中的状态不能是weight和backup。
2、导致负载不均衡。

4、fair
fair顾名思义,公平地按照后端服务器的响应时间(rt)来分配请求,响应时间短即rt小的后端服务器优先分配请求。如果需要使用这种调度算法,必须下载Nginx的upstr_fair模块。

upstream backend {
    server 192.168.1.101;
    server 192.168.1.102;
    server 192.168.1.103;
    fair;
}

5、url_hash,目前用consistent_hash替代url_hash
与ip_hash类似,但是按照访问url的hash结果来分配请求,使得每个url定向到同一个后端服务器,主要应用于后端服务器为缓存时的场景下。

upstream backend {
    server 192.168.1.101;
    server 192.168.1.102;
    server 192.168.1.103;
    hash $request_uri;
    hash_method crc32;
}

其中,hash_method为使用的hash算法,需要注意的是:此时,server语句中不能加weight等参数。

提示:url_hash用途cache服务业务,memcached,squid,varnish。特点:每个rs都是不同的。

二、设备状态
从上面实例不难看出upstream中server指令语法如下:server address [parameters]
参数说明:
server:关键字,必选。
address:主机名、域名、ip或unix socket,也可以指定端口号,必选。
parameters:可选参数,可选参数如下:
1.down:表示当前server已停用
2.backup:表示当前server是备用服务器,只有其它非backup后端服务器都挂掉了或者很忙才会分配到请求。
3.weight:表示当前server负载权重,权重越大被请求几率越大。默认是1.
4.max_fails和fail_timeout一般会关联使用,如果某台server在fail_timeout时间内出现了max_fails次连接失败,那么Nginx会认为其已经挂掉了,从而在fail_timeout时间内不再去请求它,fail_timeout默认是10s,max_fails默认是1,即默认情况是只要发生错误就认为服务器挂掉了,如果将max_fails设置为0,则表示取消这项检查。

举例说明如下:

upstream backend {
    server    backend1.example.com weight=5;
    server    127.0.0.1:8080 max_fails=3 fail_timeout=30s;
    server    unix:/tmp/backend3;           
}

来源:http://www.cnblogs.com/linjiqin/p/5494783.html

笔记|20170506|CentOS7中PHP连接ORACLE数据库的配置

本次安装所需文件下载: https://pan.baidu.com/s/1gfeg2bx 密码: kdna

  1.  前期准备工作
    • yum -y install gcc #安装编译器
    • yum install php-devel #解决打开phpize时提示不存在的错误
  2. 前往ORACLE官网下载对应的客户端
    • 本例中使用的为10G版本的客户端(使用11G客户端安装后编译插件失败)
      • oracle-instantclient-basic-10.2.0.5-1.x86_64.rpm
      • oracle-instantclient-devel-10.2.0.5-1.x86_64.rpm
    • 下载PHP拓展文件
  3. 安装Oraclecient
    • rpm -qpl 可以查看rpm包会在哪些路径安装文件
    • 安装rpm包
      • rpm -ivh oracle-instantclient-basic-10.2.0.5-1.x86_64.rpm
      • rpm -ivh oracle-instantclient-devel-10.2.0.5-1.x86_64.rpm
    • 调试时可供参考的命令
      • rpm -qa | grep oracle //查看oracle是否安装
      • rpm -qa //查看所有已安装的人rpm包
      • rpm -e *.rpm //卸载已安装的rpm包
      • rpm -ivh –force *.rpm //强制安装rpm包
    • 配置
      • 修改/etc/ld.so.conf 或在ld.so.conf.d文件夹下添加oracle-x86_64.conf文件,写入安装oracle客户端的lib路径
        • vi /etc/ld.so.conf
        • /usr/lib/oracle/10.2.0.5/client64/lib/
        • (或者echo ‘/usr/lib/oracle/11.2/client64/lib/’ > /etc/ld.so.conf.d/oracle-x86_64.conf)
      • 64位系统需要创建32位的软链接(这里可能是一个遗留bug,不然后面编译会出问题)
        • ln -s /usr/lib/oracle/10.2.0.5/client64 /usr/lib/oracle/10.2.0.5/client
        • ln -s /usr/include/oracle/10.2.0.5/client64 /usr/include/oracle/10.2.0.5/client
      • 定义环境变量
        • vi etc/profile
        • 加入以下几行
          • export ORACLE_HOME=/usr/lib/oracle/10.2.0.5/client64/
          • export LD_LIBRARY_PATH=/usr/lib/oracle/10.2.0.5/client64:/usr/lib/oracle/10.2.0.5/client64/lib:
          • export NLS_LANG=”AMERICAN_AMERICA.AL32UTF8″
        • 使环境配置立即生效
          • source /etc/profile
  4. 安装OCI8
    • 如果需要 DTRACE
      • yum install systemtap-sdt-devel
      • export PHP_DTRACE=yes
    • 如果不需要 DTRACE
      • modify the file ‘php_oci8_int.h’, change the 48th line
      • #include “oci8_dtrace_gen.h” to #undef HAVE_OCI8_DTRACE
    • 编译安装
      • tar -xvf oci8-2.1.4.tgz
      • cd oci8-2.1.4
      • /usr/bin/phpize
      • ./configure –with-oci8=shared,instantclient,/usr/lib/oracle/10.2.0.5/client64/lib
      • make
      • make install
    • 在/etc/php.d目录下增加配置文件20-oci8.ini
      • extension=oci8.so
    • 查看是否成功
      • php -i | grep oci8
    • 查看到如下内容即可
      • /etc/php.d/oci8.ini,
      • oci8.default_prefetch => 100 => 100
      • oci8.events => On => On
      • oci8.max_persistent => -1 => -1
      • oci8.old_oci_close_semantics => Off => Off
      • oci8.persistent_timeout => -1 => -1
      • oci8.ping_interval => 60 => 60
      • oci8.privileged_connect => On => On
      • oci8.statement_cache_size => 20 => 20
  5. 安装PDO_OCI
    • 解压安装文件
      • tar -xvf PDO_OCI-1.0.tgz
      • cd PDO_OCI-1.0
    • 防止pdo_oci对oracle11支持不足(pdo_oci可能不支持oracle11g,需要做个软链接成作为oracle10版本才能编译过去) *本次安装直接使用10g版本,不需要进行这个步骤
      • ln -s /usr/include/oracle/11.2 /usr/include/oracle/10.2.0.1
      • ln -s /usr/lib/oracle/11.2 /usr/lib/oracle/10.2.0.1
      • 还可以
        • Inside the PDO_OCI-1.0 folder, edit the file named config.m4.
          Find a pattern like this near line 10 and add these 2 lines:
          elif test -f $PDO_OCI_DIR/lib/libclntsh.$SHLIB_SUFFIX_NAME.11.2; then
          PDO_OCI_VERSION=11.2
          Find a pattern like this near line 101 and add these lines:
          11.2)
          PHP_ADD_LIBRARY(clntsh, 1, PDO_OCI_SHARED_LIBADD)
          ;;
    • 编译时还可能遇到其他问题(pdo_oci.c:34: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘pdo_oci_functions’)
      • 在pdo_oci.c文件中,将 function_entry 改成 zend_function_entry
    • 编译安装
      • /usr/bin/phpize
      • ./configure –with-pdo-oci=instantclient,/usr,10.2.0.5
      • make
      • make install
    • 引用拓展
      • 在 /etc/php.d 目录下 新建文件 30-pdo_oci.ini写入
        • extension=pdo_oci.so
    • 查看是否成功
      • php -i | grep oci
      • 查找是否有如下内容
        • /etc/php.d/pdo_oci.ini,
        • PDO drivers => oci, odbc, sqlite
  6. 运行phpinfo()
  7. 注意事项
    • 编译拓展时可能会遇到编译报错的情况,这时候要检查ORACLE客户端的目录是否填写正确
    • 编译结束并引入拓展后查看安装状态可能会有报错,这时候要检查拓展的版本与客户端版本是否匹配,编译是否成功,环境变量(LD_LIBRARY_PATH)是否设置正确(可以使用echo $LD_LIBRARY_PATH查看)
    • 要注意pdo.so和pdo_oci8.so的引入顺序,如果反了的话会报错提示找不到pdo_dirver….
    • 可能会发生拓展编译成功,使用php -i | grep oci命令检查安装情况时一切正常,但是使用phpinfo函数查看却发现没有成功引入oci8和pdo_oci驱动,这时候应当查看Apache的启动日志和错误日志。本例中启动失败的原因是SELinux,关闭SELinux后一切正常。成功加载驱动。
    • 调试过程中可能用到的其他命令
      • ./configure –with-oci8=shared,instantclient,/usr/lib/oracle/10.2.0.5/client64/lib
      • ./configure –with-pdo-oci=instantclient,/usr,10.2.0.5
      • yum -y install gcc #安装GCC
      • export LD_LIBRARY_PATH=/usr/lib/oracle/10.2.0.5/client64:/usr/lib/oracle/10.2.0.5/client64/lib #配置环境变量并立即生效
    • 参考文献
      • http://www.ijilei.com/109
      • http://www.linuxidc.com/Linux/2013-04/82540.htm
      • http://cache.baiducontent.com/c?m=9d78d513d99216f31eb0d5690d678a37425e94247c89df4f3992d15f9217465c1738beee302267559293207001d8150baced613a765a6baac888ce118ce5c53579df61672b42c75c14d81cabcf4021c0&p=8b2a9714879801b310bd9b7e0e1595&newp=882a9546d5915fb51fb1c7710f44cc231610db2151d7d3136b82c825d7331b001c3bbfb423241305d2c278660ba94e59ebf5357830032ba3dda5c91d9fb4c57479da392e3740&user=baidu&fm=sc&query=centos+oci8&qid=984dc6d20000e83f&p1=1

笔记|20170506|CentOS7中PHP环境的搭建

  1. 安装Apache
    • 首先对系统进行升级
      • yum update
    • 然后安装Apache
      • yum install httpd
  2. 安装PHP
    • 安装PHP
      • yum install php
    • 安装PHP所需的各种拓展及插件
      • yum install php-mysql php-gd php-imap php-ldap php-odbc php-pear php-xml php-xmlrpc
  3. 关闭防火墙
    • 由于本次安装的服务器位于内网中的虚拟机的内网中,在一种相当于离线状态的环境中运行,所以直接关闭本机的防火墙,使其可以与其他服务器正常通信
      • systemctl stop firewalld.service #关闭防火墙
      • systemctl disable firewalld.service #禁止防火墙开机启动

笔记|20170506|搭建EXSI虚拟化服务器

本次安装平台为DELL R720,EXSi版本6.0.0-2159203。

  1. 安装前准备
    • 使用安装映像(VMware-VMvisor-Installer-6.0.0-2159203.x86_64.iso)制作安装光盘/U盘。
    • 使用PE或其他启动盘启动备份文件
      • 设置BIOS为从可移动设备启动
        • 开机引导时按F11
        • 选择BIOS Boot Manager
        • 选择Bios Boot Menu
        • 选择Hard Dive C
        • 选择Front USB:******(前置USB接口上的可移动设备)
      • 备份原来的磁盘
        • 打开Ghost工具
        • 进入手动操作Ghost的界面
        • 选择Local
        • 选择Disk
        • 选择To Image
        • 选择源磁盘
        • 选择目标位置
        • 确认信息,开始备份
  2. 开始安装
    • 插入安装光盘/U盘,本次安装使用U盘
    • 设置BIOS为从可移动设备启动
    • 启动系统,等待安装程序加载完成
    • 根据提示按回车键同意安装,按F11同意用户协议
    • 选择要安装的磁盘,按回车确认
    • 出现将会覆盖磁盘上的信息的提示,确认后继续
    • 选择默认键盘为US Default
    • 设置Root用户密码
    • 按F11正式开始安装
    • 安装完毕后按回车键重启
  3. 进行安装后设置
    • 安装结束并进行过重启后就能看到目前的服务器信息
    • 默认情况下服务器会自动从DHCP获取到IP地址,但是本次安装的网络环境中没有DHCP服务器,所以需要手动配置IP
    • 在控制台界面按下F2,输入ROOT密码
    • 使用键盘的上下方向键选择Configure Management Network
    • 使用键盘的上下方向键选择连接到网络的网卡接口,按空格键确认
    • 配置IP为静态,并填写IP、子网掩码和网关
    • 按ESC退出设置,提示保存配置并重启网络服务,按Y确认
    • 完成设置
  4. 使用客户端连接到EXSi服务器并进行配置
    • 激活
      •  使用与服务器在同一网络的计算机的浏览器打开服务器的IP地址,出现EXSi的欢迎界面
      • 点击Download vSphere Client for Windows
      • 下载客户端
      • 输入服务器的IP地址和用户名密码,登录进入管理界面
      • 选择配置
      • 已获许可的功能
      • 编辑
      • 向此主机分配新许可证秘钥
      • 输入许可证,完成激活
    • 关闭欢迎页面
      • 选择安全配置文件
      • 防火墙
      • 编辑
      • 取消80端口的选择
      • 保存

到此为止,EXSi服务器的基本配置已经完成。

 

笔记|20170212|使用cron和PHP实现自动对数据库进行统计

Step 1.编写PHP文件完成对目标数据的统计(目标是每日统计前一天不同来源对不同接口的访问量)

核心代码如下

//选中所有的来源
$sql = “SELECT DISTINCT(source) FROM Log WHERE date=’$yesterday'”;
$rs = $pdo->query($sql);
$allrs = $rs->fetchall(PDO::FETCH_ASSOC);
//对每一种来源进行遍历
foreach($allrs as $part) {
//选中所有接口种类
$source = $part[source];
$sql = “SELECT DISTINCT(type) FROM Log WHERE source=’$source’ AND date=’$yesterday'”;
$rs = $pdo->query($sql);
$allrs = $rs->fetchall(PDO::FETCH_ASSOC);
//对每一种接口进行遍历
foreach($allrs as $part) {
//记录本接口的访问量
$type = $part[type];
$sql = “INSERT INTO Statistics(date, source, type, num) VALUES (‘$yesterday’,’$source’,’$type’,(SELECT COUNT(type) FROM Log WHERE source=’$source’ AND type=’$type’ AND date=’$yesterday’))”;
$pdo->exec($sql);
}
}

Step 2.配置cron实现每天定时执行

配置命令为

crontab -e

增加以下内容

30 1 * * * /usr/bin/wget -q -O temp.txt http://url/api.php

 

完成