initialize Project

This commit is contained in:
2025-07-08 20:21:50 +02:00
commit 311cb4e4fa
40 changed files with 1944 additions and 0 deletions

156
backend/app/README.md Normal file
View 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.