Browsed by
分类:未分类

ubuntu下命令行代理

ubuntu下命令行代理

安装proxychains

  • proxychains安装
git clone https://github.com/rofl0r/proxychains-ng.git
cd proxychains-ng
./configure
make && sudo make install
sudo cp ./src/proxychains.conf /etc/proxychians.conf
cd .. && rm -rf proxychains-ng
  • 编辑proxychains配置
vim /etc/proxychains.conf
socks5 127.0.0.1 1080 //1080改为你自己的端口
  • 使用方法
proxychains4 wget http://xxx.com/xxx.zip

ubuntu安装shadowsocks

用PIP安装很简单

sudo apt-get install python-pip

接着安装shadowsocks

sudo pip install shadowsocks

通过以上命令安装shadowsocks,为了避免权限不够,在命令行前加上sudo

安装shadowsocks

https://my.oschina.net/u/1432769/blog/619651

golang log

golang log

golang 自带了log包,使用起来也非常方便,使用方法

package main

import (
    "log"
    "os"
)

func main() {
    log.Println("111111")
    //设置显示文件全名和行号
    log.SetFlags(log.Llongfile)
    log.Println("111111")
    //设置显示短文件名和行号
    log.SetFlags(log.Lshortfile)
    log.Println("111111")
    file, _ := os.Create("test.log")
    log.SetOutput(file)
    log.Println("write to file")

}
php-7.0.2 session_regenerate_id 报错

php-7.0.2 session_regenerate_id 报错

本来打算升级生产服务器的php版本到7.0.2,结果测试发现在使用memcached存储session的时候session_regenerate_id报错。

session_start();
session_regenerate_id(false);

报错信息

Catchable fatal error: session_regenerate_id(): Failed to create(read) session ID: memcached (path: 4f522740705c11e4.m.cnhzaliqshpub001.ocs.aliyuncs.com:11211) in 

由于我们的开发框架是yii2,yii2中是这样调用的

public function regenerateID($deleteOldSession = false)
{
    @session_regenerate_id($deleteOldSession);
}

对,yii2使用了@符号抑制了错误信息,导致我在查找问题的时候花了3个小时逐行调试,因为没报500错误,但是没有什么错误信息,坑啊!

vagrant LNMP环境

vagrant LNMP环境

准备工作

安装好vagrantvirtualbox
下载intvdev1.0.boxVagrantfile,

vagrant box

$ vagrant box list #查看本地已有的box
$ vagrant box add intvdev1.0 /yourdownloadpath/intvdev1.0.box #添加到本地的box列表中
$ vagrant box list #确认已经添加成功

新建工作目录

$ mkdir ~/vagrant_dev
$ cd vagrant_dev
$ cp /yourdownloadpath/Vagrantfile ./ #把之前下载的Vagrantfile拷贝到当前目录
$ vagrant up #启动虚拟机
$ mkdir www #创建web根目录

在www目录下新建一个index.php文件
用浏览器访问http://localhost:8081/index.php来测试

高迸发下性能优化

高迸发下性能优化

hello world

http://rango.swoole.com/archives/508

php性能优化

  • 运行环境
    • php7,比php5快两倍以上
    • opcache
    • php-fpm进程数,根据系统总内存数/单个进程占用的内存数据,单个进程的内存数比较难估
  • io操作优化
    • 使用cache,nosql > db
    • 减少io操作(包括cache),合并多个操作,mget()
    • 外部接口调用需要谨慎,对其性能要评估
    • 异步处理某些操作,比如发短信,发红包等业务。会使用到队里服务,最简单的redis队列或者db模拟队列
    • php不存在代码级别的锁,但要防止io锁操作,比如DB锁(update 同一行)
    • 减少memcache的热点数据,热点数据会导致只使用mc集群中的单台机器,解决方法应该是设置多级缓存,这会带来逻辑上的增长和运维成本的增加

性能测试工具

  • 先单个请求的时间消耗,比如之前100ms,优化后50ms
  • 使用apache ab做并发测试
    ab -c10 -100 http://abc.com/index.php
如何创建一个可以用composer安装的php包

如何创建一个可以用composer安装的php包

composer介绍

