Dependencies : ============== lodel2 components : ------------------- core : python3 python3-lxml build dependencies : autoconf automake make webui plugin : python3-jinja2 python3-werkzeug uwsgi-plugin-python3 mongodb_datasource plugin : python3-pymongo lodel2 utils : -------------- mass_deploy dependencies : pwgen wamerican mongodb-clients Build & install : ================= ./bootstrap.sh #generate the configure, refresh the Makefile.in files #--prefix=/usr is mandatory on debian because of a python3.4.2 bug ./configure --sysconfdir=/etc --localstatedir=/var --prefix=/usr #build lodel2 (actually substitute paths script and buildconf.py files) make #Install lodel2 on system make install #Uninstall lodel2 make uninstall Creating debian package : ========================= make deb Other make targets : ==================== Doxygen documentation generation : ---------------------------------- make doxygen Run unit tests : ---------------- make check #or make unittest Cleaning to stop being annoyed when running git status : -------------------------------------------------------- make gitclean Lodel2 instance management utilities : ====================================== NOTE: You have to run in root to use this below SLIM : Simple Lodel Instance Manager ------------------------------------ - create a new instance named foo : slim -n foo -c - list instances : slim -l - list instances with details : slim -lv[v[v]] - list instances with output formated for bash processing : slim -l -b [-v[v[v]] - run make all for instance foo : slim -n foo -m - run make for all existing instances : slim --all -m - start an instance in forground slim -n foo --start -f - start all instances : slim -a --start - generate a nginx conf for all instances : slim -a --nginx-conf - set logger to warning level and log in file : slim -a -s --set-logger test:WARNING:/var/log/lodel2/%l.%s.log - get some help for more options & actions : slim -h mass_deploy.sh : ---------------- Use for easy mass deployment of instances with webui & uwsgi the script at $prefix/share/lodel2/scripts/mass_deploy.sh Usage : ------- #with N the number of instances to deploy mass_deploy.sh N Notes : ------- - configuration can be found in /etc/lodel2/mass_deploy.cfg to indicate mongodb admin credentials - mass deploy create instances directories in /tmp/lodel2_instances Mass deployments tricks & tips: =============================== Mass deployment on fresh install : ---------------------------------- #Install nginx & mongodb apt-get install nginx mongodb-server mongodb-clients #choose your credential export mongoadmin="admin"; export mongopass="pass"; #Disable auth to be able to connect to mongodb sed -ie 's/^#noauth = /noauth = /' /etc/mongodb.conf #Add an admin user to mongodb echo -e "use admin\ndb.addUser('$mongoadmin', '$mongopass')\nexit\n"|mongo #Reactivate auth sed -i -e 's/^noauth = /#noauth =/' -e 's/^#auth = /auth =/' /etc/mongodb.conf #Test connection echo "exit" | mongo --quiet -u $mongoadmin -p $mongopass admin && echo "Connection ok" || echo "connection fails" #Indicate mongodb credentials to mass_deploy echo -e "MONGODB_ADMIN_USER='$mongoadmin'\nMONGODB_ADMIN_PASSWORD='$mongopass'\n" >> /etc/lodel2/mass_deploy.cfg #Deploying 50 instances NINSTANCE=50 #Running mass_deploy /usr/share/lodel2/scripts/mass_deploy $NINSTANCE #FOLLOWING INSTRUCTIONS ARE FOR STARTING APPS WITH UWSGI # for standalone instructions see bellow #Updating nginx conf (delete /etc/nginx/sites-enabled/default if exists) slim --nginx-conf -a > /etc/nginx/sites-enabled/lodel2 /etc/init.d/nginx reload #Start all instances and check if they managed to start slim --start -a && sleep 2 && slim -l # FOLLOWING INSTRUCTIONS ARE FOR STANDALONE LODEL2 WEBSERVER #Configure nginx & restart it export lodel2_install_dir="/usr/lib/python3/dist-packages"; echo -e "server {\n\tlisten 80 default_server;\n\tlisten [::]:80 default_server;\n\tlocation / {\n\t\tproxy_pass http://localhost:1337/;\n\t}\n\t\n\tlocation /static/ {\n\t\talias $lodel2_install_dir/lodel/plugins/webui/templates/;\n\t}\n\t\n}\n" > /etc/nginx/sites-enabled/default /etc/init.d/nginx restart #Build dyncode for instances slim -a -m #Copy the multisite loader in lodel instances root folder cp /usr/lib/python3/dist-packages/lodel/plugins/multisite/loader.py /tmp/lodel2_instances/ cd /tmp/lodel2_instances/ #Start the server python3 loader.py #Now you can access to the app in HTTP via nginx throught port 80 #or directly via the python server throught the port 1337 Cleaning mongodb + instances : ------------------------------ slim --purge && /usr/share/lodel2/scripts/mass_deploy purgedb ; slim -l Debuging an instance in foreground (if it didn't manage to start) : ------------------------------------------------------------------- slim --start -f -n INSTANCE_NAME Instance operations : ===================== - Two utils are available for instances operations : * Make for op without parameters * lodel_admin.py for op with parameters - Makefile available target : # Leapi dynamic code creation ( in leapi_dyncode.py in lodel2 #instance root dir) make dyncode # Call migration handlers to tell them to init all needed #databases. (note : this target has dyncode as dependencie) make init_db make list_hooks # List all the hooks registered - lodel_admin.py : see lodel_admin.py -h ########################################## # Following informations can be obsolete # ########################################## Dynamic code generation : python3 scripts/refreshdyn.py examples/em_test.pickle OUTPUTFILE.py Instance creation : Use the script in scripts/create_instance.sh Usage : scripts/create_instance.sh instance_name instance_dir [lodel_libdir] Instance loader uppdate : If the install/loader.py is updated you can update instance's loader.py using scripts/create_instance.sh -u INSTANCE_PATH