Docker Installation
The easiest way to deploy the L402 Nginx module is with our official Docker images.
docker pull ghcr.io/dhananjaypurohit/ngx_l402:latest
Quick Start Examples
1. LNURL Backend (Simplest Setup)
docker run -d \
--name l402-nginx \
-p 8000:8000 \
-e LN_CLIENT_TYPE=LNURL \
-e LNURL_ADDRESS=username@your-lnurl-server.com \
-e ROOT_KEY=your-32-byte-hex-key \
ghcr.io/dhananjaypurohit/ngx_l402:latest
2. LND Backend with Cashu Support
mkdir -p ~/l402-data
cp ~/.lnd/data/chain/bitcoin/mainnet/admin.macaroon ~/l402-data/
cp ~/.lnd/tls.cert ~/l402-data/
docker run -d \
--name l402-nginx \
-p 8000:8000 \
-e LN_CLIENT_TYPE=LND \
-e LND_ADDRESS=your-lnd-ip:10009 \
-e MACAROON_FILE_PATH=/app/data/admin.macaroon \
-e CERT_FILE_PATH=/app/data/tls.cert \
-e CASHU_ECASH_SUPPORT=true \
-e CASHU_WALLET_SECRET=your-32-byte-hex-secret \
-e CASHU_DB_PATH=/app/data/cashu_tokens.db \
-e CASHU_WHITELISTED_MINTS=https://mint1.example.com,https://mint2.example.com \
-e CASHU_REDEEM_ON_LIGHTNING=true \
-e REDIS_URL=redis://redis:6379 \
-v ~/l402-data:/app/data \
ghcr.io/dhananjaypurohit/ngx_l402:latest
3. LND via Lightning Node Connect (LNC)
# Generate a pairing phrase from Lightning Terminal first:
# litcli sessions add --label="nginx-l402" --type=admin
docker run -d \
--name l402-nginx \
-p 8000:8000 \
-e LN_CLIENT_TYPE=LND \
-e LNC_PAIRING_PHRASE="word1 word2 word3 word4 word5 word6 word7 word8 word9 word10" \
-e LNC_MAILBOX_SERVER=mailbox.terminal.lightning.today:443 \
-e ROOT_KEY=your-32-byte-hex-key \
ghcr.io/dhananjaypurohit/ngx_l402:latest
4. CLN Backend (Core Lightning)
docker run -d \
--name l402-nginx \
-p 8000:8000 \
-e LN_CLIENT_TYPE=CLN \
-e CLN_LIGHTNING_RPC_FILE_PATH=/app/data/lightning-rpc \
-e ROOT_KEY=your-32-byte-hex-key \
-e CASHU_ECASH_SUPPORT=true \
-e CASHU_WALLET_SECRET=your-32-byte-hex-secret \
-e CASHU_DB_PATH=/app/data/cashu_tokens.db \
-v ~/.lightning/bitcoin/lightning-rpc:/app/data/lightning-rpc:ro \
ghcr.io/dhananjaypurohit/ngx_l402:latest
5. NWC Backend (Nostr Wallet Connect)
docker run -d \
--name l402-nginx \
-p 8000:8000 \
-e LN_CLIENT_TYPE=NWC \
-e NWC_URI=nostr+walletconnect://your-pubkey?relay=wss://relay.damus.io&secret=your-secret \
-e ROOT_KEY=your-32-byte-hex-key \
ghcr.io/dhananjaypurohit/ngx_l402:latest
6. High-Performance P2PK Mode (Recommended for Production)
docker run -d \
--name l402-nginx \
-p 8000:8000 \
-e LN_CLIENT_TYPE=LND \
-e LND_ADDRESS=your-lnd-ip:10009 \
-e MACAROON_FILE_PATH=/app/data/admin.macaroon \
-e CERT_FILE_PATH=/app/data/tls.cert \
-e CASHU_ECASH_SUPPORT=true \
-e CASHU_P2PK_MODE=true \
-e CASHU_P2PK_PRIVATE_KEY=your-32-byte-hex-private-key \
-e CASHU_WALLET_SECRET=your-32-byte-hex-secret \
-e CASHU_DB_PATH=/app/data/cashu_tokens.db \
-e CASHU_WHITELISTED_MINTS=https://mint1.example.com \
-e CASHU_REDEEM_ON_LIGHTNING=true \
-e REDIS_URL=redis://redis:6379 \
-v ~/l402-data:/app/data \
ghcr.io/dhananjaypurohit/ngx_l402:latest
7. BOLT12 Backend (Reusable Offers)
docker run -d \
--name l402-nginx \
-p 8000:8000 \
-e LN_CLIENT_TYPE=BOLT12 \
-e BOLT12_OFFER=lno1... \
-e CLN_LIGHTNING_RPC_FILE_PATH=/app/data/lightning-rpc \
-e ROOT_KEY=your-32-byte-hex-key \
-v ~/.lightning/bitcoin/lightning-rpc:/app/data/lightning-rpc:ro \
ghcr.io/dhananjaypurohit/ngx_l402:latest
8. Eclair Backend
docker run -d \
--name l402-nginx \
-p 8000:8000 \
-e LN_CLIENT_TYPE=ECLAIR \
-e ECLAIR_ADDRESS=http://your-eclair-node:8282 \
-e ECLAIR_PASSWORD=your-eclair-password \
-e ROOT_KEY=your-32-byte-hex-key \
ghcr.io/dhananjaypurohit/ngx_l402:latest
Generating Required Secrets
# ROOT_KEY (required for all setups)
openssl rand -hex 32
# CASHU_WALLET_SECRET (for Cashu support)
openssl rand -hex 32
# CASHU_P2PK_PRIVATE_KEY (for P2PK mode)
openssl rand -hex 32
Testing Your Setup
# Test free endpoint
curl http://localhost:8000/
# Test protected endpoint (should return 402 with L402 header)
curl -i http://localhost:8000/protected
# Check container logs
docker logs l402-nginx -f
# Stop the container
docker stop l402-nginx
Specific Versions
docker pull ghcr.io/dhananjaypurohit/ngx_l402:v1.2.3