Install on Coolify
Add Bekci to Coolify v4 as a Docker image and let Coolify handle the domain, the HTTPS certificate and updates.
On this page
- Before you start
- 1. Create a new resource
- 2. Set the port
- 3. Add the domain
- 4. Add persistent storage
- 5. Add environment variables
- 6. Leave the health check alone
- 7. Deploy
- With PostgreSQL
- Updating
- Common problems
- The page shows “no available server” or 404
- The setup screen appears after every deployment
- The update is rolled back as “unhealthy”
- The container stops with “permission denied”
If your server runs Coolify, adding Bekci as a Docker Image resource is the easiest path. Coolify's own proxy (Traefik) takes care of the domain, the HTTPS certificate and routing. Total time: about 5 minutes.
Before you start#
- You need a project and a server (destination) in Coolify.
- The A record of the domain you'll use for Bekci (e.g.
bekci.example.com) must point to the Coolify server's IP address (how to add a DNS record).
1. Create a new resource#
- In Coolify, open your project and environment (e.g. production).
- Click New resource (in some versions + New or + Add Resource).
- Choose Docker Image from the list.
- Enter the image:
kadirsungurlu/bekciin Image name andlatestin Tag. (If there's only one field:kadirsungurlu/bekci:latest.) To pin a specific version, use1.0.0instead oflatest(version tags). - Pick the server if asked and save with Create application (or Save).
2. Set the port#
In General, enter 8080 in Ports Exposes (remove any other value). Bekci listens on port 8080 inside the container, and Coolify's proxy forwards traffic to it. Leave Port mappings empty.
3. Add the domain#
Enter your domain including https://: https://bekci.example.com
- In newer Coolify versions this happens on a separate Domains page (Add domain button).
- In older versions it goes into the Domains field under General.
With https:// in front, Coolify obtains the Let's Encrypt certificate itself.
4. Add persistent storage#
- Open Persistent Storage.
- Add a new volume (Add volume mount; in older versions + Add → Volume).
- Name:
bekci-data(any name you like), Destination Path:/data. - Save.
If you'd rather mount a folder on the server (directory mount) instead of a volume, that folder must be owned by uid 1000: chown 1000:1000 /path/to/folder. Bekci runs as a non-root user and can't write to a folder owned by someone else.
5. Add environment variables#
Under Environment Variables add:
BASE_URL=https://bekci.example.com
TZ=Europe/IstanbulBASE_URL must match the domain from step 3: links in notifications and server agent install commands use it. Set TZ to your time zone (e.g. Europe/Berlin, UTC). Other options: Environment variables.
6. Leave the health check alone#
Leave Coolify's health check under Healthcheck disabled (the default). The Bekci image has its own health check, designed to work correctly during updates.
7. Deploy#
Click Deploy at the top right. Coolify pulls the image and starts the container.
With PostgreSQL#
The default SQLite is enough for most installs (which database?). If you want PostgreSQL, there are two ways:
Embedded PostgreSQL
The easiest: in step 1 use the tag postgres instead of latest (for a fixed version 1.0.0-postgres). PostgreSQL 18 runs inside the same container; the database still lives in the /data volume and nightly backups go to /data/backups. All other steps are the same. It uses roughly 200 MB of extra memory.
PostgreSQL in Coolify
In the same project create a database with New resource → PostgreSQL and start it.
On the database's page, copy the internal connection URL (shown with a name such as Postgres URL (internal)). It looks like
postgres://user:password@…:5432/….Add it to the Bekci application's Environment Variables:
Environment VariablesDATABASE_URL=the-internal-url-you-copiedThe value looks like
postgres://postgres:…@…:5432/postgres.Keep the tag
latest(the SQLite image); withDATABASE_URLset, this image connects to PostgreSQL. Redeploy with Deploy.
Bekci and the database must be on the same Coolify server (the internal URL only works there). In this setup Bekci does not take nightly backups; schedule them under Backups on the database's page.
Updating#
- With the
latesttag: click Redeploy (or Deploy) on the application's page; Coolify pulls the newest image and replaces the container. - With a fixed version (e.g.
1.0.0): change the tag to the new version and deploy.
During an update it's normal to see this line in the new container's log for a while (“the data folder is open in another instance; waiting until it closes”). As soon as the old container stops, the new one takes over within a second or two, so two copies never run checks or send notifications twice:
level=WARN msg="veri klasörü başka bir örnekte açık; o kapanana kadar bekleniyor" kilit=/data/uptime.db.lock en_fazla=10m0sDon't forget to back up before updating: Updates, backups and rollback.
Common problems#
The page shows “no available server” or 404#
Coolify's proxy can't reach Bekci. Check that Ports Exposes is 8080 and that the domain was entered with https://, then redeploy.
The setup screen appears after every deployment#
Persistent storage is missing or its destination is wrong. Make sure the destination under Persistent Storage is exactly /data (step 4).
The update is rolled back as “unhealthy”#
Coolify's health check is enabled; disable it as in step 6 and redeploy.
The container stops with “permission denied”#
The log shows a line like this (“could not open the database: could not open the lock file”):
hata: veritabanı açılamadı: kilit dosyası açılamadı: open /data/uptime.db.lock: permission deniedYou mounted a folder from the server that isn't owned by uid 1000: fix it with chown -R 1000:1000 /path/to/folder and redeploy.
Something missing or wrong on this page? Report it on GitHub or email [email protected]