maxsrl/moeshare
Dies ist eine einfache Upload-API, welche auf Node.js und SQLite basiert.
703
⚠️ Dies ist noch eine frühe und aktive Entwicklung. Es kann zu Fehlern kommen.
🛑 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.
Derzeit wird die Installation mit NodeJS oder Docker unterstützt.
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.
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.
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.
Destinations > Custom uploader settings...
gehst.New
und gebe MoeShare einen Namen Deiner Wahl.POST
https://example/upload
Formulardaten (multipart/form-data)
file
(wörtlich "file" in das Feld eingeben)Authorization
Dein Token
{json:view}
{json:preview}
{json:delete}
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:
200
Statuscode zurückgeben. Alle Fehler verwenden den entsprechenden 4xx
oder 5xx
Statuscode (wie 401 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.
Dieses Projekt ist unter der MIT-Lizenz lizenziert.
docker pull maxsrl/moeshare