scanimation | ||
sorteerhoed | ||
www | ||
.gitattributes | ||
.gitignore | ||
config.yml | ||
disable_motors.py | ||
mt_task.xml | ||
Pipfile | ||
Pipfile.lock | ||
README.md | ||
requirements.txt | ||
server_test.py | ||
sorteerhoed.py | ||
test_drawing.svg | ||
test_pen.py |
Webserver
Webserver is published to the web trough ssh remote forward. In /etc/ssh/sshd_config set GatewayPorts yes
.
Then start autossh
to maintain the connection:
autossh -M 0 -o "ServerAliveInterval 30" -o "ServerAliveCountMax 3" -R 8127:localhost:8888 sorteerhoed@here.rubenvandeven.com
To resolve the country the (imprecise) GeoLite2 Free Country dataset is used. Download it from MaxMind and store it in the project root folder.
Start server
cd mechanical_turk
screen
pipenv shell
python disable_motors.py
python sorteerhoed.py --config config.local.yml --for-real
Scanning
For scanning run visudo and add to the sudoers file:
mt ALL=(ALL) NOPASSWD: /usr/bin/scanimage
Installation
Software dependencies:
- python3
- pipenv
- usbrelay
- autossh
Python deps:
pipenv install
Usbrelay
When installing usbrelay
apt install usbrelay
And set udev rules to access the device by anyone, according to usbrelay docs:
SUBSYSTEM=="usb", ATTR{idVendor}=="16c0",ATTR{idProduct}=="05df", MODE="0666"
KERNEL=="hidraw*", ATTRS{busnum}=="1", ATTRS{idVendor}=="16c0", ATTRS{idProduct}=="05df", MODE="0666"
into /etc/udev/rules.d/50-dct-tech-usb-relay-2.rules
and then reload rules:
sudo udevadm control --reload-rules && sudo udevadm trigger
Apache on here.rubenvandeven.com
Unfortunately an SSH remote port-forward does change the ip of the requester into ::1/127.0.0.1. One solution would be to run a proxy on the server itself, which forwards a port to our server port, while adding a X-Forwarded-For header.
Example of apache host setup to forward remote port 8888 to local port 8127, to which we connect our (auto)ssh remote tunnel (see above).
Listen 8888
<VirtualHost *:8888>
Servername here.rubenvandeven.com
RewriteEngins On
RewriteCond %{HTTP:Upgrade} =websocket [NC]
RewriteRule /(.*) ws://localhost:8127/$1 [P,L]
RewriteCond %{HTTP:Upgrade} !=websocket [NC]
RewriteRule /(.*) http://localhost:8127/$1 [P,L]
ProxyPass / http://localhost:8127/
ProxyPassReverse / http://localhost:8127/
ProxyPreserveHost On
</VirtualHost>
requires a2enmod rewrite proxy proxy_http proxy_wstunnel
s