PocketBase
Сегодня я расскажу о Pocketbase и о том, как разработать бэкенд с помощью этого инструмента.
Pocketbase — это бэкенд с открытым исходным кодом, который распространяется в виде одного бинарного файла Go. Этот новый инструмент похож на Firebase.
Этот проект создан для использования SQLite в качестве базы данных с REST api. Некоторые из функций, которые интегрирует этот инструмент, следующие:
- База данных в реальном времени (на основе SQLite)
- Файловое хранилище: интегрируется с S3, в ближайшее время будет добавлена поддержка объектных хранилищ.
- Autenticación
- Полнофункциональный пользовательский интерфейс администратора — для управления пользователями, коллекциями и т.д.
- Расширяемость с помощью языка программирования Go для расширения функциональности
Этот инструмент идеально подходит для создания простых бэкендов для небольших проектов, хобби, практики и многого другого.
Требования
Вы должны обладать знаниями по следующим темам:
- Docker
- Веб-разработка
- Linux
Шаг 1: Создайте образ с помощью Docker
Если вы хотите сэкономить время, вы можете использовать мой образ Docker, для этого перейдите к шагу 2.
Первым делом необходимо создать образ с помощью Docker, для этого сначала нужно установить его, затем открыть терминал.
Сначала создадим папку, в которой будет храниться наш проект:
~$ mkdir pocketbase-docker
~$ cd pocketbase-docker
Затем мы создадим наш Dockerfile
, для этого мы можем открыть наш любимый редактор, в моем случае vscode, и уже в нем мы создадим файл и добавим следующее:
FROM alpine:3 as downloader
ARG TARGETOS
ARG TARGETARCH
ARG VERSION=0.2.8
ENV BUILDX_ARCH="${TARGETOS:-linux}_${TARGETARCH:-amd64}"
# Install the dependencies
RUN apk add --no-cache
ca-certificates
unzip
wget
zip
zlib-dev
RUN wget https://github.com/pocketbase/pocketbase/releases/download/v${VERSION}/pocketbase_${VERSION}_${BUILDX_ARCH}.zip
&& unzip pocketbase_${VERSION}_${BUILDX_ARCH}.zip
&& chmod +x /pocketbase
FROM scratch
EXPOSE 8090
COPY --from=downloader /pocketbase /usr/local/bin/pocketbase
CMD ["/usr/local/bin/pocketbase", "serve", "--http=0.0.0.0:8090"]
Хорошо, как только мы это сделали, давайте вернемся к терминалу, чтобы создать наш образ Docker:
# We must be in the terminal positioned in the folder where we have our Dockerfile
~$ docker build -t pocketbase .
После этого мы можем протестировать образ, чтобы убедиться, что он работает, для этого выполните следующую команду:
# You need to make sure you have the '-it' flag and expose the port
~$ docker run -it --rm -p 8090:8090 pocketbase
Если все прошло успешно, вы можете открыть браузер на localhost:8090/_/
и увидеть панель администратора pocketbase.
Теперь, когда мы убедились, что все работает, мы собираемся опубликовать наш образ в нашем аккаунте docker, если у вас его нет, я рекомендую вам создать его и войти в него с терминала, выполнив следующую команду:
~$ docker login -u <your-username> -p <your-password>
Теперь давайте развернем наш образ:
# We must add a tag to our image before deploying, for simplicity I will leave it as 'latest'
~$ docker tag pocketbase:latest <your-docker-user>/pocketbase:latest
# Now let's roll out
~$ docker push <your-docker-user>/pocketbase:latest
После этого вы загрузили образ в docker 😎
Шаг 2: Развертывание нашего образа Docker на fly.io
Для этого, прежде всего, необходимо установить fly.io в нашей операционной системе, затем я оставлю вам команды для каждой операционной системы:
# Windows:
~$ iwr https://fly.io/install.ps1 -useb | iex
# Linux
~$ curl -L https://fly.io/install.sh | sh
# Mac
~$ brew install flyctl
# or
~$ curl -L https://fly.io/install.sh | sh
Позже вам нужно будет зарегистрироваться, для этого вы можете выполнить следующую команду в терминале:
~$ flyctl auth signup
Эта команда откроет окно в браузере, где вы сможете зарегистрироваться, а затем попросит вас ввести способ оплаты, не волнуйтесь, Fly не возьмет с вас денег, если только ваше приложение не превысит установленный бесплатный лимит, а для целей данного руководства это поможет вам совершенствоваться.
Теперь вам нужно войти в систему:
~$ flyctl auth login
После того, как вы вошли в систему, переходим к развертыванию:
Для этого нам понадобится наш образ Docker, который мы развернули.
Сначала мы должны создать необходимый файл для развертывания, но в моем случае я позволю Fly создать его для меня, для этого в терминале мы выполним следующую команду:
~$ flyctl launch --image <your-docker-user>/pocketbase:latest
# if you decided to use my image you can copy the following command:
~$ flyctl launch --image marcoa16b/pocketbase:latest
На этом этапе fly задаст нам пару вопросов, мы дадим нашему проекту имя и выберем регион для нашего сервера.
Очень хорошо, с этим у нас будет наш файл fly.toml
, мы должны внести некоторые изменения в этот файл, так как нам нужно раскрыть порт контейнера Docker, чтобы мы могли получить доступ к нему из домена, который fly создаст для нас, для этого мы изменим следующее:
...
[experimental]
allowed_public_ports = [8090]
...
...
[[services]]
...
internal_port = 8090
[[services.ports]]
handlers = ["http"]
port = 8090
...
Остальное можно оставить как есть.
После того, как вы изменили эти порты, вы можете запустить flyctl deploy
и если вы получите следующий результат, то все в порядке:
1 desired, 1 placed, 1 healthy, 0 unhealthy [health checks: 1 total, 1 passing]
--> v0 deployed successfully
Теперь вы можете перейти на страницу fly.io и убедиться, что у вас там есть ваш проект, когда вы откроете ее, у вас появится ссылка на ваш проект, и при первом открытии по адресу yourproject.fly.dev/_/
вы сможете создать своего пользователя-администратора и войти в систему, чтобы начать управлять вашим бэкендом.
В той же панели администратора pocketbase вы сможете найти простую, но очень полную документацию, чтобы иметь возможность использовать этот инструмент в своих Javascript проектах.
Если вы видите какие-либо ошибки в коде или у вас есть предложения по улучшению проекта, не стесняйтесь оставить свой комментарий.
Если все прошло хорошо и вам удалось создать свой бэкенд с помощью pocketbase и Docker, я поздравляю вас и благодарю за прочтение этого руководства. 😁🎉
Не забывайте следить за мной в моих социальных сетях, скоро я начну публиковать больше контента в большинстве из них, также так вы сможете узнать о моих новых руководствах и проектах.👍
Github
Twitter