Update README.md, colors.txt, config.sh, and 10 more files for alpha v0.3

This commit is contained in:
Rainer 2025-06-22 02:50:07 +02:00
parent a08a86dc40
commit 6d9651b4ff
13 changed files with 449 additions and 109 deletions

107
README.md
View file

@ -7,47 +7,40 @@ This system is designed from the ground up to be modular, easily configurable, a
## ✨ Features
* **Automated Map Generation:** Leverages `minetestmapper` to create high-resolution PNG maps of your game worlds.
* **Performant Image Processing:** Uses `vips`, a high-performance and memory-efficient library, to scale even huge maps (tested up to 64k x 64k pixels) for the web.
* **Tiled Map Generation:** Uses `gdal2tiles.py` to create performant, zoomable map tiles for a smooth user experience.
* **Dynamic Map Viewer:** Implements an interactive map viewer using **OpenLayers**, powered by the generated map tiles, including digital zoom beyond the highest resolution.
* **Live Player Tracking:** Dynamically fetches and displays player locations as markers on the live map, including custom-styled popups.
* **Dynamic Map Viewer:** Implements an interactive map viewer using [Leaflet.js](https://leafletjs.com/), powered by the generated map tiles.
* **Live Player Tracking:** Dynamically fetches and displays player locations as markers on the live map.
* **Map Archive:** Automatically saves a daily snapshot of the map and makes it available through a dropdown viewer on the world detail page.
* **Template-Driven Site Generation:** Builds all static HTML pages from simple, customizable templates.
* **Flexible Configuration:** Configuration is easy with a central global config and a `web.conf` file for every one of your worlds.
* **Automation-Ready:** Designed for unattended execution via scheduling tools like `cron`.
* **Flexible Configuration:** Configuration is easy with a central global config and a sub-config file for every of your worlds.
* **Automation-Ready:** Designed for unattended execution via scheduling tools like cron.
## 🔧 Prerequisites
To run this system, the following software packages must be installed on your server:
* **bash:** The scripting language used for the entire project.
* **vips:** A high-performance image processing library that replaces `convert` (ImageMagick).
* *Debian/Ubuntu Install:* `sudo apt-get install libvips-tools`
* **ImageMagick:** Currently still required for the `identify` command (to read image dimensions).
* **ImageMagick:** Required for `identify` (to read image dimensions) and `convert` (to resize images).
* *Debian/Ubuntu Install:* `sudo apt-get install imagemagick`
* **GDAL/OGR:** Provides the `gdal2tiles.py` script for tile generation.
* *Debian/Ubuntu Install:* `sudo apt-get install gdal-bin python3-gdal`
* **minetestmapper:** The executable used to render maps from world data. Must be placed within the project directory.
* **iproute2:** Provides the `ss` command for `check_server_status.sh` (usually pre-installed on most systems).
* **minetestmapper:** The executable used to render maps from world data. This must be placed within the project directory.
* **Web Server:** A web server like Nginx or Apache is needed to serve the generated static files.
An included script (`check_dependencies.sh`) can automatically verify all important dependencies.
## ⚙️ Installation & Setup
### 1. Download/Clone Project Files
### 1. Clone the Repository
Download the **latest build** from the [Releases-Page](https://git.geigernet.eu/rainer/luanti-web/releases) and extract it to a base directory on your server, such as `/opt/luweb/`.
Download the **latest build** from the [Releases-Page](https://git.geigernet.eu/rainer/luanti-web/releases) and save it to your server's base directory, such as `/opt/luweb/`.
OR
Clone the Git repository to a base directory.
Clone all project files to a base directory on your server.
```bash
git clone [https://git.geigernet.eu/rainer/luanti-web.git](https://git.geigernet.eu/rainer/luanti-web.git) /opt/luweb
```
git clone https://git.geigernet.eu/rainer/luanti-web.git /opt/luweb
cd /opt/luweb
# Make all scripts executable
chmod +x generate_map.sh generate_site.sh check_server_status.sh check_dependencies.sh
chmod +x generate_map.sh generate_site.sh
```
### 2. Global Configuration
@ -57,45 +50,53 @@ The main configuration file is `config.sh`. You must edit this file to match you
**Key variables in `config.sh`:**
* `BASE_SCRIPT_DIR`: The root directory of the project (e.g., `/opt/luweb`).
* `MINETESTMAPPER_WORLD_DATA_BASE_PATH`: The path to your Minetest/Luanti worlds' data directory.
* `MINETESTMAPPER_WORLD_DATA_BASE_PATH`: The path to your Minetest/Luanti worlds' data directory (e.g., `<server-path>/worlds/`), docker compatible.
* `WEB_ROOT_PATH`: The document root of your website where the generated files will be placed (e.g., `/var/www/your-domain.com/web`).
* `LOG_DIR_BASE`: The directory where log files will be written (e.g., `/var/log/luweb`).
### 3. Per-World Configuration
The system is designed so that **only worlds with a `web.conf` file** will be displayed in the web frontend. This gives you full control over which worlds are publicly visible.
For each world you want to feature on the website, a `web.conf` file must exist within that world's data directory (e.g., `<server-path>/worlds/my_world/web.conf`). This file allows you to override global defaults with world-specific settings.
To add a world, copy the template `site_generator/examples/web.conf.template` into the data directory of the respective world (e.g., `<server-path>/worlds/my_world/web.conf`) and adjust the values.
A minimal `web.conf` could look like this and is automatically created for every detected world in your `MINETESTMAPPER_WORLD_DATA_BASE_PATH`:
```bash
# Display name for the world
WORLD_DISPLAY_NAME="My Creative World"
# Server connection details
SERVER_ADDRESS="your-server.com"
SERVER_PORT="30001"
# A short description for the world overview page
WORLD_SHORT_DESCRIPTION="A brief, catchy description of this world."
# A detailed HTML description for the world's detail page
WORLD_LONG_DESCRIPTION="<p>A longer description with <b>HTML</b> support.</p>"
```
## 📂 Directory Structure
The system now uses a modular structure to improve maintainability:
The system expects the following directory structure:
```md
/opt/luweb/
├── config.sh
├── generate_map.sh
├── generate_site.sh
├── check_server_status.sh
├── check_dependencies.sh
├── minetestmapper (executable)
├── site_generator/
│ ├── functions/
│ │ ├── 01_utils.sh
│ │ ├── 02_init.sh
│ │ ├── 03_html_helpers.sh
│ │ └── generators/
│ │ ├── css_generator.sh
│ │ ├── static_pages_generator.sh
│ │ ├── world_detail_generator.sh
│ │ └── world_overview_generator.sh
│ ├── templates/
│ │ ├── world_detail_page.template
│ │ ├── world_detail_archive.template
│ │ └── ...
│ └── examples/
│ └── web.conf.template
├── web_content/
│ ├── images/
│ │ └── players/
│ └── static/
│ ├── startseite_content.html
│ └── ...
└── worldmaps_output/
└── <world_name>/
├── map.png
@ -104,44 +105,38 @@ The system now uses a modular structure to improve maintainability:
## 🚀 Usage
### 1. Map and Data Generation
The scripts are designed to be run from the command line, either manually or via automated jobs.
### 1. Map and Tile Generation
The `generate_map.sh` script creates the map, tiles, and archive images for a specific world. It must be called with the "world key" (the name of the world's directory) as an argument.
The `generate_map.sh` script creates the map, tiles, and metadata for a specific world.
```bash
# Generate assets for the world in the 'world' directory
# Generate map assets for the world located in the 'world' directory
./generate_map.sh world
```
### 2. Website Generation
The `generate_site.sh` script builds the entire website for all worlds that have a `web.conf`.
The `generate_site.sh` script builds the entire website (overview, detail pages, etc.). It scans all configured world directories and creates a detail page for each one.
```bash
# Generate the complete website
./generate_site.sh
```
### 3. Live Status Check
### 3. Automation (Cronjob)
The `check_server_status.sh` script checks the online status of all configured worlds. It should be run very frequently.
```bash
# Check the server status
./check_server_status.sh
```
### 4. Automation (Cronjob)
Setting up cronjobs is recommended for fully automatic operation.
For fully automatic operation, setting up cronjobs is recommended.
**Example for `crontab -e`:**
```bash
# Generate map assets for 'world' once per hour
0 * * * * /opt/luweb/generate_map.sh world >> /var/log/luweb/cron.log 2>&1
# Generate map assets for the 'world' every 30 minutes
*/30 * * * * /opt/luweb/generate_map.sh world >> /var/log/luweb/cron.log 2>&1
# Check the server status every 2 minutes
*/2 * * * * /opt/luweb/check_server_status.sh >> /var/log/luweb/cron.log 2>&1
# Re-build the website (e.g., for new admins, changed descriptions) twice a day
0 */12 * * * /opt/luweb/generate_site.sh >> /var/log/luweb/cron.log 2>&1
# Re-build the website every 12 hours
* */12 * * * /opt/luweb/generate_site.sh >> /var/log/luweb/cron.log 2>&1
```
## 📄 License
@ -167,4 +162,4 @@ OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE
OR OTHER DEALINGS IN THE SOFTWARE.
## 👤 Authors
* **Rage87** (Main-Developer)
* **Rage87** (Main-Developer)