A file storage for the web
Go to file
2023-11-14 05:55:55 -08:00
cista Attempt to fix config handling on Windows 2023-11-13 16:31:35 -08:00
frontend Keyboard nav: 1/2/3 globally toggle table ordering. Esc closes search, slash also toggles search like Ctrl/Cmd+F does. 2023-11-14 05:55:55 -08:00
scripts Add frontend build to Python packaging. Remove dead code, cleanup. 2023-11-13 16:19:33 -08:00
tests More efficient flat file list format and various UX improvements (#3) 2023-11-12 23:20:40 +00:00
.gitignore Frontend created and rewritten a few times, with some backend fixes (#1) 2023-11-08 20:38:40 +00:00
pyproject.toml Add frontend build to Python packaging. Remove dead code, cleanup. 2023-11-13 16:19:33 -08:00
README.md Update README 2023-11-13 14:49:08 -08:00

Web File Storage

The Python package installs a cista executable. Use hatch shell to initiate and install in a virtual environment, or pip install it on your system. Alternatively hatch run cista may be used to skip the shell step but stay virtual. pip install hatch first if needed.

Create your user account:

cista --user admin --privileged

Running the server

Serve your files on localhost:8000:

cista -l :8000 /path/to/files

The Git repository does not contain a frontend build, so you should first do that...

Build frontend

Frontend needs to be built before using and after any frontend changes:

cd frontend
npm install
npm run build

This will place the front in cista/wwwroot from where the backend server delivers it, and that also gets included in the Python package built via hatch build.

Development setup

For rapid turnaround during development, you should run npm run dev Vite development server on the Vue frontend. While that is running, start the backend on another terminal hatch run cista --dev -l :8000 and connect to the frontend.

The backend and the frontend will each reload automatically at any code or config changes.

System deployment

Clone the repository to /srv/cista/cista-storage or other suitable location accessible to the storage user account you plan to use. sudo -u storage -s and build the frontend if you hadn't already.

Create /etc/systemd/system/cista@.service:

[Unit]
Description=Cista storage %i

[Service]
User=storage
WorkingDirectory=/srv/cista/cista-storage
ExecStart=hatch run cista -c /srv/cista/%i -l /srv/cista/%i/socket /media/storage/@%i/
TimeoutStopSec=2
Restart=always

[Install]
WantedBy=multi-user.target

This assumes you may want to run multiple separate storages, each having their files under /media/storage/<domain> and configuration under /srv/cista/<domain>/. Instead of numeric ports, we use UNIX sockets for convenience.

systemctl daemon-reload
systemctl enable --now cista@foo.example.com
systemctl enable --now cista@bar.example.com

Exposing this publicly online is the most convenient using the Caddy web server but you can of course use Nginx or others as well. Or even run the server with -l domain.example.com given TLS certificates in the config folder.

/etc/caddy/Caddyfile:

foo.example.com, bar.example.com {
    reverse_proxy unix//srv/cista/{host}/socket
}

Using the {host} placeholder we can just put all the domains on the same block. That's the full server configuration you need. systemctl enable --now caddy or systemctl restart caddy for the config to take effect.