Create vanilla Sahana Demo installation script
This commit is contained in:
		
							parent
							
								
									9c0b1ac8ce
								
							
						
					
					
						commit
						a924a2dd26
					
				
							
								
								
									
										41
									
								
								sahana-demo.sh
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										41
									
								
								sahana-demo.sh
									
									
									
									
									
										Executable file
									
								
							| @ -0,0 +1,41 @@ | |||||||
|  | #!/bin/sh | ||||||
|  | 
 | ||||||
|  | SOURCE_DIR=$(realpath $(dirname "${0}"))/sahana-demo | ||||||
|  | 
 | ||||||
|  | # Check prerequisites | ||||||
|  | docker image ls | grep -q postfix || $(realpath $(dirname "${0}"))/postfix.sh | ||||||
|  | docker image ls | grep -q postgres || $(realpath $(dirname "${0}"))/postgres.sh | ||||||
|  | docker image ls | grep -q sahana || docker build -t sahana $(realpath $(dirname "${0}"))/sahana | ||||||
|  | 
 | ||||||
|  | # Create PostgreSQL user and database | ||||||
|  | export SAHANADEMO_PWD=$(head -c 18 /dev/urandom | base64) | ||||||
|  | envsubst <${SOURCE_DIR}/createdb.sql | docker exec -i postgres psql | ||||||
|  | 
 | ||||||
|  | # Prepare persistent directory structure | ||||||
|  | mkdir -p /srv/sahana-demo/conf /srv/sahana-demo/data/databases /srv/sahana-demo/data/uploads | ||||||
|  | chown -R 8001:8001 /srv/sahana-demo/conf /srv/sahana-demo/data | ||||||
|  | docker run --rm -v /srv/sahana-demo/conf:/mnt/conf sahana cp -rp /srv/web2py/applications/eden/models/. /mnt/conf | ||||||
|  | 
 | ||||||
|  | # Configure Sahana | ||||||
|  | export SAHANADEMO_HMAC=$(head -c 18 /dev/urandom | base64) | ||||||
|  | envsubst <${SOURCE_DIR}/srv/sahana-demo/conf/000_config.py >/srv/sahana-demo/conf/000_config.py | ||||||
|  | cp ${SOURCE_DIR}/srv/sahana-demo/update-ip.sh /srv/sahana-demo/update-ip.sh | ||||||
|  | export SAHANADEMO_ADMIN_USER=admin@example.com | ||||||
|  | export SAHANADEMO_ADMIN_PWD=$(head -c 12 /dev/urandom | base64) | ||||||
|  | envsubst <${SOURCE_DIR}/masterUsers.csv >/tmp/masterUsers.csv | ||||||
|  | 
 | ||||||
|  | # Populate database | ||||||
|  | docker run --rm -h sahana-demo --link postgres -v /srv/sahana-demo/conf:/srv/web2py/applications/eden/models -v /srv/sahana-demo/data/Spotter:/srv/web2py/applications/eden/modules/templates/Spotter -v /srv/sahana-demo/data/databases:/srv/web2py/applications/eden/databases -v /tmp/masterUsers.csv:/srv/web2py/applications/eden/modules/templates/default/users/masterUsers.csv sahana ./web2py.py -S eden -M -R applications/eden/static/scripts/tools/noop.py | ||||||
|  | rm /tmp/masterUsers.csv | ||||||
|  | 
 | ||||||
|  | # Create Sahana service | ||||||
|  | cp ${SOURCE_DIR}/etc/init.d/sahana-demo /etc/init.d/sahana-demo | ||||||
|  | rc-update add sahana-demo | ||||||
|  | service sahana-demo start | ||||||
|  | 
 | ||||||
|  | # Create nginx app definition | ||||||
|  | cp ${SOURCE_DIR}/etc/nginx/conf.d/sahana-demo.conf /etc/nginx/conf.d/sahana-demo.conf | ||||||
|  | service nginx reload | ||||||
|  | 
 | ||||||
