时间:2021-05-02
本文介绍了用docker搭建laravel和vue项目的开发环境,分享给大家,具体如下:
在这篇文章中我们将通过docker在个人本地电脑上构建一个快速、轻量级、不依赖本地电脑所安装的任何开发套件的可复制的laravel和vue项目的开发环境(开发环境的所有依赖都安装在docker构建容器里),加入vue只是因为有的项目里会在laravel项目中使用vue做前后端分离开发,开发环境中需要安装前端开发需要的工具集,当然前后端也可以分成两个项目开发,这个话题不在本篇文章的讨论范围内。
所以我们的目标是:
开始前你需要先去安装一个docker客户端,docker的官网中有详细的安装方法。
第一步:获取laravel的源码包
因为我们电脑上不安装composer,所以就不能使用composer来创建laravel项目了, 这里我使用curl直接从github上下载了最新的laravel源码包,你也可以使用wget或者git clone 来获取源码包。
? 1 2 3 curl -l -o https://github.com/laravel/laravel/archive/v5.5.0.tar.gz / && tar -zxvf v5.5.0.tar.gz / && rm v5.5.0.tar.gz上面的命令在curl下载完源码包后会解压源码压缩包,解压完成后在把源码压缩包v5.5.0.tar.gz删掉,执行完后你会看到一个laravel-5.5.0的项目目录。
第二步:添加docker-compose.yml
在项目中创建docker-compose.yml文件。
compose 项目是 docker 官方的开源项目,负责实现对 docker 容器集群的快速编排。我们知道使用一个 dockerfile 模板文件,可以让用户很方便的定义一个单独的应用容器。在这里我们会用到四个容器分别将php、mysql、nginx放在四个不同的容器中,通过compose`将四个应用容器关联到一起组成项目。
编排文件的开头如下:
? 1 2 3 version: '2' services: # our services will go here在编排文件中,把每个容器叫做一个服务,services下定义整个应用中用到的所有服务(即容器)。
app服务
app服务的容器将执行我们项目中的代码。
? 1 2 3 4 5 6 7 8 9 10 app: build: context: ./ dockerfile: app.dockerfile working_dir: /var/www volumes: - ./:/var/www environment: - "db_port=3306" - "db_host=database"notes:
现在我们需要创建上面build环节中提到的app.dockerfile这个文件了,具体内容如下:
? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 from php:7.1.22-fpm # update packages run apt-get update # install php and composer dependencies run apt-get install -qq git curl libmcrypt-dev libjpeg-dev libpng-dev libfreetype6-dev libbz2-dev # clear out the local repository of retrieved package files # run apt-get clean # install needed extensions # here you can install any other extension that you need during the test and deployment process run apt-get clean; docker-php-ext-install pdo pdo_mysql mcrypt zip gd pcntl opcache bcmath # installs composer to easily manage your php dependencies. run curl --silent --show-error https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer # install node run apt-get update &&\ apt-get install -y --no-install-recommends gnupg &&\ curl -sl https://deb.nodesource.com/setup_10.x | bash - &&\ apt-get update &&\ apt-get install -y --no-install-recommends nodejs &&\ npm config set registry https://registry.npm.taobao.org --global &&\ npm install --global gulp-cli cmd php-fpmnotes:
我在这里先将npm和composer装到了app容器中,因为在开发时经常需要执行他们,如果发布到生产环境,一般是使用单独的composer对项目代码进行构建而不是放在运行应用的容器里,容器的核心思想之一就是保持单一,这样才能做到快速增加相同角色的容器。
web服务
接下来,我们需要配置一个web服务器用,我们把这个容器在编排文件中命名成web
? 1 2 3 4 5 6 7 8 9 web: build: context: ./ dockerfile: web.dockerfile working_dir: /var/www volumes_from: - app ports: - 8080:80notes:
web服务器选用nginx,所以我们需要用一个nginx镜像文件来构建这个容器,在这之前我们需要在nginx镜像的基础上再设置一下项目中用到的vhost,所以我们需要一个web.dockerfile文件,它的定义如下:
? 1 2 3 from nginx:1.10 add vhost.conf /etc/nginx/conf.d/default.conf根据镜像文件的定义,我们把项目中的vhost.conf复制到了容器的/etc/nginx/conf.d/default.conf中,这样基本的nginx配置就配置好了,vhost.conf中的定义如下:
? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 server { listen 80; index index.php index.html; root /var/www/public; location / { try_files $uri /index.php?$args; } location ~ \.php$ { fastcgi_split_path_info ^(.+\.php)(/.+)$; fastcgi_pass app:9000; fastcgi_index index.php; include fastcgi_params; fastcgi_param script_filename $document_root$fastcgi_script_name; fastcgi_param path_info $fastcgi_path_info; } }notes:
mysql服务
接下来我们将配置mysql服务,与上面两个服务有点不一样的是,在php-fpm和nginx的容器中,我们配置本地电脑的文件可以同步到容器中供容器访问,这让我们开发时对文件作的更改能够快速的在容器中得到反馈加快我们的开发过程。但是在数据库容器中我们希望容器中创建的文件能够持久化(默认容器销毁时,容器内创建的文件也会被销毁),我们可以通过docker的数据卷来实现上述功能,只不过这次不用再把本地电脑的文件挂在到数据卷上了,docker客户端会管理创建的数据卷的在本地电脑上具体存储的位置。
下面是编排文件中对database服务的设置
? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 version: '2' services: database: image: mysql:5.7 volumes: - dbdata:/var/lib/mysql environment: - "mysql_database=homestead" - "mysql_user=homestead" - "mysql_password=secret" - "mysql_root_password=secret" ports: - "33061:3306" volumes: dbdata:notes:
将所有服务编排到一起
下面是完整的docker-compose.yml文件,通过编排文件我们将三个应用容器关联在一起组成了项目的服务端
? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 version: '2' services: # the application app: build: context: ./ dockerfile: app.dockerfile working_dir: /var/www volumes: - ./:/var/www environment: - "db_port=3306" - "db_host=database" # the web server web: build: context: ./ dockerfile: web.dockerfile working_dir: /var/www volumes_from: - app ports: - 8080:80 # the database database: image: mysql:5.6 volumes: - dbdata:/var/lib/mysql environment: - "mysql_database=homestead" - "mysql_user=homestead" - "mysql_password=secret" - "mysql_root_password=secret" ports: - "33061:3306" volumes: dbdata:启动服务
按照上面的步骤配置好编排文件还有指定的docker镜像文件后,我们就可以通过下面的命令启动服务了,执行完后会启动上面文件里定义的三个服务。
? 1 docker-compose up -d第一次启动时,由于docker客户端要下载上面提到的三个镜像并且构建服务所以启动速度会慢一些,等到下载完镜像并构建完成后,以后的启动都会非常快。
初始化laravel项目
启动完服务后我们可以初始化laravel项目了,步骤跟官方文档里介绍的一样,但是需要在启动的app服务的容器里执行:
? 1 2 3 4 5 6 7 docker-compose exec app composer install docker-compose exec app npm install // 如果包含前端项目的话再执行相关命令 docker-compose exec app cp .env.example .env docker-compose exec app php artisan key:generate docker-compose exec app php artisan optimize docker-compose exec app php artisan migrate --seed docker-compose exec app php artisan make:controller mycontrollernotes:
查看nginx日志的方法:
执行完上面的命令后你就能通过http://127.0.0.1:8080/访问到项目啦。
在我的github gist有一组参考文件方便同学们参考https://gist.github.com/kevinyan815/fa0760902d29f19a4213b4a16fe0501b
gist里的文件稍微旧一些,后来在使用的过程中又加入些新的php模块和node,之前composer也单独放到了一个容器中,不过相信聪明的你看到这里应该已经会根据需求更改这些文件啦。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持服务器之家。
原文链接:https://segmentfault.com/a/1190000018372614
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
前言在这篇文章中我们将通过Docker在个人本地电脑上构建一个快速、轻量级、不依赖本地电脑所安装的任何开发套件的可复制的Laravel和Vue项目的开发环境(开
我们开发项目的时候,用vue-cli2.x版本新建的项目,只有dev,pro两种开发环境,有时需要个test环境来给测试使用,所以找了很多方法,总结了个最简单的
项目搭建时间:2020-06-29本章节:讲述基于vue/cli,项目的基础搭建。本主题讲述了:1、跨域配置2、axios请求封装3、eslint配置4、环境d
在开发项目的时候,我们一般都用vue-cli来避免繁琐的webpack配置和template配置。但是官方cli3现在并不支持搭建plugin开发的项目。还好,
搭建vue的开发环境:1、必须要安装nodejs2、搭建vue的开发环境,安装vue的脚手架工具官方命令行工具npminstall--globalvue-cli