Run PocketBase on fly.io
First set up fly.io. See run an app on fly.io.
Create an empty folder, add this Dockerfile (update the PB_VERSION value to the latest version of PocketBase available):
FROM ubuntu:latest
ARG PB_VERSION=0.20.4
RUN apk add --no-cache \
unzip \
ca-certificates
# download and unzip PocketBase
ADD https://github.com/pocketbase/pocketbase/releases/download/v${PB_VERSION}/pocketbase_${PB_VERSION}_linux_amd64.zip /tmp/pb.zip
RUN unzip /tmp/pb.zip -d /pb/
# uncomment to copy the local pb_migrations dir into the image
# COPY ./pb_migrations /pb/pb_migrations
# uncomment to copy the local pb_hooks dir into the image
# COPY ./pb_hooks /pb/pb_hooks
EXPOSE 8080
# start PocketBase
CMD ["/pb/pocketbase", "serve", "--http=0.0.0.0:8080"]
Run fly launch --build-only
to create and build the app but not deploy it, as we need to attach a volume to persist data across deploys (but first we need to initialize it and the fly.toml
file)
Run fly volumes create pb_data --size=1
to create the volume. Create it in the same region of the app
Now in fly.toml
add:
[mounts]
destination = "/pb/pb_data"
source = "pb_data"
Now run fly deploy --ha=false
Pocketbase will be available at https://<yourapp>.fly.dev/_/
Only problem I had was internal connection URLs (.internal) in Fly, I haven’t found a way to make both IPv4 (used for external connection) work alongside IPv6 (used for internal connections), so in my app (also in Fly) I used external URL (hope to fix).
→ I wrote 17 books to help you become a better developer:
- C Handbook
- Command Line Handbook
- CSS Handbook
- Express Handbook
- Git Cheat Sheet
- Go Handbook
- HTML Handbook
- JS Handbook
- Laravel Handbook
- Next.js Handbook
- Node.js Handbook
- PHP Handbook
- Python Handbook
- React Handbook
- SQL Handbook
- Svelte Handbook
- Swift Handbook
Also, JOIN MY CODING BOOTCAMP, an amazing cohort course that will be a huge step up in your coding career - covering React, Next.js - next edition February 2025