|  | # Add portal application definition | ||||||
|  | portal-app-manager sahana-eden-demo "https://{host}:8498/eden/" "${SAHANADEMO_ADMIN_USER}" "${SAHANADEMO_ADMIN_PWD}" | ||||||
							
								
								
									
										8
									
								
								sahana-demo/createdb.sql
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										8
									
								
								sahana-demo/createdb.sql
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,8 @@ | |||||||
|  | CREATE ROLE sahanademo NOSUPERUSER NOCREATEDB NOCREATEROLE NOINHERIT LOGIN ENCRYPTED PASSWORD '${SAHANADEMO_PWD}'; | ||||||
|  | CREATE DATABASE sahanademo; | ||||||
|  | REVOKE ALL ON DATABASE sahanademo FROM public; | ||||||
|  | ALTER DATABASE sahanademo OWNER TO sahanademo; | ||||||
|  | \c sahanademo; | ||||||
|  | CREATE EXTENSION postgis; | ||||||
|  | GRANT ALL ON geometry_columns TO sahanademo; | ||||||
|  | GRANT ALL ON spatial_ref_sys TO sahanademo; | ||||||
							
								
								
									
										29
									
								
								sahana-demo/etc/init.d/sahana-demo
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										29
									
								
								sahana-demo/etc/init.d/sahana-demo
									
									
									
									
									
										Executable file
									
								
							| @ -0,0 +1,29 @@ | |||||||
|  | #!/sbin/openrc-run | ||||||
|  | 
 | ||||||
|  | description="Sahana Eden Development docker container" | ||||||
|  | 
 | ||||||
