Laravel 要求服务器的 PHP 版本大于等于5.5.9,而目前大部分的空间都还在使用 5.4 甚至更低的版本,不满足部署 Laravel 的条件,而购买服务器有需要大量的资金,很多朋友可能会不太想购买,最近发现了一个可以部署 Laravel 应用而又完全免费的 (2016.04 更新:现在演示功能已经开始收费了) —Coding.net,它除了提供 Git 功能,还提供了一个项目演示平台,今天就一步步教大家如何在 Coding.net 上部署 Laravel 演示站点。
此处是我自己部署在 Coding.net 上的一个演示站点。
一、准备工作
首先,在上传代码到Coding.net之前,需要对项目中的几个文件做一下修改。
.gitignore
由于项目演示中需要用到 .env
,而 .gitignore
中设置了忽略提交 .env
文件,因此,需要把 .gitignore
中 .env
这一行删除掉
config/database.php
Coding.net 中数据库信息是保存在环境变量中的,因此我们需要修改该文件,通过环境变量来配置数据库。打开该文件,在顶部添加如下代码:
// 获取Mysql链接信息 $mysqlConfig = json_decode($_ENV['VCAP_SERVICES'], true); $mysqlConfig = $mysqlConfig['mysql'][0]['credentials'];
之后修改 return 数组中 mysql 的配置:
'mysql' => [ 'driver' => 'mysql', 'host' => $mysqlConfig['hostname'], 'database' => $mysqlConfig['name'], 'username' => $mysqlConfig['username'], 'password' => $mysqlConfig['password'], 'charset' => 'utf8', 'collation' => 'utf8_unicode_ci', 'prefix' => '', 'strict' => false, ],
添加Procfile
由于Laravel项目访问的根目录问 /public
文件夹,因此需要添加一个配置文件,把访问根目录指向 /public
文件夹。在项目根目录下添加文件 Procfile
,并在其中添加内容:
web: vendor/bin/heroku-php-apache2 public/
导出SQL文件
其实也可以在部署的时候执行 php artisan migrate
命令,但是需要部署两次才能完成,因此这里建议大家直接导出SQL文件,之后在演示平台中导入。
二、上传文件到Coding.net
在Conding.net上创建一个“公开”的项目,并把代码上传到上面。此步涉及的就是简单的Git操作,不再详述。
三、部署演示
1. 进入Coding.net刚刚创建的项目中,打开“演示”标签页,点击“开启功能”。
2. 之后点击“编译部署”右侧的“显示高级选项”,在“运行环境”处选择“PHP”。还可以修改“访问域名”(非必须)。
3. 点击左侧“服务管理”,然后选择“添加服务”,之后添加MySQL服务,除服务器名外,其他需按下图勾选。
4. 添加完MySQL服务之后,导入第一步中准备好的SQL文件。
点击上图中“控制台”,之后进入的页面中有个“恢复数据”按钮,点击后导入SQL文件即可。
5. 返回“演示”的首页,点击“一键部署”按钮,等待应用部署完成后即可访问。在部署过程中,还可以点击左侧“查看日志”,查看部署的进度。
xx 2016/01/14 20:02
Procfile是什么类型的文件呢
Specs 2016/01/15 09:01
@ 相当于配置文件吧,不需要后缀
鸡仔 2016/04/13 18:54
这个公开的项目,别人能进入(看)数据库吗?
Specs 2016/04/13 20:21
@ 数据库是看不到的。但是代码里如果写了帐号什么的是能看见的
鸡仔 2016/04/13 20:59
@ 因为env上存有数据库的密码,如果其他人没办法登录数据库的话就可以,可以把后台的管理密码写在数据库就行,这样就能用这个来做一个自己的博客了~
Specs 2016/04/13 21:42
@ env里没有写数据库的密码呀,你用环境变量读取就行了。
鸡仔 2016/04/13 21:44
@ 恩恩,那样也行,不过刚刚看了一下coding的演示功能已经开始收费了~
Specs 2016/04/14 08:32
@ 是啊,收费了,以后就不用了~
鸡仔 2016/04/19 14:46
@ 正在学习你这个开源的blog,能在文章中说一下,您使用了那些package,以及哪些JS插件等吗?谢谢!
鸡仔 2016/08/03 14:17
正在看您的这个项目学acl权限,每次有用户注册的时候,肯定要自动在role_user表建立一个关联关系,在User.php这个model里面看到了一段代码-------------------------------------------------- // 给用户分配角色 public function assignRole($role_id) { return $this->roles()->sync([$role_id]); }--------------------------------------------------大概这个方法实现了在每次注册用户的时候都自动分配了role角色,但是我在UserController,或者是中间件里面都没有找到在哪里调用了这个方法,就是我不明白注册后,调用方法实现了“自动在role_user表建立一个关联关系”的代码写在哪里?希望抽空能回答一下,谢谢!
Specs 2016/08/03 22:11
@ 可以参考下我这个项目的 github.com/9IPHP/LaravelBlog,修改了下 /Auth/AuthController 的注册,添加了一段代码 : github.com/9IPHP/LaravelBlog/blob/master/app/Http/Controllers/Auth/AuthController.php。还有一种方式,使用事件,在捕获用户创建的时候给赋值。