Invoice Ninja is an open-source, self-hosted invoicing and billing platform that replaces single-rail tools with multi-gateway client management.
PayPal Invoicing tethers billing workflows to a single payment processor, charges fixed transaction cuts, and stores client records on proprietary servers. Invoice Ninja decouples billing from specific payment rails by running as a self-hosted platform connected to dozens of gateways simultaneously. Small agencies and operations leads gain unified dashboards, customizable client portals, and complete ownership over invoice histories without recurring seat fees.
PayPal Invoicing operates as a payment processor feature, enforcing vendor lock-in. Transactions must clear PayPal's rail and incur standard merchant cuts. Invoice Ninja shifts billing into an independent orchestration layer. Teams can connect multiple gateways side by side—offering credit cards via Stripe, bank debits through Mollie, or direct PayPal checkout—while managing numbering and retainers from one interface. When an agency switches merchant providers to negotiate lower rates, client records remain untouched.
Where PayPal holds an advantage is operational convenience. Setup requires only a merchant account and zero server maintenance. Invoice Ninja demands infrastructure ownership: self-hosting requires maintaining a PHP runtime, a MariaDB database, Redis queues, and background cron workers. Teams must also configure reverse proxies and transactional email routing. For agencies managing recurring retainers across regions, that operational effort eliminates per-seat SaaS fees and unlocks multi-gateway routing.
Invoice Ninja vs PayPal — which should you choose? Choose PayPal if you only need an occasional one-off invoice paid into a single merchant account. Choose Invoice Ninja for recurring billing, time tracking, client portals, and multi-gateway flexibility.
Is Invoice Ninja free to self-host? Yes, self-hosting includes all enterprise features without client or invoice caps, though removing vendor branding from client-facing pages requires an optional forty-dollar annual white-label license.
Does Invoice Ninja replace full accounting software? No, it handles invoicing, payments, and quotes rather than double-entry general ledger accounting. Growing teams pair it with dedicated bookkeeping software for tax reconciliation.
Invoice Ninja is a practical choice for agency operations leads who want multi-gateway billing automation and client data ownership without ongoing SaaS fees, provided they can maintain a self-hosted PHP stack. Its AGPL-3.0 license guarantees source access and hosting independence for internal operations, while active commits throughout September 2026 ensure dependable ongoing support. If your business requires an end-of-year tax ledger or cannot manage container maintenance, a hosted turnkey accounting suite remains a safer route.
These packages install the Invoice Ninja desktop client, not the server. Each package is matched to Invoice Ninja through the registry's own link to its source code or website.
flatpak install flathub com.invoiceninja.InvoiceNinjaWe started this exact setup from scratch in a clean Linux machine on Nov 2, 2026 and checked it through Invoice Ninja's own API: every check passed. Recipes are re-checked regularly and removed if they stop working.
mkdir -p invoice-ninja && cd invoice-ninja
curl -fsSL https://open-source.store/tools/invoice-ninja/compose.yml -o compose.ymlcat > .env <<EOF
APP_URL=http://localhost:8080
APP_KEY=$(openssl rand -base64 32)
DB_PASSWORD=$(openssl rand -hex 12)
DB_ROOT_PASSWORD=$(openssl rand -hex 12)
[email protected]
IN_PASSWORD=$(openssl rand -hex 12)
EOFAPP_URL — Public URL where Invoice Ninja is accessible; set to your public URL (e.g. https://invoicing.example.com).APP_KEY — 32-byte base64 encryption key for application data and sessions. Generated above; keep it secret.DB_PASSWORD — Database password for the Invoice Ninja MariaDB user. Generated above; keep it secret.DB_ROOT_PASSWORD — Root password for the bundled MariaDB database. Generated above; keep it secret.IN_USER_EMAIL — Email address of the initial administrator account.IN_PASSWORD — Initial password for the administrator account. Generated above; keep it secret.docker compose up -dservices:
server:
image: nginx:1.27-alpine
restart: always
ports:
- "8080:80"
volumes:
- app_public:/var/www/html/public:ro
- app_storage:/var/www/html/storage:ro
depends_on:
app:
condition: service_healthy
healthcheck:
test: ["CMD-SHELL", "wget -q -O /dev/null http://127.0.0.1/health || exit 1"]
interval: 5s
timeout: 5s
retries: 10
entrypoint:
- /bin/sh
- -c
- |
cat <<'EOF' > /etc/nginx/conf.d/default.conf
client_max_body_size 100M;
server_tokens off;
fastcgi_buffers 32 16k;
server {
listen 80 default_server;
server_name _;
root /var/www/html/public;
add_header X-Frame-Options "SAMEORIGIN";
add_header X-Content-Type-Options "nosniff";
index index.php;
charset utf-8;
location / {
try_files $$uri $$uri/ /index.php?$$query_string;
}
location = /favicon.ico { access_log off; log_not_found off; }
location = /robots.txt { access_log off; log_not_found off; }
location ~ \.php$$ {
fastcgi_pass app:9000;
fastcgi_param SCRIPT_FILENAME $$realpath_root$$fastcgi_script_name;
include fastcgi_params;
}
location ~ /\.(?!well-known).* {
deny all;
}
}
EOF
exec nginx -g 'daemon off;'
app:
image: invoiceninja/invoiceninja-debian:5.13.53
restart: always
environment:
APP_URL: ${APP_URL}
APP_KEY: base64:${APP_KEY}
APP_ENV: production
APP_DEBUG: "false"
REQUIRE_HTTPS: "false"
PHANTOMJS_PDF_GENERATION: "false"
PDF_GENERATOR: snappdf
TRUSTED_PROXIES: "*"
CACHE_DRIVER: redis
QUEUE_CONNECTION: redis
SESSION_DRIVER: redis
REDIS_HOST: redis
REDIS_PORT: 6379
FILESYSTEM_DISK: debian_docker
DB_CONNECTION: mysql
DB_HOST: db
DB_PORT: 3306
DB_DATABASE: ninja
DB_USERNAME: ninja
DB_PASSWORD: ${DB_PASSWORD}
IN_USER_EMAIL: ${IN_USER_EMAIL}
IN_PASSWORD: ${IN_PASSWORD}
MAIL_MAILER: log
IS_DOCKER: "true"
volumes:
- app_public:/var/www/html/public
- app_storage:/var/www/html/storage
depends_on:
db:
condition: service_healthy
redis:
condition: service_healthy
healthcheck:
test: ["CMD-SHELL", "REMOTE_ADDR=127.0.0.1 REQUEST_URI=/health REQUEST_METHOD=GET SCRIPT_FILENAME=/var/www/html/public/index.php cgi-fcgi -bind -connect 127.0.0.1:9000 | grep -q 'API is healthy'"]
interval: 10s
timeout: 5s
retries: 30
start_period: 30s
db:
image: mariadb:10.11.11
restart: always
environment:
MYSQL_ROOT_PASSWORD: ${DB_ROOT_PASSWORD}
MYSQL_DATABASE: ninja
MYSQL_USER: ninja
MYSQL_PASSWORD: ${DB_PASSWORD}
volumes:
- db_data:/var/lib/mysql
healthcheck:
test: ["CMD", "healthcheck.sh", "--connect", "--innodb_initialized"]
interval: 5s
timeout: 5s
retries: 10
redis:
image: redis:7.4-alpine
restart: always
volumes:
- redis_data:/data
healthcheck:
test: ["CMD", "redis-cli", "ping"]
interval: 5s
timeout: 5s
retries: 10
volumes:
app_public:
app_storage:
db_data:
redis_data:
Free IDE for Java, Kotlin, Go, TypeScript and Python. Built on IntelliJ Community, fully open source, 300+ plugins.
Show that Invoice Ninja is listed as an open-source alternative. Paste into your README:
Ubuntu 24.04 · Apple container, Docker 29.1.3, Compose 2.40.3+ds1-0ubuntu1~24.04.1. Images pulled in 175 s: invoiceninja/invoiceninja-debian:5.13.53, mariadb:10.11.11, redis:7.4-alpine, nginx:1.27-alpine.
Based on the upstream setup. Official Debian-based compose stack with bundled Chromium for PDF generation. Pinned to 5.13.53, MariaDB 10.11.11, Redis 7.4-alpine, and Nginx 1.27-alpine; passwords and keys moved to .env.
app-1 | 2026-11-02T05:47:35.585667835Z 172.18.0.5 - 02/Nov/2026:05:47:35 +0000 "GET /index.php" 200 app-1 | 2026-11-02T05:47:35.586267127Z 172.18.0.5 - 02/Nov/2026:05:47:35 +0000 "GET /index.php" 200 app-1 | 2026-11-02T05:47:35.597164002Z 172.18.0.5 - 02/Nov/2026:05:47:35 +0000 "GET /index.php" 200 app-1 | 2026-11-02T05:47:35.605832210Z 172.18.0.5 - 02/Nov/2026:05:47:35 +0000 "GET /index.php" 200 app-1 | 2026-11-02T05:47:35.609055919Z 172.18.0.5 - 02/Nov/2026:05:47:35 +0000 "GET /index.php" 200 app-1 | 2026-11-02T05:47:35.614166044Z 172.18.0.5 - 02/Nov/2026:05:47:35 +0000 "GET /index.php" 200 app-1 | 2026-11-02T05:47:35.619193627Z 172.18.0.5 - 02/Nov/2026:05:47:35 +0000 "GET /index.php" 200 app-1 | 2026-11-02T05:47:35.621124335Z 172.18.0.5 - 02/Nov/2026:05:47:35 +0000 "GET /index.php" 200 app-1 | 2026-11-02T05:47:35.626705877Z 172.18.0.5 - 02/Nov/2026:05:47:35 +0000 "GET /index.php" 200 app-1 | 2026-11-02T05:47:35.630584585Z 172.18.0.5 - 02/Nov/2026:05:47:35 +0000 "GET /index.php" 200 app-1 | 2026-11-02T05:47:35.638366710Z 172.18.0.5 - 02/Nov/2026:05:47:35 +0000 "GET /index.php" 200 app-1 | 2026-11-02T05:47:35.638405210Z 172.18.0.5 - 02/Nov/2026:05:47:35 +0000 "GET /index.php" 200 app-1 | 2026-11-02T05:47:35.643491085Z 172.18.0.5 - 02/Nov/2026:05:47:35 +0000 "GET /index.php" 200 app-1 | 2026-11-02T05:47:35.644030252Z 172.18.0.5 - 02/Nov/2026:05:47:35 +0000 "GET /index.php" 200 app-1 | 2026-11-02T05:47:35.652102085Z 172.18.0.5 - 02/Nov/2026:05:47:35 +0000 "GET /index.php" 200 app-1 | 2026-11-02T05:47:35.663734919Z 172.18.0.5 - 02/Nov/2026:05:47:35 +0000 "GET /index.php" 200 app-1 | 2026-11-02T05:47:35.666250877Z 172.18.0.5 - 02/Nov/2026:05:47:35 +0000 "GET /index.php" 200 app-1 | 2026-11-02T05:47:35.672161627Z 172.18.0.5 - 02/Nov/2026:05:47:35 +0000 "GET /index.php" 200 app-1 | 2026-11-02T05:47:35.677764752Z 172.18.0.5 - 02/Nov/2026:05:47:35 +0000 "GET /index.php" 200 app-1 | 2026-11-02T05:47:35.678085460Z 172.18.0.5 - 02/Nov/2026:05:47:35 +0000 "GET /index.php" 200 app-1 | 2026-11-02T05:47:35.683797085Z 172.18.0.5 - 02/Nov/2026:05:47:35 +0000 "GET /index.php" 200 app-1 | 2026-11-02T05:47:35.685038377Z 172.18.0.5 - 02/Nov/2026:05:47:35 +0000 "GET /index.php" 200 app-1 | 2026-11-02T05:47:35.685616044Z 172.18.0.5 - 02/Nov/2026:05:47:35 +0000 "GET /index.php" 200 app-1 | 2026-11-02T05:47:35.692076127Z 172.18.0.5 - 02/Nov/2026:05:47:35 +0000 "GET /index.php" 200 app-1 | 2026-11-02T05:47:35.692080169Z 172.18.0.5 - 02/Nov/2026:05:47:35 +0000 "GET /tests/generate.php" 404 app-1 | 2026-11-02T05:47:35.692080960Z 172.18.0.5 - 02/Nov/2026:05:47:35 +0000 "GET /tests/generate.php" 404 app-1 | 2026-11-02T05:47:35.692081585Z 172.18.0.5 - 02/Nov/2026:05:47:35 +0000 "GET /StudioServer/server/wwtest/phpinfo.php" 404 app-1 | 2026-11-02T05:47:35.692082127Z 172.18.0.5 - 02/Nov/2026:05:47:35 +0000 "GET /StudioServer/server/wwtest/phpinfo.php" 404 app-1 | 2026-11-02T05:47:35.692082710Z 172.18.0.5 - 02/Nov/2026:05:47:35 +0000 "GET /wp-content/plugins/pdf-generator-for-wp/package/lib/dompdf/vendor/dompdf/dompdf/I18N/Arabic/Examples/Query.php" 404 app-1 | 2026-11-02T05:47:35.692317419Z 172.18.0.5 - 02/Nov/2026:05:47:35 +0000 "GET /wp-content/plugins/pdf-generator-for-wp/package/lib/dompdf/vendor/dompdf/dompdf/I18N/Arabic/Examples/Query.php" 404 app-1 | 2026-11-02T05:47:35.694744960Z 172.18.0.5 - 02/Nov/2026:05:47:35 +0000 "GET /index.php" 200 app-1 | 2026-11-02T05:47:35.695234294Z 172.18.0.5 - 02/Nov/2026:05:47:35 +0000 "GET /index.php" 200 app-1 | 2026-11-02T05:47:35.698464294Z 172.18.0.5 - 02/Nov/2026:05:47:35 +0000 "GET /index.php" 200 app-1 | 2026-11-02T05:47:35.710019835Z 172.18.0.5 - 02/Nov/2026:05:47:35 +0000 "GET /index.php" 200 app-1 | 2026-11-02T05:47:35.714083710Z 172.18.0.5 - 02/Nov/2026:05:47:33 +0000 "GET /index.php" 200 app-1 | 2026-11-02T05:47:35.720714794Z 172.18.0.5 - 02/Nov/2026:05:47:35 +0000 "GET /index.php" 200 app-1 | 2026-11-02T05:47:35.721018377Z 172.18.0.5 - 02/Nov/2026:05:47:35 +0000 "GET /tag_test_action.php" 404 app-1 | 2026-11-02T05:47:35.721416544Z 172.18.0.5 - 02/Nov/2026:05:47:35 +0000 "GET /tag_test_action.php" 404 app-1 | 2026-11-02T05:47:35.727481794Z 172.18.0.5 - 02/Nov/2026:05:47:35 +0000 "GET /index.php" 200 app-1 | 2026-11-02T05:47:35.733088752Z 172.18.0.5 - 02/Nov/2026:05:47:35 +0000 "GET /index.php" 200 app-1 | 2026-11-02T05:47:35.734673044Z 172.18.0.5 - 02/Nov/2026:05:47:35 +0000 "GET /index.php" 200 app-1 | 2026-11-02T05:47:35.734819127Z 172.18.0.5 - 02/Nov/2026:05:47:35 +0000 "GET /index.php" 200 app-1 | 2026-11-02T05:47:35.740000127Z 172.18.0.5 - 02/Nov/2026:05:47:35 +0000 "GET /index.php" 200 app-1 | 2026-11-02T05:47:35.745474919Z 172.18.0.5 - 02/Nov/2026:05:47:35 +0000 "GET /index.php" 200 app-1 | 2026-11-02T05:47:35.756315627Z 172.18.0.5 - 02/Nov/2026:05:47:35 +0000 "GET /index.php" 200 app-1 | 2026-11-02T05:47:35.756330460Z 172.18.0.5 - 02/Nov/2026:05:47:35 +0000 "GET /index.php" 200 app-1 | 2026-11-02T05:47:35.765561085Z 172.18.0.5 - 02/Nov/2026:05:47:35 +0000 "GET /index.php" 200 app-1 | 2026-11-02T05:47:35.767030377Z 172.18.0.5 - 02/Nov/2026:05:47:35 +0000 "GET /index.php" 200 app-1 | 2026-11-02T05:47:35.773841294Z 172.18.0.5 - 02/Nov/2026:05:47:35 +0000 "GET /index.php" 200 app-1 | 2026-11-02T05:47:35.779206752Z 172.18.0.5 - 02/Nov/2026:05:47:35 +0000 "GET /index.php" 200 app-1 | 2026-11-02T05:47:35.779212794Z 172.18.0.5 - 02/Nov/2026:05:47:35 +0000 "GET /index.php" 200 app-1 | 2026-11-02T05:47:36.172697002Z 172.18.0.5 - 02/Nov/2026:05:47:36 +0000 "GET /index.php" 200 app-1 | 2026-11-02T05:47:36.172792669Z 172.18.0.5 - 02/Nov/2026:05:47:36 +0000 "GET /index.php" 200 app-1 | 2026-11-02T05:47:36.181433794Z 172.18.0.5 - 02/Nov/2026:05:47:36 +0000 "GET /index.php" 200 app-1 | 2026-11-02T05:47:36.183665086Z 172.18.0.5 - 02/Nov/2026:05:47:36 +0000 "GET /index.php" 200 app-1 | 2026-11-02T05:47:36.186745794Z 172.18.0.5 - 02/Nov/2026:05:47:36 +0000 "GET /index.php" 200 app-1 | 2026-11-02T05:47:36.191032377Z 172.18.0.5 - 02/Nov/2026:05:47:36 +0000 "GET /index.php" 200 app-1 | 2026-11-02T05:47:36.191042336Z 172.18.0.5 - 02/Nov/2026:05:47:36 +0000 "GET /index.php" 200 app-1 | 2026-11-02T05:47:36.196915044Z 172.18.0.5 - 02/Nov/2026:05:47:36 +0000 "GET /index.php" 200 app-1 | 2026-11-02T05:47:36.198206044Z 172.18.0.5 - 02/Nov/2026:05:47:36 +0000 "GET /index.php" 200 app-1 | 2026-11-02T05:47:36.203842544Z 172.18.0.5 - 02/Nov/2026:05:47:36 +0000 "GET /index.php" 200 app-1 | 2026-11-02T05:47:36.203898836Z 172.18.0.5 - 02/Nov/2026:05:47:36 +0000 "GET /wp-admin/admin.php" 404 app-1 | 2026-11-02T05:47:36.204324669Z 172.18.0.5 - 02/Nov/2026:05:47:36 +0000 "GET /index.php" 200 app-1 | 2026-11-02T05:47:36.207488836Z 172.18.0.5 - 02/Nov/2026:05:47:36 +0000 "GET /index.php" 200 app-1 | 2026-11-02T05:47:36.211877586Z 172.18.0.5 - 02/Nov/2026:05:47:36 +0000 "GET /index.php" 200 app-1 | 2026-11-02T05:47:36.217728377Z 172.18.0.5 - 02/Nov/2026:05:47:36 +0000 "GET /index.php" 200 app-1 | 2026-11-02T05:47:36.218236252Z 172.18.0.5 - 02/Nov/2026:05:47:36 +0000 "GET /tool/log/c.php" 404 app-1 | 2026-11-02T05:47:36.218520586Z 172.18.0.5 - 02/Nov/2026:05:47:36 +0000 "GET /tool/log/c.php" 404 app-1 | 2026-11-02T05:47:36.218619336Z 172.18.0.5 - 02/Nov/2026:05:47:36 +0000 "GET /classes/phpmailer/class.cs_phpmailer.php" 404 app-1 | 2026-11-02T05:47:36.218709711Z 172.18.0.5 - 02/Nov/2026:05:47:36 +0000 "GET /classes/phpmailer/class.cs_phpmailer.php" 404 app-1 | 2026-11-02T05:47:36.218891669Z 172.18.0.5 - 02/Nov/2026:05:47:36 +0000 "GET /wp-admin/admin.php" 404 app-1 | 2026-11-02T05:47:36.219365502Z 172.18.0.5 - 02/Nov/2026:05:47:36 +0000 "GET /index.php" 200 app-1 | 2026-11-02T05:47:36.227843211Z 172.18.0.5 - 02/Nov/2026:05:47:34 +0000 "GET /index.php" 200 app-1 | 2026-11-02T05:47:36.228831419Z 172.18.0.5 - 02/Nov/2026:05:47:36 +0000 "GET /server/wwtest/phpinfo.php" 404 app-1 | 2026-11-02T05:47:36.228834127Z 172.18.0.5 - 02/Nov/2026:05:47:36 +0000 "GET /server/wwtest/phpinfo.php" 404 app-1 | 2026-11-02T05:47:36.228960752Z 172.18.0.5 - 02/Nov/2026:05:47:36 +0000 "GET /index.php" 200 app-1 | 2026-11-02T05:47:36.230239961Z 172.18.0.5 - 02/Nov/2026:05:47:36 +0000 "GET /index.php" 200 app-1 | 2026-11-02T05:47:36.239078169Z 172.18.0.5 - 02/Nov/2026:05:47:36 +0000 "GET /index.php" 200 app-1 | 2026-11-02T05:47:36.244962336Z 172.18.0.5 - 02/Nov/2026:05:47:36 +0000 "GET /index.php" 200 app-1 | 2026-11-02T05:47:36.245840294Z 172.18.0.5 - 02/Nov/2026:05:47:36 +0000 "GET /down_data.php" 404 app-1 | 2026-11-02T05:47:36.256204794Z 172.18.0.5 - 02/Nov/2026:05:47:36 +0000 "GET /down_data.php" 404 app-1 | 2026-11-02T05:47:36.256216877Z 172.18.0.5 - 02/Nov/2026:05:47:36 +0000 "GET /index.php" 200 app-1 | 2026-11-02T05:47:36.258881252Z 172.18.0.5 - 02/Nov/2026:05:47:36 +0000 "GET /index.php" 400 app-1 | 2026-11-02T05:47:36.259935294Z 172.18.0.5 - 02/Nov/2026:05:47:36 +0000 "GET /index.php" 200 app-1 | 2026-11-02T05:47:36.262707461Z 172.18.0.5 - 02/Nov/2026:05:47:36 +0000 "GET /index.php" 200 app-1 | 2026-11-02T05:47:36.273967586Z 172.18.0.5 - 02/Nov/2026:05:47:36 +0000 "GET /index.php" 200 app-1 | 2026-11-02T05:47:36.273974002Z 172.18.0.5 - 02/Nov/2026:05:47:36 +0000 "GET /index.php" 200 app-1 | 2026-11-02T05:47:36.275792127Z 172.18.0.5 - 02/Nov/2026:05:47:36 +0000 "GET /index.php" 200 app-1 | 2026-11-02T05:47:36.293809252Z 172.18.0.5 - 02/Nov/2026:05:47:36 +0000 "GET /index.php" 200 app-1 | 2026-11-02T05:47:36.300316586Z 172.18.0.5 - 02/Nov/2026:05:47:36 +0000 "GET /index.php" 200 app-1 | 2026-11-02T05:47:36.302685961Z 172.18.0.5 - 02/Nov/2026:05:47:36 +0000 "GET /index.php" 200 app-1 | 2026-11-02T05:47:36.302758919Z 172.18.0.5 - 02/Nov/2026:05:47:36 +0000 "GET /index.php" 200 app-1 | 2026-11-02T05:47:36.311253127Z 172.18.0.5 - 02/Nov/2026:05:47:36 +0000 "GET /index.php" 200 app-1 | 2026-11-02T05:47:36.314781711Z 172.18.0.5 - 02/Nov/2026:05:47:36 +0000 "GET /index.php" 200 app-1 | 2026-11-02T05:47:36.328545377Z 172.18.0.5 - 02/Nov/2026:05:47:36 +0000 "GET /index.php" 200 app-1 | 2026-11-02T05:47:36.335941711Z 172.18.0.5 - 02/Nov/2026:05:47:36 +0000 "GET /index.php" 200 app-1 | 2026-11-02T05:47:36.339873127Z 172.18.0.5 - 02/Nov/2026:05:47:36 +0000 "GET /index.php" 200 app-1 | 2026-11-02T05:47:36.345264836Z 172.18.0.5 - 02/Nov/2026:05:47:36 +0000 "GET /index.php" 200 app-1 | 2026-11-02T05:47:36.346169419Z 172.18.0.5 - 02/Nov/2026:05:47:36 +0000 "GET /index.php" 200 app-1 | 2026-11-02T05:47:36.351876252Z 172.18.0.5 - 02/Nov/2026:05:47:36 +0000 "GET /index.php" 200 app-1 | 2026-11-02T05:47:36.353121502Z 172.18.0.5 - 02/Nov/2026:05:47:36 +0000 "GET /index.php" 200 app-1 | 2026-11-02T05:47:36.353196711Z 172.18.0.5 - 02/Nov/2026:05:47:36 +0000 "GET /index.php" 200 app-1 | 2026-11-02T05:47:36.358559294Z 172.18.0.5 - 02/Nov/2026:05:47:36 +0000 "GET /index.php" 200 app-1 | 2026-11-02T05:47:36.363345336Z 172.18.0.5 - 02/Nov/2026:05:47:36 +0000 "GET /index.php" 200 app-1 | 2026-11-02T05:47:36.363422336Z 172.18.0.5 - 02/Nov/2026:05:47:36 +0000 "GET /index.php" 200 app-1 | 2026-11-02T05:47:36.364712294Z 172.18.0.5 - 02/Nov/2026:05:47:36 +0000 "GET /index.php" 200 app-1 | 2026-11-02T05:47:36.370357252Z 172.18.0.5 - 02/Nov/2026:05:47:36 +0000 "GET /index.php" 200 app-1 | 2026-11-02T05:47:36.372507502Z 172.18.0.5 - 02/Nov/2026:05:47:36 +0000 "GET /index.php" 400 app-1 | 2026-11-02T05:47:36.374426961Z 172.18.0.5 - 02/Nov/2026:05:47:36 +0000 "GET /index.php" 200 app-1 | 2026-11-02T05:47:36.377626002Z 172.18.0.5 - 02/Nov/2026:05:47:36 +0000 "GET /index.php" 200 app-1 | 2026-11-02T05:47:36.386349627Z 172.18.0.5 - 02/Nov/2026:05:47:36 +0000 "GET /index.php" 200 app-1 | 2026-11-02T05:47:36.386575336Z 172.18.0.5 - 02/Nov/2026:05:47:36 +0000 "GET /index.php" 200 app-1 | 2026-11-02T05:47:36.391521877Z 172.18.0.5 - 02/Nov/2026:05:47:36 +0000 "GET /index.php" 200 app-1 | 2026-11-02T05:47:36.391727211Z 172.18.0.5 - 02/Nov/2026:05:47:36 +0000 "GET /index.php" 200 app-1 | 2026-11-02T05:47:36.397824086Z 172.18.0.5 - 02/Nov/2026:05:47:36 +0000 "GET /index.php" 200 app-1 | 2026-11-02T05:47:36.404270669Z 172.18.0.5 - 02/Nov/2026:05:47:36 +0000 "GET /index.php" 200 app-1 | 2026-11-02T05:47:37.538782586Z 127.0.0.1 - 02/Nov/2026:05:47:37 +0000 "GET " 200 app-1 | 2026-11-02T05:47:38.220725712Z 172.18.0.5 - 02/Nov/2026:05:47:36 +0000 "GET /index.php" 200 app-1 | 2026-11-02T05:47:39.114026587Z 172.18.0.5 - 02/Nov/2026:05:47:36 +0000 "GET /index.php" 200 app-1 | 2026-11-02T05:47:40.268326546Z 172.18.0.5 - 02/Nov/2026:05:47:40 +0000 "GET /index.php" 200