-
Notifications
You must be signed in to change notification settings - Fork 0
Troubleshooting
Common issues and solutions for SIGNula.
Symptom: "Could not connect to database" error
Solutions:
- Verify credentials in
web/_config/config.php - Ensure MySQL is running:
systemctl status mysql - Check the user has permissions:
GRANT ALL ON signula_db.* TO 'signula_user'@'localhost'; - Verify the database exists:
SHOW DATABASES LIKE 'signula_db'; - If using a socket: check
DB_HOSTis set tolocalhost(not127.0.0.1)
Symptom: SQL errors when running migration files
Solutions:
- Check which migrations have been applied:
SELECT * FROM tblMigrations ORDER BY appliedAt; - Run migrations in order (001, 002, ... 013)
- If ENUM modification fails, the value may already exist - this is safe to skip
- Check MySQL version compatibility (8.0+ required)
Symptom: Empty page with no content
Solutions:
- Enable debug mode: add
?debug=trueto the URL - Check PHP error log:
tail -f /var/log/php_errors.log - Verify PHP extensions are loaded:
php -m | grep -i mysqli - Check file permissions on
web/private_html/ - Ensure
SIGNULA_INITconstant is being defined by the entry point
Symptom: Correct credentials but login fails
Solutions:
- Check
tblActivityLogfor the login attempt:SELECT * FROM tblActivityLog WHERE eventType = 'login_failed' ORDER BY createdAt DESC LIMIT 5; - Verify the account isn't locked (too many failed attempts)
- Check session configuration in
tblSettings - Ensure cookies are being set (check browser dev tools)
- Verify HTTPS is working (sessions require secure cookies)
Symptom: TOTP codes from authenticator app are rejected
Solutions:
- Check server time is synchronised (NTP):
timedatectl status - TOTP is time-sensitive; a 30-second drift will cause failures
- Try the next code (codes rotate every 30 seconds)
- Use a backup code if available
- Admin can disable MFA for the user in Admin > Users
Symptom: "Error during OAuth authentication" message
Solutions:
- Verify OAuth credentials in Admin > System > OAuth Providers
- Check the redirect URI matches exactly what's configured with the provider
- Ensure the OAuth app is approved/published (not in test mode with user limits)
- Check
tblActivityLogfor detailed error messages - Verify DNS and SSL are correct for your domain
Symptom: WebAuthn registration or authentication fails
Solutions:
- Ensure HTTPS is active (WebAuthn requires secure context)
- Check
webauthn.rp_idmatches your domain exactly - Verify the browser supports WebAuthn (modern Chrome, Firefox, Safari, Edge)
- Try a different authenticator (platform vs roaming)
- Clear browser credential cache and re-register
Symptom: Payments aren't being recorded after completion
Solutions:
- Check webhook URL is accessible from the internet (not behind auth)
- Verify webhook secret/token is correct in SIGNula settings
- Check Admin > Payments > Webhooks for logged incoming requests
- Verify the provider's webhook is enabled and pointing to the correct URL:
- Stripe:
https://signulo.id/webhooks/stripe - PayPal:
https://signulo.id/webhooks/paypal - Coinbase:
https://signulo.id/webhooks/coinbase - Ko-fi:
https://signulo.id/webhooks/kofi - Patreon:
https://signulo.id/webhooks/patreon
- Stripe:
- Test with the provider's webhook testing tool (Stripe CLI, PayPal sandbox)
Symptom: 401 response to webhook, "Invalid signature" in logs
Solutions:
- Regenerate the webhook secret and update both sides
- For Stripe: ensure you're using the endpoint-specific signing secret (not the API key)
- For Ko-fi: the verification token is in the payload body, not a header
- For Patreon: uses HMAC-MD5 (not SHA256)
- Ensure no middleware/proxy is modifying the request body
Symptom: Webhook received and logged, but user tier/access not updated
Solutions:
- Check if the user email in the payment matches a
tblUsersemail - Review the webhook log entry status in
tblInboundWebhooks - Check
tblActivityLogfor payment processing errors - Verify
PaymentManager::completePayment()was called successfully
Symptom: API returns 401 on authenticated endpoints
Solutions:
- Check API key format: must start with
sk_live_orsk_test_ - Verify key hasn't been revoked in Partner Dashboard
- If using Bearer token, check it hasn't expired
- Ensure the
X-API-Keyheader (notAuthorization) is used for API key auth - Check IP whitelist restrictions on the API key
Symptom: Rate limit exceeded
Solutions:
- Check
X-RateLimit-Remainingheader for current quota - Wait until
X-RateLimit-Resettimestamp - Implement exponential backoff in your client
- Request a rate limit increase via the Partner Dashboard
- Cache responses where possible to reduce API calls
Symptom: Browser blocks API requests with CORS error
Solutions:
- Add your domain to the allowed origins in Admin > System > CORS Settings
- Ensure preflight
OPTIONSrequests are handled - Check that
Access-Control-Allow-Originheader is present in responses - For development, temporarily allow
localhostorigins
Symptom: Email queue grows but emails don't deliver
Solutions:
- Check SMTP credentials in Admin > System > Email Settings
- Verify SMTP port is correct (587 for TLS, 465 for SSL)
- Check if the SMTP server requires app-specific passwords (Gmail, Microsoft)
- Review
tblEmailQueuefor error messages:SELECT * FROM tblEmailQueue WHERE status = 'failed' ORDER BY createdAt DESC LIMIT 10; - Test SMTP connection from server:
telnet smtp.server.com 587
Symptom: OAuth-connected email account fails to send
Solutions:
- Check token status in Settings > Email Accounts
- If token is expired, disconnect and reconnect the account
- Verify OAuth permissions include
Mail.Send(Microsoft) or Gmail send scope - Check
tblUserOAuthTokensfor token expiry dates
Solutions:
- Enable PHP opcode caching (APCu/OPcache)
- Add database indexes for frequently queried columns
- Enable gzip compression in web server config
- Use a CDN for static assets (Bootstrap, FontAwesome)
- Check
tblActivityLogsize - archive old entries periodically
Solutions:
- Review MySQL slow query log
- Optimise tables:
OPTIMIZE TABLE tblActivityLog; - Archive old records from
tblActivityLog,tblEmailQueue,tblInboundWebhooks - Add missing indexes identified in slow query log
- Consider read replicas for high-traffic deployments
Via URL (temporary):
https://signulo.id/page?debug=true
Via database (persistent):
UPDATE tblSettings SET settingValue = '1' WHERE settingKey = 'app.debug';- Detailed PHP error messages
- SQL query logging
- Request/response headers
- Backtrace information
Warning: Never enable debug mode in production. It exposes sensitive information.
- GitHub Issues: Report a bug
- Security Issues: SECURITY.md
- Documentation: Full docs index
Copyright 2025-2026 MWBM Partners Ltd (t/a MWservices). All rights reserved.
Setup
Integration
Operations
External Links