Install Buuck on a VPS
Buuck runs on your own server. This page tells you how to install Buuck on a VPS with the installer.
Do the steps in the given sequence. The installation needs about 15 minutes after your DNS records are ready.
What you install
Section titled “What you install”Buuck has three applications and five support services. Docker Compose starts all of them together.
| Service | Function | Port |
|---|---|---|
booking |
The public page. Your customers make their bookings here. | 3002 |
dashboard |
The private page. Your staff manage the bookings here. | 3001 |
server |
The API. The two applications get their data from the API. | 3000 |
db-migrate |
One-time setup. It creates the database users and the database tables. | — |
postgres |
The database. The database keeps all of your data. | 5432 |
cache |
The cache. The cache makes the API faster. | 6379 |
caddy |
The reverse proxy. It also gets the TLS certificates. | 80, 443 |
dozzle |
The log viewer. You can read the messages of the other services here. | 8080 |
Only the reverse proxy is open to the internet. The other services are on a private Docker network.
Before you start
Section titled “Before you start”You need these items:
- A VPS with 2 CPU cores, 4 GB of RAM and 20 GB of free disk space.
- A 64-bit x86 processor. The Buuck images do not run on an ARM processor.
- A Linux operating system. We test Buuck on Ubuntu 24.04.
- Root access to the VPS, or a user account with
sudorights. - A domain name. You must be able to add records to its DNS zone.
- The registry user name and your license key. We send them to you in an email.
- The version number of your Buuck release. The same email gives you this number.
- An SMTP account. Buuck sends the booking emails with this account.
This page uses example.com for the domain name. Replace example.com with your own domain name.
Step 1: Add the DNS records
Section titled “Step 1: Add the DNS records”Buuck uses four subdomains. Add one DNS A record for each subdomain. Each record points to the IP address of your VPS.
| Record | Example | Service |
|---|---|---|
api |
api.example.com |
the server |
admin |
admin.example.com |
the dashboard |
book |
book.example.com |
the booking page |
logs |
logs.example.com |
the log viewer |
If your DNS provider has a proxy function, switch the proxy off. The reverse proxy on your VPS must get the requests directly.
Check one record before you continue:
dig +short api.example.comThe command shows the IP address of your VPS. If the command shows no address, wait 10 minutes. Then do the check again.
Step 2: Run the installer
Section titled “Step 2: Run the installer”Connect to your VPS:
ssh root@YOUR-SERVER-IPDownload the installer. Then run it as root:
curl -fsSL https://get.buuck.io/install.sh -o install.shsudo bash install.shThe installer asks for these values from your purchase email and from your own setup:
- Registry user name (it starts with
robot$) - License key
- Buuck version (for example
v0.0.1) - API domain (for example
api.example.com) - Dashboard domain (for example
admin.example.com) - Booking domain (for example
book.example.com) - Logs domain (for example
logs.example.com) - Email address for TLS certificate notices
- Email provider (usually
smtp) - From address for booking emails
- SMTP host, port, user, password and secure setting
Then the installer shows a summary. Type y to continue.
The installer then does this work for you:
- Installs Docker Engine and Docker Compose if they are missing.
- Can open ports 22, 80 and 443 with
ufwif you say yes. - Checks your DNS records.
- Creates
/opt/buuckwithcompose.yaml,Caddyfile,.envanddozzle-users.yml. - Generates the database passwords, the cache password, the auth secret and the log viewer password.
- Logs in to the Buuck registry.
- Pulls the images and starts Buuck.
- Waits until the API answers over HTTPS.
The first start needs about 2 to 3 minutes. The reverse proxy also gets the TLS certificates in this time.
Step 3: Check the installation
Section titled “Step 3: Check the installation”Look at the status of the services:
cd /opt/buuckdocker compose psThe db-migrate service shows the status exited (0). This status is correct. The service runs one time only. All of the other services show the status running or healthy.
Send a request to the API:
curl -i https://api.example.comThe API answers with 200 OK and the text OK.
Then open these three addresses in a browser:
https://admin.example.comshows the login page of the dashboard.https://book.example.comshows the booking page.https://logs.example.comshows the log viewer. Sign in asadmin. The password isDOZZLE_PASSWORDin/opt/buuck/.env.
The browser must show a valid certificate for each address. If a page does not open, read the Problems section.
Step 4: Make the first account
Section titled “Step 4: Make the first account”- Open
https://admin.example.comin a browser. - Select Sign up.
- Give your name, your email address and a password.
- Select New organization.
- Give the name of your business and a short name for the address.
The dashboard opens. You can now add your venues, your resources and your offerings.
Your customers make their bookings at https://book.example.com/YOUR-SHORT-NAME.
Keep a copy of /opt/buuck/.env on a different machine. The file holds your secrets.
Make a backup
Section titled “Make a backup”Buuck keeps all of your data in the database. Make a backup of the database each day.
Write the backup to a file:
cd /opt/buuckdocker compose exec -T postgres sh -c 'pg_dump -U "$POSTGRES_USER" "$POSTGRES_DB"' > buuck-$(date +%F).sqlAlso make a copy of your .env file. Keep both files on a different machine.
To put a backup back in the database, use this command:
docker compose exec -T postgres sh -c 'psql -U "$POSTGRES_USER" -d "$POSTGRES_DB"' < buuck-2026-01-31.sqlInstall an update
Section titled “Install an update”Your license includes all later versions. We send you an email for each new version.
Download the update script. Then run it. Do not pipe the script into bash.
curl -fsSL https://get.buuck.io/update.sh -o update.shsudo bash update.shThe script asks for the new version (for example v0.0.1) and which services to update. It changes BUUCK_VERSION in /opt/buuck/.env, pulls the new images, runs database migrations when needed, and recreates only the selected services. The database keeps your data.
The update script does not add new services. If your latest installation has missing services, run the installer again. The installer overwrites compose.yaml and the Caddyfile. It keeps the database secrets. It creates missing secrets and passwords.
To update only some services:
sudo bash update.sh --version v0.0.1 --services dashboard,bookingStop and start Buuck
Section titled “Stop and start Buuck”Stop all of the services:
cd /opt/buuckdocker compose stopStart all of the services again:
docker compose startRemove Buuck
Section titled “Remove Buuck”To remove the containers, use this command:
cd /opt/buuckdocker compose downdocker compose down --volumesProblems
Section titled “Problems”Read the messages of a service. Replace server with the name of the service:
cd /opt/buuckdocker compose logs -f server| Problem | Cause and correction |
|---|---|
The installer stops with BASH_SOURCE[0]: unbound variable or Bad substitution. |
You piped the script into bash or sh. Download install.sh first. Then run sudo bash install.sh. |
Docker shows unauthorized or denied for a pull. |
The registry user name or the license key is not correct. Run the installer again and check both values. Put the registry user name in single quotes if you type it in a shell command. |
Docker shows manifest unknown for a pull. |
The value of BUUCK_VERSION is not correct. Compare the value with your email. |
Docker shows exec format error for a service. |
The processor of your VPS is not a 64-bit x86 processor. Use a different VPS. |
| The browser shows a certificate error. | The DNS records are not correct, or a proxy is active. Also make sure that port 80 is open. |
The db-migrate service shows exited (1). |
Read the messages of the service. Then start it again with docker compose up -d db-migrate. |
| The dashboard shows a connection error. | The value of API_DOMAIN or DASHBOARD_DOMAIN in /opt/buuck/.env is not correct. Correct the value. Then run docker compose up -d --force-recreate. |
| The emails do not arrive. | The SMTP values are not correct. Read the messages of the server service. |
| A service starts again and again. | The /opt/buuck/.env file has an empty value. Run the installer again, or compare the file with a working install. |
| The log viewer page stays blank, or the messages do not update. | The reverse proxy buffers the live stream. The Caddyfile must have flush_interval -1 for the logs domain. Then run docker compose up -d --force-recreate caddy. |
| The log viewer shows a login error. | The password is DOZZLE_PASSWORD in /opt/buuck/.env. The user name is admin. |
| The log viewer does not list a Buuck service. | The viewer only shows containers from the Compose project named buuck. Check docker compose ps in /opt/buuck. |
If a problem continues, answer the email that we sent to you after you bought Buuck. Add the messages of the services to your answer.