{"id":50141276,"url":"https://github.com/erseco/alpine-facturascripts","last_synced_at":"2026-05-24T01:05:38.495Z","repository":{"id":324338551,"uuid":"1096896452","full_name":"erseco/alpine-facturascripts","owner":"erseco","description":"A lightweight FacturaScripts Docker image built on Alpine Linux","archived":false,"fork":false,"pushed_at":"2026-04-03T08:09:14.000Z","size":91,"stargazers_count":2,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2026-04-03T14:34:25.414Z","etag":null,"topics":["alpine","docker","facturascripts","nginx"],"latest_commit_sha":null,"homepage":"https://hub.docker.com/r/erseco/alpine-facturascripts","language":"PHP","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/erseco.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":"SECURITY.md","support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2025-11-15T06:20:18.000Z","updated_at":"2026-04-03T08:09:18.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/erseco/alpine-facturascripts","commit_stats":null,"previous_names":["erseco/alpine-facturascripts"],"tags_count":34,"template":false,"template_full_name":null,"purl":"pkg:github/erseco/alpine-facturascripts","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/erseco%2Falpine-facturascripts","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/erseco%2Falpine-facturascripts/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/erseco%2Falpine-facturascripts/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/erseco%2Falpine-facturascripts/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/erseco","download_url":"https://codeload.github.com/erseco/alpine-facturascripts/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/erseco%2Falpine-facturascripts/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":33417491,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-23T22:14:44.296Z","status":"ssl_error","status_checked_at":"2026-05-23T22:14:43.778Z","response_time":53,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["alpine","docker","facturascripts","nginx"],"created_at":"2026-05-24T01:05:38.407Z","updated_at":"2026-05-24T01:05:38.468Z","avatar_url":"https://github.com/erseco.png","language":"PHP","funding_links":[],"categories":[],"sub_categories":[],"readme":"# FacturaScripts on Alpine Linux\n\n[![Docker Pulls](https://img.shields.io/docker/pulls/erseco/alpine-facturascripts.svg)](https://hub.docker.com/r/erseco/alpine-facturascripts/)\n![Docker Image Size](https://img.shields.io/docker/image-size/erseco/alpine-facturascripts)\n![nginx 1.28](https://img.shields.io/badge/nginx-1.28-brightgreen.svg)\n![php 8.4](https://img.shields.io/badge/php-8.4-brightgreen.svg)\n![License MIT](https://img.shields.io/badge/license-MIT-blue.svg)\n![Build Status](https://img.shields.io/github/actions/workflow/status/erseco/alpine-facturascripts/build.yml?branch=main)\n\nA lightweight FacturaScripts Docker image built on Alpine Linux. (~30MB)\n\nRepository: https://github.com/erseco/alpine-facturascripts\n\n## Key Features\n\n- **Built on** the lightweight image [erseco/alpine-php-webserver](https://github.com/erseco/alpine-php-webserver)\n- **Compact** Docker image size (~30MB)\n- **Uses PHP 8.4 FPM** for better performance, lower CPU usage \u0026 memory footprint\n- **Unattended Installation** - skip the web installer with environment variables\n- **Wizard Auto-Completion** - fully configures company, models, and accounting plan on first boot\n- **Seed Data Loading** - pre-populate suppliers, products, etc. from a JSON file via `FS_SEED_FILE`\n- **Automatic Plugin Installation** - install plugins on first startup via `FS_PLUGINS`\n- **Automatic Cron Tasks** - hourly scheduled tasks via dcron (can be disabled)\n- **Configurable** via environment variables (see Configuration section)\n- **Multi-arch Support:** `amd64`, `arm/v6`, `arm/v7`, `arm64`, `ppc64le`, `s390x`\n- **Optimized** to only use resources when there's traffic (by using PHP-FPM's ondemand process manager)\n- **Uses runit** instead of supervisord to reduce memory footprint\n- **Services run** under a non-privileged user (`nobody`) for improved security\n- **Logs** are sent to container's STDOUT (`docker logs -f \u003ccontainer\u003e`)\n- **Extensible** via pre/post configuration hooks\n- **Follows the KISS principle** (Keep It Simple, Stupid) to make it easy to understand and adjust\n\n## What is FacturaScripts?\n\nFacturaScripts is a free and open-source accounting and billing software for small and medium-sized businesses. It offers features like:\n\n- Invoicing and billing\n- Inventory management\n- Customer and supplier management\n- Reports and statistics\n- Plugin system for extensibility\n- Multi-company support\n\nLearn more at [https://facturascripts.com](https://facturascripts.com)\n\n## Important Notes\n\n- **Change default credentials:** Always override `FS_INITIAL_USER` and `FS_INITIAL_PASS` with secure values.\n- **First startup:** The first time you start the container, FacturaScripts will rebuild its dynamic classes. This may take a few seconds.\n- **Database permissions:** Ensure the database user has permissions to create tables and modify the database structure.\n\n## Usage\n\n### From Docker Hub\n\n```bash\ndocker compose up\n```\n\nLog in using the credentials defined by environment variables.\n\n### From GHCR\n\n```yaml\nservices:\n  facturascripts:\n    image: ghcr.io/erseco/alpine-facturascripts\n    # rest of your config\n```\n\n### Running Commands as Root\n\nIn certain situations, you might need to run commands as root within your FacturaScripts container, for example, to install additional packages. You can do this using the `docker compose exec` command with the `--user root` option:\n\n```bash\ndocker compose exec --user root facturascripts sh\n```\n\n## Minimal docker-compose.yml Example\n\nHere is a minimal `docker-compose.yml` example with **unattended installation**:\n\n```yaml\n---\nservices:\n  mariadb:\n    image: mariadb:lts\n    restart: unless-stopped\n    environment:\n      - MYSQL_ROOT_PASSWORD=facturascripts\n      - MYSQL_DATABASE=facturascripts\n      - MYSQL_USER=facturascripts\n      - MYSQL_PASSWORD=facturascripts\n    volumes:\n      - mariadb_data:/var/lib/mysql\n\n  facturascripts:\n    image: erseco/alpine-facturascripts:latest\n    restart: unless-stopped\n    ports:\n      - \"8080:8080\"\n    environment:\n      # Database Connection\n      DB_HOST: mariadb\n      DB_NAME: facturascripts\n      DB_USER: facturascripts\n      DB_PASSWORD: facturascripts\n      # Initial Setup (for unattended installation)\n      FS_INITIAL_USER: admin\n      FS_INITIAL_PASS: ChangeMe123!\n      FS_LANG: es_ES\n      FS_TIMEZONE: Europe/Madrid\n    volumes:\n      - facturascripts_data:/var/www/html/volume\n    depends_on:\n      - mariadb\n\nvolumes:\n  mariadb_data: null\n  facturascripts_data: null\n```\n\nWith this configuration, FacturaScripts will be **automatically installed** and ready to use. Just access `http://localhost:8080` and log in with `admin` / `ChangeMe123!`\n\nTo start the services, run:\n```bash\ndocker compose up\n```\nOnce the container is running, FacturaScripts will be accessible at `http://localhost:8080`.\n\n## First Time Setup\n\nThis image supports **unattended installation**, which means FacturaScripts will be automatically configured and ready to use without manual intervention.\n\n### Automatic Installation (Recommended)\n\nWhen you provide the `FS_INITIAL_USER` and `FS_INITIAL_PASS` environment variables, the installation wizard will be completely skipped:\n\n1. Start the container: `docker compose up`\n2. Wait for the database initialization (first time only)\n3. Access `http://localhost:8080` and log in with your credentials\n4. **Done!** FacturaScripts is ready to use\n\nThe container automatically creates:\n- Complete `config.php` with all necessary settings\n- `.htaccess` file for URL rewriting\n- Required folders (`MyFiles`, `Plugins`, `Dinamic`)\n- Database tables and initial user\n\n### Manual Installation\n\nIf you don't provide `FS_INITIAL_USER` and `FS_INITIAL_PASS`, the standard installation wizard will appear on first access:\n\n1. Open your browser and navigate to `http://localhost:8080`\n2. The installation wizard will guide you through:\n   - Database verification (already configured via environment variables)\n   - Creating an administrator user\n   - Language and timezone selection\n   - Initial configuration\n\n## Configuration\n\nYou can configure the container using the following environment variables in your `docker-compose.yml` file.\n\n### Database Connection\n\n| Variable Name   | Description                      | Default   |\n|-----------------|----------------------------------|-----------|\n| `DB_TYPE`       | Database type (mysql/postgresql) | `mysql`   |\n| `DB_HOST`       | Database host                    | `null`    |\n| `DB_PORT`       | Database port                    | `3306`    |\n| `DB_USER`       | Database user                    | `null`    |\n| `DB_PASSWORD`   | Database password                | `null`    |\n| `DB_NAME`       | Database name                    | `null`    |\n\n### FacturaScripts Initial Setup (Unattended Installation)\n\n| Variable Name     | Description                           | Default     | Required for Auto-Install |\n|-------------------|---------------------------------------|-------------|---------------------------|\n| `FS_INITIAL_USER` | Initial admin username                | `null`      | **Yes**                   |\n| `FS_INITIAL_PASS` | Initial admin password                | `null`      | **Yes**                   |\n| `FS_LANG`         | Interface language (es_ES, en_EN, etc)| `es_ES`     | No                        |\n| `FS_TIMEZONE`     | Timezone (e.g., Europe/Madrid, UTC)   | `UTC`       | No                        |\n\n**Important:** To enable unattended installation, you **must** set both `FS_INITIAL_USER` and `FS_INITIAL_PASS`. If these variables are not set, the web installer will appear.\n\n### FacturaScripts Advanced Configuration\n\n| Variable Name           | Description                                 | Default                    |\n|-------------------------|---------------------------------------------|----------------------------|\n| `FS_COOKIES_EXPIRE`     | Cookie expiration time in seconds           | `31536000` (1 year)        |\n| `FS_ROUTE`              | Subdirectory path if not in root            | `\"\"` (root)                |\n| `FS_DB_FOREIGN_KEYS`    | Enable foreign key constraints              | `true`                     |\n| `FS_DB_TYPE_CHECK`      | Enable database type checking               | `true`                     |\n| `FS_MYSQL_CHARSET`      | MySQL character set (MySQL only)            | `utf8mb4`                  |\n| `FS_MYSQL_COLLATE`      | MySQL collation (MySQL only)                | `utf8mb4_unicode_520_ci`   |\n| `FS_PGSQL_SSL`          | PostgreSQL SSL mode (PostgreSQL only)       | `\"\"`                       |\n| `FS_PGSQL_ENDPOINT`     | PostgreSQL endpoint (PostgreSQL only)       | `\"\"`                       |\n| `FS_DEBUG`              | Enable debug mode                           | `false`                    |\n| `FS_HIDDEN_PLUGINS`     | Comma-separated list of hidden plugins      | `\"\"`                       |\n| `FS_DISABLE_RM_PLUGINS` | Disable plugin removal                      | `false`                    |\n| `FS_DISABLE_ADD_PLUGINS`| Disable plugin installation                 | `false`                    |\n| `FS_DISABLE_RM_USERS`   | Disable user removal                        | `false`                    |\n| `FS_CODPAIS`            | Country code (ESP, DEU, FRA, etc.)          | `ESP`                      |\n| `FS_COMPANY_NAME`       | Company name for auto-setup                 | `Mi Empresa`               |\n| `FS_COMPANY_CIF`        | Company tax ID (CIF/NIF)                    | `\"\"`                       |\n| `FS_COMPANY_REGIMENIVA` | VAT regime (General, Simplified, etc.)      | `General`                  |\n| `FS_LOAD_ACCOUNTING_PLAN` | Load default accounting plan (true/false) | `true`                     |\n| `FS_SEED_FILE`          | Path to JSON seed data file                 | `\"\"`                       |\n| `FS_PLUGINS`            | Space-separated list of plugins to install  | `\"\"`                       |\n\n**Note about `FS_PLUGINS`:** Supports plugin names, download IDs, or full URLs. Plugins are installed only on first startup. See \"Automatic Plugin Installation\" section for details.\n\n### PHP \u0026 Webserver\n\n| Variable Name         | Description                               | Default      |\n|-----------------------|-------------------------------------------|--------------|\n| `APPLICATION_ENV`     | Set to `development` for debug mode       | `production` |\n| `memory_limit`        | PHP memory limit                          | `512M`       |\n| `upload_max_filesize` | Max size for uploaded files               | `64M`        |\n| `post_max_size`       | Max size of POST data                     | `64M`        |\n| `max_execution_time`  | PHP max execution time in seconds         | `300`        |\n\n### Other Configuration Variables\n\n| Variable Name               | Description                                       | Default       |\n|-----------------------------|---------------------------------------------------|---------------|\n| `PRE_CONFIGURE_COMMANDS`    | Commands to run before starting the configuration |               |\n| `POST_CONFIGURE_COMMANDS`   | Commands to run after finishing the configuration |               |\n| `RUN_CRON_TASKS`            | Enable/disable automatic cron tasks               | `true`        |\n| `CRON_INTERVAL`             | Cron schedule expression for FacturaScripts tasks | `0 * * * *`   |\n\n## Advanced Features\n\n### 1. Using Different FacturaScripts Versions\n\nCalling `docker compose build` uses the latest stable version of FacturaScripts (2025.5). If you need to use a specific FacturaScripts version, you can specify it using the `FS_VERSION` build argument.\n\nTo use a specific version, edit the build section for the facturascripts service in your `docker-compose.yml` file:\n\n```yaml\nfacturascripts:\n  image: erseco/alpine-facturascripts\n  build:\n    context: .\n    args:\n      FS_VERSION: 2025.4  # Replace with your desired version\n```\n\nAvailable versions can be found at [https://facturascripts.com/descargas](https://facturascripts.com/descargas)\n\nAfter changing the version, rebuild the image:\n```bash\ndocker compose build facturascripts\n```\n\n### 2. Pre/Post Configuration Hooks\n\nYou can define commands to be executed before and after the configuration of FacturaScripts using the `PRE_CONFIGURE_COMMANDS` and `POST_CONFIGURE_COMMANDS` environment variables. These can be useful for tasks such as installing additional packages or running scripts.\n\n```yaml\nenvironment:\n  PRE_CONFIGURE_COMMANDS: \"cat /var/www/html/htaccess-sample\"\n  POST_CONFIGURE_COMMANDS: |\n    echo 'FacturaScripts configured successfully'\n    # Add any post-installation tasks here\n```\n\n### 3. Automatic Plugin Installation\n\nThis image supports **automatic plugin installation** on first startup, similar to the Omeka-S image. You can specify which plugins to install using the `FS_PLUGINS` environment variable.\n\n#### Supported Formats\n\nThe `FS_PLUGINS` variable accepts plugins in multiple formats:\n\n1. **Plugin Names** (mapped to download IDs):\n   ```yaml\n   FS_PLUGINS: \"verifactu multiempresa webportal\"\n   ```\n\n2. **Download IDs** (numeric):\n   ```yaml\n   FS_PLUGINS: \"448 464 460\"\n   ```\n\n3. **Full URLs**:\n   ```yaml\n   FS_PLUGINS: \"https://facturascripts.com/DownloadBuild/448/stable\"\n   ```\n\n4. **Mixed formats**:\n   ```yaml\n   FS_PLUGINS: |\n     verifactu\n     464\n     https://custom-site.com/my-plugin.zip\n   ```\n\n#### Common Plugins\n\n| Plugin Name       | ID  | Description                      | URL                                      |\n|-------------------|-----|----------------------------------|------------------------------------------|\n| `verifactu`       | 448 | VERI*FACTU compliance for Spain  | [Info](https://facturascripts.com/plugins/verifactu) |\n| `multiempresa`    | 464 | Multi-company management         | [Info](https://facturascripts.com/plugins/multiempresa) |\n| `webportal`       | 460 | Customer web portal              | [Info](https://facturascripts.com/plugins/webportal) |\n| `openpaypf`       | 400 | OpenPay payment gateway          | [Info](https://facturascripts.com/plugins/openpaypf) |\n| `notificaciones`  | 356 | Notifications system             | [Info](https://facturascripts.com/plugins/notificaciones) |\n| `pagosonline`     | 391 | Online payments                  | [Info](https://facturascripts.com/plugins/pagosonline) |\n\n#### Example Configuration\n\n```yaml\nservices:\n  facturascripts:\n    image: erseco/alpine-facturascripts\n    environment:\n      # ... other variables ...\n      FS_PLUGINS: \"verifactu multiempresa\"\n```\n\n#### How It Works\n\n1. On first container startup (when no `.plugins_installed` marker exists)\n2. Each plugin is downloaded from the specified source\n3. Plugins are installed using FacturaScripts' `Plugins::add()` API\n4. Plugins are automatically enabled using `Plugins::enable()`\n5. A marker file is created to prevent reinstallation on subsequent startups\n6. **If any plugin fails to install, the container startup will fail** to ensure consistency\n\n#### Important Notes\n\n- Plugins are only installed **once** on first startup\n- To reinstall plugins, remove the `.plugins_installed` marker file from the Plugins directory\n- If a plugin installation fails, the entire container startup is aborted\n- Custom plugin URLs must point directly to a valid ZIP file\n- All plugins must contain a valid `facturascripts.ini` file\n\n#### Troubleshooting Plugin Installation\n\n**Plugin not found:**\n```bash\n# Check available plugins at facturascripts.com\n# Or use the download ID or full URL instead of the name\n```\n\n**Installation failed:**\n```bash\n# Check container logs\ndocker compose logs facturascripts\n\n# Verify the plugin ZIP is valid\n# Ensure database is accessible\n# Check FS_DISABLE_ADD_PLUGINS is not set to true\n```\n\n**Reinstall plugins:**\n```bash\n# Remove marker file\ndocker compose exec facturascripts rm /var/www/html/Plugins/.plugins_installed\n\n# Restart container\ndocker compose restart facturascripts\n```\n\n### 4. Company Setup (Wizard Auto-Completion)\n\nWhen `FS_INITIAL_USER` is set, the container now automatically completes the FacturaScripts installation wizard, so you never see the Wizard page in the browser. This sets up the company, country defaults, all database tables, and the default accounting plan.\n\n#### Company Configuration Variables\n\n| Variable Name              | Description                        | Default       |\n|----------------------------|------------------------------------|---------------|\n| `FS_CODPAIS`               | Country code (ESP, DEU, FRA, etc.) | `ESP`         |\n| `FS_COMPANY_NAME`          | Company name                       | `Mi Empresa`  |\n| `FS_COMPANY_CIF`           | Company tax ID (CIF/NIF)           | `\"\"`          |\n| `FS_COMPANY_REGIMENIVA`    | VAT regime (General, Simplified)   | `General`     |\n| `FS_LOAD_ACCOUNTING_PLAN`  | Load default accounting plan       | `true`        |\n\n#### Example\n\n```yaml\nenvironment:\n  FS_INITIAL_USER: admin\n  FS_INITIAL_PASS: admin\n  FS_CODPAIS: ESP\n  FS_COMPANY_NAME: \"Empresa Demo S.L.\"\n  FS_COMPANY_CIF: \"B12345678\"\n  FS_COMPANY_REGIMENIVA: General\n```\n\nWith this configuration, on first startup the container will:\n1. Create the admin user and set the homepage to Dashboard\n2. Configure the company with the given name, CIF, and country\n3. Initialize all FacturaScripts models (creates all database tables)\n4. Load the default accounting plan for the selected country\n5. Set country-specific defaults (tax rates, document series, etc.)\n\n### 5. Seed Data Loading\n\nYou can pre-populate your FacturaScripts instance with suppliers, products, customers, or any model data using a JSON seed file. This is useful for development, testing, demos, and playground environments.\n\n#### How to Use\n\nSet the `FS_SEED_FILE` environment variable to point to a JSON file inside the container:\n\n```yaml\nenvironment:\n  FS_SEED_FILE: /var/www/html/Plugins/MyPlugin/seed.json\n```\n\n#### JSON Format\n\nThe seed file must have a `seed` key containing model data. You can use either **model names** (exact FacturaScripts class names) or **convenience aliases**:\n\n| Alias        | Model Name |\n|--------------|------------|\n| `suppliers`  | `Proveedor` |\n| `products`   | `Producto`  |\n| `customers`  | `Cliente`   |\n\n```json\n{\n  \"seed\": {\n    \"suppliers\": [\n      {\n        \"nombre\": \"Telefónica S.A.\",\n        \"cifnif\": \"A28015865\",\n        \"tipoidfiscal\": \"CIF\",\n        \"regimeniva\": \"General\",\n        \"_unique\": \"cifnif\"\n      }\n    ],\n    \"products\": [\n      {\n        \"referencia\": \"SERV-HOSTING\",\n        \"descripcion\": \"Web hosting service\",\n        \"precio\": 9.99,\n        \"_unique\": \"referencia\"\n      }\n    ]\n  }\n}\n```\n\n#### Duplicate Detection\n\nEach record can include a `_unique` field that specifies which field to use for duplicate checking. If a record with the same value already exists, it is skipped. If `_unique` is not specified, the first non-empty string field is used.\n\n#### Using Model Names Directly\n\nYou can also use FacturaScripts model class names directly as keys:\n\n```json\n{\n  \"seed\": {\n    \"Proveedor\": [\n      {\"nombre\": \"Acme Corp\", \"cifnif\": \"X1234567X\", \"_unique\": \"cifnif\"}\n    ],\n    \"FormaPago\": [\n      {\"descripcion\": \"Wire Transfer\", \"codpago\": \"WIRE\", \"_unique\": \"codpago\"}\n    ]\n  }\n}\n```\n\nAny valid FacturaScripts Dinamic model can be used as a key.\n\n#### Example docker-compose.yml\n\n```yaml\nservices:\n  facturascripts:\n    image: erseco/alpine-facturascripts\n    environment:\n      FS_INITIAL_USER: admin\n      FS_INITIAL_PASS: admin\n      FS_COMPANY_NAME: \"Demo Company\"\n      FS_SEED_FILE: /data/seed.json\n    volumes:\n      - ./seed.json:/data/seed.json:ro\n```\n\n### 6. Scheduled Tasks (Cron)\n\nFacturaScripts requires a cron process for certain tasks in some plugins. While not strictly mandatory, **it is highly recommended** to run scheduled tasks.\n\n#### How It Works\n\nThe container automatically runs a cron daemon that executes FacturaScripts scheduled tasks. By default, it runs **every hour**, but you can customize the interval using the `CRON_INTERVAL` environment variable.\n\nThe cron executes the following command:\n```bash\nphp index.php -cron\n```\n\n#### Configuring Cron Interval\n\nYou can customize the cron schedule using the `CRON_INTERVAL` environment variable with any valid cron expression:\n\n```yaml\nenvironment:\n  # Run every 60 seconds (every minute)\n  CRON_INTERVAL: \"* * * * *\"\n```\n\n```yaml\nenvironment:\n  # Run every 5 minutes\n  CRON_INTERVAL: \"*/5 * * * *\"\n```\n\n```yaml\nenvironment:\n  # Run every hour at minute 0 (default)\n  CRON_INTERVAL: \"0 * * * *\"\n```\n\n**Common Cron Expressions:**\n- `* * * * *` - Every minute (recommended for Verifactu)\n- `*/5 * * * *` - Every 5 minutes\n- `*/15 * * * *` - Every 15 minutes\n- `0 * * * *` - Every hour (default)\n- `0 */2 * * *` - Every 2 hours\n- `0 0 * * *` - Daily at midnight\n\n#### Disabling Cron Tasks\n\nIf you need to disable the cron daemon (for testing or specific deployments), set the `RUN_CRON_TASKS` environment variable to `false`:\n\n```yaml\nenvironment:\n  RUN_CRON_TASKS: false\n```\n\n#### Manual Cron Execution\n\nYou can manually trigger the cron tasks at any time:\n\n**From the browser:**\n```\nhttp://localhost:8080/cron\n```\n\n**From the command line:**\n```bash\ndocker compose exec facturascripts php84 /var/www/html/index.php -cron\n```\n\n#### Verifying Cron Status\n\nCheck if the cron daemon is running:\n```bash\ndocker compose exec facturascripts ps aux | grep crond\n```\n\nView cron logs:\n```bash\ndocker compose logs facturascripts | grep cron\n```\n\n### 7. Manual Plugin Installation\n\nFacturaScripts plugins can also be installed manually through the web interface:\n\n1. Log in to your FacturaScripts installation\n2. Go to **Admin Panel \u003e Plugins**\n3. Search for the plugin you want to install\n4. Click \"Install\"\n\nAlternatively, you can manually place plugin files in the `/var/www/html/Plugins` directory:\n\n```bash\n# Copy plugin to the container\ndocker cp my-plugin.zip facturascripts:/var/www/html/Plugins/\n\n# Extract if needed\ndocker compose exec facturascripts unzip /var/www/html/Plugins/my-plugin.zip -d /var/www/html/Plugins/\n```\n\n### 6. Persistent Data\n\nThe container uses volumes to persist important data:\n\n- `/var/www/html/volume/MyFiles` - Uploaded files, documents, and configuration\n- `/var/www/html/volume/Plugins` - Installed plugins\n\n**Important:** Make sure to properly back up these volumes to prevent data loss.\n\nExample backup command:\n```bash\n# Backup MyFiles\ndocker run --rm -v alpine-facturascripts_facturascripts_volume:/data -v $(pwd):/backup alpine tar czf /backup/facturascripts-backup-$(date +%Y%m%d).tar.gz -C /data .\n\n# Backup database\ndocker compose exec mariadb mysqldump -u facturascripts -pfacturascripts facturascripts \u003e facturascripts-db-$(date +%Y%m%d).sql\n```\n\n## Supported Databases\n\nFacturaScripts supports the following databases:\n\n- MySQL / MariaDB (recommended)\n- PostgreSQL\n\nTo use PostgreSQL, change the `DB_TYPE` environment variable to `postgresql` and adjust the connection parameters accordingly.\n\n## Security Considerations\n\n- **Change default passwords:** Always change the default database passwords in production environments.\n- **Use HTTPS:** For production deployments, use a reverse proxy (like nginx or Traefik) with SSL/TLS certificates.\n- **Regular backups:** Implement a backup strategy for both the database and the volume data.\n- **Keep updated:** Regularly update to the latest FacturaScripts version to get security patches.\n\n## Maintenance Tips\n\n### Install Additional Alpine Packages (as root)\n\n```bash\ndocker compose exec --user root facturascripts sh -c \"apk update \u0026\u0026 apk add nano\"\n```\n\n### Access FacturaScripts Logs\n\n```bash\ndocker compose logs -f facturascripts\n```\n\n### Manual Database Rebuild\n\nIf you need to manually rebuild FacturaScripts dynamic classes:\n\n```bash\n# Access the rebuild endpoint\ncurl \"http://localhost:8080/deploy?action=rebuild\u0026token=$(docker compose exec facturascripts grep -o 'token=[^\"]*' /var/www/html/Core/Controller/Deploy.php | cut -d'=' -f2 | head -1)\"\n```\n\n### Clear Cache\n\n```bash\ndocker compose exec facturascripts rm -rf /var/www/html/MyFiles/Cache/*\n```\n\n### Database Console Access\n\n```bash\n# MySQL/MariaDB\ndocker compose exec mariadb mysql -u facturascripts -pfacturascripts facturascripts\n\n# PostgreSQL\ndocker compose exec postgres psql -U facturascripts -d facturascripts\n```\n\n## Troubleshooting\n\n### FacturaScripts shows a database connection error\n\nMake sure the database container is running and the environment variables are correctly set. You can check the logs:\n\n```bash\ndocker compose logs facturascripts\ndocker compose logs mariadb\n```\n\n### Permission errors\n\nThe container runs as the `nobody` user for security. If you encounter permission issues, ensure the volumes have the correct permissions.\n\n### Installation wizard doesn't appear\n\nIf the database is already configured, FacturaScripts will skip the installation wizard. Check if there's an existing `config.php` file in the root directory (`/var/www/html/config.php`).\n\n### Error: Class \"FacturaScripts\\Dinamic\\Model\\...\" not found\n\nThis error occurs when FacturaScripts needs to rebuild its dynamic classes. Access the rebuild endpoint:\n\n```bash\ncurl \"http://localhost:8080/deploy?action=rebuild\"\n```\n\nOr restart the container:\n\n```bash\ndocker compose restart facturascripts\n```\n\n## Contributing\n\nContributions are welcome! Please feel free to submit a Pull Request.\n\n## License\n\nThis project is licensed under the MIT License - see the [LICENSE](LICENSE) file for details.\n\n## Acknowledgments\n\n- Based on [erseco/alpine-php-webserver](https://github.com/erseco/alpine-php-webserver)\n- FacturaScripts by [FacturaScripts](https://facturascripts.com)\n\n---\n\n## About\n\nFacturaScripts docker image based on Alpine Linux.\n\n**Docker Hub:** [hub.docker.com/r/erseco/alpine-facturascripts](https://hub.docker.com/r/erseco/alpine-facturascripts)\n\n### Topics\n- `docker`\n- `nginx`\n- `lightweight`\n- `alpine`\n- `accounting`\n- `billing`\n- `facturascripts`\n- `erp`\n- `php8`\n\n### Resources\n- 📖 [README](README.md)\n- 📜 [License: MIT](LICENSE)\n- 🐛 [Issues](https://github.com/erseco/alpine-facturascripts/issues)\n- 🔀 [Pull Requests](https://github.com/erseco/alpine-facturascripts/pulls)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ferseco%2Falpine-facturascripts","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ferseco%2Falpine-facturascripts","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ferseco%2Falpine-facturascripts/lists"}