Compare commits
No commits in common. "master" and "add-change-log" have entirely different histories.
master
...
add-change
@ -26,7 +26,8 @@ Deployed on:
|
|||||||
* Bootstrap the application via [xppl/app.py](xppl/app.py).
|
* Bootstrap the application via [xppl/app.py](xppl/app.py).
|
||||||
* Added [Makefile](Makefile) targets for installing [RQLite](https://github.com/rqlite/rqlite).
|
* Added [Makefile](Makefile) targets for installing [RQLite](https://github.com/rqlite/rqlite).
|
||||||
* Run [isort](https://isort.readthedocs.io/en/latest/) and [pylava](https://github.com/pylava/pylava)
|
* Run [isort](https://isort.readthedocs.io/en/latest/) and [pylava](https://github.com/pylava/pylava)
|
||||||
code audit tools over the source.
|
code audit tools over the source to use PEP 8 style, catch any erroneous
|
||||||
|
imports, unused variables etc. with some basic static analysis.
|
||||||
* Use a new [Hypothesis](https://web.hypothes.is/) API key.
|
* Use a new [Hypothesis](https://web.hypothes.is/) API key.
|
||||||
|
|
||||||
### Fixed
|
### Fixed
|
||||||
|
16
README.md
16
README.md
@ -7,7 +7,7 @@ The [XPUB] library living at [Varia].
|
|||||||
[XPUB]: http://xpub.nl/
|
[XPUB]: http://xpub.nl/
|
||||||
[Varia]: https://varia.zone/
|
[Varia]: https://varia.zone/
|
||||||
|
|
||||||
# Run It Locally
|
# Change It
|
||||||
|
|
||||||
Please note, the following instructions have only been tested on the Debian Stretch OS.
|
Please note, the following instructions have only been tested on the Debian Stretch OS.
|
||||||
|
|
||||||
@ -26,8 +26,6 @@ $ pipenv install --dev --three
|
|||||||
$ pipenv run devserver
|
$ pipenv run devserver
|
||||||
```
|
```
|
||||||
|
|
||||||
The local development web server will now be available.
|
|
||||||
|
|
||||||
If you need to check the database contents, run:
|
If you need to check the database contents, run:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
@ -58,11 +56,10 @@ The XPPL is made up of a few parts:
|
|||||||
* The [Flask] application and it's dependencies.
|
* The [Flask] application and it's dependencies.
|
||||||
* The [RQLite] database.
|
* The [RQLite] database.
|
||||||
* The [Syncthing] integration for uploads.
|
* The [Syncthing] integration for uploads.
|
||||||
* The [Nginx reverse proxy].
|
* The Nginx reverse proxy.
|
||||||
* The [Let's Encrypt web certificates].
|
* The Let's Encrypt web certificates.
|
||||||
|
|
||||||
If you know [Ansible](https://www.ansible.com/overview/how-ansible-works) (it's
|
If you know [Ansible] (it's just YAML), you can just [read the entire configuration].
|
||||||
just YAML), you can just [read the entire configuration].
|
|
||||||
|
|
||||||
On the varia.zone machine, you can check the running services with:
|
On the varia.zone machine, you can check the running services with:
|
||||||
|
|
||||||
@ -88,7 +85,6 @@ No backups are configured right now.
|
|||||||
[Flask]: http://flask.pocoo.org/
|
[Flask]: http://flask.pocoo.org/
|
||||||
[RQLite]: https://github.com/rqlite/rqlite
|
[RQLite]: https://github.com/rqlite/rqlite
|
||||||
[Syncthing]: https://docs.syncthing.net/
|
[Syncthing]: https://docs.syncthing.net/
|
||||||
[Nginx reverse proxy]: https://docs.nginx.com/nginx/admin-guide/web-server/reverse-proxy/
|
|
||||||
[Let's Encrypt web certificates]: https://certbot.eff.org/
|
|
||||||
[Syncthing UI]: https://vvvvvvaria.org/st/
|
[Syncthing UI]: https://vvvvvvaria.org/st/
|
||||||
[read the entire configuration]: ansible/plays/setup.yml
|
[read the entire configuration]: ansible/plays/main.yml
|
||||||
|
[Ansible]: https://www.ansible.com/overview/how-ansible-works
|
||||||
|
@ -1,27 +1,14 @@
|
|||||||
# XPPL Ansible Automation
|
# XPPL Ansible Automation
|
||||||
|
|
||||||
An automated deployment for the XPPL. If you're running these scripts, you'll
|
An automated deployment for the XPPL.
|
||||||
need SSH access and Sudo permissions on the machines. It is already running
|
|
||||||
deployments for:
|
|
||||||
|
|
||||||
* [books.vvvvvvaria.org](https://books.vvvvvvaria.org/)
|
## Run It
|
||||||
|
|
||||||
## Prerequisites
|
You'll need to have SSH and Sudo access to [varia.zone] first.
|
||||||
|
|
||||||
You'll need to install [Ansible](https://docs.ansible.com).
|
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
$ sudo apt install -y ansible
|
$ sudo apt install -y ansible
|
||||||
|
$ ansible-playbook --ask-become-pass plays/main.yml
|
||||||
```
|
```
|
||||||
|
|
||||||
## Setup a New XPPL
|
[varia.zone]: https://varia.zone/
|
||||||
|
|
||||||
```bash
|
|
||||||
$ ansible-playbook --limit varia.zone --ask-become-pass plays/setup.yml
|
|
||||||
```
|
|
||||||
|
|
||||||
## Deploy a New XPPL Version
|
|
||||||
|
|
||||||
```bash
|
|
||||||
$ ansible-playbook --limit varia.zone --ask-become-pass plays/deploy.yml
|
|
||||||
```
|
|
||||||
|
@ -1,2 +1,2 @@
|
|||||||
[all]
|
[varia-zone]
|
||||||
varia.zone ansible_ssh_port=12345
|
varia.zone ansible_ssh_port=12345
|
||||||
|
@ -1,23 +0,0 @@
|
|||||||
---
|
|
||||||
|
|
||||||
# Just deploy a new version of the the XPPL.
|
|
||||||
# Depends on setup.yml being ran first to set things up.
|
|
||||||
|
|
||||||
- hosts: all
|
|
||||||
pre_tasks:
|
|
||||||
- name: Shutdown the running XPPL for the deployment.
|
|
||||||
become: true
|
|
||||||
supervisorctl:
|
|
||||||
name: 'xppl:'
|
|
||||||
state: stopped
|
|
||||||
roles:
|
|
||||||
- role: git # Clone the project source
|
|
||||||
- role: pipenv # Install Python dependencies
|
|
||||||
- role: env # Configure the application environment
|
|
||||||
- role: nginx # Setup the Nginx configuration
|
|
||||||
post_tasks:
|
|
||||||
- name: Start back up the XPPL after the deployment.
|
|
||||||
become: true
|
|
||||||
supervisorctl:
|
|
||||||
name: 'xppl:'
|
|
||||||
state: started
|
|
@ -1,14 +1,11 @@
|
|||||||
---
|
---
|
||||||
|
|
||||||
# Setup all necessary infrastructure for the project.
|
- hosts: varia-zone
|
||||||
# Install the project and get it running under supervisor.
|
|
||||||
|
|
||||||
- hosts: all
|
|
||||||
roles:
|
roles:
|
||||||
- role: perms # Setup users and groups
|
- role: perms # Setup users and groups
|
||||||
- role: git # Clone the project source
|
- role: git # Clone the project source
|
||||||
- role: pipenv # Install Python dependencies
|
- role: pipenv # Install Python dependencies
|
||||||
- role: env # Configure the application environment
|
- role: env # Configure application environment
|
||||||
- role: rqlite # Install RQLite
|
- role: rqlite # Install RQLite
|
||||||
- role: supervisor # Setup managed processes
|
- role: supervisor # Setup managed processes
|
||||||
- role: nginx # Setup the Nginx configuration
|
- role: nginx # Setup Nginx configuration
|
@ -6,7 +6,7 @@ from flask import request
|
|||||||
|
|
||||||
def get_annotations():
|
def get_annotations():
|
||||||
# TODO(decentral1se): remove this from the source
|
# TODO(decentral1se): remove this from the source
|
||||||
KEY = "6879-n8AksBoSB7kYoQ3eEwzpEr3nFQEmSp3XN-0PcKL_Sik"
|
KEY = "6879-H5GbA2KyFIeEUM1BubjVTLP8yM3GMyHgOAjjNe_GBxY"
|
||||||
|
|
||||||
# a dictionary containing necessary http headers
|
# a dictionary containing necessary http headers
|
||||||
headers = {
|
headers = {
|
||||||
@ -15,7 +15,7 @@ def get_annotations():
|
|||||||
"Authorization": "Bearer %s" % KEY
|
"Authorization": "Bearer %s" % KEY
|
||||||
}
|
}
|
||||||
|
|
||||||
base_url = "https://hypothes.is/api/search?user=xpub@hypothes.is"
|
base_url = "https://hypothes.is/api/search?user=varia_annotator@hypothes.is"
|
||||||
|
|
||||||
search_url = "".join([base_url])
|
search_url = "".join([base_url])
|
||||||
|
|
||||||
@ -45,7 +45,7 @@ def get_annot_results(annot, name):
|
|||||||
data = {
|
data = {
|
||||||
'text': item['text'],
|
'text': item['text'],
|
||||||
'extract': item['target'][0]['selector'][2]['exact'],
|
'extract': item['target'][0]['selector'][2]['exact'],
|
||||||
'title': item['uri'][37:], 'url': item['uri']
|
'title': item['document']['title'], 'url': item['uri']
|
||||||
}
|
}
|
||||||
res.append(data)
|
res.append(data)
|
||||||
else:
|
else:
|
||||||
@ -54,7 +54,7 @@ def get_annot_results(annot, name):
|
|||||||
data = {
|
data = {
|
||||||
'text': item['text'],
|
'text': item['text'],
|
||||||
'extract': item['target'][0]['selector'][1]['exact'],
|
'extract': item['target'][0]['selector'][1]['exact'],
|
||||||
'title': item['uri'][37:], 'url': item['uri']
|
'title': item['document']['title'], 'url': item['uri']
|
||||||
}
|
}
|
||||||
res.append(data)
|
res.append(data)
|
||||||
return res
|
return res
|
||||||
@ -71,7 +71,7 @@ def get_annot_book(annot, name):
|
|||||||
data = {
|
data = {
|
||||||
'text': item['text'],
|
'text': item['text'],
|
||||||
'extract': item['target'][0]['selector'][2]['exact'],
|
'extract': item['target'][0]['selector'][2]['exact'],
|
||||||
'title': item['uri'][37:], 'url': item['uri']
|
'title': item['document']['title'], 'url': item['uri']
|
||||||
}
|
}
|
||||||
res.append(data)
|
res.append(data)
|
||||||
else:
|
else:
|
||||||
@ -80,7 +80,7 @@ def get_annot_book(annot, name):
|
|||||||
data = {
|
data = {
|
||||||
'text': item['text'],
|
'text': item['text'],
|
||||||
'extract': item['target'][0]['selector'][1]['exact'],
|
'extract': item['target'][0]['selector'][1]['exact'],
|
||||||
'title': item['uri'][37:], 'url': item['uri']
|
'title': item['document']['title'], 'url': item['uri']
|
||||||
}
|
}
|
||||||
res.append(data)
|
res.append(data)
|
||||||
return res
|
return res
|
||||||
|
@ -11,7 +11,7 @@
|
|||||||
{%for book in books%}
|
{%for book in books%}
|
||||||
{%if book.file == row.uri%}
|
{%if book.file == row.uri%}
|
||||||
<p align="right" style="font-family:archivo narrow;font-size:10px;">Book</p>
|
<p align="right" style="font-family:archivo narrow;font-size:10px;">Book</p>
|
||||||
<a href="books/{{book.id}}"><p align="right" style="font-family:archivo narrow;font-size:18px;">{{book.file}}</p></a><br>
|
<a href="books/{{book.id}}"><p align="right" style="font-family:archivo narrow;font-size:18px;">{{book.title}}</p></a><br>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
|
|
||||||
|
@ -19,7 +19,7 @@
|
|||||||
{% for book in stack.books %}
|
{% for book in stack.books %}
|
||||||
{% if loop.length >= 5 %}
|
{% if loop.length >= 5 %}
|
||||||
{% if loop.index == 6 %}
|
{% if loop.index == 6 %}
|
||||||
<p style='color:red;'>Your stack is getting a little big. Proceed.</p>
|
<p style='color:red;'>Your stack is getting a little too big. Are these next books really relevant?</p>
|
||||||
<br>
|
<br>
|
||||||
<br>
|
<br>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
|
Loading…
Reference in New Issue
Block a user