关于composer如何安装使用,大家可以到phpcomposer查看文档,这里介绍下如何写个可以使用composer安装的php包

写composer.json

新建一个空目录mkdir libfoo,在libfoo目录下新建一个composer.js文件,内容如下

{
    "name": "gangbo/foo",
    "description": "test description",
    "authors": [
        {
            "name": "gangbo",
            "email": "[email protected]"
        }
    ],
    "autoload": {
         "psr-4": {
            "gangbo\\foo\\": "src/",
            "gangbo\\foo\\test\\": "test/"
         }
    }
}

name 代表这个package的名字,由vendorname/packagename组成。
autoload 里面定义namespace和文件目录的对应关系,可以多个。

编写代码并提交到github

在libfoo/src/目录下新建一个Hello.php

<?php
namespace gangbo\foo;

class Hello
{
    public static function fn()
    {
        echo 'hello: ' . __METHOD__ . "\n";
    }
}

在libfoo/test/目录下新建一个Unit.php

<?php
namespace gangbo\foo\test;
class Unit
{
    public static function fn()
    {
        echo 'hello: ' . __METHOD__ . "\n";
    }
}

提交代码到github,需要提前在github上建好仓库

git init
git add *
git commit -m "init"
git remote add origin [email protected]:gangbo/foo.git
git pull origin master:master
git push origin master:master

提交到packagist

登陆到 packagist ,点击submit把我们的git地址https://packagist.org/packages/submit填写进去并提交。

安装使用

这时其它开发者就可以使用comoser安装你的包了
执行composer require gangbo/foo:dev-master,
这里必须加上dev-master,因为如果不加的话会默认安装该包的稳定版,因为我们这里还没有发布稳定版本。
写个脚本测试下

// test.php
//加载autoload
require __DIR__ . '/vendor/autoload.php';

use gangbo\foo\Hello;
use gangbo\foo\test\Unit;

Hello::fn();
Unit::fn();

执行php test.php 输出结果

hello: gangbo\foo\Hello
hello: gangbo\foo\test\Unit::fn

说明调用成功。

如何安装一个本地的package

修改composer.json文件,添加repositories属性。

{
    "repositories": [
        {
            "type": "path",
            "url": "../../packages/my-package"
        }
    ]
}

修改完后我们就可以在本地执行composer require,composer会从本地文件中做个软连接到vendor目录下。
用这种方式可以非常方便的测试的你的package

centos7下安装php7

centos7下安装php7


距离php7发布已经有近10天的时间了,关于php7超强的性能提升这里就不再阐述了,这篇文章主要记录下在centos7上安装php7,nginx,php-memcached的整个过程,不得不说在centos7上安装php7比在centos6.5上顺利太多了,整个过程也就10分钟多点。

安装centos7,nginx

  • 准备工作,一台新安装的centos7的机器,为了演示方便,我全程使用root用户操作,系统最好是先执行下 yum update
  • 安装 nginx,很简单执行yum install nginx即可。
    启动service nginx start,测试是否启动成功, 测试是否正常,用浏览器访问 http://127.0.0.1。正常的话应该看到一个nginx的欢迎页面。这个页面就是 /usr/share/nginx/html/index.html,可以自行修改测试。

安装PHP7

  • 首先安装一些必须的依赖,这里就不阐述了,后面文章再细说
yum install -y \
gcc-c++ autoconf \
libjpeg libjpeg-devel libpng \
libpng-devel freetype freetype-devel \
libpng libpng-devel libxml2 libxml2-devel \
zlib zlib-devel glibc glibc-devel \
glib2 glib2-devel bzip2 bzip2-devel \
ncurses curl openssl-devel \
gdbm-devel db4-devel libXpm-devel \
libX11-devel gd-devel gmp-devel \
readline-devel libxslt-devel \
expat-devel xmlrpc-c xmlrpc-c-devel \
libicu-devel libmcrypt-devel \
libmemcached-devel
  • 下载php7,并解压
$ cd /usr/src/
$ wget http://cn2.php.net/distributions/php-7.0.0.tar.gz
#解压
$ tar -xzxvf php-7.0.0.tar.gz
$ cd php-7.0.0.0
  • 编译,安装
    具体参数意义以后再说
