User Manual · 12 · Troubleshooting
WholeReach — Automated Marketing System

Troubleshooting & Recovery

Known gotchas with fixes, health checks, log locations, recovery runbooks, and a plain-English FAQ.

Known gotchas & fixes

SymptomCauseFix
Hub shows 502 on /api; backend crash-loopsThe scheduler (Temporal) isn't reachableEnsure the temporal container is up; it must start before Postiz settles.
Login bounces back to sign-inAccessed over plain httpAlways use https://postiz.wholetech.com — the cookie needs HTTPS.
Portal returns "database is locked" / 502Two connections writing at onceAlready fixed: state is committed before the audit log writes. Don't re-introduce a second open connection mid-write.
New subfolder 301-redirect loopsMissing nginx location for the pathAdd an explicit location ^~ /path/ block.
Files copied but site 404sPermissions after a recursive copychmod -R a+rX the copied directory.
Facebook: “Could not add provider” or 409 “Page not found in your accounts”The Meta app secret was truncated when copiedThe secret is 32 hex characters — count them. A token exchange replying “Error validating client secret” confirms it.
Facebook: “Invalid Scopes”Permission not added to the app's Pages use caseMeta app console → Use cases → Pages → add each permission explicitly.
Facebook: “domain isn't included in the app's domains”App Domains field empty, or typed text never became a chipAdd postiz.wholetech.com and click the dropdown suggestion so it saves as a chip.
Facebook authorization fails for a second accountApp is in Development mode; only app roles may authorizeAdd that account as a Tester under App roles, and accept the invite.
“Why won't it post to my personal Facebook profile?”Not a bug — Meta provides no API for personal profilesNothing to fix. Automate a Page; profiles must be posted by hand. See Facebook.
A network is connected but nothing ever posts to itConnected is not the same as publishing. Each network needs a publisher function in publish_due.py; a channel with no publisher is silently skippedLook for (channel <name> not wired yet) in the log. Adding the channel to a tenant is not enough on its own.
A Page reports no linked Instagram account, but you know there is oneThe token lacks instagram_basic, so the API omits the field instead of erroringRe-authorize with that permission, then check again. See Instagram.
Instagram posts fail every timeThe post is text-onlyNot fixable by configuration — Instagram requires an image or video on every post. Keep Instagram out of the channel list until an image pipeline exists.
Posts stopped going to XDaily cost cap reached, or X credit emptyExpected if capped; otherwise top up X credit. Bluesky keeps posting.
Feed looks staleNightly feed build didn't run/shipCheck /var/log/social-feed.log; re-run gen-social-feed.py.

Health checks

# hub services
ssh root@64.227.29.192 docker ps

# is the site up?
curl -I https://postiz.wholetech.com

# what published recently
ssh root@64.227.29.192 tail /var/log/portal-pub.log

Recovery runbooks

After a server reboot

The Docker services restart automatically; the cron jobs resume on schedule. Verify with the health checks above.

If posting misbehaves

Hit the kill switch, diagnose from the logs, then resume.

If the hub is lost

Follow Backup & disaster recovery to rebuild from the nightly backup.

FAQ

Does it post without me? Yes — that's the point. You can switch any tenant to require approval if you'd rather review first.

Will it ever make up a fact? No. Missing facts produce a held post, never a guess.

What does it cost to run? $24/month for the hub, plus pennies for X if you post there. Everything else is free.

Can I manage clients on it right now? Yes — see Managing Clients. Each client is a tenant with their own accounts and settings.

How do I stop everything fast? The kill switch — one command.

Which networks are live today? X, Bluesky and Facebook all publish automatically — Facebook to both Pages, at no cost. Instagram is connected but idle because it cannot accept text-only posts. Mastodon and LinkedIn are still unconnected.

Why is Instagram connected if it is not being used? Because connecting it was cheap and proves the path works. Making it useful needs an image pipeline — templated graphics for each post — which would also lift Facebook and X, since image posts outperform text everywhere. That is a real build, and a separate decision. See Instagram.

Can it post to my personal Facebook profile? No — and neither can any other tool. Meta removed that API years ago. Pages can be automated; personal profiles have to be posted by hand. See Facebook.

Do the Facebook connections expire? No. The stored Page tokens are derived from a long-lived user token and never expire, so there is no reconnection cycle to remember.