Valet Linux+ is a development environment for Linux. No Vagrant, no Docker, no /etc/hosts
file.
Since Valet Linux+ is intended to replace Valet, it still uses the same valet
command-line name. Any changes in its interface are documented below.
Requirement | Description |
---|---|
Ubuntu version | 14.04+ |
OS packages | sudo apt-get install network-manager libnss3-tools jq xsel |
PHP version | 7.1+ |
PHP extensions | php-cli php-curl php-mbstring php-mcrypt php-xml php-zip |
Replace the star with your php version.*
In order to use the valet secure
command in Ubuntu 14.04 you need to add the nginx PPA because the version in the Trusty repos does not support http2
.
To add the nginx ppa:
sudo add-apt-repository -y ppa:nginx/stable
sudo apt-get update
composer global require genesisweb/valet-linux-plus
.export PATH="$PATH:$HOME/.config/composer/vendor/bin"
to .bash_profile
.valet install
command. This will configure and install Valet Linux+ and DnsMasq, and register Valet's daemon to launch when your system starts.
--mariadb
flag to install MariaDB rather than MySQL. Ex. valet install --mariadb
*.test
domain on your terminal using a command such as ping -c1 foobar.test
. If Valet Linux+ is installed correctly you should see this domain responding on 127.0.0.1
. If not you might have to restart your system.{info} Valet Linux+ will automatically start its daemon each time your machine boots. There is no need to run
valet start
orvalet install
ever again once the initial Valet Linux+ installation is complete.
Here are a few key features that we are providing along with Valet:
valet share
valet proxy
valet ps|code|subl|atom
Switch PHP version using one of five commands:
valet use 7.1
valet use 7.2
valet use 7.3
valet use 7.4
valet use 8.0
valet use 8.1
Use --update-cli
flag to update PHP cli version as well.
Note: Valet uses PPA to download different PHP versions make sure to have PPA added in your machine before using valet use
command.
sudo add-apt-repository ppa:ondrej/php
Edit /etc/pacman.conf
and add the following (note that the order of repositories in pacman.conf is important, since pacman always downloads the first found package):
[home_el_archphp_Arch]
Server = https://download.opensuse.org/repositories/home:/el:/archphp/Arch/$arch
Source: https://aur.archlinux.org/packages/php81
Valet Linux+ automatically installs MySQL 5.7 with 5.6 compatibility mode included. It includes a tweaked my.cnf
which is aimed at improving speed.
It can be single line of code to change your MySQL password. We don't have to always login to MySQL and find for the query and execute it. It's just that simple as below:
valet db:password <old-password> <new-password>
You can get list of all databases with single command
valet db:list
Create new database using:
valet db:create <name>
When no name is given it'll try to find the closest git repository directory name. When it can't find one it'll use the current working directory name.
valet db:create
Drop a database using:
valet db:drop <name>
When no name is given it'll try to find the closest git repository directory name. When it can't find one it'll use the current working directory name.
valet db:drop
Drop and create a database using:
valet db:reset <name>
When no name is given it'll try to find the closest git repository directory name. When it can't find one it'll use the current working directory name.
valet db:reset
Export a database:
valet db:export <database>
When no database name is given it'll use the current working directory name.
All database exports are gzipped. You can still export SQL file using --sql
flag as shown below
valet db:export <database> --sql
Import a database with progress bar
valet db:import <database_name> <filename>.sql
When no name is given it'll try to find the closest git repository directory name. When it can't find one it'll use the current working directory name.
You can import .sql
directly as well as gzipped .sql.gz
database exports.
You can manage subdomains for the current working directory using:
valet subdomain:list
valet subdomain:add <subdomain>
For example:
valet subdomain:add welcome
Will create welcome.yourproject.test
.
Mailpit is widely used to catch emails which is sent from development code, it can be very helpful to test your email templates or email development.
You can access the panel at http://mails.test.
Enable Mailpit:
valet start mailpit
Disable Mailpit:
valet stop mailpit
MAIL_MAILER=smtp
MAIL_HOST=0.0.0.0
MAIL_PORT=1025
MAIL_USERNAME=null
MAIL_PASSWORD=null
MAIL_ENCRYPTION=null
Redis is automatically installed and listens on the default port 6379
. The redis socket is located at /tmp/redis.sock
Enable Redis:
valet start redis
Disable Redis:
valet stop redis
Proxy supports to preview local ports on a secured subdomain with single line of command.
valet proxy domain host
Example:
valet proxy test http://localhost:3000
You can also list, unlink proxies with below commands:
valet proxies
valet unproxy domain
Valet provides support to open current directory in your favourite editor with below commands:
PhpStorm:
valet ps
Visual Studio Code:
valet code
Atom:
valet atom
Sublime:
valet subl
Once Valet Linux+ is installed, you're ready to start serving sites. Valet Linux+ provides a command to help you serve your sites: valet park
. Which will register the current working directory as projects root. Generally this directory is ~/sites
.
Create a sites
directory and park valet over there, so you can access all of your project from parked directory:
mkdir ~/sites
cd ~/sites && valet park
That's all there is to it. Now, any project you create within your "parked" directory will automatically be served using the http://folder-name.test
convention.
mkdir ~/sites/example
cd ~/sites/example
echo "<?php echo 'Valet Linux+ at your service';" > index.php
http://example.test
, you should see Valet Linux+ at your service
Display all of the registered symbolic links based on the current folder.:
valet links
Add new alias:
valet link <domain>
For example:
valet link yourproject2
Will create a symbolic link to the current folder yourproject2.test
.
Remove alias:
valet unlink <domain>
For example:
valet unlink yourproject2
By default, Valet serves sites over plain HTTP. However, if you would like to serve a site over encrypted TLS using HTTP/2, use the secure command. For example, if your site is being served by Valet on the example.test domain, you should run the following command to secure it:
valet secure example
To "unsecure" a site and revert back to serving its traffic over plain HTTP, use the unsecure
command. Like the secure
command, this command accepts the host name you wish to unsecure:
valet unsecure example
By default, Valet Linux+ sites provide support to access your valet site on LAN access, it can be helpful to access site on different devices with your lan IP address, you don't have to do any additional changes. just open your LAN IP address instead of localhost and you will be able to see your available site lists. you may can find your LAN IP address via ifconfig
command.
http://<local-ip-address>/valet-sites
{warning} As we can see the domain is changed to your remote IP address, so it won't be possible to run the site on SSL same as we run it with dedicated domain.
The nginx-error.log
, php.log
and mysql.log
are located at ~/.valet/Log
.
The php.ini location is /etc/php/{php-version}/fpm/php.ini
.
Valet uses drivers to handle requests. You can read more about those here.
By default these are included:
A full list can be found here.
You can write your own Valet "driver" to serve PHP applications running on another framework or CMS that is not natively supported by Valet. When you install Valet Linux+, a ~/.valet/Drivers
directory is created which contains a SampleValetDriver.php
file. This file contains a sample driver implementation to demonstrate how to write a custom driver. Writing a driver only requires you to implement three methods: serves
, isStaticFile
, and frontControllerPath
.
All three methods receive the $sitePath
, $siteName
, and $uri
values as their arguments. The $sitePath
is the fully qualified path to the site being served on your machine, such as /Users/Lisa/Sites/my-project
. The $siteName
is the "host" / "site name" portion of the domain (my-project
). The $uri
is the incoming request URI (/foo/bar
).
Once you have completed your custom Valet Linux+ driver, place it in the ~/.valet/Drivers
directory using the FrameworkValetDriver.php
naming convention. For example, if you are writing a custom valet driver for WordPress, your file name should be WordPressValetDriver.php
.
Let's take a look at a sample implementation of each method your custom Valet Linux+ driver should implement.
serves
MethodThe serves
method should return true
if your driver should handle the incoming request. Otherwise, the method should return false
. So, within this method you should attempt to determine if the given $sitePath
contains a project of the type you are trying to serve.
For example, let's pretend we are writing a WordPressValetDriver
. Our serve method might look something like this:
/**
* Determine if the driver serves the request.
*
* @param string $sitePath
* @param string $siteName
* @param string $uri
* @return bool
*/
public function serves($sitePath, $siteName, $uri)
{
return is_dir($sitePath.'/wp-admin');
}
isStaticFile
MethodThe isStaticFile
should determine if the incoming request is for a file that is "static", such as an image or a stylesheet. If the file is static, the method should return the fully qualified path to the static file on disk. If the incoming request is not for a static file, the method should return false
:
/**
* Determine if the incoming request is for a static file.
*
* @param string $sitePath
* @param string $siteName
* @param string $uri
* @return string|false
*/
public function isStaticFile($sitePath, $siteName, $uri)
{
if (file_exists($staticFilePath = $sitePath.'/public/'.$uri)) {
return $staticFilePath;
}
return false;
}
{info} The
isStaticFile
method will only be called if theserves
method returnstrue
for the incoming request and the request URI is not/
.
frontControllerPath
MethodThe frontControllerPath
method should return the fully qualified path to your application's "front controller", which is typically your "index.php" file or equivalent:
/**
* Get the fully resolved path to the application's front controller.
*
* @param string $sitePath
* @param string $siteName
* @param string $uri
* @return string
*/
public function frontControllerPath($sitePath, $siteName, $uri)
{
return $sitePath.'/public/index.php';
}
If you would like to define a custom Valet driver for a single application, create a LocalValetDriver.php
in the application's root directory. Your custom driver may extend the base ValetDriver
class or extend an existing application specific driver such as the LaravelValetDriver
:
class LocalValetDriver extends LaravelValetDriver
{
/**
* Determine if the driver serves the request.
*
* @param string $sitePath
* @param string $siteName
* @param string $uri
* @return bool
*/
public function serves($sitePath, $siteName, $uri)
{
return true;
}
/**
* Get the fully resolved path to the application's front controller.
*
* @param string $sitePath
* @param string $siteName
* @param string $uri
* @return string
*/
public function frontControllerPath($sitePath, $siteName, $uri)
{
return $sitePath.'/public_html/index.php';
}
}