Git Product home page Git Product logo

flowinity / flowinity Goto Github PK

View Code? Open in Web Editor NEW
24.0 24.0 9.0 64.2 MB

Flowinity (formerly PrivateUploader) is the ultimate open source image uploader and file storage solution.

Home Page: https://flowinity.com

License: GNU Affero General Public License v3.0

TypeScript 52.75% CSS 1.82% HTML 0.70% JavaScript 0.97% Vue 43.32% SCSS 0.39% Shell 0.01% Dockerfile 0.01% EJS 0.03%
chat cloud-server cloud-storage cloud-suite docker file private privateuploader self-hosted server sharenix sharex sharex-server sharex-uploader suite typescript upload uploader vue vuetify

flowinity's Introduction

PrivateUploader Banner

Flowinity (formerly PrivateUploader) codecov

Flowinity is the next generation image hosting server written in Vue and TypeScript.

Flowinity is intended to be an out of the way image hosting server for everyone else, thus it doesn't have features you'd regularly find in other ShareX servers, such as rich OpenGraph embeds. But instead has unique features like Insights, and Collections.

Additionally, Flowinity has only recently become an open source project, so documentation and resources are lacking initially, but will improve over time.

PrivateUploader Features

Don't want to host your own server?

You can use the official public instance of Flowinity at https://flowinity.com (previously https://privateuploader.com).

Screenshots (Click to expand)

View the full collection on Flowinity.

Gallery Collection Page User Profile Insights

Features

  • Gallery, where all your uploaded files live.
  • Collections, which can be shared with multiple users.
  • AutoCollects, create custom rules to automatically add items into collections.
  • Workspaces, create quick notes/documents inside Flowinity.
  • Insights, see reports about how, and when you use Flowinity.
  • Communications, the built-in messaging platform to communicate with other users.
  • Scoped API keys for additional security.
  • Scoped passwords, set custom passwords with different API permissions.
  • ShareX, and Sharenix support (built-in client export).

