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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�?A$QAvTNs!h*9xR%VV2Oz0l(5r8ldiJKP!q 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