== Configuration Guidelines == === File Permissions === {{{ chown www-data web2py/applications/admin/cron chown www-data web2py/applications/admin/cron/crontab chown www-data web2py/applications/admin/cache/ chown www-data web2py/applications/admin/databases/ chown www-data web2py/applications/admin/errors/ chown www-data web2py/applications/admin/languages/ chown www-data web2py/applications/admin/sessions/ chown www-data web2py/applications/admin/uploads/ cd web2py/applications bzr branch lp:s3 sahana chown www-data sahana/cron chown www-data sahana/cache/ chown www-data sahana/databases/ chown www-data sahana/errors/ chown www-data sahana/languages/ chown www-data sahana/sessions/ chown www-data sahana/static/img/markers chown www-data sahana/uploads/ mkdir sahana/uploads/gis_cache mkdir sahana/uploads/images mkdir sahana/uploads/tracks chown www-data sahana/uploads/gis_cache chown www-data sahana/uploads/images chown www-data sahana/uploads/tracks }}} === Configurable Options === These can be set via [http://127.0.0.1:8000/sahana/admin/setting/update/1] * Admin Name/Email/Tel * Debug: improve performance by deselecting this option. * Self-Registration: disable Self-Registration by deselecting this option. * Audit Read: Enable Auditing of all Read operations (Display) * Audit Write: Enable Auditing of all Write operations (Create/Update/Delete) In time these will be configured by [wiki:BluePrintWebSetup Web Setup]. Some Auth options are currently only configurable via editing {{models/00_settings.py}}: {{{ S3_PUBLIC_URL S3_UTC_OFFSET mail.settings.server mail.sender auth.settings.hmac_key (Do this *before* registering the 1st user!) auth.settings.registration_requires_verification auth.settings.registration_requires_approval auth.settings.verify_email_onaccept }}} In time we could expose to a Web-based admin page, although it's low priority as these are mostly installation-time decisions. Disable unnecessary modules, which is currently done in 2 areas: 1. Hide the menus (to reduce UI clutter): * WebUI: /sahana/appadmin/index * Table: {{{db.s3_module}}} 2. Disable the Models (to speed up performance): * edit file {{{models/01_modules.py}}} * section: {{{shn_module_enable}}} If you wish to hide some fields which you don't want to confuse your system, then you can do something like this {{{models/zzz_local.py}}} instead of amending the main model (this means that future merges from trunk won't clobber your changes): {{{ # Hide unnecessary fields table = 'pr_person' db[table].pr_pe_label.readable = False db[table].pr_pe_label.writable = False db[table].local_name.readable = False db[table].local_name.writable = False db[table].opt_pr_gender.readable = False db[table].opt_pr_gender.writable = False db[table].opt_pr_age_group.readable = False db[table].opt_pr_age_group.writable = False db[table].email.readable = False db[table].email.writable = False db[table].mobile_phone.readable = False db[table].mobile_phone.writable = False db[table].date_of_birth.readable = False db[table].date_of_birth.writable = False db[table].opt_pr_nationality.readable = False db[table].opt_pr_nationality.writable = False db[table].opt_pr_country.readable = False db[table].opt_pr_country.writable = False db[table].opt_pr_religion.readable = False db[table].opt_pr_religion.writable = False db[table].opt_pr_marital_status.readable = False db[table].opt_pr_marital_status.writable = False db[table].occupation.readable = False db[table].occupation.writable = False }}} === Roles === By default the 1st user to register will gain the Administrator role. All other users have just the 'Authenticated' level of access, which by default allows 'Read' access to all records. To Edit records, users need to be added to the 'Editors' role. To add roles to users, go to the Administration menu & within User Management choose 'Membership'. Security policy is configured in {{{models/zzz.py}}} === {{{favicon.ico}}} & {{{robots.txt}}} === These can be provided via 2 different means: * mod_rewrite * {{{web2py/routes.py}}}: copy {{{routes.example.py}}} & edit === {{{loadingAnimation.gif}}} === This thickbox file needs a hardcoded full path (relative paths don't work), so if you rename your app to something other than 'sahana' then you should amend * {{{static/scripts/S3/thickbox.js}}} * {{{static/scripts/S3/thickbox.min.js}}} * {{{static/scripts/S3/thickbox.compressed.js}}} === Themes === Ensure these files are writable by the webserver: {{{ chown www-data /path/to/web2py/applications/sahana/static/scripts/tools chown www-data /path/to/web2py/applications/sahana/static/styles/S3/sahana.css chown www-data /path/to/web2py/applications/sahana/static/styles/S3/sahana.min.css }}} Colour scheme: * select using Admin Panel Logo: * copy new logo to {{{static/img}}} * point to this using Admin Panel Footer: * copy new footer to {{{views/}}} * point to this using Admin Panel DeveloperGuidelinesThemes === Internet Hosting === Can switch to having users download files from CDNs instead of your server.[[BR]] This can improve performance in 2 ways: * The CDN may have faster/closer servers to the client * Increases the number of files being downloaded simultaneously, since pulled from different hostnames: http://www.websiteoptimization.com/speed/tweak/parallel/ jQuery from Google by uncommenting the line in {{{views/sahana_scripts_min.html}}} ext-all.js & ext-all.css from Cachefly by uncommenting the lines in {{{views/gis/gis_scripts_min.html}}} & {{{views/gis/ol_js_loaders.html}}} === Performance Optimisation === * Use [http://developer.yahoo.com/yslow/ YSlow] Firefox plugin to analyse the site * Ensure images are optimised: http://tools.dynamicdrive.com/imageoptimizer/index.php * Compress !JavaScript: http://compressorrater.thruhere.net * Use [http://pypi.python.org/pypi/slimmer/ Slimmer] on HTML/CSS? * GZip static files in Apache: http://developer.yahoo.com/performance/rules.html#gzip * Set Expires on static files in Apache * Use MySQL or PostgreSQL instead of SQLite * Disable DB migrations in {{{00_db.py}}}: migrate = False * Bytecode compile the application * Enable caching * return response.render('customview.html', data=data): http://groups.google.com/group/web2py/msg/39210d40d8a729c0 * http://groups.google.co.uk/group/web2py/browse_thread/thread/218bb58c96883578 * Clustering with Pound: http://www.web2pyslices.com/main/slices/take_slice/33 ([http://groups.google.com/group/web2py/browse_thread/thread/63543217b9a69955 Discussion]) ---- InstallationGuidelines