forked from urvishpatelce/lxd-app
initialize Project
This commit is contained in:
156
backend/app/README.md
Normal file
156
backend/app/README.md
Normal file
@ -0,0 +1,156 @@
|
||||
# LXD Proxy API (Slim Framework)
|
||||
|
||||
This is a PHP-based API using the **Slim 4 Framework** that dynamically manages and proxies traffic to LXD containers based on subdomain mappings.
|
||||
|
||||
---
|
||||
|
||||
## 🧩 Features
|
||||
|
||||
- Automatically creates and starts LXD containers per subdomain
|
||||
- CAPTCHA validation for provisioning
|
||||
- Proxies requests to containerized environments
|
||||
- Persists domain-to-container mapping
|
||||
- Waits for container service to be ready before forwarding
|
||||
- Logs last access per container
|
||||
|
||||
---
|
||||
|
||||
## 📁 Project Structure
|
||||
|
||||
backend/
|
||||
├── app/
|
||||
│ ├── src/
|
||||
│ │ ├── Controllers/
|
||||
│ │ │ └── ProxyController.php
|
||||
│ │ ├── Services/
|
||||
│ │ │ └── LxdService.php
|
||||
│ │ └── Utils/
|
||||
│ │ └── SubdomainHelper.php
|
||||
│ ├── vendor/ # Composer dependencies
|
||||
│ ├── public/
|
||||
│ │ └── last-access-logs/
|
||||
│ ├── config.json # Domain-to-container mappings
|
||||
│ └── index.php # Slim entry point
|
||||
├── composer.json
|
||||
└── README.md
|
||||
|
||||
|
||||
---
|
||||
|
||||
|
||||
---
|
||||
|
||||
## ⚙️ Requirements
|
||||
|
||||
- PHP 8.1+
|
||||
- LXD installed and configured
|
||||
- PHP-FPM + NGINX
|
||||
- Composer
|
||||
- `guzzlehttp/guzzle`
|
||||
- `slim/slim`
|
||||
- `slim/psr7`
|
||||
|
||||
---
|
||||
|
||||
## 🚀 Setup Instructions
|
||||
|
||||
1. **put the folder in /var/www/html**
|
||||
|
||||
2. **Install dependencies**
|
||||
|
||||
composer install
|
||||
|
||||
|
||||
3. **Ensure PHP and NGINX are configured**
|
||||
|
||||
NGINX config example:
|
||||
|
||||
server {
|
||||
listen 80;
|
||||
server_name *.lxdapp.local;
|
||||
|
||||
root /var/www/html/lxd-app/backend/public;
|
||||
index index.php;
|
||||
|
||||
location / {
|
||||
try_files $uri /index.php?$query_string;
|
||||
}
|
||||
|
||||
location ~ \.php$ {
|
||||
fastcgi_pass unix:/run/php/php8.4-fpm.sock;
|
||||
fastcgi_index index.php;
|
||||
include fastcgi_params;
|
||||
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
|
||||
fastcgi_read_timeout 300;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
4. **Map domain in /etc/hosts**
|
||||
|
||||
127.0.0.1 customer1.lxdapp.local
|
||||
|
||||
5. **Make sure LXD is working**
|
||||
|
||||
lxc list
|
||||
|
||||
6. **🔐 CAPTCHA Protection**
|
||||
|
||||
The /api/v1/proxy POST endpoint expects a field panswer with the correct CAPTCHA.
|
||||
|
||||
You can configure PCaptcha class for custom logic.
|
||||
|
||||
|
||||
7. **🧪 API Usage**
|
||||
|
||||
POST /api/v1/proxy
|
||||
|
||||
**Request Body:**
|
||||
|
||||
{
|
||||
"source": "login",
|
||||
"panswer": "abc123"
|
||||
}
|
||||
|
||||
**Headers:**
|
||||
|
||||
Origin: http://customer1.lxdapp.local
|
||||
|
||||
**Response:**
|
||||
|
||||
{
|
||||
"status": "success",
|
||||
"ip": "10.210.189.24"
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
**🧠 Notes**
|
||||
|
||||
Container names are auto-generated using the subdomain prefix.
|
||||
|
||||
All containers are mapped in config.json.
|
||||
|
||||
If a container does not yet exist, it's created, started, and software is installed.
|
||||
|
||||
The system waits for the container to expose port 80 before proxying.
|
||||
|
||||
|
||||
**🪵 Logs**
|
||||
|
||||
Last access logs for containers are saved in:
|
||||
public/last-access-logs/container-*.txt
|
||||
|
||||
NGINX error logs (for debugging):
|
||||
tail -f /var/log/nginx/error.log
|
||||
|
||||
|
||||
**👨💻 Development**
|
||||
|
||||
Codebase follows PSR-4 autoloading (App\ namespace).
|
||||
|
||||
To add new functionality, work within app/src/Controllers or Services.
|
||||
|
||||
|
||||
Reference in New Issue
Block a user