前言
我同事告诉我他的windows电脑装不上homestead,我已经有了在windwos下面折腾vagrant+virtual box+homestead的惨痛经验,然后偶然打开百度搜索了一下Laravel docker,嗯,不错,找到了Laradock。搞起来,怕啥!
我的惨痛经验
Vagrant+Virtual box+Homestead是Laravel项目开发中大多数人的标配,或者说是Web开发本地环境的标配(还在使用XAMPP, Phpstudy等等,诸如此类的开发环境的人,请认真看:-D)。
但是如果是在Linux下使用的话,问题不是很大,体验还是很完美的,也就搞定文件挂载,搞定公网私网IP,忍受漫长的启动过程。
但是在Windows下面,简直不要太难受,具体怎么难受,我大概是忘记了,但是依稀还记得,怎么装也装不上,怎么启动也报错,肯定是有的。再或者需要安装个其他的软件,比如,ElasticSearch 还需要手动安装。
被这些事情搞到放弃的人,我也相信是有的。废话少说,下面我们来看看如何使用Laradock。
为什么要用?
这个问题问得好,首先,你不觉得这年头不懂Docker就像乡下来的?其次,自己百度一下什么是Docker,Docker都有哪些优点。总之,不用Laradock那就是和自己过不去。
Laradock
基本情况
- Github地址:laradock/laradock
- 文档地址:Laradock
安装
- 自行解决Docker安装,此处给个文档:Install
-
Linux:
git clone https://github.com/Laradock/laradock.git
cd laradock
cp env-example .env
docker-compose up -d nginx mysql phpmyadmin redis workspace
- 到这先停一停
-
Windows:
- 和Linux差不多
注:Windows用户可能会遇到一个执行startup.sh
这个文件失败的问题,导致nginx
容器启动不了,不要怕,我已经遇到过了。Github Issue
解决办法如下:
vim nginx/Dockerfile
# 把下面这两行注释掉
ADD ./startup.sh /opt/startup.sh
CMD ["/bin/bash", "/opt/startup.sh"]
# 改成
CMD ["nginx"]
# 暂时关闭 `Nginx SSl` 功能
使用
官网介绍了三种使用方式,我们呢只考虑最后一种,多个项目共用一个Laradock,但是,我会把整个安装遇到的问题都给你说明白。
假设:我们有一台刚刚装好系统,Docker,Git的电脑。
创建项目
为什么把创建项目放到第一个来说,是因为可以避免研究时,无项目可用。
cd laradock
-
docker-compose exec --user=laradock workspace bash
(为什么要加--user = laradock,是因为权限问题) -
composer create-project --prefer-dist laravel/laravel blog
文档:安装Laravel,推荐使用 composer安装
注:composer config -g repo.packagist composer https://packagist.phpcomposer.com
Composer 中国镜像 -
内容比较多,看下面的shell
# 此时在workspace bash中 cd blog vim .env # 修改Mysql && Redis链接 DB_HOST=mysql REDIS_HOST=redis # 修改数据库和用户名:因为我们如果看一下 laradock/.env 文件,我们就会知道默认如下所示: MYSQL_VERSION=latest MYSQL_DATABASE=default MYSQL_USER=default MYSQL_PASSWORD=secret MYSQL_PORT=3306 # 至于如何修改成Homestead:Homestead,或者说,改了没效果(我不会告诉你,我改了N多次也没用)等等这些问题,我们单独讨论
运行项目
-
Nginx 配置
# 重新开一个终端,也可以先退出workspace bash cd nginx/sites/ cp laravel.conf.example xxx.conf vim blog.conf # 修改Server name && root && Log Path :这个你自己应该能搞定 server_name blog.com; root /var/www/blog/public; ... error_log /var/log/nginx/blog_error.log; access_log /var/log/nginx/blog_access.log; # 注意root只修改/var/www/blog/public
-
让你的Nginx容器加载你的配置
# 在Laradock目录下 docker-compose exec nginx nginx -t docker-compose exec nginx nginx -s reload
-
绑定Host
sudo vim etc/hosts # ADD 127.0.0.1 blog.com
- 打开浏览器,访问 blog.com
-
测试数据库链接,
- 进入
docker-compose exec --user=laradock workspace bash
cd blog
php artisan make:auth
-
php artisan migrate
报错了,GitHub Issue,解决办法如下:GitHub Issuecd laradock # 打开mysql/my.cnf vim mysql/my.cnf # 增加如下内容: # default_authentication_plugin=mysql_native_password # 执行如下命令 docker-compose down # 删除 laradock/.env 文件中 `DATA_PATH_HOST` 变量指定的目录下的文件(不删除,如何build都不起作用) sudo rm -rf ~/.laradock/data docker-compose up -d nginx mysql phpmyadmin redis workspace docker-compose exec --user=laradock workspace bash cd xxxx php artisan migrate
- 进入
-
测试 Redis 链接 Laravel Redis
composer require predis/predis
-
在Home控制器添加Redis set方法
# use Illuminate\Support\Facades\Redis; public function index() { Redis::set('test', 'test'); return view('home'); }
- 完成注册,查看Redis 记录
OK,至此,我们就已经搞定运行项目了。
Laradock Mysql的一些事
-
如何修改默认用户名,默认数据库
cd laradock vim .env # 修改 `MYSQL_DATABASE` && `MYSQL_USER` 如 图 1 # 删除 laradock/.env 文件中 `DATA_PATH_HOST` 变量指定的目录下的文件 docker-compose down sudo rm -rf ~/.laradock/data docker-compose up -d nginx mysql phpmyadmin redis workspace
-
如何创建数据库
# 手动 (一般是这种方式) cd laradock/mysql/docker-entrypoint-initdb.d cp createdb.sql.example createdb.sql vim createdb.sql # 删除注释 CREATE DATABASE IF NOT EXISTS `blog` COLLATE 'utf8_general_ci' ; GRANT ALL ON `blog`.* TO 'homestead'@'%' ; FLUSH PRIVILEGES ; cd laradock docker-compose exec mysql bash mysql -u root -p < /docker-entrypoint-initdb.d/createdb.sql # 自动是有条件的,条件如下: # this sql script will auto run when the mysql container starts and the $DATA_PATH_HOST/mysql not found. (试过了,不删除`DATA_PATH_HOST`是不会执行滴)
可能会遇到的问题
-
Ubuntu elasticsearch max virtual memory areas vm.max_map_count [65530] is too low, increase to at le
# 切换到root用户修改配置sysctl.conf vi /etc/sysctl.conf # 添加下面配置: vm.max_map_count=655360 # 执行命令 sysctl -p 重新启动elasticsearch
至此,就差不多了,遇到问题,欢迎留言!
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。