4.6 KiB
🧰 Lenvi - Ansible-Powered Laravel Development Environment
Lenvi is a lightweight, configuration-driven development environment for Laravel, powered by Ansible. It's designed to be a simpler, more transparent alternative to virtual machines like Homestead or Docker setups like Sail, running directly on your local Linux machine (or WSL2).
The core idea is simple: define all your projects in a single Lenvi.yaml
file, and let Ansible handle the rest.
Features
- Centralized Configuration: Manage all your projects from a single, clean
Lenvi.yaml
file. - Multiple PHP Versions: Run different projects with different PHP versions (e.g., 8.0, 8.2, 8.3) side-by-side.
- Automatic Nginx Setup: Generates a robust, secure, and performant Nginx configuration for each site automatically.
- Choice of Database: Easily install MariaDB, MySQL, or PostgreSQL for your environment.
- Idempotent: Re-running the playbook only applies necessary changes, making updates fast and safe.
- Transparent: No black boxes. You have full control over all configuration files and installed services.
Requirements
- OS: An Ubuntu/Debian-based Linux distribution (e.g., Ubuntu 20.04/22.04 LTS). This is required for
apt
and the Ondřej PPA for PHP. - Ansible: Ansible must be installed on your machine.
- Permissions: You will need
sudo
access to run the playbook, as it installs software and modifies system configurations.
Directory Structure
Your project should be structured as follows:
lenvi-ansible/
├── ansible.cfg
├── inventory
├── Lenvi.yaml <-- YOU WILL EDIT THIS FILE
├── playbook.yml
├── README.md
└── roles/
├── common/
├── database/
├── nginx/
├── php/
└── projects/
Installation & Setup
Follow these steps to get your Lenvi environment up and running.
1. Get the Code
Clone this repository or download and extract the files to a directory on your machine, for example ~/lenvi-ansible
.
2. Install Ansible
If you don't have Ansible installed, you can install it via apt
:
sudo apt update
sudo apt install software-properties-common
sudo add-apt-repository --yes --update ppa:ansible/ansible
sudo apt install ansible
3. Configure Your Environment
This is the most important step. Open the Lenvi.yaml
file and customize it for your needs.
- Set the
db_engine
to your preferred database (mariadb
,mysql
, orpostgres
). - Update the
sites
list to map your local project domains and their absolute paths. ExampleLenvi.yaml
:
# Set the global database engine.
db_engine: "mariadb"
# Define all your Laravel sites.
sites:
- domain: myapp.local
project_root: /home/mar/projects/myapp
php_version: "8.2"
- domain: legacy-app.local
project_root: /home/mar/projects/legacy-app
php_version: "8.0"
4. Run the Playbook
Navigate to the lenvi-ansible
directory in your terminal and execute the main playbook. Ansible will ask for your sudo
password to perform administrative tasks.
cd /path/to/lenvi-ansible
ansible-playbook playbook.yml
Ansible will now:
- Add the PPA for PHP.
- Install all required PHP versions.
- Install Nginx and your chosen database.
- Generate and place an Nginx config for each site into
/etc/nginx/conf.d/
. - Reload services.
5. Update Your Hosts File
For your browser to resolve domains like myapp.local
, you must map them to your local machine. Edit your /etc/hosts
file:
sudo nano /etc/hosts
Add an entry for each site you defined in Lenvi.yaml
, pointing to your local IP address.
127.0.0.1 myapp.local
127.0.0.1 legacy-app.local
That's it! You can now access http://myapp.local
and http://legacy-app.local
in your browser.
Daily Workflow
Managing your environment is as simple as editing one file.
Adding a New Site
- Add a new block to the
sites
list inLenvi.yaml
. - Re-run the playbook:
ansible-playbook playbook.yml
. - Add the new domain to your
/etc/hosts
file.
Changing a Site's PHP Version
- In
Lenvi.yaml
, change thephp_version
for the desired site. - Re-run the playbook:
ansible-playbook playbook.yml
. Ansible will install the new PHP version if needed and update the Nginx config.
Removing a Site
- Delete the site's block from the
sites
list inLenvi.yaml
. - Manually delete the site's Nginx configuration file:
# Example for myapp.local sudo rm /etc/nginx/conf.d/myapp.local.conf
- Re-run the playbook (
ansible-playbook playbook.yml
) to reload Nginx with the updated configuration. - Remove the entry from your
/etc/hosts
file.