ntfy/docs/develop.md
2022-03-16 22:33:23 -04:00

5 KiB

Building

!!! info These instructions are pretty rough. My apologies for that. Please help improve them my letting me know in a GitHub issue.

ntfy server

The ntfy server source code is available on GitHub. The codebase for the server consists of three components:

  • The main server and API is written in Go (so you'll need Go). Its main entrypoint is at main.go, and the meat you're likely interested in is in server.go. Notably, the server uses a SQLite library called go-sqlite3, which requires Cgo and CGO_ENABLED=1 to be set. Otherwise things will not work (see below).
  • The documentation is generated by MkDocs and Material for MkDocs, which is written in Python. You'll need Python and MkDocs (via pip) only if you want to build the docs.
  • The web app is written in React, using MUI. If you want to modify the web app, you need nodejs (for npm) to install all the 100,000 dependencies (sigh).

All of these components are built and then baked into one binary.

Requirements

  • Go (required for main server)
  • gcc (required main server, for SQLite cgo-based bindings)
  • Make (required for convenience)
  • libsqlite3/libsqlite3-dev (required for main server, for SQLite cgo-based bindings)
  • GoReleaser (required for a proper main server build)
  • Python (for pip, only to build the docs)
  • nodejs (for npm, only to build the web app)

Check out the code & install dependencies

Check out via git:

=== "via SSH" git clone git@github.com:binwiederhier/ntfy.git cd ntfy === "via HTTPS" git clone https://github.com/binwiederhier/ntfy.git cd ntfy

Then install the dependencies (this assumes Debian/Ubuntu):

sudo apt install build-essential libsqlite3-dev

To install Python/NodeJS (for docs and web app), please see instructions on their websites.

XXXXXXXXXXXXXXXXXXXXx

Quick & dirty (amd64 only)

To quickly build on amd64, you can use make build-simple:

make build-simple

That'll generate a statically linked binary in dist/ntfy_linux_amd64/ntfy. This binary will not include the docs or the web app. To include that

For all other platforms (including Docker), and for production or other snapshot builds, you should use the amazingly awesome GoReleaser make targets:

Build:
  make build                       - Build
  make build-snapshot              - Build snapshot
  make build-simple                - Build (using go build, without goreleaser)
  make clean                       - Clean build folder

Releasing (requires goreleaser):
  make release                     - Create a release
  make release-snapshot            - Create a test release

There are currently no platform-specific make targets, so they will build for all platforms (which may take a while).

Android app

The ntfy Android app source code is available on GitHub. The Android app has two flavors:

  • Google Play: The play flavor includes Firebase (FCM) and requires a Firebase account
  • F-Droid: The fdroid flavor does not include Firebase or Google dependencies

First check out the repository:

git clone git@github.com:binwiederhier/ntfy-android.git   # or: https://github.com/binwiederhier/ntfy-android.git
cd ntfy-android

Then either follow the steps for building with or without Firebase.

Building without Firebase (F-Droid flavor)

Without Firebase, you may want to still change the default app_base_url in strings.xml if you're self-hosting the server. Then run:

# To build an unsigned .apk (app/build/outputs/apk/fdroid/*.apk)
./gradlew assembleFdroidRelease

# To build a bundle .aab (app/fdroid/release/*.aab)
./gradlew bundleFdroidRelease

Building with Firebase (FCM, Google Play flavor)

To build your own version with Firebase, you must:

  • Create a Firebase/FCM account
  • Place your account file at app/google-services.json
  • And change app_base_url in strings.xml
  • Then run:
# To build an unsigned .apk (app/build/outputs/apk/play/*.apk)
./gradlew assemblePlayRelease

# To build a bundle .aab (app/play/release/*.aab)
./gradlew bundlePlayRelease