summaryrefslogtreecommitdiff
path: root/README.md
diff options
context:
space:
mode:
Diffstat (limited to 'README.md')
-rw-r--r--README.md171
1 files changed, 114 insertions, 57 deletions
diff --git a/README.md b/README.md
index e267394..17b7778 100644
--- a/README.md
+++ b/README.md
@@ -3,75 +3,59 @@ travelynx - Railway Travel Logger
[travelynx](https://finalrewind.org/projects/travelynx/) allows checking into
and out of individual trains, thus providing a log of your railway journeys
-annotated with real-time delays and service messages. At the moment, it only
-supports german railways and trains which are exposed by the Deutsche Bahn
-[IRIS Interface](https://finalrewind.org/projects/Travel-Status-DE-IRIS/).
+annotated with real-time delays and service messages. It supports german
+railways and trains exposed by the Deutsche Bahn [IRIS
+Interface](https://finalrewind.org/projects/Travel-Status-DE-IRIS/) as well as
+local transit and some trains outside of germany exposed by the Deutsche Bahn
+[HAFAS Interface](https://finalrewind.org/projects/Travel-Status-DE-DeutscheBahn/).
+
+You can use the public instance on [travelynx.de](https://travelynx.de) or
+host your own. See the Installation and Setup notes below.
Dependencies
---
- * perl >= 5.10
- * Cache::File (part of the Cache module)
- * Crypt::Eksblowfish
- * DateTime
- * DateTime::Format::Strptime
- * Email::Sender
- * Geo::Distance
- * Mojolicious
- * Mojolicious::Plugin::Authentication
- * Mojo::Pg
- * Travel::Status::DE::IRIS
- * UUID::Tiny
- * JSON
-
-If perl modules are not packaged for your distribution, you can use carton or
-cpanminus to install them locally. In this case, you need to have development
-headers for libxml and libpq (postgresql) on your system. In the project root
-directory (where `cpanfile` resides), run either
+ * perl ≥ 5.20
+ * carton
+ * build-essential
+ * libpq-dev
+ * git
-```
-carton install
-```
+Installation
+---
+
+travelynx depends on a set of Perl modules which are documented in `cpanfile`.
+After installing the dependencies mentioned above, you can use carton to
+install Perl depenencies locally. You may alsobe able to use cpanminus;
+however this method is untested.
-or
+In the project root directory (where `cpanfile` resides), run
```
-cpanm --installdeps .
+carton install --deployment
```
-and then set `PERL5LIB` before executing any travelynx commands or wrap them
-with `carton exec`, e.g. `carton exec hypnotoad index.pl`
-
-Recommended
----
-
- * Geo::Distance::XS (speeds up statistics)
- * JSON::XS (speeds up API and statistics)
-
-Dependencies On Docker
----
-
- * cpanminus
- * build-essential
- * libpq-dev
- * git
- * ssmtp
+and set `PERL5LIB=.../local/lib/perl5` before executing any travelynx
+commands (see configs in the examples directory) or wrap them with `carton
+exec`, e.g. `carton exec hypnotoad index.pl`
Setup
---
First, you need to set up a PostgreSQL database so that travelynx can store
-user accounts and journeys. It must be at least version 9.4 and should use a
-UTF-8 locale. The following steps describe setup on a Debian 9 system, though
-setup on other distribution should be similar.
+user accounts and journeys. It must be at least version 9.4 and must use a
+UTF-8 locale. The following steps describe setup on a Debian 9 system;
+setup on other distributions should be similar.
* Write down a strong random password
* Create a postgres user for travelynx: `sudo -u postgres createuser -P travelynx`
(enter password when prompted)
* Create the database: `sudo -u postgres createdb -O travelynx travelynx`
* Copy `examples/travelynx.conf` to the application root directory
- (the one in which `index.pl` resides) and configure it
-* Initialize the database: `perl index.pl database migrate`
+ (the one in which `index.pl` resides) and edit it. Make sure to configure
+ db, cache, mail, and secrets.
+* Initialize the database: `carton exec perl index.pl database migrate`
+ or `PERL5LIB=local/lib/perl5 perl index.pl database migrate`
Your server also needs to be able to send mail. Set up your MTA of choice and
make sure that the sendmail binary can be used for outgoing mails. Mail
@@ -83,9 +67,13 @@ Finally, configure the web service:
(see `examples/travelynx.service` for a systemd unit file)
* Configure your web server to reverse-provy requests to the travelynx
instance. See `examples/nginx-site` for an nginx config.
+* Install a `timeout 5m perl index.pl work -m production` cronjob. It is used
+ to update realtime data and perform automatic checkout and should run
+ every three minutes or so, see `examples/cron`.
You can now start the travelynx service, navigate to the website and register
-your first account.
+your first account. There is no admin account, all management is performed
+via cron or (in non-standard cases) on the command line.
Please open an issue on <https://github.com/derf/travelynx/issues> or send a
mail to derf+travelynx@finalrewind.org if there is anything missing or
@@ -95,11 +83,12 @@ Updating
---
It is recommended to run travelynx directly from the git repository. When
-updating, the workflow depends on whether schema updates need to applied
+updating, the workflow depends on whether schema updates need to be applied
or not.
```
git pull
+carton install --deployment # if you are using carton: update dependencies
chmod -R a+rX . # only needed if travelynx is running under a different user
if perl index.pl database has-current-schema; then
systemctl reload travelynx
@@ -111,7 +100,47 @@ fi
```
Note that this is subject to change -- the application may perform schema
-updates automatically in the future.
+updates automatically in the future. If you used carton for installation,
+use `carton exec perl ...` in the snippet above; otherwise, export
+`PERL5LIB=.../local/lib/perl5`.
+
+Setup with Docker
+---
+
+Note that travelynx Docker support is experimental and, in its current form,
+far from best practices. Pull requests are appreciated.
+
+First, you need to set up a PostgreSQL database so that travelynx can store
+user accounts and journeys. It must be at least version 9.4 and must use a
+UTF-8 locale. See above (or `examples/docker/postgres-init.sh`) for database
+initialization. You do not need to perform the `database migrate` step.
+
+Next, you need to prepare three files that will be mounted into the travelynx
+container: travelynx configuration, e-mail configuration, and imprint and
+privacy policy. For the sake of this readme, we assume that you are using the
+`local/` directory to store these
+
+* `mkdir local`
+* copy examples/travelynx.conf to local/travelynx.conf and configure it.
+* copy examples/docker/email-transport.sh to local/email-transport.sh and configure it.
+ The travelynx container does not contain a mail server, so it needs a
+ separate SMTP server to send mail. It does not receive mail.
+* create local/imprint.html.ep and enter imprint as well as privacy policy data.
+* Configure your web server to reverse-provy requests to the travelynx
+ instance. See `examples/nginx-site` for an nginx config.
+
+travelynx consists of two runtimes: the web application and a background
+worker. Your service supervisor (or docker compose / docker stack / kubernetes
+setup) should orchestrate them somewhere along these lines.
+
+* `docker pull derfnull/travelynx:latest`
+* Start web application: `docker run -p 8093:8093 -v ${PWD}/local:/local:ro travelynx:latest`
+* Wait until localhost:8093 responds to requests
+* Start worker: `docker run -v ${PWD}/local:/local:ro travelynx:latest worker`
+
+To install an update: stop worker and web application, update the travelynx
+image, and start them again. Database migrations will be performed
+automatically. Note that downgrades are not supported.
Usage
---
@@ -137,19 +166,17 @@ bar. You will see a list of the five stations closest to your current location
name or DS100 code manually.
As soon as you select a train, you will be checked in and travelynx will switch
-to the journey / checkout view. If you already now where you're headed, you
+to the journey / checkout view. If you already know where you're headed, you
should click/tap on the destination station in the station list now. You can
-change the destination by selecting a new one any time.
+change the destination by selecting a new one anytime.
## Checking out
You are automatically checked out a few minutes after arrival at your
destination. If the train has already arrived when you select a destination and
its arrival was less than two hours ago, you are checked out immediately. If
-it's more than two hours, it will not be included in the scheduled and
-real-time data fetched by travelynx. In this case, you have to check out
-without arrival data using the link at the bottom of the checkin menu's station
-list.
+it's more than two hours, you need to perform a manual checkout (without
+arrival data) using the link at the bottom of the checkin menu's station list.
Testing
---
@@ -164,3 +191,33 @@ Please use a separate development database instead.
Run the tests by executing `prove`. Use `prove -v` for debug output and
`DBI_TRACE=SQL prove -v` to monitor SQL queries.
+
+Licensing
+---
+
+The copyright of individual files is documented in the file's header or in
+.reuse/dep5. The referenced licenses are stored in the LICENSES directory.
+
+The program code of travelynx is licensed under the terms of the GNU AGPL v3.
+HTML Templates and SASS/CSS layout are licensed under the terms of the MIT
+License. This means that you are free to host your own travelynx instance,
+both for personal/internal and public use, under the following conditions.
+
+* You are free to change HTML/SASS/CSS templates as you see fit (though you
+ must not remove the copyright headers).
+* If you make changes to the program code, that is, a file below lib/ or a
+ travelynx javascript file below public/static/js/, you must make those
+ changes available to the public.
+
+The easiest way of making changes available is by maintaining a public fork of
+the Git repository. A tarball is also acceptable. Please change the `source`
+ref in travelynx.conf if you are using a fork with custom changes.
+
+References
+---
+
+Mirrors of the travelynx repository are maintained at the following locations:
+
+* [Chaosdorf](https://chaosdorf.de/git/derf/travelynx)
+* [git.finalrewind.org](https://git.finalrewind.org/travelynx/)
+* [GitHub](https://github.com/derf/travelynx)