WME Agenti Online (WMEAOL) Acesta este un modul al WinMENTOR ENTERPRISE(WME), produs de SC TH JUNIOR SRL. Modulul WMEAOL realizeaza o interfata pe browser web pentru operatiuni specifice utilizatorilor WME, destinata agentilor de vanzari. Detalii tehnice =============== WMEAOL este alcatuit din trei componente principale: --ServerAG.exe - furnizeaza mediul de comunicare intre aplicatiile client si baza de date WME. --monitor.html (MONITOR) - pagina web folosita pentru monitorizarea si oprirea ServerAG.exe. Se deschide cu dublu-click, in browser, si nu necesita instalare. Nu porneste serverul (o pagina web nu poate lansa programe de pe disc). --folderul /WMEAOL/Data/client, sursele pentru instatierea paginii web ce va servi ca interfata pentru utilizatorii aplicatiei WMEAOL foloseste doua protocoale de comunicare web: 1)HTTP pentru initializarea paginii-client si uploadul de fisiere sursa si 2)WS pentru comunicarea paginii web cu ServerAG.exe. Cerinte ======= -Sistem de operare Windows 10 -instalarea/configurarea in prealabil a unui server HTTP (exemplu: Apache), sau accesul prin ftp la un website; -configurarea in reteaua locala a porturilor accesate din exterior (port forwarding): 80 (portul implicit pentru acces http) si portul folosit de aplicatie pentru ws (implicit 9090; poate fi modificat in /WMEAOL/Data/app.ini - vezi Instalare, punctul 2) -un browser web modern pe calculatorul gazda, pentru pagina MONITOR (monitor.html). Instalare ========= 1) Copiati directorul WMEAOL in locatia dorita de pe disc, acolo unde doriti instalarea aplicatiei Directorul aplicatiei prezinta urmatoarea structura /[WMEAOL] - root dir -ServerAG.exe -monitor.html -killswitch.bat -readme.txt /[Data] -dir -app.ini -config.ini /[client] -dir ... /[oracle] -dir OPTIONAL, vezi mai jos /[network]/[admin] OPTIONAL, vezi mai jos ServerAG.exe contine in interiorul lui atat mediul de executie PHP, cat si codul serverului, deci nu este nevoie de nicio instalare de PHP pe calculatorul gazda. La prima pornire isi pregateste mediul de lucru in %LOCALAPPDATA%\WME\AgentiOnline (aproximativ 20 MB); urmatoarele porniri sunt imediate. Folderul acela se poate sterge oricand: se reface automat. Numele executabilului serverului In functie de versiunea cheii de licenta, executabilul serverului poate avea unul din numele: ServerAG.exe, WMEServerAG.exe, WMEServerAG10.exe sau WMEServerAG50.exe. Toate functioneaza identic. In acest document ne referim la el ca 'ServerAG.exe'; inlocuiti cu numele pe care il aveti efectiv in folder. killswitch.bat il opreste indiferent de nume. Folderul [oracle] (optional) Daca dezarhivati Oracle Instant Client 19 (32-bit) intr-un subfolder numit 'oracle', langa ServerAG.exe, aplicatia il va folosi de acolo si nu mai este necesara instalarea lui in PATH-ul sistemului. Folderul [network]\[admin] (optional) Daca puneti aici fisierul tnsnames.ora, aplicatia il va folosi automat, fara sa fie nevoie de variabila de sistem TNS_ADMIN. Daca sistemul are deja TNS_ADMIN configurat, acesta are prioritate. 2) Configurare aplicatie - daca sunteti la prima utilizare si nu aveti fisierele config.ini, app.ini, config.css, redenumiti config.ini.new.ini, app.ini.new.ini, config.css.new.css in respectiv config.ini, app.ini, config.css. (Fisierele .new sunt copii de referinta, livrate la fiecare actualizare exact ca sa NU suprascrie configuratia dumneavoastra. La o actualizare, comparati-le cu fisierele proprii: parametrii noi apar acolo.) - deschideti fisierul app.ini intr-un editor de text, si modificati setarile implicite daca este necesar, respectand instructiunile. - [database] : instanta bazei de date Oracle folosita de aplicatie, valoarea 'database' - daca folositi o baza de date PostgreSQL, setati parametrul PG = 1 si completati valorile pentru pg_host, pg_port si pg_dbname Acelasi ServerAG.exe functioneaza si cu Oracle si cu PostgreSQL; nu mai exista executabile separate. Alegerea se face exclusiv din app.ini, prin parametrul PG. Daca folositi numai PostgreSQL, nu este nevoie de Oracle Instant Client. Daca app.ini cere Oracle iar clientul Oracle lipseste, serverul nu porneste si va afisa un mesaj care spune exact ce trebuie instalat (in loc sa se opreasca mai tarziu, la prima autentificare). - [porturi] : porturile de acces, valorile 'APP_PORT' si 'EXT_PORT' (Nu este necesara configurare in aplicatie pentru portul de acces prin protocolul http, unde implict este portul 80; Totusi este necesara configurarea pentru accesul din exteriorul retelei locale. Vezi Cerinte.) Diferenta dintre cele doua, pe scurt: APP_PORT = portul pe care ASCULTA serverul pe calculatorul gazda EXT_PORT = portul pe care il APELEAZA browserul; se scrie automat in /Data/client/config.js Daca nu specificati EXT_PORT, se foloseste automat valoarea lui APP_PORT. Deci pentru utilizare in reteaua locala este suficient sa schimbati APP_PORT. Specificati EXT_PORT diferit de APP_PORT NUMAI daca aveti port-forwarding pe router (de exemplu EXT_PORT = 9500 redirectat catre APP_PORT = 8000). Daca cele doua difera, ServerAG.exe va avertiza in fereastra si in Data\ServerAG.log, pentru ca o valoare gresita aici duce la o pagina de client care nu se conecteaza. Pagina MONITOR (monitor.html) nu citeste app.ini. Daca schimbati APP_PORT, scrieti aceeasi valoare in casuta 'Port' din pagina - vezi punctul 5. - [GAZDA] : valoarea 'HOST_NAME' - [CALE] : valoarea 'CLIENT_DIR' 3) Configurare retea (necesara doar pentru accesul din afara retelei locale;) -vezi Cerinte si Instalare punctele 6.b si 7. 4) Configurare server web: (Apache) -Setati valoarea (in httpd.conf), calea catre /WMEAOL/Data/client/ -Porniti serverul 5) Pornirea aplicatiei -Porniti serverul cu dublu-click pe ServerAG.exe In folderul /WMEAOL/Data/client/ va fi generat un fisier de configurare pt client, /config.js . -Deschideti monitor.html (dublu-click; se deschide in browserul implicit) Pagina se conecteaza automat si afiseaza comunicarea dintre server si clientii conectati, mesajele serverului si erorile. Puteti trimite comenzi catre server (Ping!, PRINT SESSION) si puteti opri serverul cu butonul 'Stop AppServer'. -Daca in pagina WMEOL MONITOR apar mesaje de la server, se poate trece la pasul urmator. (Dupa pornirea serverului pagina WMEOL MONITOR poate fi inchisa; serverul continua sa functioneze. Pentru oprirea serverului deschideti din nou monitor.html si apasati butonul 'Stop AppServer'.) -Daca ati schimbat APP_PORT in app.ini, scrieti acelasi port in casuta 'Port' din pagina. Valoarea ramane memorata in browser. Se poate pune si in adresa: monitor.html?port=8000 (Pagina nu poate citi singura Data\app.ini: dintr-o pagina locala, browserele nu au acces la fisierele de pe disc.) -Serverul nu poate fi pornit din monitor.html: o pagina web nu poate lansa programe de pe disc. Pornirea se face prin dublu-click pe ServerAG.exe. -monitor.html poate fi instalat si pe serverul web, langa paginile de client, dar devine astfel accesibil tuturor: in acest caz puneti-l intr-un folder protejat prin parola. Recomandat este sa fie folosit numai local. Cand porniti ServerAG.exe se deschide o fereastra cu textul 'Server running...', avand pictograma WME in bara de titlu si in bara de activitati. Fereastra poate fi minimizata; serverul continua sa functioneze. Sub acest text este afisata baza de date citita din app.ini, ca sa se vada imediat cu ce lucreaza serverul, de exemplu: Oracle - DBVIVI PostgreSQL - 10.0.101.83:5432/postgres Aceeasi informatie apare si la 'ServerAG.exe --status' si in Data\ServerAG.log. Daca inchideti fereastra, serverul se opreste (se cere o confirmare, pentru ca utilizatorii conectati ar fi deconectati). Cand serverul este oprit din MONITOR sau din killswitch.bat, fereastra se inchide singura, fara sa mai ceara nimic. Pentru diagnostic aveti, din linia de comanda, in folderul aplicatiei: ServerAG.exe --status arata daca serverul ruleaza ServerAG.exe --stop opreste serverul ServerAG.exe --console porneste serverul afisand mesajele in consola ServerAG.exe --probe verifica extensiile PHP si conexiunea la bibliotecile Oracle / PostgreSQL; rezultatul se salveaza si in /Data/diagnostic.txt killswitch.bat opreste serverul in caz de urgenta, cand nu mai raspunde la comenzile de mai sus. Nu porneste niciodata nimic. Fisierele utile pentru diagnostic se scriu in folderul /Data: ServerAG.log pornirile serverului si mesajele lui php_error.log erorile PHP fatal_errors.log erorile fatale Cand raportati o problema, trimiteti aceste trei fisiere. 6) Acces Utilizatorii aplicatiei se pot conecta in doua moduri: a) Local: de pe masina pe care s-a instalat aplcatia -Deschideti un browser web modern, capabil de conexiuni prin web-socket(Google Chrome, Mozilla Firefox, etc). -Accesati http://localhost Daca conexiunea a fost realizata, pe pagina va aparea formularul de autentificare. b) Remote: de pe alt dispozitiv, prin internet -Deschideti un browser web modern, capabil de conexiuni prin web-socket(Google Chrome, Mozilla Firefox, etc). -Accesati http://[HOST_NAME], unde [HOST_NAME] reprezinta valoarea setata in /WMEAOL/Data/app.ini Daca conexiunea a fost realizata, pe pagina va aparea formularul de autentificare. 7) Instalarea partii client pe un web-site -Copiati continutul /WMEAOL/Data/client/ in directorul dorit de pe site Exemplu: Daca se doreste instalarea la adresa http;//www.exemplu.ro/agenti/ se vor copia toate fiserele si sub-directoarele din /WMEAOL/Data/client/ in directorul /agenti/ de pe serverul care gazduieste site-ul. Atentie! Fisierul /WMEAOL/Data/client/config.js trebuie sa fie actualizat cu setarile corespunzatoare din /WMEAOL/Data/app.ini, respectiv adresa si portul la care poate fi accesat ServerAG.exe. -Accesati http://www.exemplu.ro/agenti/ dintr-un browser modern Daca conexiunea a fost realizata, pe pagina va aparea formularul de autentificare. -------------- Pentru versiunea Oracle: Daca primiti eroarea "Fatal error: Call to undefined function oci_connect()" sau "Unable to load dynamic library ...php_oci8_19.dll", trebuie instalat Oracle Instant Client versiunea 19c, 32-bit (x86). Il gasiti la https://www.oracle.com/database/technologies/instant-client/microsoft-windows-32-downloads.html (Version 19.x, Basic package). Este necesar si Microsoft Visual C++ Redistributable x86. Aveti doua variante de instalare: a) RECOMANDAT: dezarhivati continutul pachetului intr-un subfolder numit 'oracle', langa ServerAG.exe. Aplicatia il gaseste singura, nu trebuie modificat nimic in setarile Windows. b) dezarhivati intr-un folder oarecare (ex: C:\instantclient_19) si adaugati calea in System PATH. Verificati rezultatul cu: ServerAG.exe --probe Raportul spune direct daca biblioteca client Oracle a fost gasita si functioneaza. Daca primiti o eroare de tipul: ORA-12154 could not resolve the connect identifier specified verificati in tnsnames.ora ca aveti un string de conectare pt baza de date din app.ini. Calea catre tnsnames.ora poate fi indicata in doua feluri: puneti fisierul in subfolderul 'network\admin' de langa ServerAG.exe (varianta simpla), sau salvati calea in Environment variables, System, in variabila TNS_ADMIN. Pentru versiunea Postgresql: Nu mai este nevoie de nicio instalare: biblioteca client PostgreSQL (libpq) este inclusa in ServerAG.exe. Verificati cu ServerAG.exe --probe . Daca primiti eroarea la login: pg_connect(): Unable to connect to PostgreSQL server: authentication method 10 not supported on file trebuie pusa metoda md5 in loc de scram-sha-256, in pg_hba.conf, in tabelul de la final, pe fiecare linie; trebuie adaugata o linie noua, inaintea celorlalte: host all all 0.0.0.0/0 md5 si trebuie actualizata parola userului cu care va conectati, astfel incat sa fie criptata cu md5: alter system set password_encryption = 'md5'; select pg_reload_conf(); alter role numele_userului with password 'parola_userului'; select rolpassword from pg_authid where rolname = 'numele_userului'; Acum parola criptata ar trebui sa inceapa cu md5. ----------------- RULAREA CA SERVICIU WINDOWS =========================== Serverul poate fi instalat ca un serviciu folosind utilitarul nssm.exe (http://nssm.cc). ServerAG.exe ramane in prim-plan atat timp cat serverul functioneaza, exact cum are nevoie nssm, si nu deschide nicio fereastra. Rulati, dintr-o consola PORNITA CA ADMINISTRATOR: nssm install nume_serviciu si alegeti calea catre ServerAG.exe in fereastra care se deschide. La 'Startup directory' puneti folderul de instalare (cel care contine Data). Apoi puteti rula nssm start nume_serviciu nssm stop nume_serviciu pentru a porni serviciul (ar trebui sa apara cu numele specificat in Task manager, Services) si a-l opri. Pentru a dezinstala serviciul, folositi nssm remove nume_serviciu. De verificat inainte, pentru rularea ca serviciu ------------------------------------------------ Un serviciu ruleaza pe alt cont (implicit 'Local System') si fara desktop. De aceea: 1) Clientul Oracle trebuie sa fie vizibil pentru contul serviciului. Puneti-l in subfolderul 'oracle' de langa ServerAG.exe (varianta sigura), sau adaugati calea in PATH-ul de SISTEM (Environment Variables, System variables). O cale pusa doar in PATH-ul utilizatorului NU este vizibila pentru serviciu. 2) Daca folositi tnsnames.ora, puneti-l in subfolderul 'network\admin' de langa ServerAG.exe, sau setati TNS_ADMIN ca variabila de SISTEM, nu de utilizator. 3) Contul serviciului are nevoie de drept de SCRIERE in folderul Data (acolo se scriu ServerAG.log, php_error.log si Data\client\config.js). 4) Serviciul isi pregateste mediul PHP in profilul contului sub care ruleaza, deci prima pornire ca serviciu dureaza o secunda mai mult (pentru 'Local System', in C:\ProgramData\WME\AgentiOnline). 5) Ca serviciu nu exista ferestre de dialog: TOATE mesajele, inclusiv erorile de pornire, se scriu in Data\ServerAG.log. Verificati acolo daca serviciul nu porneste. 6) Nu porniti serviciul si, in paralel, ServerAG.exe prin dublu-click. A doua instanta este oprita automat, cu mesaj, dar nu are rost sa ajungeti acolo. Pagina MONITOR nu deranjeaza - este doar un client, nu ocupa portul. 7) In nssm, valoarea implicita pentru 'AppExit' este 'Restart', deci butonul 'Stop AppServer' din MONITOR si killswitch.bat nu opresc serverul definitiv: nssm il reporneste imediat. Oprirea corecta a serviciului este 'nssm stop nume_serviciu'. Verificare rapida inainte de a instala serviciul: rulati o singura data, manual, ServerAG.exe --probe si asigurati-va ca extensia bazei de date pe care o folositi apare cu 'OK'.