43785de6
Miguel Barão
- added documenta...
|
1
|
# Getting Started
|
a96cd2c7
Miguel Barão
- added logging s...
|
2
|
|
1e8f0810
Miguel Barão
update setup.py a...
|
3
|
|
5d859a41
Miguel Barão
update documentation
|
4
5
6
|
## Requirements
This application requires python3.7+ and a few additional python packages.
|
93e13002
Miguel Barão
updates README.md.
|
7
|
It also uses npm (Node package management) to install javascript libraries.
|
a96cd2c7
Miguel Barão
- added logging s...
|
8
|
|
39126690
Miguel Barão
removes npm and n...
|
9
10
11
12
|
### Install python3.7 with sqlite3 support and npm
This can be done using the system package management, downloaded from [http://www.python.org](), or compiled from sources.
|
f540e673
Miguel Barão
- added README.md
|
13
|
- Installing from the system package manager:
|
5d859a41
Miguel Barão
update documentation
|
14
15
|
```sh
|
39126690
Miguel Barão
removes npm and n...
|
16
|
sudo port install python37 npm5 # MacOS
|
443a1eea
Miguel Barão
Update to latest ...
|
17
|
sudo pkg install python37 py37-sqlite3 npm # FreeBSD
|
39126690
Miguel Barão
removes npm and n...
|
18
|
sudo apt install python3.7 npm # Linux
|
5d859a41
Miguel Barão
update documentation
|
19
20
|
```
|
43785de6
Miguel Barão
- added documenta...
|
21
|
- Installing from source:
|
39126690
Miguel Barão
removes npm and n...
|
22
|
|
43785de6
Miguel Barão
- added documenta...
|
23
|
Download from [http://www.python.org]() and
|
39126690
Miguel Barão
removes npm and n...
|
24
25
|
```sh
|
c54ee176
Miguel Barão
update javascript...
|
26
27
|
unxz Python-3.7.tar.xz
tar xvf Python-3.7.tar
|
39126690
Miguel Barão
removes npm and n...
|
28
29
|
cd Python-3.7
./configure --prefix=$HOME/.local/bin
|
1e8f0810
Miguel Barão
update setup.py a...
|
30
|
make && make install
|
93e13002
Miguel Barão
updates README.md.
|
31
32
|
```
|
43785de6
Miguel Barão
- added documenta...
|
33
|
This will install python locally under `~/.local/bin`. Make sure to add it to your `PATH` (edit `~/.profile` in MacOS or FreeBSD).
|
59213008
Miguel Barão
- fixed user path...
|
34
|
|
443a1eea
Miguel Barão
Update to latest ...
|
35
|
|
a96cd2c7
Miguel Barão
- added logging s...
|
36
|
### Install pip
|
43785de6
Miguel Barão
- added documenta...
|
37
|
|
39126690
Miguel Barão
removes npm and n...
|
38
39
|
If the `pip` command is not yet installed, run one of these:
|
1e8f0810
Miguel Barão
update setup.py a...
|
40
|
```sh
|
43785de6
Miguel Barão
- added documenta...
|
41
|
sudo apt install python3.7-pip # Ubuntu
|
f540e673
Miguel Barão
- added README.md
|
42
|
sudo pkg py37-pip # FreeBSD
|
443a1eea
Miguel Barão
Update to latest ...
|
43
44
|
sudo port install py37-pip # MacOS
python3.7 -m ensurepip --user # otherwise
|
39126690
Miguel Barão
removes npm and n...
|
45
|
```
|
5d859a41
Miguel Barão
update documentation
|
46
|
|
1e8f0810
Miguel Barão
update setup.py a...
|
47
48
49
50
51
|
The latter will install `pip` in your user account under `~/.local/bin`.
In the end you should be able to run `pip3 --version` and
`python3 -c "import sqlite3"` without errors (sometimes `pip3` is `pip`,
`pip3.7` or `pip-3.7`).
|
5dae401a
Miguel Barão
update README.md
|
52
|
If you want to always install python modules on the user account (recommended),
|
f540e673
Miguel Barão
- added README.md
|
53
|
edit the pip configuration file `~/.config/pip/pip.conf` (FreeBSD, Linux) or
|
43785de6
Miguel Barão
- added documenta...
|
54
55
56
57
|
`Library/Application Support/pip/pip.conf` (MacOS) and add the lines
```ini
[global]
|
f540e673
Miguel Barão
- added README.md
|
58
|
user = yes
|
39126690
Miguel Barão
removes npm and n...
|
59
|
```
|
f540e673
Miguel Barão
- added README.md
|
60
|
|
43785de6
Miguel Barão
- added documenta...
|
61
|
### Install python packages and javascript libraries:
|
39126690
Miguel Barão
removes npm and n...
|
62
|
|
43785de6
Miguel Barão
- added documenta...
|
63
|
Replace USER by your bitbucket username:
|
f540e673
Miguel Barão
- added README.md
|
64
|
|
c3eba869
Miguel Barão
update README.md
|
65
|
```sh
|
a96cd2c7
Miguel Barão
- added logging s...
|
66
|
cd somewhere
|
443a1eea
Miguel Barão
Update to latest ...
|
67
|
git clone https://git.xdi.uevora.pt/mjsb/aprendizations.git
|
1e8f0810
Miguel Barão
update setup.py a...
|
68
|
cd aprendizations
|
a96cd2c7
Miguel Barão
- added logging s...
|
69
|
pip install . # install aprendizations and dependencies
|
443a1eea
Miguel Barão
Update to latest ...
|
70
|
npm install # install javascript libraries
|
39126690
Miguel Barão
removes npm and n...
|
71
|
```
|
f540e673
Miguel Barão
- added README.md
|
72
|
|
39126690
Miguel Barão
removes npm and n...
|
73
74
|
Python packages are usually installed in:
|
5dae401a
Miguel Barão
update README.md
|
75
76
|
- `~/.local/lib/python3.7/site-packages/` in Linux/FreeBSD.
- `~/Library/python/3.7/lib/python/site-packages/` in MacOS.
|
93e13002
Miguel Barão
updates README.md.
|
77
|
|
1e8f0810
Miguel Barão
update setup.py a...
|
78
|
Javascript libraries are installed in `aprendizations/node_modules` directory.
|
5dae401a
Miguel Barão
update README.md
|
79
80
|
This libraries have symbolic links from `aprendizations/aprendizations/static`.
|
93e13002
Miguel Barão
updates README.md.
|
81
|
At this point aprendizations is installed in
|
b4ceb7fc
Miguel Barão
minor change in l...
|
82
|
|
93e13002
Miguel Barão
updates README.md.
|
83
84
85
|
```sh
~/Library/Python/3.7/bin # MacOS
~/.local/bin # FreeBSD/Linux
|
39126690
Miguel Barão
removes npm and n...
|
86
|
```
|
93e13002
Miguel Barão
updates README.md.
|
87
|
|
f540e673
Miguel Barão
- added README.md
|
88
|
and can be run with the command `aprendizations` (make sure this directory is
|
59213008
Miguel Barão
- fixed user path...
|
89
90
|
in your `$PATH`).
|
443a1eea
Miguel Barão
Update to latest ...
|
91
92
|
## Configuration
|
c288f8c6
Miguel Barao
- updated documen...
|
93
|
### Database
|
443a1eea
Miguel Barão
Update to latest ...
|
94
95
96
|
The user data is maintained in a sqlite3 database file. We first need to create
the database.
|
c288f8c6
Miguel Barao
- updated documen...
|
97
|
At the moment, the database should be located in the same directory as the main
|
93e13002
Miguel Barão
updates README.md.
|
98
|
configuration file (see below). As an example, do
|
f540e673
Miguel Barão
- added README.md
|
99
|
|
b4ceb7fc
Miguel Barão
minor change in l...
|
100
|
```sh
|
59213008
Miguel Barão
- fixed user path...
|
101
|
cd demo # contains a small example
|
43785de6
Miguel Barão
- added documenta...
|
102
103
104
|
initdb-aprendizations # show or initialize database
initdb-aprendizations --admin # add admin user
initdb-aprendizations inscricoes.csv # add students from CSV
|
59213008
Miguel Barão
- fixed user path...
|
105
|
initdb-aprendizations --add 1184 "Aladino da Silva" # add user
|
93e13002
Miguel Barão
updates README.md.
|
106
107
108
|
initdb-aprendizations --update 1184 --pw alibaba # update password
initdb-aprendizations --help # for the available options
```
|
bbc1c506
Miguel Barão
- documentation u...
|
109
|
|
43785de6
Miguel Barão
- added documenta...
|
110
|
The default password is equal to the user name used to login.
|
443a1eea
Miguel Barão
Update to latest ...
|
111
|
|
5d859a41
Miguel Barão
update documentation
|
112
|
|
43785de6
Miguel Barão
- added documenta...
|
113
|
### SSL Certificates
|
bbc1c506
Miguel Barão
- documentation u...
|
114
|
|
443a1eea
Miguel Barão
Update to latest ...
|
115
116
|
We need certificates for https. Certificates can be self-signed or validated by
a trusted authority.
|
bbc1c506
Miguel Barão
- documentation u...
|
117
|
|
43785de6
Miguel Barão
- added documenta...
|
118
|
Self-signed can be used locally for development and testing, but browsers will
|
93e13002
Miguel Barão
updates README.md.
|
119
120
|
complain. LetsEncrypt issues trusted and free certificates, but the server must
have a registered publicly accessible domain name.
|
43785de6
Miguel Barão
- added documenta...
|
121
|
|
bbc1c506
Miguel Barão
- documentation u...
|
122
|
#### Selfsigned
|
443a1eea
Miguel Barão
Update to latest ...
|
123
124
125
|
Generate a selfsigned certificate and place it in `aprendizations/certs`.
|
bbc1c506
Miguel Barão
- documentation u...
|
126
|
```sh
|
43785de6
Miguel Barão
- added documenta...
|
127
|
openssl req -x509 -newkey rsa:4096 -keyout privkey.pem -out cert.pem -days 365 -nodes
|
443a1eea
Miguel Barão
Update to latest ...
|
128
|
```
|
43785de6
Miguel Barão
- added documenta...
|
129
130
131
132
|
#### LetsEncrypt
```sh
|
bbc1c506
Miguel Barão
- documentation u...
|
133
|
sudo pkg install py27-certbot # FreeBSD
|
5d859a41
Miguel Barão
update documentation
|
134
135
136
137
|
```
Shutdown the firewall and any web server that might be running. Then run the script to generate the certificate:
|
443a1eea
Miguel Barão
Update to latest ...
|
138
139
|
```sh
sudo service pf stop # disable pf firewall (FreeBSD)
|
39126690
Miguel Barão
removes npm and n...
|
140
|
sudo certbot certonly --standalone -d www.example.com
|
5d859a41
Miguel Barão
update documentation
|
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
|
sudo service pf start # enable pf firewall
```
Certificates are saved under `/usr/local/etc/letsencrypt/live/www.example.com/`. Copy them to `aprendizations/certs` and change permissions to be readable:
```sh
sudo cp /usr/local/etc/letsencrypt/live/www.example.com/cert.pem .
sudo cp /usr/local/etc/letsencrypt/live/www.example.com/privkey.pem .
chmod 400 cert.pem privkey.pem
```
Renews can be done as follows:
```sh
sudo service pf stop # shutdown firewall
|
93e13002
Miguel Barão
updates README.md.
|
156
|
sudo certbot renew
|
c55940af
Miguel Barão
- minor change in...
|
157
|
sudo service pf start # start firewall
|
39126690
Miguel Barão
removes npm and n...
|
158
|
```
|
443a1eea
Miguel Barão
Update to latest ...
|
159
|
|
f540e673
Miguel Barão
- added README.md
|
160
|
and then copy the `cert.pem` and `privkey.pem` files to `aprendizations/certs` directory. Change permissions and ownership as appropriate.
|
43785de6
Miguel Barão
- added documenta...
|
161
|
|
3ec49458
Miguel Barão
fix README.md and...
|
162
|
|
39126690
Miguel Barão
removes npm and n...
|
163
|
### Testing
|
43785de6
Miguel Barão
- added documenta...
|
164
|
|
59213008
Miguel Barão
- fixed user path...
|
165
|
The application includes a small example in `demo/demo.yaml`. Run it with
|
443a1eea
Miguel Barão
Update to latest ...
|
166
167
|
```sh
|
93e13002
Miguel Barão
updates README.md.
|
168
|
cd demo
|
443a1eea
Miguel Barão
Update to latest ...
|
169
170
|
aprendizations demo.yaml
```
|
c288f8c6
Miguel Barao
- updated documen...
|
171
|
|
59213008
Miguel Barão
- fixed user path...
|
172
173
|
and open a browser at [https://127.0.0.1:8443](). If it everything looks good,
check at the correct address `https://www.example.com` (requires port forward
|
443a1eea
Miguel Barão
Update to latest ...
|
174
175
176
|
in the firewall). The option `--debug` provides more verbose logging and might
be useful during testing. The option `--check` generates all the questions once
before running the server to check for any obvious syntax error.
|
59213008
Miguel Barão
- fixed user path...
|
177
178
179
180
181
|
### Firewall configuration
Ports 80 and 443 are only usable by root. For security reasons it is better to
|
43785de6
Miguel Barão
- added documenta...
|
182
|
run the server as an unprivileged user on higher ports like 8080 for http and
|
93e13002
Miguel Barão
updates README.md.
|
183
|
8443 for https. For this, we can configure port forwarding in the firewall to
|
43785de6
Miguel Barão
- added documenta...
|
184
185
186
|
redirect incoming tcp traffic from 80 to 8080 and 443 to 8443.
#### FreeBSD and pf
|
59213008
Miguel Barão
- fixed user path...
|
187
|
|
5d859a41
Miguel Barão
update documentation
|
188
|
Edit `/etc/pf.conf`:
|
59213008
Miguel Barão
- fixed user path...
|
189
|
|
43785de6
Miguel Barão
- added documenta...
|
190
|
```sh
|
59213008
Miguel Barão
- fixed user path...
|
191
|
ext_if="em0" # this should be the correct network interface
|
43785de6
Miguel Barão
- added documenta...
|
192
193
194
195
|
rdr on $ext_if proto tcp from any to any port 80 -> 127.0.0.1 port 8080
rdr on $ext_if proto tcp from any to any port 443 -> 127.0.0.1 port 8443
```
|
59213008
Miguel Barão
- fixed user path...
|
196
|
Under virtualbox with guest additions use `ext_if="vtnet0"`.
|
43785de6
Miguel Barão
- added documenta...
|
197
198
199
200
201
|
Edit `/etc/rc.conf`
```sh
pf_enable="YES"
|
59213008
Miguel Barão
- fixed user path...
|
202
|
pf_flags=""
|
ea4ff4d2
Miguel Barão
- radio: added su...
|
203
|
pf_rules="/etc/pf.conf"
|
59213008
Miguel Barão
- fixed user path...
|
204
|
|
39126690
Miguel Barão
removes npm and n...
|
205
206
|
# optional logging:
pflog_enable="YES"
|
93e13002
Miguel Barão
updates README.md.
|
207
208
209
210
|
pflog_flags=""
pflog_logfile="/var/log/pflog"
```
|
39126690
Miguel Barão
removes npm and n...
|
211
212
|
Reboot or `sudo service pf start`.
|
443a1eea
Miguel Barão
Update to latest ...
|
213
214
215
|
## Troubleshooting
|
39126690
Miguel Barão
removes npm and n...
|
216
|
To help with troubleshooting, use the option `--debug` when running the server.
|
a203d3cc
Miguel Barão
- new http server...
|
217
|
This will increase logs in the terminal and will present the python exception
|
5d859a41
Miguel Barão
update documentation
|
218
219
220
221
222
|
errors in the browser.
Logging levels can be adjusted in `~/.config/aprendizations/logger.yaml` and
`~/.config/aprendizations/logger-debug.yaml`.
|
39126690
Miguel Barão
removes npm and n...
|
223
|
If these files do not yet exist, there are examples in `aprendizations/config` that can be copied to `~/.config/aprendizations`.
|
5d859a41
Miguel Barão
update documentation
|
224
225
|
#### UnicodeEncodeError
|
59213008
Miguel Barão
- fixed user path...
|
226
227
|
The server should not generate this error, but when using external scripts to
|
443a1eea
Miguel Barão
Update to latest ...
|
228
229
|
generate questions or to correct, these scripts can print unicode strings to
stdout. If the terminal does not support unicode, python will generate this
|
5dae401a
Miguel Barão
update README.md
|
230
|
exception.
|
43785de6
Miguel Barão
- added documenta...
|
231
|
|
443a1eea
Miguel Barão
Update to latest ...
|
232
|
- FreeBSD fix: edit `~/.login_conf` to use UTF-8, for example:
|
5dae401a
Miguel Barão
update README.md
|
233
|
|
43785de6
Miguel Barão
- added documenta...
|
234
|
```sh
|
443a1eea
Miguel Barão
Update to latest ...
|
235
236
|
me:\
:charset=UTF-8:\
|
43785de6
Miguel Barão
- added documenta...
|
237
|
:lang=en_US.UTF-8:
|
443a1eea
Miguel Barão
Update to latest ...
|
238
|
```
|
59213008
Miguel Barão
- fixed user path...
|
239
|
|
443a1eea
Miguel Barão
Update to latest ...
|
240
241
242
|
- Debian fix: check `locale`...
## FAQ
|
5dae401a
Miguel Barão
update README.md
|
243
|
|
59213008
Miguel Barão
- fixed user path...
|
244
|
- Which students did at least one topic?
|
443a1eea
Miguel Barão
Update to latest ...
|
245
|
|
59213008
Miguel Barão
- fixed user path...
|
246
|
```sh
|
43785de6
Miguel Barão
- added documenta...
|
247
248
249
250
251
|
sqlite3 students.db "select distinct student_id from studenttopic"
```
- How many topics has each student done?
|
f75a344f
Miguel Barão
- README.md updat...
|
252
|
```sh
|
443a1eea
Miguel Barão
Update to latest ...
|
253
254
255
256
257
258
259
260
|
sqlite3 students.db "select student_id, count(topic_id) from studenttopic group by student_id order by count(topic_id) desc"
```
- Which questions have more wrong answers?
```sh
sqlite3 students.db "select count(ref), ref from answers where grade<1.0 group by ref order by count(ref) desc"
```
|
db04e658
Miguel Barão
- added option to...
|
|
|
43785de6
Miguel Barão
- added documenta...
|
|
|
f75a344f
Miguel Barão
- README.md updat...
|
|
|
93e13002
Miguel Barão
updates README.md.
|
|
|
f75a344f
Miguel Barão
- README.md updat...
|
|
|
43785de6
Miguel Barão
- added documenta...
|
|
|
d187aad4
Miguel Barão
- adds courses
|
|
|
43785de6
Miguel Barão
- added documenta...
|
|
|
f75a344f
Miguel Barão
- README.md updat...
|
|
|
d187aad4
Miguel Barão
- adds courses
|
|
|
f75a344f
Miguel Barão
- README.md updat...
|
|
|
43785de6
Miguel Barão
- added documenta...
|
|
|
93e13002
Miguel Barão
updates README.md.
|
|
|
f75a344f
Miguel Barão
- README.md updat...
|
|
|
93e13002
Miguel Barão
updates README.md.
|
|
|
443a1eea
Miguel Barão
Update to latest ...
|
|
|
f75a344f
Miguel Barão
- README.md updat...
|
|
|
93e13002
Miguel Barão
updates README.md.
|
|
|
443a1eea
Miguel Barão
Update to latest ...
|
|
|
93e13002
Miguel Barão
updates README.md.
|
|
|