侧边栏壁纸
  • 累计撰写 247 篇文章
  • 累计创建 16 个标签
  • 累计收到 0 条评论

目 录CONTENT

文章目录

使用 Laradock 搭建基于 Docker 的 Laravel 开发环境

kaixindeken
2021-04-26 / 0 评论 / 0 点赞 / 156 阅读 / 4,343 字

简介

Laradock 是为 Docker 提供的完整 PHP 本地开发环境,和 Homestead 一样提供了一系列打包好(包括配置)的 Docker Image。Laradock 早期专注为 Laravel 打造 Docker 开发环境,因而最早在 Laravel 社区中出名,后来随着影响力的扩大,逐渐被 PHP 社区接纳和采用,目前支持的 PHP 项目除了 Laravel 之外,还有 Symfony、CodeIgniter、WordPress、Drupal 等等。

快速上手

深入了解 Laradock 之前让我们先见识下如何在 Laradock 中快速安装 Nginx、PHP、Composer、MySQL、Redis 吧,有了这些开发 Laravel 必备的工具组件也就差不离了。

1、首先将 Laradock 项目代码克隆到本地:

git clone https://github.com/Laradock/laradock.git

2、进入 laradock 目录将 env-example 重命名为 .env:

cp env-example .env

然后在 .env 中修改镜像构建过程中 Linux 软件源为国内镜像以免镜像构建过程中出现网络超时问题:

# If you need to change the sources (i.e. to China), set CHANGE_SOURCE to true

CHANGE_SOURCE=true

# Set CHANGE_SOURCE and UBUNTU_SOURCE option if you want to change the Ubuntu system sources.list file.

UBUNTU_SOURCE=aliyun

3、构建镜像 & 启动容器:

docker-compose up -d nginx mysql redis

nginx 镜像构建在 php-fpm 之上,php-fpm 构建在 workspace 之上,所以启动 nginx 会先启动 workspace 和 php-fpm。

如果指定端口已经被占用,运行上述命令会报错,关闭相应的服务再重新运行上述命令即可。

如果在 Windows 系统中上述指令构建镜像过程中报错:

/tmp/sources.sh: not found

可参考这个 issue 解决:https://github.com/laradock/laradock/issues/2450。

4、打开 Laravel 项目的 .env 文件并添加如下配置:

DB_HOST=mysql
REDIS_HOST=redis
QUEUE_HOST=beanstalkd

5、要测试配置访问域名指向 Docker 环境目录,我们先在 laradock 父级目录下创建一个与 laradock 同级的 wwwroot 目录,然后在 wwwroot 目录下运行 composer create-project laravel/laravel blog --prefer-dist 命令创建一个新的 Laravel 应用,相应的层级目录关系如下所示:

1.jpeg

然后我们需要到 laradock 下编辑 .env 中的 APP_CODE_PATH_HOST 配置项:

APP_CODE_PATH_HOST=../wwwroot/

这样就相当于为 wwwroot 与 Docker 的 /var/www 目录建立了软链接,然后我们在 laradock/nginx/sites 目录下新增一个 blog.conf 配置,设置虚拟域名为 blog.test:

server {

    listen 80;
    listen [::]:80;

    server_name blog.test;
    root /var/www/blog/public;
    index index.php index.html index.htm;

    location / {
         try_files $uri $uri/ /index.php$is_args$args;
    }

    location ~ \.php$ {
        try_files $uri /index.php =404;
        fastcgi_pass php-upstream;
        fastcgi_index index.php;
        fastcgi_buffers 16 16k;
        fastcgi_buffer_size 32k;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        #fixes timeouts
        fastcgi_read_timeout 600;
        include fastcgi_params;
    }

    location ~ /\.ht {
        deny all;
    }

    location /.well-known/acme-challenge/ {
        root /var/www/letsencrypt/;
        log_not_found off;
    }
}

接下来需要在 /etc/hosts (Windows 下对应文件路径是 C:\Windows\System32\drivers\etc\hosts)文件中新增如下这行配置:

127.0.0.1      blog.test

最后,需要重启 Docker 的 Nginx:

docker-compose down
docker-compose up -d nginx

这样,我们就可以在浏览器中通过 http://blog.test 访问这个应用了:

1.jpeg

更多使用细节请参考官方文档:http://laradock.io/documentation/

功能特性

  • 可轻松在不同版本 PHP 之间切换: 7.2、7.1、5.6 等
  • 自由选择数据库: MySQL、Postgres、MariaDB 等
  • 运行自己的软件: Memcached、HHVM、Beanstalkd 等
  • 每个软件都运行在隔离的容器中: PHP-FPM、NGINX、PHP-CLI 等
  • 轻松自定义容器,只需编辑 Dockerfile 文件即可
  • 所有的镜像都扩展自官方的镜像
  • 预配置的 NGINX
  • 可以在每个项目中使用 Laradock, 也可以让所有项目共享一个 Laradock
  • 使用环境变量在容器中轻松安装/卸载软件
  • 干净、结构良好的 Dockerfile
  • 最新版本的 docker-compose 文件
  • 一切均可见、可编辑
  • 快速构建镜像

除此之外,目前为止,Laradock 支持的软件包括但不限于:

  • 数据库引擎: MySQL - MariaDB - Percona - MongoDB - Neo4j - RethinkDB - MSSQL - PostgreSQL - Postgres-PostGIS.
  • 数据库管理工具: PhpMyAdmin - Adminer - PgAdmin
  • 缓存工具: Redis - Memcached - Aerospike
  • Web 服务器: NGINX - Apache2 - Caddy
  • PHP 编译器: PHP-FPM - HHVM
  • 消息队列: Beanstalkd - RabbitMQ - PHP Worker
  • 队列管理器: Beanstalkd Console - RabbitMQ Console
  • 大国重器: HAProxy - Certbot - Blackfire - Selenium - Jenkins - ElasticSearch - Kibana - Mailhog - Minio - Varnish - Swoole - Laravel Echo 等
  • Laradock 还引入了 Workspace 镜像作为开发环境,里面包含了丰富且实用的工具集:PHP CLI - Composer - Git - Linuxbrew - Node - V8JS - Gulp - SQLite - xDebug - Envoy - Deployer - Vim - Yarn - SOAP - Drush 等

Docker 还是 Vagrant

最后,我们绕不开的话题是作为开发环境,选择 Docker(Laradock) 还是 Vagrant(Homestead),Mac 系统上官方还提供了 Valet,尝鲜的话、做Demo或者快速学习为目的当然 Valet 还是不二之选,因为它最小巧、最轻量级,上手最快,天下武功,唯快不破。

至于 Laradock 还是 Homestead,就是见仁见智了,Laradock 相对 Homestead 而言更加轻量级,因为正如前面所言,Homestead 是 VM 级别的虚拟化解决方案,依赖一个完整的操作系统,虽然功能很全,但是很重,而 Laradock 是容器,只依赖那些它必需的软件,更加灵活,更加高效。

还有一点需要提及的是 Docker 可以用于本地也可以用于线上,所谓 same environment everywhere,而 Vagrant 部署的开发环境只能用于本地,这一点也可以作为重要考量因素。

0

评论区