Skip to content

l4rm4nd/MemeLord

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 

History

75 Commits
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

MemeLord

A Python Django Meme Image Board




Buy Me A Coffee

image

⭐ Features

  • Web-based meme board for images, GIFs and videos
  • Tagging with suggestions and tag-based filtering
  • Commenting system with per-user delete permissions
  • Local authentication and OIDC Single Sign-On (SSO)
  • Light and dark mode with responsive Bootstrap 5 UI
  • Drag & drop and clipboard paste for uploads
  • Media files stored on disk for easy backup and direct access
  • Infinite scroll feed with pagination fallback
  • Admin view with thumbnails, uploader info and tags
  • Support for SQLite3 and PostgreSQL as database
  • Support for various storage providers (local, S3, Dropbox, SFTP, Google/Azure Storage)

πŸ”₯ Installation

Tip

Please refer to the wiki for more details.

# create volume dirs for persistence
mkdir -p ./volume-data/database ./volume-data/media 

# adjust volume ownership to www-data (33)
sudo chown -R 33:33 volume-data/*

# spawn the stack
docker compose -f docker/docker-compose.yml up -d

# retrieve login credentials from container logs
docker compose -f docker/docker-compose.yml logs -f

🌏 Environment Variables

Tip

Please refer to the env.example for more details.

MemeLord is configured using various environment variables:

Variable Description Default Optional/Mandatory
DOMAIN Your Fully Qualified Domain Name (FQDN) or IP address. Used to define ALLOWED_HOSTS and CSRF_TRUSTED_ORIGINS for the Django framework. May define multiple ones by using a comma as delimiter. localhost Mandatory
DEBUG Set to True to enable Django debug mode. Should be False in production environments. False Optional
DJANGO_LOG_LEVEL Django logging level. Options: DEBUG, INFO, WARNING, ERROR, CRITICAL. INFO Optional
SECURE_COOKIES Set to True if you use a reverse proxy with TLS. Enables the secure cookie flag and HSTS HTTP response header, which will only work for SSL/TLS encrypted communication channels (HTTPS). False Optional
SESSION_EXPIRE_AT_BROWSER_CLOSE Set to False if you want to keep sessions valid after browser close. True Optional
SESSION_COOKIE_AGE Define the maximum cookie age in minutes. 30 Optional
SECRET_KEY Defines a fixed secret key for the Django framework. If missing, a secure secret is auto-generated on the server-side each time the container starts. <auto-generated> Optional
PORT Defines a custom port. Used to set CSRF_TRUSTED_ORIGINS in conjunction with the DOMAIN environment variable for the Django framework. Only necessary, if VoucherVault is operated on a different port than 8000, 80 or 443. 8000 Optional
TZ Defines the TIME_ZONE variable in Django's settings.py. Europe/Berlin Optional
MAX_UPLOAD_SIZE_MB Maximum file upload size in megabytes. 10 Optional
OIDC_ENABLED Set to True to enable OIDC authentication. False Optional
OIDC_AUTOLOGIN Set to True if you want to automatically trigger OIDC flow on login page False Optional
OIDC_CREATE_USER Set to True to allow the creation of new users through OIDC. True Optional
OIDC_RP_SIGN_ALGO The signing algorithm used by the OIDC provider (e.g., RS256, HS256). HS256 Optional
OIDC_RP_IDP_SIGN_KEY The signing key used by the OIDC provider. If RS256 signing algo is used, either this or OIDC_OP_JWKS_ENDPOINT must be defined. None Optional
OIDC_OP_JWKS_ENDPOINT URL of the JWKS endpoint for the OIDC provider. If RS256 signing algo is used, either this or OIDC_RP_IDP_SIGN_KEY must be defined. None Optional
OIDC_RP_CLIENT_ID Client ID for your OIDC RP. None Optional
OIDC_RP_CLIENT_SECRET Client secret for your OIDC RP. None Optional
OIDC_OP_AUTHORIZATION_ENDPOINT Authorization endpoint URL of the OIDC provider. None Optional
OIDC_OP_TOKEN_ENDPOINT Token endpoint URL of the OIDC provider. None Optional
OIDC_OP_USER_ENDPOINT User info endpoint URL of the OIDC provider. None Optional
OIDC_RENEW_ID_TOKEN_EXPIRY_SECONDS The length of time it takes for an id token to expire in seconds. 900 Optional
DB_ENGINE Database engine to use (e.g., postgres for PostgreSQL or sqlite3 for SQLite3). sqlite3 Optional
POSTGRES_HOST Hostname for the PostgreSQL database. db Optional
POSTGRES_PORT Port number for the PostgreSQL database. 5432 Optional
POSTGRES_USER PostgreSQL database user. memelord Optional
POSTGRES_PASSWORD PostgreSQL database password. memelord Optional
POSTGRES_DB PostgreSQL database name. memelord Optional
MAX_UPLOAD_SIZE_MB Maximum file upload size in megabytes. 10 Optional
STORAGE_BACKEND Storage backend to use. Options: local, s3, azure, gcs, sftp, dropbox. See STORAGE_BACKENDS.md for detailed configuration. local Optional
AWS_ACCESS_KEY_ID AWS/S3 access key ID (required when STORAGE_BACKEND=s3). None Optional
AWS_SECRET_ACCESS_KEY AWS/S3 secret access key (required when STORAGE_BACKEND=s3). None Optional
AWS_STORAGE_BUCKET_NAME S3 bucket name (required when STORAGE_BACKEND=s3). None Optional
AWS_S3_REGION_NAME S3 region name. us-east-1 Optional
AWS_S3_ENDPOINT_URL Custom S3 endpoint URL for S3-compatible services (MinIO, DigitalOcean Spaces, etc.). None Optional
AZURE_ACCOUNT_NAME Azure storage account name (required when STORAGE_BACKEND=azure). None Optional
AZURE_ACCOUNT_KEY Azure storage account key (required when STORAGE_BACKEND=azure). None Optional
AZURE_CONTAINER Azure blob storage container name. media Optional
GS_BUCKET_NAME Google Cloud Storage bucket name (required when STORAGE_BACKEND=gcs). None Optional
GS_PROJECT_ID Google Cloud project ID (required when STORAGE_BACKEND=gcs). None Optional
GS_CREDENTIALS Path to Google Cloud credentials JSON file (required when STORAGE_BACKEND=gcs). None Optional
SFTP_STORAGE_HOST SFTP server hostname (required when STORAGE_BACKEND=sftp). None Optional
SFTP_STORAGE_USERNAME SFTP username (required when STORAGE_BACKEND=sftp). None Optional
SFTP_STORAGE_PASSWORD SFTP password (required when STORAGE_BACKEND=sftp). None Optional
DROPBOX_OAUTH2_TOKEN Dropbox OAuth2 token (required when STORAGE_BACKEND=dropbox). None Optional
REDIS_HOST Redis server hostname for session storage and caching. When set, enables cloud-native Redis sessions. See STORAGE_BACKENDS.md for details. None Optional
REDIS_PORT Redis server port. 6379 Optional
REDIS_DB Redis database number. 0 Optional
REDIS_PASSWORD Redis server password (if authentication is enabled). None Optional

Note

For detailed storage backend configuration including all available options, please see STORAGE_BACKENDS.md.

Tip

Cloud-Native Deployments: For horizontally scaled deployments (Kubernetes, Docker Swarm, ECS, etc.), configure Redis sessions by setting REDIS_HOST to enable shared session storage across all application instances. See STORAGE_BACKENDS.md for Redis configuration examples.