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