restful的测试工具:
火狐插件:
HttpRequester
谷歌插件:
RESTful的测试工具PostMAN:
谷歌浏览器访问:chrome://extensions 点击进入 应用商店
然后搜索 Postman REST
即可看到 Postman – REST Client shortcut
安装即可
restful的测试工具:
火狐插件:
HttpRequester
谷歌插件:
RESTful的测试工具PostMAN:
谷歌浏览器访问:chrome://extensions 点击进入 应用商店
然后搜索 Postman REST
即可看到 Postman – REST Client shortcut
安装即可
1.
创建数据库表:
sql创建:
CREATE TABLE IF NOT EXISTS `user` ( `id` int(20) unsigned NOT NULL AUTO_INCREMENT, `username` varchar(50) DEFAULT NULL COMMENT '用户名', `password_hash` varchar(80) DEFAULT NULL COMMENT '密码', `password_reset_token` varchar(60) DEFAULT NULL COMMENT '密码token', `email` varchar(60) DEFAULT NULL COMMENT '邮箱', `auth_key` varchar(60) DEFAULT NULL, `status` int(5) DEFAULT NULL COMMENT '状态', `created_at` int(18) DEFAULT NULL COMMENT '创建时间', `updated_at` int(18) DEFAULT NULL COMMENT '更新时间', `password` varchar(50) DEFAULT NULL COMMENT '密码', `role` varchar(50) DEFAULT NULL COMMENT 'role', `access_token` varchar(60) DEFAULT NULL, `allowance` int(20) NOT NULL, `allowance_updated_at` int(20) NOT NULL, PRIMARY KEY (`id`), UNIQUE KEY `username` (`username`), UNIQUE KEY `access_token` (`access_token`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=5 ; -- -- 转存表中的数据 `user` -- INSERT INTO `user` (`id`, `username`, `password_hash`, `password_reset_token`, `email`, `auth_key`, `status`, `created_at`, `updated_at`, `password`, `role`, `access_token`, `allowance`, `allowance_updated_at`) VALUES (1, 'terry', '$2y$13$EyK1HyJtv4A/19Jb8gB5y.4SQm5y93eMeHjUf35ryLyd2dWPJlh8y', NULL, 'zqy234@126.com', 'pBJi3hyFsLsTuvUM9paFpWjYRatn3qwS', 10, 1441763620, 1447318986, NULL, NULL, 'xxxxxxxxxxxxxxxxxxxx', 0, 1447318986), (2, 'terry1', '$2y$13$B0P2T4wEFrxeecSEClo5g.wrapMqG0RmsSL0cJluHJ747M3R0vkMG', NULL, 'zqy2341@126.com', 'wIvJk7dMm6PQ1dJFz8iUqJ1RfH6rsDTW', 10, 1441763906, 1441763906, NULL, NULL, NULL, 0, 0), (3, 'zqy', '$2y$13$kcczJRoLGqSWHo7AZloCyeJiMYeM5SA1uXhyUZCNkFirWJuWeC3gO', NULL, 'zqy23114@126.com', 'K-76pcy7gxceemxRI2IeN5g1EhLMaCj8', 10, 1442544183, 1442544183, NULL, 'moderator', NULL, 0, 0), (4, 'admin', '$2y$13$w4/PWXvwRUKNSrDTSMhPhOnvxw4v4WWt7GVl2siozPDlmEjP04vJC', NULL, 'zqy2342321@126.com', 'hZWOaamjHEsPtuJJVghFRdE2oTj7Qv8P', 10, 1446524232, 1446524232, NULL, NULL, NULL, 0, 0);
2.
设置用户组件 yii\web\User ;
'user' => [ 'identityClass' => 'myapp\code\core\Erp\User\models\User', # 'enableAutoLogin' => true, ],
3.创建User模块,在模块中加入
'user' => [ 'class' => 'myapp\code\core\Erp\User\Module', ]
4.编辑 myapp\code\core\Erp\User\Module.php
<?php namespace myapp\code\core\Erp\User; use Yii; class Module extends \yii\base\Module { public $controllerNamespace = 'myapp\code\core\Erp\User\controllers'; public function init() { parent::init(); # session 设置无效 \Yii::$app->user->enableSession = false; \Yii::$app->user->loginUrl = null; # 加载配置文件 if(file_exists(__DIR__ . '/etc/config.php')){ Yii::configure($this, ['params'=>(require(__DIR__ . '/etc/config.php'))]); } $this->params['blockDir'] = str_replace("\\controllers","",$this->controllerNamespace); } }
主要是 设置:
\Yii::$app->user->enableSession = false; \Yii::$app->user->loginUrl = null;
5.创建 myapp\code\core\Erp\User\models\User 实现 yii\web\IdentityInterface 接口。
代码如下:
<?php namespace myapp\code\core\Erp\User\models; use Yii; use yii\base\NotSupportedException; use yii\behaviors\TimestampBehavior; use yii\db\ActiveRecord; use yii\web\IdentityInterface; use yii\filters\RateLimitInterface; /** * User model * * @property integer $id * @property string $username * @property string $password_hash * @property string $password_reset_token * @property string $email * @property string $auth_key * @property integer $status * @property integer $created_at * @property integer $updated_at * @property string $password write-only password */ class User extends ActiveRecord implements IdentityInterface ,RateLimitInterface { const STATUS_DELETED = 0; const STATUS_ACTIVE = 10; # 速度控制 6秒内访问3次,注意,数组的第一个不要设置1,设置1会出问题,一定要 #大于2,譬如下面 6秒内只能访问三次 # 文档标注:返回允许的请求的最大数目及时间,例如,[100, 600] 表示在600秒内最多100次的API调用。 public function getRateLimit($request, $action){ return [3, 6]; } # 文档标注: 返回剩余的允许的请求和相应的UNIX时间戳数 当最后一次速率限制检查时。 public function loadAllowance($request, $action){ //return [1,strtotime(date("Y-m-d H:i:s"))]; //echo $this->allowance;exit; return [$this->allowance, $this->allowance_updated_at]; } # allowance 对应user 表的allowance字段 int类型 # allowance_updated_at 对应user allowance_updated_at int类型 # 文档标注:保存允许剩余的请求数和当前的UNIX时间戳。 public function saveAllowance($request, $action, $allowance, $timestamp){ $this->allowance = $allowance; $this->allowance_updated_at = $timestamp; $this->save(); } /** * @inheritdoc */ # 设置table public static function tableName() { return 'user'; } /** * @inheritdoc */ public function behaviors() { return [ TimestampBehavior::className(), ]; } /** * @inheritdoc */ # 设置 status 默认 ,以及取值的区间 public function rules() { return [ ['status', 'default', 'value' => self::STATUS_ACTIVE], ['status', 'in', 'range' => [self::STATUS_ACTIVE, self::STATUS_DELETED]], ]; } /** * @inheritdoc */ # 通过id 找到identity public static function findIdentity($id) { return static::findOne(['id' => $id, 'status' => self::STATUS_ACTIVE]); } /** * @inheritdoc */ # 通过access_token 找到identity public static function findIdentityByAccessToken($token, $type = null) { return static::findOne(['access_token' => $token, 'status' => self::STATUS_ACTIVE]); } # 生成access_token public function generateAccessToken() { $this->access_token = Yii::$app->security->generateRandomString(); } /** * Finds user by username * * @param string $username * @return static|null */ public static function findByUsername($username) { return static::findOne(['username' => $username, 'status' => self::STATUS_ACTIVE]); } /** * Finds user by password reset token * * @param string $token password reset token * @return static|null */ # 此处是忘记密码所使用的 public static function findByPasswordResetToken($token) { if (!static::isPasswordResetTokenValid($token)) { return null; } return static::findOne([ 'password_reset_token' => $token, 'status' => self::STATUS_ACTIVE, ]); } /** * Finds out if password reset token is valid * * @param string $token password reset token * @return boolean */ public static function isPasswordResetTokenValid($token) { if (empty($token)) { return false; } $timestamp = (int) substr($token, strrpos($token, '_') + 1); $expire = Yii::$app->params['user.passwordResetTokenExpire']; return $timestamp + $expire >= time(); } /** * @inheritdoc */ public function getId() { return $this->getPrimaryKey(); } /** * @inheritdoc */ public function getAuthKey() { return $this->auth_key; } /** * @inheritdoc */ public function validateAuthKey($authKey) { return $this->getAuthKey() === $authKey; } /** * Validates password * * @param string $password password to validate * @return boolean if password provided is valid for current user */ public function validatePassword($password) { return Yii::$app->security->validatePassword($password, $this->password_hash); } /** * Generates password hash from password and sets it to the model * * @param string $password */ public function setPassword($password) { $this->password_hash = Yii::$app->security->generatePasswordHash($password); } /** * Generates "remember me" authentication key */ public function generateAuthKey() { $this->auth_key = Yii::$app->security->generateRandomString(); } /** * Generates new password reset token */ public function generatePasswordResetToken() { $this->password_reset_token = Yii::$app->security->generateRandomString() . '_' . time(); } /** * Removes password reset token */ public function removePasswordResetToken() { $this->password_reset_token = null; } }
6.控制器:
<?php namespace myapp\code\core\Erp\User\controllers; use Yii; use yii\web\Controller; use myapp\code\core\Erp\User\models\User; use yii\filters\auth\CompositeAuth; use yii\filters\auth\HttpBasicAuth; use yii\filters\auth\HttpBearerAuth; use yii\filters\auth\QueryParamAuth; use yii\filters\RateLimiter; class IndexController extends Controller { public function init(){ parent::init(); } # 行为 添加 # 验证 :authenticator # 速度控制:rateLimiter public function behaviors() { $behaviors = parent::behaviors(); $behaviors['authenticator'] = [ 'class' => CompositeAuth::className(), 'authMethods' => [ # 下面是三种验证access_token方式 //HttpBasicAuth::className(), //HttpBearerAuth::className(), # 这是GET参数验证的方式 # http://10.10.10.252:600/user/index/index?access-token=xxxxxxxxxxxxxxxxxxxx QueryParamAuth::className(), ], ]; # rate limit部分,速度的设置是在 # \myapp\code\core\Erp\User\models\User::getRateLimit($request, $action){ /* 官方文档: 当速率限制被激活,默认情况下每个响应将包含以下HTTP头发送 目前的速率限制信息: X-Rate-Limit-Limit: 同一个时间段所允许的请求的最大数目; X-Rate-Limit-Remaining: 在当前时间段内剩余的请求的数量; X-Rate-Limit-Reset: 为了得到最大请求数所等待的秒数。 你可以禁用这些头信息通过配置 yii\filters\RateLimiter::enableRateLimitHeaders 为false, 就像在上面的代码示例所示。 */ $behaviors['rateLimiter'] = [ 'class' => RateLimiter::className(), 'enableRateLimitHeaders' => true, ]; return $behaviors; } public function actionIndex() { echo Yii::$app->user->id; } }
7
然后通过访问:
http://10.10.10.252:900/user/index/index?access-token=nnnnnnnnnnnnnn
就可以访问了,由于我设置的是6秒内访问3次,正常访问,查看head消息头:如下
我设置的是:6秒内最多访问3次的返回结果
X-Rate-Limit-Limit : 3 总次数还剩余3次
X-Rate-Limit-Remaining:2 还剩余2次
yii2 的 restful 接口的默认 是帮写了很多的方法
下面我们需要书写自己的接口方法,譬如搜索方法。
1.更改配置:
'urlManager' => [ 'class' => 'yii\web\UrlManager', 'enablePrettyUrl' => true, 'enableStrictParsing' => true, 'showScriptName' => false, 'rules' => [ '' => 'cms/index', ['class' => 'yii\rest\UrlRule', 'controller' => 'customer/api', 'pluralize' => false, ], # 定义方法: public function actionSearch($name); <name> 就是search方法传入的参数 'POST customer/api/search/<name>' => 'customer/api/search', //'POST customer' => 'customer/index/create', ], ],
也就是添加:
'POST customer/api/search/<name>' => 'customer/api/search',
name代表的是参数
2.我们需要返回的是json格式:
<?php namespace myapp\frontend\code\ECM\Customer\controllers; use yii\web\Response; use Yii; use yii\rest\ActiveController; use myapp\frontend\code\ECM\User\models\Product; class ApiController extends ActiveController { public $modelClass = 'myapp\frontend\code\ECM\User\models\Product'; public function behaviors() { $behaviors = parent::behaviors(); #定义返回格式是:JSON $behaviors['contentNegotiator']['formats']['text/html'] = Response::FORMAT_JSON; return $behaviors; } public function actionSearch($name){ $one = Product::findOne(['name'=>$name]); return $one; } }
3. 然后访问:
curl -i -H "Accept:application/json" -H "Content-Type:application/json" -XPOST "http://10.10.10.252:800/customer/api/search/xxxx"
我们发现 name 为xxxx的条目被打印出来了
HTTP/1.1 200 OK Server: nginx Date: Wed, 18 Nov 2015 02:26:40 GMT Content-Type: application/json; charset=UTF-8 Transfer-Encoding: chunked Connection: keep-alive X-Powered-By: PHP/5.4.34 {"id":2,"name":"xxxx","description":"ddddd","image":null,"status":null,"created_at":null}
关于yii2的接口,使用起来是比较方便,配置起来也比较方便,不过按照模块和非模块的配置,在一些地方是不一样的,对于restful api的哲学思想,可以搜索资料,总体来说restfulapi是通过请求类型的不同来决定具体的操作,简略来说,restful api并不是一门技术,而是一种规则,实际当中,很少有人严格的按照restful的哲学思想设计API,一般都是用post类型,好了,下面说下restful api的知识,如何在yii2中使用。
先配置一个普通的restful
我配置的是以模块的方式进行的配置:
1. 配置好模块
2. 定义controller ,继承于 yii\rest\ActiveController
<?php namespace myapp\frontend\code\ECM\Customer\controllers; use Yii; use yii\rest\ActiveController; class IndexController extends ActiveController { public $modelClass = 'myapp\frontend\code\ECM\User\models\Product'; }
3.创建资源:
数据库部分:
CREATE TABLE IF NOT EXISTS `restful_product` ( `id` int(11) NOT NULL AUTO_INCREMENT, `name` varchar(255) DEFAULT NULL, `description` varchar(255) DEFAULT NULL, `image` varchar(255) DEFAULT NULL, `status` int(5) DEFAULT NULL, `created_at` datetime DEFAULT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=6 ; -- -- 转存表中的数据 `restful_product` -- INSERT INTO `restful_product` (`id`, `name`, `description`, `image`, `status`, `created_at`) VALUES (1, 'terry', 'terry des', 'terry img', 1, '2015-11-17 15:25:21'), (2, 'xxxx', 'ddddd', NULL, NULL, NULL), (3, 'xxxx', 'ddddd', NULL, NULL, NULL), (4, 'xxxx', 'ddddd', NULL, NULL, NULL), (5, 'xxxx', 'ddddd', NULL, NULL, NULL);
创建完数据表 restful_product
剩下的工作就是创建model:
<?php namespace myapp\frontend\code\ECM\User\models; use yii\db\ActiveRecord; class Product extends ActiveRecord { # 定义rule public function rules(){ return [ [['name','description'],'required'], ]; } public static function tableName() { return 'restful_product'; } }
到这里,资源就建立好了
4.进行配置
在配置的时候,一定要注意,在下面的文件都可以配置
frontend/config/main.php , frontend/config/main-local.php
common/config/main.php , common/config/main-local.php
不要重复,曾经,我配置mailer 的时候,就是因为在两个配置文件配置了mailer组件,导致我的配置没有生效,搞了我半天晕头转向,最后发现是重复配置,
在哲学里面,灵活的东西,对应的就是使用的复杂性,这是无可避免,所以,没有最好,只有更适合,yii2是比较适合架构师玩,定制好规则和example,然后让码农们
填写代码,如果是初学者,玩玩thinkphp,如果玩yii2,则不是很适合,什么都有一个进化的过程(http://blog.csdn.net/terry_water),所以没有最好的框架,只有更适合自己的现状,和公司现状的框架,找女人也是这样吧。
下面要配置的是urlManage:
'urlManager' => [ 'class' => 'yii\web\UrlManager', 'enablePrettyUrl' => true, 'enableStrictParsing' => true, 'showScriptName' => false, 'rules' => [ '' => 'cms/index', ['class' => 'yii\rest\UrlRule', 'controller' => 'customer/index', 'pluralize' => false, ], //'POST customer' => 'customer/index/create', ], ], 'request' => [ 'class' => '\yii\web\Request', 'enableCookieValidation' => false, 'parsers' => [ 'application/json' => 'yii\web\JsonParser', ], 'cookieValidationKey' => 'O1d232trde1xww-M97_7QvwPo-5QGdkLMp#@#@', ],
在上面,需要配置request 组件 的 parsers子项,这个子项的意思是解析,也就是对于request请求,按照json格式,这样,发送post请求,通过接口插入数据,可以用json格式,而不是用繁琐的xml格式费劲。
对于urlManager组件 的rules子项,
['class' => 'yii\rest\UrlRule', 'controller' => 'customer/index', 'pluralize' => false, ],
class的值是系统默认的, controller的值是您的controller的路径,如果您不使用模块,直接在controller下面建立了一个CustomerController,那么controller的值是customer, 由于我使用的是customer模块,因此controller 是customer/index
pluralize的意思是不使用复数,这样可以不需要加s
5
测试:
get 方式可以直接使用浏览器访问
post请求:
curl -i -H "Accept:application/json" -H "Content-Type:application/json" -XPOST "http://10.10.10.252:800/index.php/customer/index" -d '{"name": "xxxx", "description":"ddddd"}'
官方给予的:
GET /users: 逐页列出所有用户 HEAD /users: 显示用户列表的概要信息 POST /users: 创建一个新用户 GET /users/123: 返回用户 123 的详细信息 HEAD /users/123: 显示用户 123 的概述信息 PATCH /users/123 and PUT /users/123: 更新用户123 DELETE /users/123: 删除用户123 OPTIONS /users: 显示关于末端 /users 支持的动词 OPTIONS /users/123: 显示有关末端 /users/123 支持的动词
对应的方法为:
index: list resources page by page; view: return the details of a specified resource; create: create a new resource; update: update an existing resource; delete: delete the specified resource; options: return the supported HTTP methods.
[ 'PUT,PATCH users/<id>' => 'user/update', 'DELETE users/<id>' => 'user/delete', 'GET,HEAD users/<id>' => 'user/view', 'POST users' => 'user/create', 'GET,HEAD users' => 'user/index', 'users/<id>' => 'user/options', 'users' => 'user/options', ]
为什么可以直接访问,因为在资源建立的时候,activerecord已经把上面的方法都默认建立好,如果您想更改对应的方法
可以在资源model里面新建一个对应的方法即可重写。
github地址为:https://github.com/fancyecommerce/yii2-fec
本插件为一些日常所用的函数类的封装
安装方法:
composer require --prefer-dist fancyecommerce/fec
安装完成后,可以在
/vendor/fancyecommerce/fec文件夹下面看到本插件的文件。
具体的插件信息:
一:基本功能封装部分:
CApi CCache CConfig CCookie CDate CDB CDir CDoc CEmail CExcel CFile CFunc CImage CLog CMessage CModel CModule CProfile CRequest CSession CTranslate CUrl CUser
具体的详细,可以在\fec\helpers里面查看具体的功能要点。这些都是一些帮助类,快速的实现某些功能。
1.临时设置,使用export方法
譬如吧php加入到PATH中:
export PATH=$PATH:/usr/local/php/bin
2.永久方法:
vi /etc/profile
在最后的部分加入
PATH=/usr/local/mysql/bin:$PATH PATH=/usr/local/php/bin:$PATH export PATH
保存文件,退出
然后在linux命令行中执行:
source /etc/profile
即可
对于个人来说,我一般开发环境用linux,好处就是,本地测试没有问题,线上也不会出什么问题。
使用samba,可以把局域网的linux和window共享,通过映射网络盘的方式可以挂在到windows文件系统下面,使用起来和本地磁盘没有区别,下面介绍,如何安装samba。
yum install samba samba-client samba-swat
2.启动
/etc/init.d/smb start
3.查看samba的服务启动情况
service smb status
4.开机启动
chkconfig --level 35 smb on
5.添加账户
smbpasswd -a root
输入密码
6.关闭防火墙:
service iptables stop
7
编辑配置文件:/etc/samba/smb.conf
[public] comment = Public Stuff path = /www public = yes writable = yes printable = no
8.重启samba
service smb restart
9
权限问题:需要设置selinux
setenforce 0
10 上面是之前配置samba的步骤,下面为补充
首先需要开放端口,iptables,如果是本地,那么直接关掉iptables,免得麻烦
譬如我想配置public下的需要用户名和密码访问,那么
vim /etc/samba/smb.conf
[public] comment = Public Stuff path = /www/web/develop/erp public = yes writable = yes printable = no valid users = myerp ; password: myerp123 [ts] comment = TS path = /www/web/develop/e_commerce_huang_di valid users = @ts
public部分,添加的是myerp的用户名
需要执行,一定不要忘记参数 -a
useradd myerp smbpasswd -a myerp
[root@grande erp]# smbpasswd -a myerp New SMB password: Retype new SMB password: [root@grande erp]# service smb restart
#然后重启smb service smb restart
这样,在linux就配置好了,只有liming用户才能访问
在windows下面打开我的电脑,然后点击 映射网络驱动器
在弹出的框内填写内部ip地址,后面一定要加上public部分。不然后无法访问
登陆时重新连接,使用其他凭证连接勾选,然后点击完成
点击后出现框,输入密码即可。
保存后,在我的电脑就会出现一个磁盘,直接点击访问即可。
service smb restart
备注,如果一个文件夹下面有很多系统,而且,想要某个用户只能看到2-3个系统
那么,可以在samba中配置几个块,譬如:
vim /etc/samba/smb.conf
[erp] path = /www/web/develop/erp valid users = sambauser myerpdevelop [intosmile] path = /www/web/develop/intosmile valid users = sambauser myerpdevelop [wordpress] path = /www/web/develop/wordpress valid users = sambauser myerpdevelop
这样样sambauser 和myerpdevelop 两个用户都可以访问 /www/web/develop目录下面的三个文件夹 erp intosmile wordpress
其他则看不到
在网络映射文件中依次添加
\\10.10.10.252\wordpress \\10.10.10.252\erp \\10.10.10.252\intosmile
在映射文件磁盘中一个ip只能使用一个用户名,如果使用另外一个用户名,需要把这个用户对应的网络映射磁盘断掉。
vsftpd是一款在Linux发行版中最受推崇的FTP服务器程序。特点是小巧轻快,安全易用。
在用YII2框架开发系统的时候,有时候有一些图片等非版本控制的东西,我们需要上传文件,那么我们可以用vsftpd。
yum install vsftpd
设置开机启动vsftpd
chkconfig vsftpd on
启动vsftpd:
service vsftpd start
开发端口:
/sbin/iptables -I INPUT -p tcp --dport 21 -j ACCEPT /sbin/iptables -I INPUT -p tcp --dport 22 -j ACCEPT
/etc/rc.d/init.d/iptables save service iptables restart
配置ftp账户:
vi /etc/vsftpd/vsftpd.conf
如果我想给/www/web目录添加ftp,那么:
下面是添加ftpuser用户,设置根目录为/home/wwwroot/ftpuser,禁止此用户登录SSH的权限,并限制其访问其它目录。
1、修改/etc/vsftpd/vsftpd.conf
将底下三行
#chroot_list_enable=YES # (default follows) #chroot_list_file=/etc/vsftpd.chroot_list
改为
chroot_list_enable=YES # (default follows) chroot_list_file=/etc/vsftpd/chroot_list
禁止允许匿名用户登陆,YES是,NO否
anonymous_enable=NO
3、增加用户ftpuser,指向目录/home/wwwroot/ftpuser,禁止登录SSH权限
useradd -d /www/web -g ftp -s /sbin/nologin ftpusername passwd ftpusername
然后设置密码,完成后就设置成功一个账户
4、编辑文件chroot_list:
vi /etc/vsftpd/chroot_list
ftpusername
将刚才新建的账户添加上,多个账户用回车隔开,也就是说,上面新建一个不能登录的系统账户,指向了/www/web目录
然后我们在这个文件里面把这个账户添加上就OK了
5、重新启动vsftpd
service vsftpd restart
在开发的过程中,我们需要使用 svn进行版本控制。
1.
yum install subversion
svnserve --version
查看具体的版本信息,如果有结果,则代表SVN安装成功。
2. 创建路径:
/home/svn/repo #创建仓库 svnadmin create /home/svn/repo
3.进行配置:
vim /home/svn/repo/conf/svnserve.conf
[general] anon-access = none //匿名访问的权限,设置为none表示为不允许,默认是read auth-access = write //可以是read,write,none,默认是write password-db = passwd //密码数据库的路径,去掉前面的# authz-db = authz
4.配置svn的密码文件:
vim /home/svn/repo/conf/passwd [user] username = passwd
上面的例子为填写用户名和密码,如果是water 密码为888888
[user] water = 888888
配置文件 /home/svn/repo/conf/authz
[groups] [/] terry = rw #代表terry 这个账户对应的路径为根目录,对根目录下的所有文件和文件夹有读写的权限 [/magento] terry = r #代表terry这个账户对应的路径是magento文件夹,在这个目录下的文件只有读的权限 [/magento/app/etc/local.xml] terry = #代表terry对上面这个文件不可见。即:不可读,不可写
设置可读
vim /home/svn/repo/conf/svnserve.conf anon-access = none
设置完成后,关闭svn,重启
关闭svn: killall svnserve 启动svn: svnserve -d -r /home/svn/repo --listen-host ip地址
开放端口:
/sbin/iptables -I INPUT -p tcp --dport 3690 -j ACCEPT /etc/rc.d/init.d/iptables save
经过了4步骤,我们创建了账户,设置了账户的权限,当我们用svn工具访问svn://ip地址,就可以访问了。
在本地可以通过上传文件到svn服务器
我们想要的是svn中提交的文件,复制到服务器的web路径中,所以我们需要把svn中的数据提交到web路径
这里我们使用的命令式svn up,强制提交:svn up –force
首先我们需要先设置,把svn中的路径,对应的web目录
譬如:svn://192.168.1.12/magento 对应到/www/web/come/public_html,我们的配置为
svn co svn://192.168.1.12/magento /www/web/come/public_html
然后需要输入root密码, 然后需要输入提交账户,这个账户就是svn的在上面配置文件中添加的账户, 更改svn up 账户命令:svn co --username xxx svn://192.168.1.12/magento
6
如果svn up 报错:
Skipped ‘.’
需要到输出的路径下,譬如到/www/web/come/public_html下面svn up 就可以了
7
开机启动svn
vi /etc/rc.local 在最后一行加入: svnserve -d -r /home/svn/repo
8
自动更新,不需要svn up
svn co svn://115.29.18.29/erp /www/web/
在SVN 项目版本库的存储目录下的hooks 目录,新建立一个post-commit文件:
以后每次客户端提交操作,就会自动运行该脚本。