🛑 Wenn du MoeShare bereits Installiert hast, mache eine Migration, da er nun SQLite nutzt. Dies macht mehr Sinn für solch ein Projekt.
Dies ist eine einfache Upload-API, welche auf Node.js und SQLite basiert. MoeShare ermöglicht das Hochladen und generiert verschiedene Links für den Zugriff auf die hochgeladenen Dateien.
Du bist ein Developer und siehst hier Fehler oder hast Verbesserungsvorschläge? Zögere nicht ein Issue zu öffnen bzw. eine Pull Request.
Du möchtest wissen, wie die Performence der Anwendung ist? Klicke hier.
- Hochladen von Bildern, Gifs, Videos, Audio und Dateien
- Token-basierte Authentifizierung
- Herunterladen und Löschen von Dateien
- GPS-Daten werden automatisch entfernt
- Vollständig anpassbare Discord-Einbettungen
- Integrierter Webviewer mit Bilder, Video- und Audioplayer
- Einbetten von Bildern, Gifs und Videos direkt in Discord
- Informations- und Fehler-Protokoll mit anpassbaren Discord-Webhook
- macOS/Linux-Unterstützung mit alternativen Clients wie Flameshot & MagicCap
- Liste aller Dateien
- ...
Derzeit wird die Installation mit NodeJS oder Docker unterstützt.
Erweitern für die Lokale Installation
-
Node.JS v20.X.X installation
Debian:
cd ~ && apt --assume-yes install curl && curl -sL https://deb.nodesource.com/setup_18.x -o nodesource_setup.sh && sudo bash nodesource_setup.sh && sudo apt --assume-yes install nodejs
Ubuntu:
cd ~ && apt --assume-yes install curl && curl -sL https://deb.nodesource.com/setup_18.x -o nodesource_setup.sh && sudo bash nodesource_setup.sh && sudo apt --assume-yes install nodejs
-
Klone dieses Repo mit
git clone https://github.com/maxsrl/moeshare.git && cd moeshare/
. -
Passe nun die
example.env
an. -
Nenne nun die
example.env
zu.env
um. -
Führe
npm i
aus, um die benötigten Abhängigkeiten zu installieren. -
Führe
npm run register
aus, um den ersten Nutzer zu erstellen. -
Führe
npm start
aus, um MoeShare zu starten.
Erweitern für die Lokale Installation mit PM2
-
Node.JS v20.X.X installation
Debian:
cd ~ && apt --assume-yes install curl && curl -sL https://deb.nodesource.com/setup_20.x -o nodesource_setup.sh && sudo bash nodesource_setup.sh && sudo apt --assume-yes install nodejs
Ubuntu:
cd ~ && apt --assume-yes install curl && curl -sL https://deb.nodesource.com/setup_20.x -o nodesource_setup.sh && sudo bash nodesource_setup.sh && sudo apt --assume-yes install nodejs
-
Klone dieses Repo mit
git clone https://github.com/maxsrl/moeshare.git && cd moeshare/
. -
Passe nun die
example.env
an. -
Nenne nun die
example.env
zu.env
um. -
Führe
npm i
aus, um die benötigten Abhängigkeiten zu installieren. -
Führe
npm i pm2 -g
aus, um PM2 zu installieren. -
Führe
npm run register
aus, um den ersten Nutzer zu erstellen. -
Führe
pm2 start index.js -i max --name MoeShare
aus, um MoeShare zu starten und ihn zu Clustern mit allen Verfügbaren Threads.
Erweitern für die Docker/Compose Installation
-
Docker & Docker Compose Installieren
Debian (Debian Bookworm 12 (stable), Debian Bullseye 11 (oldstable)):
sudo apt-get update sudo apt-get --assume-yes install ca-certificates curl gnupg sudo install -m 0755 -d /etc/apt/keyrings curl -fsSL https://download.docker.com/linux/debian/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg sudo chmod a+r /etc/apt/keyrings/docker.gpg echo \ "deb [arch="$(dpkg --print-architecture)" signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/debian \ "$(. /etc/os-release && echo "$VERSION_CODENAME")" stable" | \ sudo tee /etc/apt/sources.list.d/docker.list > /dev/null sudo apt-get update sudo apt-get --assume-yes install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
Ubuntu (Ubuntu Lunar 23.04, Ubuntu Kinetic 22.10, Ubuntu Jammy 22.04 (LTS), Ubuntu Focal 20.04 (LTS)):
sudo apt-get update sudo apt-get --assume-yes install ca-certificates curl gnupg sudo install -m 0755 -d /etc/apt/keyrings curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg sudo chmod a+r /etc/apt/keyrings/docker.gpg echo \ "deb [arch="$(dpkg --print-architecture)" signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \ "$(. /etc/os-release && echo "$VERSION_CODENAME")" stable" | \ sudo tee /etc/apt/sources.list.d/docker.list > /dev/null sudo apt-get update sudo apt-get --assume-yes install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
-
Lade dir die docker-compose.yml auf dein Server herunter
-
Bearbeite die
docker-compose.yml
nach deinen Vorstellungen. -
Führe
docker compose up -d && docker compose exec moeshare npm run register && docker compose restart
aus, um den ersten Nutzer zu erstellen und um MoeShare zu starten.
Wie kann ich ein npm-Script ausführen? Nutze dafür docker compose exec moeshare npm run BEFEHL
Wie kann ich Updaten? Nutze dafür: docker compose pull
Für HTTPS-Unterstützung musst Du einen Reverse-Proxy konfigurieren. Ich empfehle Caddy, aber jeder Reverse-Proxy funktioniert gut (wie Apache oder Nginx). Eine Beispielkonfiguration für Caddy findest du hier:
moeshare.example.com {
reverse_proxy localhost:3000
}
Die Datei config.sxcu
kann auch geändert und importiert werden, für ein schnelleren Start.
- Füge einen neuen benutzerdefinierten Uploader in ShareX hinzu, indem Du auf
Destinations > Custom uploader settings...
gehst. - Klicke auf
New
und gebe MoeShare einen Namen Deiner Wahl. - Setze Zieltyp auf "Bild", "Text" und "Datei".
- Method:
POST
- Request URL:
https://example/upload
- Body:
Formulardaten (multipart/form-data)
- File form name:
file
(wörtlich "file" in das Feld eingeben) - Headers:
- Name:
Authorization
- Wert:
Dein Token
- Name:
- URL:
{json:view}
- Thumbnail URL:
{json:preview}
- Deletion URL:
{json:delete}
- Method:
MoeShare hat eine API für Frontend-Entwickler zur einfachen Integration. Im Moment ist die API ziemlich begrenzt, aber ich werde sie in Zukunft erweitern, mit dem Feedback der Frontend-Entwickler.
Alle Endpunkte, die eine Autorisierung erfordern, werden einen Authorization
-Header benötigen, dessen Wert das Login-Token des Benutzers ist. Admin-Benutzer können auf alle Endpunkte zugreifen, während Nicht-Admin-Benutzer nur auf die für sie relevanten Endpunkte zugreifen können.
Andere Dinge zu beachten:
- Alle Endpunkte geben ein JSON-Objekt zurück.
- Erfolgreiche Endpunkte sollten einen
200
Statuscode zurückgeben. Alle Fehler verwenden den entsprechenden4xx
oder5xx
Statuscode (wie401 Unauthorized
).
Endpunkt | Zweck | Admin? |
---|---|---|
POST /login |
Dieser Endpunkt ermöglicht es einem Benutzer, sich anzumelden und ein Login-Token zu erhalten, das zur Authentifizierung verwendet wird. | Nein |
POST /upload |
Mit diesem Endpunkt kann ein Benutzer eine Datei hochladen. | Nein |
GET /view/:filename |
Dieser Endpunkt stellt ein WebUI für eine spezifische Datei bereit, die dem angegebenen Benutzer gehört. | Nein |
GET /oembed/:filename |
Hier erhält ein Benutzer die OEmbed-Daten für eine spezifische Datei. | Nein |
GET /download/:filename |
Durch diesen Endpunkt erhält der Benutzer einen direkten Download-Link für eine spezifische Datei. | Nein |
DELETE /file/:username/:filename |
Mit diesem Endpunkt werden alle Daten einer angegebenen Datei gelöscht, einschließlich des Previews, der Datei selbst und des Datenbankeintrags. Der Zugriff ist auf den angegebenen Benutzer beschränkt. | Ja |
DELETE /file/:filename |
Dieser Endpunkt löscht alle Daten einer angegebenen Datei, einschließlich des Previews, der Datei selbst und des Datenbankeintrags. Der Zugriff erfolgt über das Login-Token des eingeloggten Benutzers. | Nein |
DELETE /user/:username |
Dieser Endpunkt löscht alle Daten eines Nutzers, einschließlich des Nutzers selbst, des Ordners des Nutzers und des Datenbankeintrags. Der Zugriff erfolgt über das Login-Token des eingeloggten Benutzers. | Ja |
DELETE /user |
Mit diesem Endpunkt werden alle Daten des angemeldeten Nutzers gelöscht, einschließlich des Nutzers selbst, des Ordners des Nutzers und des Datenbankeintrags. Der Zugriff ist auf den angegebenen Benutzer beschränkt. | Nein |
GET /files/:username |
Hier erhält der Benutzer eine Liste aller Dateien eines bestimmten Nutzers. | Ja |
GET /files |
Durch diesen Endpunkt erhält der Benutzer eine Liste aller Dateien, die dem eingeloggten Benutzer gehören. | Nein |
Endpunkt | Zweck | Standart | Wichtig? |
---|---|---|---|
AUDIO_FORMATS |
Definiert die erlaubten Audioformate für die Anwendung. | .mp3,.wav,.ogg,.aac,.flac |
✅ |
VIDEO_FORMATS |
Definiert die erlaubten Videoformate für die Anwendung. | .mp4,.avi,.mkv,.mov,.wmv |
✅ |
IMAGE_FORMATS |
Definiert die erlaubten Bildformate für die Anwendung. | .jpg,.jpeg,.png,.bmp,.svg,.webp,.tiff |
✅ |
BASE_URL |
Legt die URL der Anwendung fest, die beim Upload verwendet wird. | http://localhost:3000 |
✅ |
PORT |
Gibt den TCP-Port der Anwendung an. | 3000 |
✅ |
JWT_TOKEN |
Ein zufälliger Token, idealerweise 64 Zeichen lang, der zur Signierung verwendet wird. | CHANGEME |
✅ |
REMOVE_METADATA |
Legt fest, ob Metadaten wie Standortinformationen nach dem Upload entfernt werden sollen (kann die Leistung beeinträchtigen). | true |
❌ |
USE_PREVIEW |
Gibt an, ob ein Vorschaubild erstellt werden soll. | true |
❌ |
LOGS |
Gibt an, ob Logs an den Discord-Webhook gesendet werden sollen. | false |
❌ |
ALLOW_METRICS |
Legt fest, ob Fehler zur Fehlerbehebung an Sentry gesendet werden dürfen (wird empfohlen, um zur Verbesserung der Anwendung beizutragen!). | true |
❌ |
USE_HLS |
Legt fest, ob HLS für das Videostreaming verwendet wird. Dies erfordert mehr Speicher, ist aber bei großen Videos ratsam. (Erstellt eine .m3u8-Datei und .ts-Dateien). | true |
❌ |
SITE_TITLE |
Definiert den HTML-Metatag "title". | MoeShare |
❌ |
SITE_FAVICON |
Pfad zur .png-Datei oder URL einer .png-Datei für das Favicon. | https://moeshare.de/assets/img/logo.png |
❌ |
OG_TITLE |
Meta-Tag og:title. | EXAMPLE |
❌ |
OG_DESCRIPTION |
Meta-Tag og:description. | EXAMPLE |
❌ |
THEME_COLOR |
Meta-Tag theme-color - wenn &dominantColor als themecolor genommen wird, ist das Embed in der Dominanten Farbe der Datei. Sollte &random genommen werden, hat das Embed eine zufällige Farbe. | &dominantColor |
❌ |
FONT_COLOR |
Hier kannst du die Schriftfarbe definieren. (#HEXCOLOR) | #343540 |
❌ |
AUTHOR_URL |
OEmbed-Autor-URL. | https://example.com |
❌ |
AUTHOR_NAME |
OEmbed-Autor-Name. | EXAMPLE |
❌ |
PROVIDER_NAME |
OEmbed-Anbieter-Name. | EXAMPLE.COM |
❌ |
PROVIDER_URL |
OEmbed-Anbieter-URL. | https://example.com |
❌ |
USE_DOMINANT_COLOR |
Gibt an, ob die dominante Farbe des Bildes für den Schatten verwendet werden soll (true), oder ob stattdessen eine feste Farbe verwendet werden soll (false, dann &dominantColorStatic ausfüllen). | true |
❌ |
DOMINANT_COLOR_STATIC |
Diese Farbe wird anstelle der dominanten Farbe verwendet (#HEXCOLOR). | #ffffff |
❌ |
BOX_SHADOW_COLOR |
Wird angewendet, wenn die Datei kein Bild ist (#HEXCOLOR). | #ffffff |
❌ |
COPYRIGHT_TEXT |
Copyright-Text. | © 2023 MoeShare - All Rights Reserved |
✅ |
DISCORD_WEBHOOK_NAME |
Name der Discord-Webhook. | MoeShare |
❌ |
DISCORD_WEBHOOK_URL |
URL für den Discord-Webhook-Log (nur ausfüllen, wenn LOGS = true). | https://discord.com/api/webhooks/XXXX/XXXX |
❌ |
DISCORD_WEBHOOK_SUCCESS_COLOR |
Embed-Farbe für INFO-Logs (0xHEXCOLORCODEOHNE-#). | 0x03fc28 |
❌ |
DISCORD_WEBHOOK_ERROR_COLOR |
Embed-Farbe für ERROR-Logs (0xHEXCOLORCODEOHNE-#). | 0xfc0303 |
❌ |
REDIRECT_URL |
Weiterleitungsziel, wenn / aufgerufen wird. | https://example.com |
❌ |
Alle dieser Skripte sollten mit npm run <script-name>
ausgeführt werden. (außer start
)
Script | Beschreibung |
---|---|
start |
Startet MoeShare. Dies ist das Standardskript und wird mit npm start ausgeführt.. |
token |
Mit diesen Script bekommst du den Token von den angegebenen Nutzername und Passwort |
reset |
Mit diesen Script kannst du das Passwort, den Token und die Rolle eines Nutzers ändern bzw. zurücksetzen. |
register |
Mit diesen Script kannst du einen Nutzer registrieren |
Verwende dieses Skript und installiere die Pakete jp und xclip.
Solltest Du hilfe benötigen, öffne ein Issue oder Kontaktiere mich über meiner Website.
- Einiges von der README.md und der docker-compose.yml wurde von ass übernommen
Dieses Projekt ist unter der MIT-Lizenz lizenziert.