极光推送案例

参考:http://docs.jpush.io/server/php_sdk/
Thinkphp推送类(需要下载vendor)

push()
            ->setPlatform(M\Platform('ios'))
            ->setAudience(M\all)
            ->setNotification(M\notification($message))
//             ->printJSON()
            ->send();
            return $result->json;
        } catch (APIRequestException $e) {//推送失败调试时候可以打开
            //             $br = '\n';
//             echo 'Push Fail.' . $br;
//             echo 'Http Code : ' . $e->httpCode . $br;
//             echo 'code : ' . $e->code . $br;
//             echo 'Error Message : ' . $e->message . $br;
//             echo 'Response JSON : ' . $e->json . $br;
//             echo 'rateLimitLimit : ' . $e->rateLimitLimit . $br;
//             echo 'rateLimitRemaining : ' . $e->rateLimitRemaining . $br;
//             echo 'rateLimitReset : ' . $e->rateLimitReset . $br;
            return false;
        } catch (APIConnectionException $e) {
//             $br = "\n";
//             echo 'Push Fail: ' . $br;
//             echo 'Error Message: ' . $e->getMessage() . $br;
//             echo 'IsResponseTimeout: ' . $e->isResponseTimeout . $br;
            return false;
        }
        return false;
    }
    /**
     * 推送信息到指定用户 (备注:一次最多只能推送1000个RegID)
     * @param String $message    消息
     * @param Array  $users    用户编号
     * @param Boolean $all     是否推送该用户所有设备 默认推送所有 否则推送最新的一个 
     * @return boolean
     */
    public static function sendToUser($message, $users, $all = true) {
        if(empty($message) || empty($users) || !is_array($users)) {
            return false;
        }
        $audience = $list =  array();
        $map['user_id'] = array('in', $users);
        if($all) {
            $list = M(self::USER_TABLE)->field(self::USER_REGID_FIELD)->where($map)->select();
        } else {
            $list = M(self::USER_TABLE)->field(self::USER_REGID_FIELD)->where($map)->limit(1)->order(self::USER_TABLE_ORDER)->select();
        }
        if($list) {
            foreach ($list as $v) {
                if(trim($v[self::USER_REGID_FIELD])) {
                    $audience[] = $v[self::USER_REGID_FIELD];
                }
            }
        }
        if(!$audience && $audience[0]) {
            return false;
        }
        return self::sendToRegistrationId($message, $audience);
    }
    /**
     * 推送消息到指定IOS设备 最多一次推送1000
     * 备注参考:http://docs.jpush.io/server/rest_api_v3_push/
     */
    public static function sendToRegistrationId($message,$audience) {
        if(empty($message) || empty($audience) || !is_array($audience)) {
            return false;
        }
        try {
            $client = new JPushClient(self::APP_KEY, self::MASTER_SECRET);
            $result = $client->push()
            ->setPlatform(M\platform('ios'))
            ->setNotification(M\notification($message))
            ->setAudience(M\registration_id($audience))
            //->printJSON()
            ->send();
            return $result->json;
        } catch (APIRequestException $e) {
//             $br = '\n';
//             echo 'Push Fail.' . $br;
//             echo 'Http Code : ' . $e->httpCode . $br;
//             echo 'code : ' . $e->code . $br;
//             echo 'Error Message : ' . $e->message . $br;
//             echo 'Response JSON : ' . $e->json . $br;
//             echo 'rateLimitLimit : ' . $e->rateLimitLimit . $br;
//             echo 'rateLimitRemaining : ' . $e->rateLimitRemaining . $br;
//             echo 'rateLimitReset : ' . $e->rateLimitReset . $br;
            return false;
        } catch (APIConnectionException $e) {
//             $br = "\n";
//             echo 'Push Fail: ' . $br;
//             echo 'Error Message: ' . $e->getMessage() . $br;
//             echo 'IsResponseTimeout: ' . $e->isResponseTimeout . $br;
//             return false;
        }
        return false;
    }
    /**
     * 向消息队列压入推送任务 1 推送所有  2推送指定设备  3推送指定用户
     * @param String $message    推送内容
     * @param Int $type          推送类型
     * @param Array $ext         推送用户编号或RegID
     * @return boolean
     */
    public function pushMessage($message, $type = self::SEND_TO_ALL, $ext = array()) {
        if(empty($message) || !in_array($type, array(self::SEND_TO_ALL,self::SEND_TO_REG,self::SEND_TO_USER))) {
            return false;
        }
        try {
            $redis = new Redis;
            $redis->connect('127.0.0.1', 6379);
            $data['message'] = $message;
            $data['type'] = $type;
            $data['ext'] = $ext;
            $pushData = json_encode($data);
            return $redis->lPush(self::REDIS_PUSH_MESSAGE_KEY, $pushData);//队列左边添加元素
        } catch (\Exception $e) {
//             echo $e->getMessage();
            return false;
        }
        return false;
    }
    
}

 

Docker部署gitlab

参考:https://github.com/sameersbn/docker-gitlab/blob/master/README.md

安装docker-gitlab
docker pull sameersbn/gitlab
安装PostgreSQL
docker pull sameersbn/postgresql
安装redis
docker pull sameersbn/redis
启动postgresql容器
mkdir -p /opt/postgresql/data
启动容器
docker run --name=gitlab-postgresql -d \
  -e 'DB_NAME=gitlabhq_production' -e 'DB_USER=gitlab' -e 'DB_PASS=password' \
  -v /opt/postgresql/data:/var/lib/postgresql \
  sameersbn/postgresql:latest
启动redis容器
docker run --name=gitlab-redis -d sameersbn/redis:latest
启动gitlab
mkdir -p /opt/gitlab/data
mkdir -p /opt/gitlab/backups
docker run --name gitlab -d \
    --link gitlab-postgresql:postgresql --link gitlab-redis:redisio \
    --publish 10022:22 --publish 10080:80 \
    --env 'GITLAB_PORT=10080' --env 'GITLAB_SSH_PORT=10022' \
    --env 'GITLAB_SECRETS_DB_KEY_BASE=long-and-random-alpha-numeric-string' \
    --volume /srv/docker/gitlab/gitlab:/home/git/data \
    sameersbn/gitlab



 

 

Docker入门第一节

1、  什么是Docker

Docker是一个开源的引擎,可以轻松的为任何应用创建一个轻量级的、可移植的、自给自足的容器。开发者在笔记本上编译测试通过的容器可以批量地在生产环境中部署,包括VMs(虚拟机)、bare metal、OpenStack 集群和其他的基础应用平台。

2、  Ubuntu14.04Lts系统安装Docker(要在root用户下执行)

2.1、sudo apt-get update

2.2、sudo apt-get install curl

2.3、curl -sSL https://get.docker.com/ | sh

2.4、sudo docker run hello-world(检查docker是否安装成功)

3、  在Docker输出Hello World!

Docker run 镜像名字 echo ‘Hellow World!’

4、  常用命令

搜索镜像     docker search 影像名称

下载镜像     docker pull    镜像名

查看镜像     docker images

查看容器     docker ps

查看容器(包括已停止)     docker ps -a

删除容器     dockker rm 容器名或者ID

删除所有容器     docker rm $(docker ps -aq)

启动容器     docker start 容器名或者id

停止容器     docker start 容器名或者id

杀死容器     docker kill  容器名或者id

删除镜像     docker rmi    镜像名

删除所有镜像     docker rmi $(docker images -q)