$ ./configure --prefix=/usr/local/php7 \
--with-mysql-sock --with-mysqli \
--enable-fpm  --enable-soap \
--with-libxml-dir --with-openssl \
--with-mcrypt --with-mhash \
--with-pcre-regex  --with-zlib \
--enable-bcmath --with-iconv \
--with-bz2 --enable-calendar \
--with-curl --with-cdb --enable-dom \
--enable-exif --enable-fileinfo \
--enable-filter --with-pcre-dir \
--enable-ftp --with-gd \
--with-openssl-dir --with-jpeg-dir \
--with-png-dir --with-zlib-dir \
--with-freetype-dir \
--enable-gd-native-ttf \
--enable-gd-jis-conv --with-gettext \
--with-gmp --with-mhash \
--enable-json --enable-mbstring \
--enable-mbregex \
--enable-mbregex-backtrack \
--with-libmbfl --with-onig \
--enable-pdo --with-pdo-mysql \
--with-zlib-dir  --with-readline \
--enable-session --enable-shmop \
--enable-simplexml --enable-sockets \
--enable-sysvmsg --enable-sysvsem \
--enable-sysvshm --enable-wddx \
--with-libxml-dir  --with-xsl \
--enable-zip \
--enable-mysqlnd-compression-support \
--with-pear --enable-intl
$ make
$ make install
  • 上面的命令执行完后php7就已经安装在到了/usr/local/php7目录下了。正常的话我们执行下面的命令
$ /usr/local/php7/bin/php -v
PHP 7.0.0 (cli) (built: Dec 13 2015 22:28:12) ( NTS )
Copyright (c) 1997-2015 The PHP Group
Zend Engine v3.0.0, Copyright (c) 1998-2015 Zend Technologies
  • 接下来我们要做一些简单配置让php运行更简单
    把php加入到系统环境变量中,做个软链即可
$ ln -sf /usr/local/php7/bin/php /usr/local/bin/php
$ php -v #和之前的/usr/local/php7/bin/php一样

添加php.ini,如果是生产环境则cp对应的php.ini-production

$ cp php.ini-development /usr/local/php7/lib/php.ini
  • 配置php-fpm,先添加配置文件
$ cp /usr/local/php7/etc/php-fpm.conf.default /usr/local/php7/etc/php-fpm.conf
$ cp /usr/local/php7/etc/php-fpm.d/www.conf.default /usr/local/php7/etc/php-fpm.d/www.conf
$ cp /usr/src/php-7.0.0/sapi/fpm/init.d.php-fpm /etc/init.d/php-fpm
$ chmod +x /etc/init.d/php-fpm

配置文件添加成功后,我们启动php-fpm

$ service php-fpm start 

php-fpm启动后我们还需要配置nginx才能通过访问php页面,首先确认nginx是启动的。service nginx restart

  • 配置nginx支持php,首先在web目录下新建一个php文件
$ echo '<?php phpinfo();' > /usr/share/nginx/html/info.php

然后访问 http://127.0.0.1/info.php,应该看到一个提示下载的页面。这是因为为nginx现在无法处理php文件,接下来我们配置nginx使其将php访问交给php-fpm处理。在/etc/nginx/nginx.confserver块里面添加下面的配置

location  ~ \.php(/|$) {
    fastcgi_pass 127.0.0.1:9000;
    fastcgi_index index.php;
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    include fastcgi_params;
}

保存退出,并重启nginx

$ service nginx restart

现在重新访问 http://127.0.0.1/info.php应该能看到我们熟悉的页面了。

安装php-memcached

下载php-memcached,从github上下载,记住一定要选择对应的php7分支

$ cd /usr/src
$ git clone  https://github.com/php-memcached-dev/php-memcached.git
$ cd php-memcached/
$ git checkout php7
$ /usr/local/php7/bin/phpize
$ ./configure --with-php-config=/usr/local/php7/bin/php-config
$ make
$ make install

修改php.ini

$ vi /usr/local/php7/lib/php.ini
#在最下面加上
extension=memcached.so

保存并退出,重启php-fpm

$ service php-fpm start

