From 23fa296cebec87f534ebf1284d20bd96e9317216 Mon Sep 17 00:00:00 2001 From: Dietrich Date: Tue, 9 Mar 2021 14:07:05 +0100 Subject: [PATCH] Add README.md --- README.md | 66 +++++++++++++++++++++++++++++++++++ doc/img/pslinkscreenshot.png | Bin 0 -> 35598 bytes 2 files changed, 66 insertions(+) create mode 100644 doc/img/pslinkscreenshot.png diff --git a/README.md b/README.md index e69de29..b1245c1 100644 --- a/README.md +++ b/README.md @@ -0,0 +1,66 @@ +# Pslink a "Private Short Link page" + +The target audience of this tool are small entities that need a url shortener. The shortened urls can be publicly resolved but only registered users can create short urls. Every registered user can see all shorted urls but ownly modify its own. Admin users can invite other accounts and edit everything that can be edited (also urls created by other accounts). + +![Screenshot](./doc/img/pslinkscreenshot.png) + +The Page comes with a basic commandline interface to setup the environment. If it is built with `cargo build release --target=x86_64-unknown-linux-musl` everything is embedded and it should be portable to any 64bit linux system. +Templates and migrations are embedded in the binary. So it should run standalone without anything extra. + +## usage + +### setup + +To get Pslink up and running use the commands in the following order: + +1. `pslink generate-env` this will generate a `.env` file in the curent directory with the default settings. Edit this file to your liking. You can however skip this step and provide all the parameters via commandline or environmentvariable. It is **not** recommended to provide PSLINK_SECRET with commandline parameters as they can be read by every user on the system. +2. `pslink migrate-database` will create a sqlite database in the location specified. +3. `pslink create-admin` create an initial admin user. As the page has no "register" function this is required to do anything usefull. +4. `pslink runserver` If everything is set up correctly this command will start the service. + +### run the service + +If everything is correctly set up just do `pslink runserver`. + +### update + +To update to a newer version execute the commands in the following order + +1. stop the service +2. run `pslink migrate-database` +3. run the server again `pslink runserver` + +### help + +For a list of options use `pslink help`. + +### systemd service file + +If you want to automatically start this with systemd you can adjust the following template unit to your system. In this case a dedicated `pslink` user and group are used with the users home directory at `/var/pslink`. Some additional settings are in place to protect the system a little should anything go wrong. + +```systemd +# /etc/systemd/system/pslink.service +[Unit] +Description=Pslink the Urlshortener +Documentation=https://github.com/enaut/Pslink +Wants=network.target +After=network.target + +[Service] +User=pslink +Group=pslink +EnvironmentFile=-/var/pslink/.env + +ProtectHome=true +ProtectSystem=full +PrivateDevices=true +NoNewPrivileges=true +PrivateTmp=true +InaccessibleDirectories=/root /sys /srv -/opt /media -/lost+found +ReadWriteDirectories=/var/pslink +WorkingDirectory=/var/pslink +ExecStart=/var/pslink/pslink runserver + +[Install] +WantedBy=multi-user.target +``` diff --git a/doc/img/pslinkscreenshot.png b/doc/img/pslinkscreenshot.png new file mode 100644 index 0000000000000000000000000000000000000000..f9080bb4047d7f69954cf4d0fdcacdb904a547e4 GIT binary patch literal 35598 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 literal 0 HcmV?d00001