• Stars
    star
    143
  • Rank 257,007 (Top 6 %)
  • Language
    TypeScript
  • License
    MIT License
  • Created over 1 year ago
  • Updated over 1 year ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

An image and video hosting platform for your server, with rich embed support and API.

Docker build Latest Release GitHub Issues

Share Me

A selfhosted image and video uploading platform that uses Next.js and PocketBase. An open-source alternative to Imgur.

Screenshot

More screenshots can be found in the screenshots directory.

Features

  • Full-Page Drag/Drop and Paste Support
  • Share Post URLs, Mark Post Public/NSFW
  • Generate OpenGraph and Twitter Metadata for Social Media Embeds
    • Supports WhatsApp, Discord, Twitter, Facebook and More
  • PocketBase Backend with Support for the Following:
    • Username/Email Sign-up and Login
    • OIDC Authentication
    • SMTP Mail Server for Verification Mails (WIP)
    • S3 Configuration for File Storage
    • Configurable File Size Limit
    • Fast Database Using SQLite
    • Admin UI and REST APIs with JavaScript and Dart Client SDKs

Usage

Share Me can be deployed to your own infrastructure with Docker. For more information see Deployment.

Once the initial setup is complete, head to the URL of your Share Me instance. You will be redirected to /login if you aren't logged in yet. Alternatively, you can create an account under /sign-up.

To create posts simply go back to the homepage after logging in, and

Deployment

Use the sample docker-compose.yml to deploy your Share Me instance. This will deploy a PocketBase server at port :8080 and the Next.js frontend to :3000.

PocketBase URL

You can set the PocketBase server URL with host:port in the POCKETBASE_URL environment variable or a hostname if deployed with a reverse proxy.

Reverse Proxy

If you have a reverse proxy such as Traefik or Apache, you can expose the application under / and the PocketBase API under /api/ as well as the admin UI under /_/. This will be the optimal setup for production. The POCKETBASE_URL should be set to https://shareme.example.com.

Kubernetes Ingress Sample
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: share-me
spec:
  rules:
    - host: shareme.example.com
      http:
        paths:
          - backend:
              service:
                name: share-me-frontend
                port:
                  name: http
            path: /
            pathType: Prefix
          - backend:
              service:
                name: share-me-server
                port:
                  name: http
            path: /api/
            pathType: Prefix
          - backend:
              service:
                name: share-me-server
                port:
                  name: http
            path: /_/
            pathType: Prefix

Adding a Tracking Script

Share Me supports Umami tracking scripts, in case you want analytics for your Share Me instance.

To add the tracking script, set the two following environment variables:

UMAMI_WEBSITE_ID=<umami-website-id>
UMAMI_JS=<umami-js>

Configuration

S3

S3 can be configured in PocketBase under Settings > Files storage. You can enable S3 and provide AWS S3 configurations or an S3-compatible API such as MinIO or DigitalOcean Spaces.

SMTP

SMTP is used by Share Me for email verification (WIP). To configure a mail server head to Settings > Mail settings and configure your SMTP server.

File Size Limit

The default file size limit is about 5MB and can be changed in the PocketBase UI. Head to Collections > files > Settings (cog icon) and edit the file column settings. Set the Max file size to whatever you want.

Authentication

Providers

Share Me loads the configured PocketBase authentication providers. Head to your PocketBase admin dashboard, go to Settings > Auth providers and configure the ones you want to use.

Disabling Username/Password

To disable username/password and email/password login if you only want to allow access via SSO, go to Collections > users > Settings (cog icon) > Options and disable/enable the methods you want.

If you only want to disable sign-up, remove the "create" API rules to only allow admins to create new users. You can set the SIGNUP_ENABLED environment variable in the frontend to disable the sign-up page and remove links to it.

Contributions

🚧 WIP

License

This project is licensed under MIT.

Support

More Repositories

1

sk-auth

Authentication library for use with SvelteKit featuring built-in OAuth providers and zero restriction customization!
TypeScript
578
star
2

jolt

The social hub for your media server. Rate, review and recommend movies and shows, as well as manage your watchlist, follow friends and more.
TypeScript
165
star
3

aPRAW

Asynchronous Python Reddit API Wrapper
Python
50
star
4

Fuzzle

Expandable search engine written in Python. Models upcoming!
HTML
15
star
5

Cheeri-No

Say no to those pesky corporate overlords!
TypeScript
13
star
6

go-gqlgen-fx-template

Go GraphQL API template with Uber FX for Dependency Injection and GORM.
Go
11
star
7

Banhacker

Mariavi's take on Reddit moderation.
Python
10
star
8

Banhammer.py

Python framework to create Reddit moderation bots for Discord using reactions and streams.
Python
9
star
9

reddit-comments-crypto-counter

Crypto coin ticker counter for Reddit comments.
Python
8
star
10

Reddify

Reddit verification bot for Discord with useful statistics and an intuitive verification process.
Python
6
star
11

react-video-trimmer

TypeScript
5
star
12

media-hoarder

A simple web app to calculate how many shows and movies can be stored on a given array of storage.
TypeScript
5
star
13

svelte-custom-element-template

Svelte custom elements (WebComponent) template with Prettier and ESLint!
JavaScript
5
star
14

kraken-staking-countdown

Tracking app for Kraken staking rewards and countdown timer.
JavaScript
3
star
15

1000DOP

Bot for /r/1000DaysOfPractice.
Python
2
star
16

Hyperlinkr

Quickly generate hyperlinks for the web as a PWA!
Vue
2
star
17

anti-crypto-scammer

Python
2
star
18

Idealist

Bot for the Idealist Discord server
Python
2
star
19

ReactivePy

Reactive properties and owners for Python classes.
Python
2
star
20

dan6erbond.github.io

Website about me
HTML
2
star
21

SchoolHelper

A tool to provide support for the busy I1A students...
Java
2
star
22

Egosaurus

Script to print/post/save Reddit statistics.
Python
2
star
23

shrinkarr

Shrink your qBittorrent downloads folder by magnitudes.
Python
2
star
24

terraform-kubernetes-shlink

HCL
1
star
25

Seedless

Clear your Reddit comments and use simple rules to specify which ones!
Python
1
star
26

SantasChristmasWish

Bots for the SCW subreddit and its Discord server.
Python
1
star
27

Im17A

Im17A Class Website
TypeScript
1
star
28

terraform-kubernetes-mariadb

HCL
1
star
29

ChatApp

GraphQL based web server and Vue chat app.
JavaScript
1
star
30

CarRanker

Car ranking web app with built-in webscraper to find your perfect car.
TypeScript
1
star
31

RGB

A simple script that takes images, gets the most prominent colors and turns it into a grid/stretch.
Python
1
star
32

terraform-kubernetes-chevereto

HCL
1
star
33

Employee-Manager

Employee Manager to describe the Composite Pattern.
Java
1
star
34

2019-Casino

Casino-Projekt der Gruppe 3 von der IMS Projektwoche 2019.
Java
1
star
35

projects

Project-Page for GH-Pages
TypeScript
1
star
36

CarManagement

Car management system for a luxury car rental garage with VueJS frontend and NodeJS backend.
JavaScript
1
star
37

crypto-wallet-widget

Crypto wallet widget to accept payments in various blockchain coins and tokens.
Svelte
1
star