juslintek/wp-sqlite-elementor-server

By juslintek

Updated about 1 month ago

It is minimum wordpress with elementor and proelements preinstalled, running on sqlite and wp server

Image
Languages & frameworks
Web servers
Content management system
0

2.4K

juslintek/wp-sqlite-elementor-server repository overview

Wordpress with SQLITE and Elementor running on FrankenPHP

Zero-dependency WordPress + Elementor development server.

FrankenPHP · PHP 8.5 · SQLite · Elementor · ProElements · hello-elementor

Single container. No MySQL. No Apache. No Nginx. Ready in ~10 seconds.

Quick Start

docker run -p 8080:8080 \
  -e WP_ADMIN_USER=admin \
  -e WP_ADMIN_PASS=admin \
  juslintek/wp-sqlite-elementor-server:latest

Open http://localhost:8080

What's Inside

ComponentDetails
FrankenPHPCaddy + PHP in one process. HTTP/2, HTTP/3, zstd/br/gzip.
PHP 8.5 (ZTS)Thread-safe, OPcache enabled
WordPressLatest stable
SQLite Database IntegrationNo MySQL/MariaDB/Postgres needed
ElementorPage builder
ProElementsFree Elementor Pro alternative
hello-elementorDefault theme (activated on auto-setup)

Core stack lives in /opt/elementor-stack/ and is symlinked into wp-content/plugins/ on every boot — immune to wp-content mounts.

Tags

TagPHPDescription
latest8.5Latest everything
php8.58.5PHP 8.5 explicit
php8.48.4PHP 8.4 stable
wp6.9.4-elementor3.35.9-php8.58.5Pinned versions
wp6.9.4-elementor3.35.9-php8.48.4Pinned versions

All tags: linux/amd64 + linux/arm64

Environment Variables

VariableDefaultDescription
WP_ADMIN_USER(none)Set to enable auto-setup. Omit for manual web install.
WP_ADMIN_PASSadminAdmin password
WP_ADMIN_EMAIL[email protected]Admin email
WP_TITLEElementor MCPSite title
WP_DEBUGfalseWordPress debug mode

Domain-Agnostic

URL is determined from the request Host header. Works from any domain/port without reconfiguration.

Volumes

# Persist database + uploads
docker run -p 8080:8080 \
  -v ./data/database:/wp/wp-content/database \
  -v ./data/uploads:/wp/wp-content/uploads \
  -e WP_ADMIN_USER=admin \
  juslintek/wp-sqlite-elementor-server:latest

# Custom plugins (Elementor/ProElements still load from /opt)
docker run -p 8080:8080 \
  -v ./my-plugins:/wp/wp-content/plugins \
  -e WP_ADMIN_USER=admin \
  juslintek/wp-sqlite-elementor-server:latest
MountPurpose
/wp/wp-content/databaseSQLite database
/wp/wp-content/uploadsMedia uploads
/wp/wp-content/pluginsCustom plugins
/wp/wp-content/themesCustom themes

Docker Compose

services:
  wordpress:
    image: juslintek/wp-sqlite-elementor-server:latest
    ports:
      - "8080:8080"
    environment:
      WP_ADMIN_USER: admin
      WP_ADMIN_PASS: admin
      WP_DEBUG: "true"
    volumes:
      - ./data/database:/wp/wp-content/database
      - ./data/uploads:/wp/wp-content/uploads

Application Password

Auto-setup creates an application password at /wp/app-password.txt:

docker exec <container> cat /wp/app-password.txt
curl -u admin:<password> http://localhost:8080/wp-json/wp/v2/pages

Security

Multi-stage build: build tools (git, unzip) are NOT in the runtime image. Only curl + WP-CLI remain for runtime operations. All Alpine packages upgraded to latest patches on build.

Known Considerations

The Alpine base image (dunglas/frankenphp:1-php8.5-alpine) inherits some packages with known CVEs that may not have upstream patches yet. For maximum security:

  1. Rebuild regularlydocker build --no-cache picks up latest Alpine patches
  2. Use pinned version tags — avoid latest in production
  3. Mount read-only where possible — -v ./data:/wp/wp-content/database:ro after setup
Vulnerability Mitigation
PackageRiskMitigation
unzipCVE-2008-0888Not in runtime image (build stage only)
tar/busyboxPath traversal CVEsNo user-uploaded archives processed; WordPress doesn't use tar
curlMultiple CVEsapk upgrade applied; rebuild to get latest
nghttp2CVE-2026-27135apk upgrade applied; only used for HTTP/2 client
Future: Static Binary Approach

FrankenPHP supports static binaries (PHP + Caddy in one file). Running on scratch/distroless would eliminate ALL OS-level CVEs. This is tracked for a future release.

Building

# Local
docker build -t wp-sqlite-elementor-server .

# Multi-arch + push
docker buildx build --platform linux/amd64,linux/arm64 \
  -t juslintek/wp-sqlite-elementor-server:latest --push .

# Different PHP version
docker build --build-arg PHP_VERSION=8.4 -t wp-sqlite-elementor-server:php8.4 .

Architecture

FrankenPHP (Caddy + PHP 8.5 ZTS)
  ├── HTTP/2, HTTP/3, zstd/br/gzip
  ├── OPcache, worker-ready
  └── Serves :8080

/wp/                              WordPress root
├── wp-config.php                 Auto-generated, domain-agnostic, SQLite
└── wp-content/
    ├── database/.ht.sqlite       SQLite database (mountable)
    ├── uploads/                  Media (mountable)
    ├── plugins/                  User plugins + symlinks to /opt
    ├── themes/                   User themes + symlink to /opt
    ├── db.php                    SQLite drop-in (auto-created)
    └── mu-plugins/               REST API config (recreated on boot)

/opt/elementor-stack/             Baked into image, immune to mounts
├── sqlite-database-integration/
├── elementor/
├── pro-elements/
└── hello-elementor/

License

BSL-1.1 — free to use for any purpose. Cannot be resold as a separate product without commercial license.

Tag summary

Content type

Image

Digest

sha256:a5d3a8666

Size

111.3 MB

Last updated

about 1 month ago

docker pull juslintek/wp-sqlite-elementor-server:elementor