熟悉Laravel框架开发(一)搭建Laravel统一开发环境
- 中文资料
构建Laravel开发环境:https://learnku.com/docs/laravel-development-environment
(一)开发环境搭建准备
1、宿主机(本地)环境
- Windows 10
- VirtualBox
- Vagrant
2、安装VirtualBox
- VirtualBox简介
VirtualBox是一款开源虚拟机软件(功能比VMware略少)
(1)选择最新版 VIrtualBox 6.1.26 下载 Windows hosts
(2)下载完成后,按照默认设置安装。
3、安装Vagrant
- Vagrant简介
Vagrant是一个基于Ruby的工具。Vagrant 使用Oracle VM VirtualBox 动态创建和配置轻量级的,可重现的,便携的虚拟机环境。Vagrant 可以将一整套虚拟环境封装在一个box 内,只要都使用这个box,就可以实现开发环境的统一。
-
注:Vagrant 官网提供多种预封装 box 的下载 : https://app.vagrantup.com/boxes/search
(1)选择Windows 64 bit下载最新版
(2)下载完成后按照默认设置安装
(二)Laravel开发环境Homestead
- Homestead简介
Homestead 是一个官方预封装的 Vagrant box,提供了一个完美的开发环境,而无需在本地机器安装 PHP 、Web 服务器和其他服务器软件,并且Homestead 利用 Vagrantfile 提供的便利,定制了一整套的可配置、可移植和复用的 Laravel 开发环境。
-
Homestead 基于虚拟机技术 ( VirtualBox + vagrant )为Laravel提供了量身定制的开发环境。
-
注意:在Laravel 8.x中,不再推荐使用“虚拟机开发环境-homestead”作为开发环境,而是换为了"Docker开发环境-Sail",Sail 依赖于 Docker 和 Docker Compose。
-
官方预装的Homestead/laravel Box: https://app.vagrantup.com/laravel/boxes/homestead
1、初始化homestead: 向 Vagrant 添加 box
原型:vagrant box add address
描述:向Vagrant添加一个具有给定地址的box
- 通常 vagrant 添加 box 有三种指定方式:公共镜像缩写名、指定URL、本地box,如下:
# 方式一:使用Vagrant公共镜像名称从默认地址远程添加box, vagrant从https://app.vagrantup.com/boxes/search中下载各种镜像
vagrant box add laravel/homestead
# 方式二:指定URL远程添加box,vagrant从指定的url下载box
vagrant box add https://app.vagrantup.com/laravel/boxes/homestead/virtualbox.box
# 方式三:导入本地box
vagrant box add alias xxx.box
- 常用vagrant box命令
# 查看导入的box
vagrant box list
# 移除导入的box
vagrant box remove alias
2、初始化homestead: 初始化 Vagrant 环境(工作目录)
原型:vagrant init [name [url]]
描述:创建Vagrantfile文件(文件不存在)来初始化当前目录为 Vagrant 环境。
参数:name(可选):将在创建的Vagrantfile中预填充config.vm.box 。
参数:url(可选):将在创建的Vagrantfile中预填充config.vm.box_url。
- vagrant init初始化vagrant工作目录生成Vagrantfile文件
vagrant init laravel/homestead
- 注意:
- vagrant init的主要作用是在当前目录下生成一个vagrantfile配置文件,如果该文件已经存在或者手动创建/移植,则不用执行该命令。
- vagrantfile 仅在第一次执行vagrant up 时作用于虚拟机,如果修改后想作用于虚拟机需执行 vagrant reload 重新加载配置文件。
3、初始化homestead: Vagrantfile配置文件设置详解
1、初始化完成后,在工作目录下有一个Vagrantfile文件,该文件包含的配置信息可以定义虚拟机的各种配置,如网络、内存、主机名等。
2、其主要包括三个方面的配置,虚拟机的配置、SSH配置、Vagrant的一些基础配置。
3、Vagrant是使用Ruby开发的,所以它的配置语法也是Ruby的。
- 配置文件详细介绍:https://www.vagrantup.com/docs/vagrantfile
- 常用的虚拟机配置、SSH配置详解,如下:
# Vagrantfile配置文件描述,“2”表示用于1.1+到2.0.x的配置(目前仅支持“1”和“2”)
Vagrant.configure("2") do |config|
# 虚拟机配置
# box设置,可以通过vagrant init时预设,需要使用的已经添加到vagrant的box (如果不同,或者直接指定路径,会再次添加一个box, 其所有box存储在C:/user(用户)/登录名/.vagrant.d/boxes下)
config.vm.box = "laravel/homestead"
# box url设置,如果config.vm.box的配置是已经添加到vagrant的box,那么不需要配置该项,否则应该指向该box的地址
config.vm.box_url = false|URL
# hostname设置,虚拟机主机名,可在vagrant up时指定需要启动的虚拟机
config.vm.hostname = "print_server"
# 虚拟机网络设置,vagrant网络连接方式有三种:NAT(缺省创建,用于让vm可以通过host转发访问局域网甚至互联网。)、HOST-ONLY(仅主机)、BRIDGE(桥接网络)
config.vm.network "private_network,ip=xx.xx.xx.xx" #配置当前虚拟机host-only网络的ip为xx.xx.xx.xx
config.vm.network "private_network","type=dhcp" #配置当前虚拟机host-only网络的ip才用dhcp方式生成
config.vm.network "public_network", ip: "192.168.0.17" #创建一个bridge桥接网络,指定IP
config.vm.network "public_network", bridge: "en1: Wi-Fi (AirPort)" #创建一个bridge桥接网络,指定桥接适配器
config.vm.network "public_network" #创建一个bridge桥接网络,不指定桥接适配器
# 设置同步目录,将本地目录同步共享到虚拟机,并设置文件权限
config.vm.synced_folder "宿主机目录","虚拟机挂载目录",mount_options:["dmode=777,fmode=777"]
# config.vm.provider: vm提供者配置,针对virtualbox定义一个提供者并对virtualbox特有的配置(不同的provider配置不完全相同)
config.vm.provider "virtualbox" do |vb| # 服务提供者为virtualbox,定义别名为vb
vb.name = "xxx" #通用配置:virtualbox控制台中的虚拟机名称,如果不指定 会默认生成一个随机的名称
vb.gui = false #通用配置:vagrant up启动虚拟机时是否自动打开virtual box窗口
vb.memory = "1024" #通用配置:设置虚拟机内存
vb.cpus = 2 #通用配置:设置虚拟机CPU个数
# 还有一些仅适用与virtualbox的个性化设置:https://www.virtualbox.org/manual/
end
# 虚拟机配置 - 分布式环境(多个虚拟机)
# 当定义了多个主机后,在使用vagrant 操作虚拟机时需要加上主机名(由nodename.vm.hostname指定,同时不再设置config.vm.hostname)
# 分布式环境的配置可以与上述虚拟机配置一同使用,但处于config.vm.define中虚拟机配置仅针对于其指定hostname的虚拟机。
# 其命令与 config.vm.xx 区别在于前缀采用自定义的节点名称: nodename.vm.xx
# 单个虚拟机环境可以忽略该配置。
# config.vm.define: 定义虚拟机配置节点(一个节点就是一个虚拟机,可以定义多个主机,主要用于建立分布式环境)
config.vm.define “dev”,primary:true do |dev| #primary 指定主节点
dev.vm.hostname = "dev" #设置主节点的主机名称
dev,vm.network = .... #设置主节点的网络
end
# SSH配置(配置vagrant怎样通过ssh访问虚拟机)
# config.ssh.username:设置ssh登录用户名,默认为'vagrant',官方预封装的box采用默认值
config,ssh.username = "root"
# config.ssh.password: 设置用于认证 Vagrant 的 SSH 用户的密码,官方预封装的box不用设置。
config.ssh.password = “vagrant”
# config.ssh.host: ssh连接到的主机名或IP地址。默认为空,一般由provider自动找出
config.ssh.host = xxxx
# config.ssh.port: ssh连接到的端口,默认为22
config.ssh.port = 22
# config.ssh.insert_key : 是否插入密钥对,如果为 true,Vagrant 会自动插入一个用于 SSH 的密钥对,如果检测到机器内部的 Vagrant 默认不安全密钥,则替换。默认情况下是 true。
config。ssh.insert_key = 'true'
end
4、初始化homestead: 启动 laravel/homestead
# 启动 laravel/homestead box 虚拟机(ubuntu 20.04.2)
vagrant up 或 vagrant up laravel/homestead
# 启动完成后登录系统,对于非自定义的box,若无特殊说明 vagrantfile 中 ssh 均采用默认设置
vagrant ssh
# 登录成功后,可修改root密码,如下:
vagrant@vagrant:/$ sudo passwd root
New password:
Retype new password:
passwd: password updated successfully
- 设置完成后,laravel开发环境搭建完成。
(三)自定义Laravel开发环境
- vagrant 官方提供的 laravel/homestead 的操作系统为ubuntu,而如果想要使用其他系统搭建的统一开发环境可以l利用VirtualBox和Vagrant自定义laravel开发环境并导出为box,作为统一开发环境。
1、VirtualBox新建虚拟机
- 系统镜像:CentOS-8.4.2105-x86_64-dvd1.iso
- VirtualBox新建虚拟机,设置虚拟机名称,存储目录,类型选择为linux,版本为red har(64-bit),如图:
- 选择内存大小
- 创建虚拟硬盘:现在创建
- 创建虚拟硬盘:VMDK
- 创建虚拟硬盘:动态分配
- 创建虚拟硬盘:文件位置和大小
- 创建完成后启动虚拟机,并选择启动盘(没有就选择 创建 找到系统镜像并添加)
- 选择完成后,正常安装系统
2、虚拟机Laravel环境配置
- 安装必要的软件
yum install -y https://rpms.remirepo.net/enterprise/remi-release-8.rpm
yum install -y https://repo.ius.io/ius-release-el7.rpm
yum install yum-utils
yum clean all
yum makecache
yum install -y wget vim zip unzip screen
yum-config-manager --disable 'remi-php*'
yum-config-manager --enable remi-php80
yum update
yum install -y php php-fpm php-redis php-mysql php-mbstring php-pecl-imagick php-pecl-imagick-devel php-mcrypt php-opcache
systemctl enable php-fpm
yum install redis5
systemctl enable redis
yum localinstall http://dev.mysql.com/get/mysql57-community-release-el7-7.noarch.rpm
yum install mysql-community-server mysql-community-devel
systemctl start mysqld
grep 'temporary password' /var/log/mysqld.log
systemctl enable mysqld
wget https://openresty.org/package/centos/openresty.repo
mv openresty.repo /etc/yum.repos.d/
yum check-update
yum install -y openresty
systemctl enable openresty
3、导出box
- 查看已经安装的虚拟机
cd virtualbox安装目录
./VBoxManage list vms
- 进入到虚拟机的安装目录,打包导出工作环境
cd /e/virtualbox vms/
vagrant package --base CentOS8-laravel --output my_centos8_laravel.box