Skip to content
Home automation project with Android App and Raspberry PI
Java PHP Other
Branch: master
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Type Name Latest commit message Commit time
Failed to load latest commit information.
Autom8Lite
Java
autom8ws
scripts
serverautom8ws
Icon.psd
README.md
bcprov-jdk15on-159.jar

README.md

INSTALLAZIONI

Eseguire i comandi per installare nginx e php:

sudo apt-get update
sudo apt-get upgrade
sudo apt-get install nginx -y
sudo apt-get install php-fpm -y
sudo apt-get install sqlite3 -y
sudo apt-get install php7.0-sqlite3 -y
sudo apt-get install vim -y
sudo apt-get install oracle-java8-jdk -y

SETTINGS WEBSERVER

Eseguire il seguente comando per permettere la copia nella cartella /var/www/:

sudo chmod 777 /var/www

Dopodiché è necessario copiare le cartelle autom8ws/ e scripts/ nella cartella /var/www/.
Eseguire poi i seguenti comandi per impostare le permissions del webserver:

sudo chmod 777 /var/www/scripts
sudo chown -R www-data:www-data /var/www/scripts
sudo chmod 4777 /var/www/scripts/*
sudo chmod 777 /var/www/autom8ws
sudo chown -R www-data:www-data /var/www/autom8ws
sudo chmod 777 /var/www/autom8ws/*
sudo mkdir -p /var/www/uploads
sudo chmod 777 /var/www/uploads
sudo chown -R www-data:www-data /var/www/uploads

Modificare poi il file /etc/nginx/sites-enabled/default con il seguente contenuto:

server {
    listen 80;
    listen   [::]:80 default_server ipv6only=on;
    root /var/www/autom8ws;
    index index.php index.html index.htm;
    server_name localhost;
    location / {
        try_files $uri /index.html index.php;
    }
    location ~ \.php$ {
	try_files $uri $uri/ /index.php;
	fastcgi_pass unix:/run/php/php7.0-fpm.sock;
	fastcgi_index index.php;
        include fastcgi.conf;
    }
}

Per conferire all'utente www-data le permissions necessarie per eseguire i comandi con i permessi di root usare il comando:

sudo visudo

Aggiungere alla fine del file la seguente riga:

www-data ALL=(root) NOPASSWD:ALL

Disabilitare i log di nginx sul file /etc/nginx/nginx.conf, impostare le seguenti righe:

access_log /dev/null;
error_log /dev/null;

SSL CERTIFICATE

Generare certificato SSL per il server:

sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/ssl/private/nginx-selfsigned.key -out /etc/ssl/certs/nginx-selfsigned.crt
sudo openssl dhparam -out /etc/ssl/certs/dhparam.pem 2048
sudo vim /etc/nginx/snippets/self-signed.conf

E copiare nel file aperto le seguenti righe:

ssl_certificate /etc/ssl/certs/nginx-selfsigned.crt;
ssl_certificate_key /etc/ssl/private/nginx-selfsigned.key;

Eseguire poi:

sudo vim /etc/nginx/snippets/ssl-params.conf

E copiare nel file le seguenti righe:

ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_prefer_server_ciphers on;
ssl_ciphers "EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH";
ssl_ecdh_curve secp384r1;
ssl_session_cache shared:SSL:10m;
ssl_session_tickets off;
ssl_stapling on;
ssl_stapling_verify on;
resolver 8.8.8.8 8.8.4.4 valid=300s;
resolver_timeout 5s;
add_header Strict-Transport-Security "max-age=63072000; includeSubdomains";
add_header X-Frame-Options DENY;
add_header X-Content-Type-Options nosniff;
ssl_dhparam /etc/ssl/certs/dhparam.pem;

Eseguire poi:

sudo vim /etc/nginx/sites-available/default

E compilare il file con questa configurazione:

server {
    listen 80;
    listen   [::]:80 default_server ipv6only=on;
    listen 443 ssl http2 default_server;
    listen [::]:443 ssl http2 default_server;
    include snippets/self-signed.conf;
    include snippets/ssl-params.conf;
    root /var/www/autom8ws;
    index index.php index.html index.htm;
    server_name localhost;
    location / {
        try_files $uri /index.html index.php;
    }
    location ~ \.php$ {
        try_files $uri $uri/ /index.php;
        fastcgi_pass unix:/run/php/php7.0-fpm.sock;
        fastcgi_index index.php;
        include fastcgi.conf;
    }
}

Poi seguire questa guida per generare il keystore .bks per Android:
Copiare il file bcprov-jdk15on-159.jar in /home/pi/ ed eseguire il seguente comando:

keytool -importcert -v -trustcacerts -file "/etc/ssl/certs/nginx-selfsigned.crt" -alias imeto_alias -keystore "cert.bks" -provider org.bouncycastle.jce.provider.BouncyCastleProvider -providerpath "bcprov-jdk15on-159.jar" -storetype BKS

Inserire poi il file cert.bks nella cartella res/raw del progetto.

IMPOSTAZIONI PHP.INI

Decommentare le seguenti righe nel file /etc/php/7.0/fpm/php.ini:

extension=php_sqlite3.dll
extension=php_pdo_sqlite.dll

DISABILITARE I LOG

Aggiungere nel file /etc/rsyslog.conf la riga

*.*     ~

subito dopo l'inizio della sezione delle regole, identificata da

###############
#### RULES ####
###############

LOGROTATE

Creare un file /etc/logrotate.d/autom8 con il seguente contenuto:

/var/log/autom8.log {
    missingok
    notifempty
    size 100k
    monthly
    create 0777 root root
}

e creare poi il file /var/log/autom8.log con

sudo touch /var/log/autom8.log
sudo chmod 777 /var/log/autom8.log

Tutto ciò dirà a logrotate di ruotare il nostro file di logging quotidianamente se le dimensioni superano i 100k.

AUTOUPDATE (WEBSERVER)

Per far si che l'update automatico del webserver funzioni è necessario caricare l'ultima versione del firmware del webserver sul server principale.
Per generare un file di firmware aggiornato seguire i seguenti step:

  • Creare una cartella denominata firmware;
  • Copiare all'interno di essa le cartelle autom8ws e scripts;
  • Aggiornare all'interno del database SQLite nella cartella firmware/autom8ws/ il valore delle versioni nella tabella settings;
  • Eseguire lo script createFW.sh con argomento la cartella firmware creata in precedenza;
  • Copiare il file generato firmware.tar.gz sul server nella cartella /var/www/autom8ws/;
  • Modificare all'interno del database SQLite sul server principale il valore della versione nella tabella settings.

AUTOUPDATE (APP ANDROID)

Per permettere l'update automatico dell'applicazione Android è necessario seguire i seguenti step dopo aver modificato la app:

  • Modificare il valore della stringa con resource id app_version all'interno del file strings.xml con il valore della nuova release;
  • Compilare la app;
  • Copiare l'apk compilato al posto del file /var/www/autom8ws/release_[VERSIONE_ANDROID].apk;
  • Modificare all'interno del database SQLite sul server principale il valore della versione nella tabella settings, impostandolo uguale a quello della stringa dell'app.

CONFIGURAZIONI DI RETE

Per permettere che la configurazione di rete dalla app funzioni bisogna accedere al file /etc/dhcpcd.conf e rimpiazzare tutto il contenuto con:

hostname
clientid
persistent
option rapid_commit
option domain_name_servers, domain_name, domain_search, host_name
option classless_static_routes
option ntp_servers
option interface_mtu
require dhcp_server_identifier
slaac private

Eseguire poi il seguente comando per permettere la modificabilità del file:

sudo chmod 777 /etc/dhcpcd.conf

ABILITAZIONE WS

Per far funzionare il webserver eseguire questi comandi:

HWUUID=$(cat /proc/cpuinfo | grep Serial | cut -d ' ' -f 2)
sqlite3 /var/www/autom8ws/settings.db 'update settings set value="'$(echo $HWUUID)'" where key="HWUUID"';
You can’t perform that action at this time.