48 lines
1.5 KiB
Markdown
48 lines
1.5 KiB
Markdown
# KOreader Sync Server
|
|
This is a KOreader sync server, implemented in Rust. It uses the crates *axum*, *sqlx*, *serde* and *serde_json*.
|
|
|
|
## Requirements
|
|
- Rust toolchain for compilation
|
|
- A running PostgreSQL server
|
|
- Nginx (or Apache) webserver as a reverse proxy, since kosyncrs only listens locally and uses HTTP.
|
|
|
|
## Installation
|
|
Just compile it with `cargo build --release`. You can then copy the executable for example to `/usr/local/bin/`.
|
|
|
|
If you want to start the service automatically, you can adapt the example systemd file for your needs. Please pay particularly attention to the PG_URL environment variable.You have to adjust the database username and password.
|
|
|
|
You can also use nginx as a reverse proxy, so that the sync server listens on port 443. An example file is provided.
|
|
|
|
### Database setup
|
|
First, create a new database user and set a password:
|
|
```
|
|
$ createuser -P kosync
|
|
```
|
|
|
|
Then, create a new database which is owned by the newly created user:
|
|
```
|
|
$ createdb -O kosync kosync
|
|
```
|
|
|
|
Connect to the database as user *kosync* (with psql) and create the database tables:
|
|
```sql
|
|
CREATE TABLE users (
|
|
id BIGSERIAL PRIMARY KEY,
|
|
username TEXT UNIQUE NOT NULL,
|
|
password TEXT
|
|
);
|
|
|
|
CREATE TABLE progresses (
|
|
id BIGSERIAL PRIMARY KEY,
|
|
user_id BIGINT,
|
|
document TEXT NOT NULL,
|
|
progress TEXT NOT NULL,
|
|
percentage REAL NOT NULL,
|
|
device TEXT NOT NULL,
|
|
device_id TEXT NOT NULL,
|
|
timestamp BIGINT NOT NULL,
|
|
FOREIGN KEY (user_id)
|
|
REFERENCES users(id) ON DELETE CASCADE,
|
|
UNIQUE (user_id, document)
|
|
);
|
|
```
|