System Requirements

  • Node.js 18.0.0 or newer (NodeJS 18 is necessary for structuredClone, no polyfills are built-in)
  • 2GB of RAM or more (RAM usage is dependent on the number of threads Flowinity uses)
  • 4GB of disk space or more (for core server, database, and frontend files)
  • 64-bit x86 or ARM processor, 1 CPU core or more (4 recommended)
  • MariaDB server (MySQL won't work, Sequelize dialect "mysql" does not support JSON)
  • Redis server with RedisJSON plugin (only works with UNIX-like systems)
  • Linux, other UNIX-based like macOS (Microsoft Windows is not officially supported)
  • Tesseract OCR (with English language support) for OCR features

Setting Up

These instructions assume you're using a standard Linux system with systemd, these instructions will differ depending on what init system you use.

Docker w/ docker-compose (Quickest method)

  1. Clone the Docker-specific repo: git clone https://github.com/PrivateUploader/docker-compose flowinity
  2. Change directory into repo: cd flowinity
  3. Create the container (change the environment variables to your liking): DB_DATABASE=flowinity DB_USER=flowinity DB_PASSWORD=CHANGE_ME DB_ROOT_PASSWORD=CHANGE_ME docker-compose up -d
  4. Follow the setup wizard on http://localhost:34582
  5. You must change the MariaDB server hostname to mariadb and the redis hostname to redis in the setup wizard. (seen below): Setup Wizard Setup Wizard

Manual Setup

  1. Create Flowinity user and group: useradd -m flowinity
  2. Install MariaDB and Redis (with the RedisJSON plugin) on your server.
  3. Login as the Flowinity user: su flowinity
  4. Change directory into TPU home directory: cd
  5. Clone the repository: git clone https://github.com/PrivateUploader/Flowinity flowinity
  6. Change directory into the repository: cd flowinity
  7. Install dependencies: yarn install
  8. Create systemd service files for TPU with cp flowinity.service /etc/systemd/system/flowinity.service
  9. Modify the systemd service file (use nano, vim, etc), replace all instances of CHANGE_ME with your own values. Do not run Flowinity as root user and use the user created earlier.
  10. Start TPU and start on boot with systemctl enable flowinity --now
  11. Follow the setup wizard on http://localhost:34582 and configure NGINX web server.

NGINX Configuration

  1. TPU includes an example NGINX configuration file, you can find it at nginx.conf in either of the Docker or primary TPU repositories.
  2. Copy it to your NGINX configuration directory: cp nginx.conf /etc/nginx/conf.d/flowinity.conf (this folder can differ between distributions, it could be /etc/nginx/sites-available, if so, symlink it to /etc/nginx/sites-enabled).
  3. Modify the NGINX configuration file (use nano, vim, etc), replace all instances of CHANGE_ME with your own values.
  4. Test the NGINX configuration: nginx -t
  5. If the test is successful, reload NGINX: nginx -s reload

Scripts

  • yarn build - Build Flowinity.
  • yarn serve - Start Flowinity in development mode.
  • yarn serve-cluster - Start Flowinity in development cluster mode.
  • yarn start - Start Flowinity in production mode and build (cluster mode).

Even if you only have 1 CPU core/thread, you should still use start in production as it will support the TPU_RESTART process command and will automatically scale if you add more CPU cores/threads.

Do not restart Flowinity via pm2 or systemd if you are using the serve-cluster script in production.

This can be done in the admin panel or via a POST request to /api/v3/admin/restart (administrator account required, can be automated with "admin.ci" API scope).

Having a single CPU core will cause Flowinity to be temporarily unavailable when restarting.

Contributors

All Contributors

Troplo
Troplo

๐Ÿ’ป ๐Ÿ“– ๐Ÿ”ฃ ๐Ÿš‡ ๐Ÿ›ก๏ธ
The Loose Goose
The Loose Goose

๐Ÿ’ป ๐Ÿš‡ ๐ŸŒ
bytedefined
bytedefined

๐Ÿ’ป ๐ŸŒ ๐Ÿค” ๐Ÿ›
ElectricS01
ElectricS01

๐Ÿ’ป ๐Ÿค” ๐Ÿ›
Jolt707
Jolt707

๐Ÿ’ป ๐Ÿค” ๐Ÿ› ๏ธ๏ธ๏ธ๏ธโ™ฟ๏ธ

flowinity's People

Contributors

allcontributors[bot] avatar electrics01 avatar theloosegoose avatar troplo avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar

flowinity's Issues

Nothing showing up after initial frontend build

Hey! Just found this project and wanted to test it out, currently using the docker instructions, on initial start it comes up with the whole frontend being built page and then after I waited a few minutes and checked logs to make sure the frontend was built, going back to https://url/setup brings just a blank page.

Logs from browser console:
image

Logs from main tpu docker container:
image

Logs from redis docker container:
image

Logs from mariadb docker container:
image

Let me know if there's anything else you need!

Toggle to hide weather icon

It would be really great if there was a toggle that disabled showing the weather icon in the navigation header of TPU

Backend unit tests using `yarn test` don't work

Executing yarn test results in database related error messages

$ NODE_ENV=test yarn init:db && yarn test:no-db
$ NODE_ENV=test ts-node ./app/testStart.ts
Suppressed 1 Redis error as Flowinity Server is not yet configured.
init
(node:17765) [DEP0040] DeprecationWarning: The `punycode` module is deprecated. Please use a userland alternative instead.
(Use `node --trace-deprecation ...` to show where the warning was created)
Redis Client Connected
~/GitHub/PrivateUploader/node_modules/sequelize/src/dialects/mariadb/connection-manager.js:109
          throw new SequelizeErrors.HostNotFoundError(err);
                ^
HostNotFoundError [SequelizeHostNotFoundError]: getaddrinfo ENOTFOUND host
    at ConnectionManager.connect (~/GitHub/PrivateUploader/node_modules/sequelize/src/dialects/mariadb/connection-manager.js:109:17)
    at processTicksAndRejections (node:internal/process/task_queues:95:5)
    at async ConnectionManager._connect (~/GitHub/PrivateUploader/node_modules/sequelize/src/dialects/abstract/connection-manager.js:332:24)
    at async ~/GitHub/PrivateUploader/node_modules/sequelize/src/dialects/abstract/connection-manager.js:250:32
    at async ConnectionManager.getConnection (~/GitHub/PrivateUploader/node_modules/sequelize/src/dialects/abstract/connection-manager.js:280:7)
    at async ~/GitHub/PrivateUploader/node_modules/sequelize/src/sequelize.js:638:26
    at async init (~/GitHub/PrivateUploader/app/testStart.ts:23:3) {
  parent: Error: getaddrinfo ENOTFOUND host
      at GetAddrInfoReqWrap.onlookupall [as oncomplete] (node:dns:118:26)
   From event:
      at ~/GitHub/PrivateUploader/node_modules/mariadb/lib/connection.js:141:13
      at new Promise (<anonymous>)
      at Connection.connect (~/GitHub/PrivateUploader/node_modules/mariadb/lib/connection.js:130:12)
      at Object.createConnection (~/GitHub/PrivateUploader/node_modules/mariadb/promise.js:38:17)
      at ConnectionManager.connect (~/GitHub/PrivateUploader/node_modules/sequelize/src/dialects/mariadb/connection-manager.js:87:41)
      at ConnectionManager._connect (~/GitHub/PrivateUploader/node_modules/sequelize/src/dialects/abstract/connection-manager.js:332:61)
      at processTicksAndRejections (node:internal/process/task_queues:95:5)
      at async ~/GitHub/PrivateUploader/node_modules/sequelize/src/dialects/abstract/connection-manager.js:250:32
      at async ConnectionManager.getConnection (~/GitHub/PrivateUploader/node_modules/sequelize/src/dialects/abstract/connection-manager.js:280:7)
      at async ~/GitHub/PrivateUploader/node_modules/sequelize/src/sequelize.js:638:26 {
    errno: -3008,
    code: 'ENOTFOUND',
    syscall: 'getaddrinfo',
    hostname: 'host',
    fatal: true,
    sqlState: 'HY000'
  },
  original: Error: getaddrinfo ENOTFOUND host
      at GetAddrInfoReqWrap.onlookupall [as oncomplete] (node:dns:118:26)
   From event:
      at ~/GitHub/PrivateUploader/node_modules/mariadb/lib/connection.js:141:13
      at new Promise (<anonymous>)
      at Connection.connect (~/GitHub/PrivateUploader/node_modules/mariadb/lib/connection.js:130:12)
      at Object.createConnection (~/GitHub/PrivateUploader/node_modules/mariadb/promise.js:38:17)
      at ConnectionManager.connect (~/GitHub/PrivateUploader/node_modules/sequelize/src/dialects/mariadb/connection-manager.js:87:41)
      at ConnectionManager._connect (~/GitHub/PrivateUploader/node_modules/sequelize/src/dialects/abstract/connection-manager.js:332:61)
      at processTicksAndRejections (node:internal/process/task_queues:95:5)
      at async ~/GitHub/PrivateUploader/node_modules/sequelize/src/dialects/abstract/connection-manager.js:250:32
      at async ConnectionManager.getConnection (~/GitHub/PrivateUploader/node_modules/sequelize/src/dialects/abstract/connection-manager.js:280:7)
      at async ~/GitHub/PrivateUploader/node_modules/sequelize/src/sequelize.js:638:26 {
    errno: -3008,
    code: 'ENOTFOUND',
    syscall: 'getaddrinfo',
    hostname: 'host',
    fatal: true,
    sqlState: 'HY000'
  }
}
error Command failed with exit code 1.
info Visit https://yarnpkg.com/en/docs/cli/run for documentation about this command.
error Command failed with exit code 1.
info Visit https://yarnpkg.com/en/docs/cli/run for documentation about this command.

[BUG] Weather displaying from the wrong geolocation

The TPU Weather widget incorrectly searches only the city name e.g "Melbourne" instead of say "Melbourne, Victoria", and displays the weather for "Melbourne, Florida" in any city named "Melbourne".

Additionally to fixing this issue, it could also be useful to add an option to set a fixed geolocation to get weather data from for people who's IPs are based in different cities.

Deleting an app

image
apps cannot be deleted if even one user has authorized oauth on it, i believe this is a bug

Temperature is displayed in Degrees Kelvin

To replicate go to /settings/dashboard and change the Temperature unit for weather widget to Kelvin (Metric Standard)

The temperature in the top bar will be displayed in ยฐK instead of just K

image

when it should be like

image

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.