|  | depend() { | ||||||
|  | 	need docker net postgres | ||||||
|  | 	use dns logger netmount postfix | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | start_pre() { | ||||||
|  | 	/srv/sahana-demo/update-ip.sh | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | start() { | ||||||
|  | 	/usr/bin/docker run -d --rm \ | ||||||
|  | 	--name sahana-demo \ | ||||||
|  | 	-h sahana-demo \ | ||||||
|  | 	--link postfix \ | ||||||
|  | 	--link postgres \ | ||||||
|  | 	-p 127.0.0.1:8098:8001 \ | ||||||
|  | 	-v /srv/sahana-demo/conf:/srv/web2py/applications/eden/models \ | ||||||
|  | 	-v /srv/sahana-demo/data/databases:/srv/web2py/applications/eden/databases \ | ||||||
|  | 	-v /srv/sahana-demo/data/uploads:/srv/web2py/applications/eden/uploads \ | ||||||
|  | 	sahana | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | stop() { | ||||||
|  | 	/usr/bin/docker stop sahana-demo | ||||||
|  | } | ||||||
							
								
								
									
										11
									
								
								sahana-demo/etc/nginx/conf.d/sahana-demo.conf
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										11
									
								
								sahana-demo/etc/nginx/conf.d/sahana-demo.conf
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,11 @@ | |||||||
|  | server { | ||||||
|  |     listen [::]:8898 ipv6only=off; | ||||||
|  |     listen [::]:8498 ssl http2 ipv6only=off; | ||||||
|  | 
 | ||||||
|  |     access_log /var/log/nginx/sahana-demo.access.log; | ||||||
|  |     error_log /var/log/nginx/sahana-demo.error.log; | ||||||
|  | 
 | ||||||
|  |     location / { | ||||||
|  |         proxy_pass http://127.0.0.1:8098; | ||||||
|  |     } | ||||||
|  | } | ||||||
							
								
								
									
										2
									
								
								sahana-demo/masterUsers.csv
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										2
									
								
								sahana-demo/masterUsers.csv
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,2 @@ | |||||||
|  | First Name,Last Name,Email,Password,Role,Organisation | ||||||
|  | Admin,User,${SAHANADEMO_ADMIN_USER},${SAHANADEMO_ADMIN_PWD},ADMIN, | ||||||
| 
 | 
							
								
								
									
										261
									
								
								sahana-demo/srv/sahana-demo/conf/000_config.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										261
									
								
								sahana-demo/srv/sahana-demo/conf/000_config.py
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,261 @@ | |||||||
|  | # -*- coding: utf-8 -*- | ||||||
|  | 
 | ||||||
|  | """ | ||||||
|  |     Machine-specific settings | ||||||
|  |     All settings which are typically edited for a specific machine should be done here | ||||||
|  | 
 | ||||||
|  |     Deployers should ideally not need to edit any other files outside of their template folder | ||||||
|  | 
 | ||||||
|  |     Note for Developers: | ||||||
|  |         /models/000_config.py is NOT in the Git repository, to avoid leaking of | ||||||
|  |         sensitive or irrelevant information into the repository. | ||||||
|  |     For changes to be committed, please also edit: | ||||||
|  |         modules/templates/000_config.py | ||||||
|  | """ | ||||||
|  | 
 | ||||||
|  | # Remove this line when you have edited this file sufficiently to proceed to the web interface | ||||||
|  | FINISHED_EDITING_CONFIG_FILE = True | ||||||
|  | 
 | ||||||
|  | # Select the Template | ||||||
|  | # - which Modules are enabled | ||||||
|  | # - PrePopulate data | ||||||
|  | # - Security Policy | ||||||
|  | # - Workflows | ||||||
|  | # - Theme | ||||||
|  | # - note that you should restart your web2py after changing this setting | ||||||
|  | settings.base.template = "default" | ||||||
|  | 
 | ||||||
|  | # Database settings | ||||||
|  | # Uncomment to use a different database, other than sqlite | ||||||
|  | settings.database.db_type = "postgres" | ||||||
|  | #settings.database.db_type = "mysql" | ||||||
|  | # Uncomment to use a different host | ||||||
|  | settings.database.host = "postgres" | ||||||
|  | # Uncomment to use a different port | ||||||
|  | #settings.database.port = 3306 | ||||||
|  | #settings.database.port = 5432 | ||||||
|  | # Uncomment to select a different name for your database | ||||||
|  | settings.database.database = "sahanademo" | ||||||
|  | # Uncomment to select a different username for your database | ||||||
|  | settings.database.username = "sahanademo" | ||||||
|  | # Uncomment to set the password | ||||||
|  | # NB Web2Py doesn't like passwords with an @ in them | ||||||
|  | settings.database.password = "${SAHANADEMO_PWD}" | ||||||
|  | # Uncomment to use a different pool size | ||||||
|  | #settings.database.pool_size = 30 | ||||||
|  | # Do we have a spatial DB available? (currently supports PostGIS. Spatialite to come.) | ||||||
|  | settings.gis.spatialdb = True | ||||||
|  | 
 | ||||||
|  | # Base settings | ||||||
|  | #settings.base.system_name = T("Sahana Eden Humanitarian Management Platform") | ||||||
|  | #settings.base.system_name_short = T("Sahana Eden") | ||||||
|  | # Set this to the Public URL of the instance | ||||||
|  | settings.base.public_url = "http://127.0.0.1" | ||||||
|  | 
 | ||||||
|  | # Switch to "False" in Production for a Performance gain | ||||||
|  | # (need to set to "True" again when Table definitions are changed) | ||||||
|  | settings.base.migrate = True | ||||||
|  | # To just create the .table files (also requires migrate=True): | ||||||
|  | #settings.base.fake_migrate = True | ||||||
|  | 
 | ||||||
|  | # Set this to True to switch to Debug mode | ||||||
|  | # Debug mode means that uncompressed CSS/JS files are loaded | ||||||
|  | # JS Debug messages are also available in the Console | ||||||
|  | # can also load an individual page in debug mode by appending URL with | ||||||
|  | # ?debug=1 | ||||||
|  | settings.base.debug = True | ||||||
|  | 
 | ||||||
|  | # Uncomment this to prevent automated test runs from remote | ||||||
|  | # settings.base.allow_testing = False | ||||||
|  | 
 | ||||||
|  | # Configure the log level ("DEBUG", "INFO", "WARNING", "ERROR" or "CRITICAL"), None = turn off logging | ||||||
|  | #settings.log.level = "WARNING" | ||||||
|  | # Uncomment to prevent writing log messages to the console (sys.stderr) | ||||||
|  | #settings.log.console = False | ||||||
|  | # Configure a log file (file name) | ||||||
|  | #settings.log.logfile = None | ||||||
|  | # Uncomment to get detailed caller information | ||||||
|  | #settings.log.caller_info = True | ||||||
|  | 
 | ||||||
|  | # Uncomment to use Content Delivery Networks to speed up Internet-facing sites | ||||||
|  | #settings.base.cdn = True | ||||||
|  | 
 | ||||||
|  | # Allow language files to be updated automatically | ||||||
|  | #settings.L10n.languages_readonly = False | ||||||
|  | 
 | ||||||
|  | # This setting should be changed _before_ registering the 1st user | ||||||
|  | # - should happen automatically if installing using supported scripts | ||||||
|  | settings.auth.hmac_key = "${SAHANADEMO_HMAC}" | ||||||
|  | 
 | ||||||
|  | # Minimum Password Length | ||||||
|  | #settings.auth.password_min_length = 8 | ||||||
|  | 
 | ||||||
|  | # Email settings | ||||||
|  | # Outbound server | ||||||
|  | settings.mail.server = "postfix:25" | ||||||
|  | #settings.mail.tls = True | ||||||
|  | # Useful for Windows Laptops: | ||||||
|  | # https://www.google.com/settings/security/lesssecureapps | ||||||
|  | #settings.mail.server = "smtp.gmail.com:587" | ||||||
|  | #settings.mail.tls = True | ||||||
|  | #settings.mail.login = "username:password" | ||||||
|  | # From Address - until this is set, no mails can be sent | ||||||
|  | settings.mail.sender = "'Sahana' <sahanademo@spotter.ngo>" | ||||||
|  | # Default email address to which requests to approve new user accounts gets sent | ||||||
|  | # This can be overridden for specific domains/organisations via the auth_domain table | ||||||
|  | #settings.mail.approver = "useradmin@example.org" | ||||||
|  | # Daily Limit on Sending of emails | ||||||
|  | #settings.mail.limit = 1000 | ||||||
|  | 
 | ||||||
|  | # Frontpage settings | ||||||
|  | # RSS feeds | ||||||
|  | settings.frontpage.rss = [ | ||||||
|  |     {"title": "Eden", | ||||||
|  |      # Trac timeline | ||||||
|  |      "url": "http://eden.sahanafoundation.org/timeline?ticket=on&changeset=on&milestone=on&wiki=on&max=50&daysback=90&format=rss" | ||||||
|  |     }, | ||||||
|  |     {"title": "Twitter", | ||||||
|  |      # @SahanaFOSS | ||||||
|  |      #"url": "https://search.twitter.com/search.rss?q=from%3ASahanaFOSS" # API v1 deprecated, so doesn't work, need to use 3rd-party service, like: | ||||||
|  |      "url": "http://www.rssitfor.me/getrss?name=@SahanaFOSS" | ||||||
|  |      # Hashtag | ||||||
|  |      #url: "http://search.twitter.com/search.atom?q=%23eqnz" # API v1 deprecated, so doesn't work, need to use 3rd-party service, like: | ||||||
|  |      #url: "http://api2.socialmention.com/search?q=%23eqnz&t=all&f=rss" | ||||||
|  |     } | ||||||
|  | ] | ||||||
|  | 
 | ||||||
|  | # Uncomment to restrict to specific country/countries | ||||||
|  | #settings.gis.countries= ("LK",) | ||||||
|  | 
 | ||||||
|  | # Uncomment to enable a guided tour | ||||||
|  | #settings.base.guided_tour = True | ||||||
|  | 
 | ||||||
|  | # Instance Name - for management scripts | ||||||
|  | #settings.base.instance_name = "test" | ||||||
|  | 
 | ||||||
|  | # Bing API Key (for Map layers) | ||||||
|  | # http://www.microsoft.com/maps/create-a-bing-maps-key.aspx | ||||||
|  | #settings.gis.api_bing = "" | ||||||
|  | # Google API Key (for Google Maps Layers) | ||||||
|  | #settings.gis.api_google = "" | ||||||
|  | # Yahoo API Key (for Geocoder) | ||||||
|  | #settings.gis.api_yahoo = "" | ||||||
|  | 
 | ||||||
|  | # GeoNames username | ||||||
|  | #settings.gis.geonames_username = "" | ||||||
|  | 
 | ||||||
|  | # Fill this in to get Google Analytics for your site | ||||||
|  | #settings.base.google_analytics_tracking_id = "" | ||||||
|  | 
 | ||||||
|  | # Chat server, see: http://eden.sahanafoundation.org/wiki/InstallationGuidelines/Chat | ||||||
|  | #settings.base.chat_server = { | ||||||
|  | #   "ip": "127.0.0.1", | ||||||
|  | #   "port": 7070, | ||||||
|  | #   "name": "servername", | ||||||
|  | #	# Default group everyone is added to | ||||||
|  | #   "groupname" : "everyone", | ||||||
|  | #   "server_db" : "openfire", | ||||||
|  | #   # These settings fallback to main DB settings if not specified | ||||||
|  | #   # Only mysql/postgres supported | ||||||
|  | #   #"server_db_type" : "mysql", | ||||||
|  | #   #"server_db_username" : "", | ||||||
|  | #   #"server_db_password": "", | ||||||
|  | #   #"server_db_port" : 3306, | ||||||
|  | #   #"server_db_ip" : "127.0.0.1", | ||||||
|  | #   } | ||||||
|  | 
 | ||||||
|  | # GeoServer (Currently used by GeoExplorer. Will allow REST control of GeoServer.) | ||||||
|  | # NB Needs to be publically-accessible URL for querying via client JS | ||||||
|  | #settings.gis.geoserver_url = "http://localhost/geoserver" | ||||||
|  | #settings.gis.geoserver_username = "admin" | ||||||
|  | #settings.gis.geoserver_password = "" | ||||||
|  | # Print Service URL: http://eden.sahanafoundation.org/wiki/BluePrintGISPrinting | ||||||
|  | #settings.gis.print_service = "/geoserver/pdf/" | ||||||
|  | 
 | ||||||
|  | # Google OAuth (to allow users to login using Google) | ||||||
|  | # https://code.google.com/apis/console/ | ||||||
|  | #settings.auth.google_id = "" | ||||||
|  | #settings.auth.google_secret = "" | ||||||
|  | 
 | ||||||
|  | # Pootle server | ||||||
|  | # settings.L10n.pootle_url = "http://pootle.sahanafoundation.org/" | ||||||
|  | # settings.L10n.pootle_username = "username" | ||||||
|  | # settings.L10n.pootle_password = "*****" | ||||||
|  | 
 | ||||||
|  | # SOLR server for Full-Text Search | ||||||
|  | #settings.base.solr_url = "http://127.0.0.1:8983/solr/" | ||||||
|  | 
 | ||||||
|  | # Memcache server to allow sharing of sessions across instances | ||||||
|  | #settings.base.session_memcache = '127.0.0.1:11211' | ||||||
|  | 
 | ||||||
|  | settings.base.session_db = True | ||||||
|  | 
 | ||||||
|  | # UI options | ||||||
|  | # Should user be prompted to save before navigating away? | ||||||
|  | #settings.ui.navigate_away_confirm = False | ||||||
|  | # Should user be prompted to confirm actions? | ||||||
|  | #settings.ui.confirm = False | ||||||
|  | # Should potentially large dropdowns be turned into autocompletes? | ||||||
|  | # (unused currently) | ||||||
|  | #settings.ui.autocomplete = True | ||||||
|  | #settings.ui.read_label = "Details" | ||||||
|  | #settings.ui.update_label = "Edit" | ||||||
|  | 
 | ||||||
|  | # Audit settings | ||||||
|  | # - can be a callable for custom hooks (return True to also perform normal logging, or False otherwise) | ||||||
|  | # NB Auditing (especially Reads) slows system down & consumes diskspace | ||||||
|  | #settings.security.audit_write = False | ||||||
|  | #settings.security.audit_read = False | ||||||
|  | 
 | ||||||
|  | # Performance Options | ||||||
|  | # Maximum number of search results for an Autocomplete Widget | ||||||
|  | #settings.search.max_results = 200 | ||||||
|  | # Maximum number of features for a Map Layer | ||||||
|  | #settings.gis.max_features = 1000 | ||||||
|  | 
 | ||||||
|  | # CAP Settings | ||||||
|  | # Change for different authority and organisations | ||||||
|  | # See http://alerting.worldweather.org/ for oid | ||||||
|  | # Country root oid. The oid for the organisation includes this base | ||||||
|  | #settings.cap.identifier_oid = "2.49.0.0.608.0" | ||||||
|  | # Change this for the offset period in days that the alert will be effective for | ||||||
|  | # Expire Date = Effective Date + expire_offset | ||||||
|  | # Default is 2 days | ||||||
|  | #settings.cap.expire_offset = 2 | ||||||
|  | 
 | ||||||
|  | # ============================================================================= | ||||||
|  | # Import the settings from the Template | ||||||
|  | # - note: invalid settings are ignored | ||||||
|  | # | ||||||
|  | settings.import_template() | ||||||
|  | 
 | ||||||
|  | # ============================================================================= | ||||||
|  | # Over-rides to the Template may be done here | ||||||
|  | # | ||||||
|  | 
 | ||||||
|  | # e.g. | ||||||
|  | #settings.base.system_name = T("Sahana TEST") | ||||||
|  | #settings.base.prepopulate = ("MY_TEMPLATE_ONLY") | ||||||
|  | settings.base.prepopulate += ("default", "default/users") | ||||||
|  | #settings.base.theme = "default" | ||||||
|  | #settings.L10n.default_language = "en" | ||||||
|  | #settings.security.policy = 7 # Organisation-ACLs | ||||||
|  | # Enable Additional Module(s) | ||||||
|  | #settings.modules["delphi"] = Storage( | ||||||
|  | #        name_nice = T("Delphi Decision Maker"), | ||||||
|  | #        restricted = False, | ||||||
|  | #        module_type = 10, | ||||||
|  | #    ) | ||||||
|  | # Disable a module which is normally used by the template | ||||||
|  | # - NB Only templates with adaptive menus will work nicely with this! | ||||||
|  | #del settings.modules["irs"] | ||||||
|  | 
 | ||||||
|  | # After 1st_run, set this for Production to save 1x DAL hit/request | ||||||
|  | #settings.base.prepopulate = 0 | ||||||
|  | 
 | ||||||
|  | # ============================================================================= | ||||||
|  | # A version number to tell update_check if there is a need to refresh the | ||||||
|  | # running copy of this file | ||||||
|  | VERSION = 1 | ||||||
|  | 
 | ||||||
|  | # END ========================================================================= | ||||||
							
								
								
									
										4
									
								
								sahana-demo/srv/sahana-demo/update-ip.sh
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										4
									
								
								sahana-demo/srv/sahana-demo/update-ip.sh
									
									
									
									
									
										Executable file
									
								
							| @ -0,0 +1,4 @@ | |||||||
|  | #!/bin/sh | ||||||
|  | 
 | ||||||
|  | URL=$(ip route get 1 | awk '{print $NF;exit}') | ||||||
|  | sed -i "s|^settings\.base\.public_url.*|settings.base.public_url = \"https://${URL}:8498\"|" /srv/sahana-demo/conf/000_config.py | ||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user