再次访问http://127.0.0.0/info.php,就可以看到memcached已经安装成功了。
以上php7,php7-memcached,nginx就已经安装完成了。


优化

  • 打开opcache,个性php.ini文件
$ vi /usr/local/php7/lib/php.ini
[opcache]
zend_extension=opcache.so #新加此行
opcache.enable=1 #删除此行前面的注释,并将0改为1,启用opcache
opcache.enable_cli=1 #删除此行前面的注释,并将0改为1,在cli模式下启用opcache
opcache.revalidate_freq=10 #可选,设置10s检查一次文件变化

通过 http://127.0.0.1/info.phpphp -i可以看到opcache在web和cli模式下都已经启用了。

Yii2 form布局

Yii2 form布局


在yii2中使用gii生成是表彰格式是完全垂直的,如果想需要label和input平等的,可以这样修改代码

use yii\helpers\Html;
use yii\widgets\ActiveForm;

$form = ActiveForm::begin([
    'id' => 'login-form',
    'options' => [
        'class' => 'form-horizontal',
    ],
    'fieldConfig' => [
        'template' => '{label}<div class="col-lg-6">{input}</div>{hint}{error}',
        'labelOptions' => [
            'class' => 'control-label col-lg-2',
        ],
    ]
]) ?>
<?= $form->field($model, 'username') ?>
<?= $form->field($model, 'password')->passwordInput() ?>

    <div class="form-group">
        <div class="col-lg-offset-1 col-lg-11">
            <?= Html::submitButton('Login', ['class' => 'btn btn-primary']) ?>
        </div>
    </div>
<?php ActiveForm::end() ?>
使用Vagrant打造统一的开发环境

使用Vagrant打造统一的开发环境

  1. 列表项

标签(空格分隔): Vagrant 开发 环境 团队


目前现状

开发环境不一致,Mac,Windows,Linux,虚拟机,服务器…
导致安装升级维护浪费很多时间,不同职责的开发人员互相之间的运行环境很难复用

WHY VAGRANT?

  • Vagrant 提供易配置,复制,携带的工作环境,并且这个环境是一个最标准的
  • 提供一个标准的工作流,最大限度的提高团队的生产效率和灵活性
  • 基于Viturlbox,Vmware,AWS。学习难度小,方便安装基本软件
  • 基于文本的可描述的开发环境,很容易做版本控制

    一次性解决所以繁琐的依赖及其配置。只要配置出标准的开发环境,之后团队中其它开发人员只要使用 vagrant up,就可以创建一个相同的运行环境。 Say goodbye to “works on my machine” bugs.

安装Vagrant

下载,点击安装即可,安装完成后在终端输入 vagrant测试是否安装成功。
安装 virtualbox 。

开始

$ mkdir vagrant_php
$ vagrant init hashicorp/precise32
$ vagrant up
$ vagrant package --output intv_ubuntu.box #打包当前环境,会在当前目录下生成一个intv_ubuntu.box

基础概念

box

是对Vagrant对虚拟机镜像(image)的封装。

$ vagrant box --help #
$ vagrant box list #查看本机的所以box
$ vagrant box add yourboxname basebox #将basebox添加到本机的box中
$ vagrant box remove boxname #移除某个box
$ vagrant repackage boxname virtualbox 0 #需要是vagrantcloud上的box

https://atlas.hashicorp.com/boxes/search

配置文件 Vagrantfile

常用配置

配置端口映射
config.vm.network "forwarded_port", guest: 80, host: 8080
同步目录
config.vm.synced_folder "data/", "/srv/website"

provision

config.vm.provision "shell", inline: <<-SHELL
    echo 'hello vagrant'
SHELL

载入配置

$ vagrant reload --provision

配置多个vm

config.vm.define("web") do |config|
    config.vm.box = "apache"
end

config.vm.define("db2") do |config|
    config.vm.box = "mysql"
end

Vagrant Share

$ vagrant share #需要注册 ,可以通过URL访问
$ vagrant share --ssh #可以远程ssh , 如:vagrant connect --ssh shining-shrew-6248

高级用法

  • 自己创建 baseox
  • Vagrant 版本
  • 多个machine