这两天在研究Docker,准备在Mac上安装玩玩,弄一个Centos的image。
Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口(类似 iPhone 的 app)。几乎没有性能开销,可以很容易地在机器和数据中心中运行。最重要的是,他们不依赖于任何语言、框架包括系统。 –来自百度百科
接下来我们开始在Mac上安装Docker。
这两天在研究Docker,准备在Mac上安装玩玩,弄一个Centos的image。
Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口(类似 iPhone 的 app)。几乎没有性能开销,可以很容易地在机器和数据中心中运行。最重要的是,他们不依赖于任何语言、框架包括系统。 –来自百度百科
接下来我们开始在Mac上安装Docker。
目前我们用的版本管理服务大多数从svn 转移到了git。说到git程序猿就不得不提github了(不知道自行Google)。今天我们就搭建一个和github一样的git服务器。
服务器:Centos
Git版本: git version 1.7.1
gitServer: Gitosis
这篇文章我们讲解Kong在Centos上的搭建,安装Cassandra数据库.
Kong 是在客户端和(微)服务间转发API通信的API网关,通过插件扩展功能。Kong 有两个主要组件:
Kong Server :基于 nginx 的服务器,用来接收 API 请求。
Apache Cassandra :用来存储操作数据。
你可以通过增加更多 Kong Server 机器对 Kong 服务进行水平扩展,通过前置的负载均衡器向这些机器分发请求。根据文档描述,两个Cassandra节点就足以支撑绝大多数情况,但如果网络非常拥挤,可以考虑适当增加更多节点。Github: Kong
官网: getkong
下载kong
https://getkong.org/install/centos/#packages
下载的文件kong-0.7.0.el6.noarch.rpm
执行命令安装
rpm -ivh kong-0.7.0.el6.noarch.rpm
$ sudo yum install epel-release
$ sudo yum install kong-0.7.0.*.noarch.rpm --nogpgcheck
如果出现
错误:Cannot retrieve metalink for repository: epel. Please verify its path and try again
可以通过执行
yum --disablerepo=epel -y update ca-certificates完美解决 🍺
启动
[INFO] Kong 0.7.0
[INFO] Using configuration: /etc/kong/kong.yml
[INFO] Setting working directory to /usr/local/kong
[INFO] database...........cassandra keyspace=kong ssl=verify=false enabled=false replication_factor=1 contact_points=ec2-52-5-200-155.compute-1.amazonaws.com:34977 replication_strategy=SimpleStrategy timeout=5000 data_centers=
[INFO] Database not initialized. Running migrations...
[INFO] Migrating core on keyspace "kong" (cassandra)
[INFO] core migrated up to: 2015-01-12-175310_skeleton
[INFO] core migrated up to: 2015-01-12-175310_init_schema
[INFO] core migrated up to: 2015-11-23-817313_nodes
[INFO] Migrating key-auth on keyspace "kong" (cassandra)
[INFO] key-auth migrated up to: 2015-07-31-172400_init_keyauth
[INFO] Migrating rate-limiting on keyspace "kong" (cassandra)
[INFO] rate-limiting migrated up to: 2015-08-03-132400_init_ratelimiting
[INFO] Migrating mashape-analytics on keyspace "kong" (cassandra)
[INFO] mashape-analytics migrated up to: 2015-12-03-161400_mashape-analytics-config
[INFO] Migrating acl on keyspace "kong" (cassandra)
[INFO] acl migrated up to: 2015-08-25-841841_init_acl
[INFO] Migrating oauth2 on keyspace "kong" (cassandra)
[INFO] oauth2 migrated up to: 2015-08-03-132400_init_oauth2
[INFO] oauth2 migrated up to: 2015-08-24-215800_cascade_delete_index
[INFO] Migrating jwt on keyspace "kong" (cassandra)
[INFO] jwt migrated up to: 2015-06-09-jwt-auth
[INFO] Migrating basic-auth on keyspace "kong" (cassandra)
[INFO] basic-auth migrated up to: 2015-08-03-132400_init_basicauth
[INFO] Migrating response-ratelimiting on keyspace "kong" (cassandra)
[INFO] response-ratelimiting migrated up to: 2015-08-21_init_response-rate-limiting
[INFO] Migrating hmac-auth on keyspace "kong" (cassandra)
[INFO] hmac-auth migrated up to: 2015-09-16-132400_init_hmacauth
[INFO] dnsmasq............address=127.0.0.1:8053 dnsmasq=true port=8053
[INFO] Leaving cluster..
[INFO] nginx .............admin_api_listen=0.0.0.0:8001 proxy_listen=0.0.0.0:8000 proxy_listen_ssl=0.0.0.0:8443
[OK] Started
下载Cassandra
wget: http://mirrors.hust.edu.cn/apache/cassandra/3.3/apache-cassandra-3.3-bin.tar.gz
安装Cassandra
tar -zxvf apache-cassandra-3.3-bin.tar.gz
cd bin/
执行cassandra -f 后台启动
./cassandra -f
在安装
cassandra要升级Python2.7.
执行
./cqlsh测试是否安装成功
Connected to Test Cluster at 127.0.0.1:9042.
[cqlsh 5.0.1 | Cassandra 2.2.5 | CQL spec 3.3.1 | Native protocol v4]
Use HELP for help.
cqlsh>
恭喜你🍺 安装成功了 9042端口
执行
./cqlsh出现下面的错误,需要安装python ssl模块
[root@host-133-130-99-25 bin]# ./cqlsh Traceback (most recent call last): File "./cqlsh.py", line 152, infrom cqlshlib import cql3handling, cqlhandling, pylexotron, sslhandling File "/home/soft/apache-cassandra-2.2.5/bin/../pylib/cqlshlib/sslhandling.py", line 20, in import ssl File "/usr/local/lib/python2.7/ssl.py", line 60, in import _ssl # if we can't import it, let the error propagate ImportError: No module named _ssl
参考:
编辑/etc/kong/kong.yml文件
Replace this in /etc/kong/kong.yml and continue installing Kong or onto the quickstart guide!
database: cassandra
cassandra:
contact_points:
- "127.0.0.1:9042"
添加api
$ curl -i -X POST \
--url http://localhost:8001/apis/ \
--data 'name=mockbin' \ //自己的api name
--data 'upstream_url=http://mockbin.com/' \ //API地址
--data 'request_host=mockbin.com' //API地址
成功 显示
HTTP/1.1 201 Created
Content-Type: application/json
Connection: keep-alive
{
“request_host”: “mockbin.com”,
“upstream_url”: “http://mockbin.com/“,
“id”: “2eec1cb2-7093-411a-c14e-42e67142d2c4”,
“created_at”: 1428456369000,
“name”: “mockbin”
}
使用kong作为代理请求API
$ curl -i -X GET \
--url http://localhost:8000/ \
--header 'Host: mockbin.com'
:8000 端口代理
测试
访问http://localhost:8000/就可以访问到自己的API了。
Nginx配置SSL
ssl on;
ssl_certificate /*.crt;
ssl_certificate_key /*.key;
ssl_session_timeout 5m;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers ALL:!ADH:!EXPORT56:-RC4+RSA:+HIGH:+MEDIUM:!EXP; ssl_prefer_server_ciphers on;
添加 key-auth 插件 配置apikey
执行命令: mockbin -> api名称
curl -i -X POST \
--url http://localhost:8001/apis/mockbin/plugins/ \
--data 'name=key-auth'
添加成功显示:
HTTP/1.1 201 Created
Date: Tue, 08 Mar 2016 08:07:51 GMT
Content-Type: application/json; charset=utf-8
Transfer-Encoding: chunked
Connection: keep-alive
Access-Control-Allow-Origin: *
Server: kong/0.7.0
{"api_id":"413fc8b3-4c45-43eb-a3c1-17f9325d5527","id":"4706cc84- b97a-48c4-90eb-e8ec8491d3d7","created_at": 1457424471000,"enabled":true,"name":"key-auth","config":{"key_names": ["apikey"],"hide_credentials"
🍺OK,成功添加key-auth插件
API 配置访问权限
执行命令: username=Slj -> Slj用户
--接口添加用户控制
curl -i -X POST \
--url http://localhost:8001/consumers/ \
--data "username=Slj"
Slj用户配置apikey
curl -i -X POST \
--url http://localhost:8001/consumers/Slj/key-auth/ \
--data 'key=9eGpzqh4U3qMMuSk'
🍺第一个插件安装成功了, 我们测试一下吧
测试API 访问权限
在Headers中添加 apikey值

apikey是我们上面添加的值,🍺我们愉快的获得到了数据。
改变一下`apikey`值,看看什么效果

😂出错了,那么恭喜你,`Kong`的插件起效果了。
文章主要包括restify开发api,node.js连接mysql返回json数据等。

restify是一个基于Nodejs的REST应用框架,支持服务器端和客户端。restify比起express更专注于REST服务,去掉了express中的template,render等功能,同时强化了REST协议使用,版本化支持,HTTP的异常处理。
Github:node-restify
#什么是 Github ?必须要放这张图了!!! 
(图片来源GitHub 是怎样的一个存在? - Deep Reader 的回答)
Git 是由 Linux 之父 Linus Tovalds 为了更好地管理linux内核开发而创立的分布式版本控制/软件配置管理软件。
好吧,我相信看到这里你已经晕了,这也是我一开始看那些所谓经典教程的感受。写这些教程的人都是几年以上的程序员呀,他们往往直接就告诉你所有命令的含义或者整个体系。
专家盲点(expert blind spot)就是对一个事物知道的越多,就越发不记得“不知道这个事”的情形。
简单来说,Git 是一个管理你的「代码的历史记录」的工具。
我不是程序员为什么要学这个啊啊啊!又不要管理代码们!
别急,虽然 github 学习门槛高,一会你就知道为什么人人都应该会这个啦!

工资是个有趣的话题。每个人对这个话题都有自己的想法。它同时也是同在打工的人们之间一个独特的禁忌。虽然在完成大学里的学业、进入程序员的工作环境只有 一个月左右,我就不由自主的开始询问我的同学关于他们在获得第一份工作时的起薪是多少的问题。我首先发现的事情是,并不是每个人都能很自然的面对这个问 题,很多公司都对这个问题避而不答。比如微软,非常明确的要求入职的人必须对其职位薪水情况保密。
//Array 可以存放重复的数据 有序的
// 初始化
var intArray = [Int]() // 数组类型为Int
// 添加值
intArray.append(2) //
//intArray = [] // 空
// 指定大小,默认值的array
var twoArray = [Int](count: 2, repeatedValue: 5) // 大小为2, 默认值为5
// 数组相加
intArray + twoArray
// 初始值
var stringArray:[String] = ["slj","Swift","Collection Types"]
// isEmpty判断数组是否为0
if stringArray.isEmpty {
print("stringArray is empty")
}else{
print("stringArray is not empty")
}
// 数组个数
stringArray.count
// 下标取值
stringArray[0]
// 下标改变值
stringArray[0] = "SongLijun"
// insert(_:atIndex:) 在索引之前添加数据相
stringArray.insert("Study", atIndex: 1)
// removeAtIndex(_:) 根据索引值 移除数据
//stringArray.removeAtIndex(1)
// removeLast() 移除最后一个 removeFirst() 移除第一个
//stringArray.removeLast()
//stringArray.removeFirst()
// 数组遍历
for item in stringArray {
print("item -> \(item)")
}
// 遍历数组中的索引以及对应值 enumerate()
for (index, value) in stringArray.enumerate() {
print("index -> \(index) : value -> \(value)")
}