Rewrite confupdater back to individual files, change app start flow
This commit is contained in:
		
							parent
							
								
									da896c79f2
								
							
						
					
					
						commit
						011cf4356b
					
				| @ -5,7 +5,6 @@ import os | ||||
| import shutil | ||||
| import subprocess | ||||
| 
 | ||||
| from . import confupdater | ||||
| from . import tools | ||||
| from . import validator | ||||
| 
 | ||||
| @ -27,7 +26,7 @@ NGINX_TEMPLATE = '''server {{ | ||||
|     error_log /var/log/nginx/{app}.error.log; | ||||
| 
 | ||||
|     location / {{ | ||||
|         proxy_pass http://{ip}:8080; | ||||
|         proxy_pass http://{app}:8080; | ||||
|     }} | ||||
| 
 | ||||
|     error_page 502 /502.html; | ||||
| @ -212,37 +211,50 @@ class VMMgr: | ||||
|         subprocess.run(['/sbin/rc-update', 'del', app]) | ||||
| 
 | ||||
|     def clean_ephemeral(self): | ||||
|         # Remove ephemeral layer data | ||||
|         # Extract the variables from values given via lxc.hook.pre-start or lxc.hook.post-stop hook | ||||
|         app = os.environ['LXC_NAME'] | ||||
|         # Remove ephemeral layer data | ||||
|         tools.clean_ephemeral_layer(app) | ||||
| 
 | ||||
|     def register_container(self): | ||||
|         # Set IP of a container based on values given via lxc.hook.start-host hook | ||||
|         # Extract the variables from values given via lxc.hook.start-host hook | ||||
|         app = os.environ['LXC_NAME'] | ||||
|         pid = os.environ['LXC_PID'] | ||||
|         # Configure host and common params used in the app | ||||
|         self.configure_app(app) | ||||
|         # Lease the first unused IP to the container | ||||
|         ip = tools.get_unused_ip() | ||||
|         tools.update_hosts_lease(ip, app) | ||||
|         tools.set_container_ip(pid, ip) | ||||
| 
 | ||||
|     def unregister_container(self): | ||||
|         # Unset IP of a container based on values given via lxc.hook.post-stop hook | ||||
|         # Extract the variables from values given via lxc.hook.post-stop hook | ||||
|         app = os.environ['LXC_NAME'] | ||||
|         # Release the container IP | ||||
|         tools.update_hosts_lease(None, app) | ||||
|         # Remove ephemeral layer data | ||||
|         tools.clean_ephemeral_layer(app) | ||||
| 
 | ||||
|     def register_proxy(self, app, reload_nginx=True): | ||||
|         # Rebuild nginx configuration using IP of referenced app container and reload nginx | ||||
|     def configure_app(self, app): | ||||
|         script = os.path.join('/srv', app, 'update-conf.sh') | ||||
|         if os.path.exists(script): | ||||
|             setup_env = os.environ.copy() | ||||
|             setup_env['DOMAIN'] = self.domain | ||||
|             setup_env['PORT'] = self.port | ||||
|             setup_env['EMAIL'] = self.conf['common']['email'] | ||||
|             setup_env['GMAPS_API_KEY'] = self.conf['common']['gmaps-api-key'] | ||||
|             subprocess.run([script], env=setup_env, check=True) | ||||
| 
 | ||||
|     def register_proxy(self, app): | ||||
|         # Setup proxy configuration and reload nginx | ||||
|         if not validator.is_valid_app(app, self.conf): | ||||
|             raise validator.InvalidValueException('app', app) | ||||
|         ip = tools.get_container_ip(app) | ||||
|         with open(os.path.join(NGINX_DIR, '{}.conf'.format(app)), 'w') as f: | ||||
|             f.write(NGINX_TEMPLATE.format(app=app, host=self.conf['apps'][app]['host'], ip=ip, domain=self.domain, port=self.port)) | ||||
|         if reload_nginx: | ||||
|             tools.reload_nginx() | ||||
|             f.write(NGINX_TEMPLATE.format(app=app, host=self.conf['apps'][app]['host'], domain=self.domain, port=self.port)) | ||||
|         tools.reload_nginx() | ||||
| 
 | ||||
|     def unregister_proxy(self, app): | ||||
|         # Remove nginx configuration to prevent proxy mismatch when the container IP is reassigned to another container | ||||
|         # Remove proxy configuration and reload nginx | ||||
|         if not validator.is_valid_app(app, self.conf): | ||||
|             raise validator.InvalidValueException('app', app) | ||||
|         os.unlink(os.path.join(NGINX_DIR, '{}.conf'.format(app))) | ||||
| @ -257,17 +269,17 @@ class VMMgr: | ||||
|         self.domain = self.conf['host']['domain'] = domain | ||||
|         self.port = self.conf['host']['port'] = port | ||||
|         self.save_conf() | ||||
|         # Restart all apps to trigger configuration refresh | ||||
|         for app in self.conf['apps']: | ||||
|             if tools.is_service_started(app): | ||||
|                 tools.restart_service(app) | ||||
|         # Rebuild and restart nginx if it was requested. Web interface calls tools.restart_nginx() in WSGI close handler | ||||
|         self.rebuild_nginx(restart_nginx) | ||||
|         self.update_apps_urls() | ||||
| 
 | ||||
|     def rebuild_nginx(self, restart_nginx): | ||||
|         # Rebuild nginx config for the portal app | ||||
|         with open(os.path.join(NGINX_DIR, 'default.conf'), 'w') as f: | ||||
|             f.write(NGINX_DEFAULT_TEMPLATE.format(port=self.port)) | ||||
|         # Re-register nginx proxy for running apps | ||||
|         for app in self.conf['apps']: | ||||
|             if tools.is_service_started(app): | ||||
|                 self.register_proxy(app, False) | ||||
|         # Restart nginx to properly bind the new listen port | ||||
|         if restart_nginx: | ||||
|             tools.restart_nginx() | ||||
| @ -286,14 +298,6 @@ class VMMgr: | ||||
|         with open(ISSUE_FILE, 'w') as f: | ||||
|             f.write(ISSUE_TEMPLATE.format(url=tools.compile_url(domain, self.port))) | ||||
| 
 | ||||
|     def update_apps_urls(self): | ||||
|         # Update configuration for respective applications | ||||
|         confupdater.update_url(self.domain, self.port) | ||||
|         # Restart currently running apps in order to update config and re-register nginx proxy | ||||
|         for app in self.conf['apps']: | ||||
|             if tools.is_service_started(app): | ||||
|                 tools.restart_service(app) | ||||
| 
 | ||||
|     def update_common(self, email, gmaps_api_key): | ||||
|         # Update common configuration values | ||||
|         if email != None: | ||||
| @ -301,21 +305,21 @@ class VMMgr: | ||||
|             if not validator.is_valid_email(email): | ||||
|                 raise validator.InvalidValueException('email', email) | ||||
|             self.conf['common']['email'] = email | ||||
|             confupdater.update_email(email) | ||||
|         if gmaps_api_key != None: | ||||
|             # Update Google Maps API key | ||||
|             self.conf['common']['gmaps-api-key'] = gmaps_api_key | ||||
|             confupdater.update_gmaps_api_key(gmaps_api_key) | ||||
|         # Save config to file | ||||
|         self.save_conf() | ||||
|         # Restart currently running apps in order to update config | ||||
|         for app in self.conf['apps']: | ||||
|             # Restart currently running apps in order to update their config | ||||
|             if tools.is_service_started(app): | ||||
|                 tools.restart_service(app) | ||||
| 
 | ||||
|     def update_password(self, oldpassword, newpassword): | ||||
|         # Update LUKS password and adminpwd for WSGI application | ||||
|         tools.update_luks_password(oldpassword, newpassword) | ||||
|         input = '{}\n{}'.format(oldpassword, newpassword).encode() | ||||
|         subprocess.run(['cryptsetup', 'luksChangeKey', '/dev/sda2'], input=input, check=True) | ||||
|         # Update bcrypt-hashed password in config | ||||
|         self.conf['host']['adminpwd'] = tools.adminpwd_hash(newpassword) | ||||
|         # Save config to file | ||||
|         self.save_conf() | ||||
|  | ||||
| @ -1,150 +0,0 @@ | ||||
| # -*- coding: utf-8 -*- | ||||
| 
 | ||||
| # TODO: Rewrite back to individual files | ||||
| 
 | ||||
| import os | ||||
| import shutil | ||||
| import subprocess | ||||
| 
 | ||||
| from . import tools | ||||
| 
 | ||||
| TMP_FILE = '/tmp/confupdater.tmp' | ||||
| 
 | ||||
| def replace_file_line(filename, oldline, newline): | ||||
|     with open(filename, 'r') as conf, open(TMP_FILE, 'w') as tmp: | ||||
|         for line in conf: | ||||
|             # Find line starting with oldline | ||||
|             if line.startswith(oldline): | ||||
|                 # Replace te line with oldline, newline, \n (to not repeat the oldline in newline) | ||||
|                 tmp.write(oldline) | ||||
|                 tmp.write(newline) | ||||
|                 tmp.write('\n') | ||||
|                 # Dump the rest of the file and break the loop | ||||
|                 tmp.write(conf.read()) | ||||
|                 break | ||||
|             else: | ||||
|                 tmp.write(line) | ||||
|     # Copy the file contents to the original file (preserves permissions of the original file) | ||||
|     shutil.copyfile(TMP_FILE, filename) | ||||
|     os.unlink(TMP_FILE) | ||||
| 
 | ||||
| def run_mysql_query(query, database): | ||||
|     maria_started = tools.is_service_started('mariadb') | ||||
|     if not maria_started: | ||||
|         tools.start_service('mariadb') | ||||
|     subprocess.run(['lxc-attach', 'mariadb', '--', 'mysql', '-e', query, database]) | ||||
|     if not maria_started: | ||||
|         tools.stop_service('mariadb') | ||||
| 
 | ||||
| def app_exists(app): | ||||
|     return os.path.exists(os.path.join('/srv/', app)) | ||||
| 
 | ||||
| def update_gmaps_api_key(api_key): | ||||
|     # CKAN | ||||
|     if app_exists('ckan'): | ||||
|         replace_file_line('/srv/ckan/conf/ckan.ini', 'ckanext.geoview.gapi_key = ', api_key) | ||||
|     # Crisis Cleanup | ||||
|     if app_exists('crisiscleanup'): | ||||
|         replace_file_line('/srv/crisiscleanup/conf/boot.rb', 'ENV[\'GOOGLE_MAPS_API_KEY\'] = ', api_key) | ||||
|     # Pan.do/ra | ||||
|     if app_exists('pandora'): | ||||
|         replace_file_line('/srv/pandora/conf/local_settings.py', 'GOOGLE_API_KEY = ', '\'{}\''.format(api_key)) | ||||
|     # Sahana | ||||
|     if app_exists('sahana'): | ||||
|         replace_file_line('/srv/sahana/conf/000_config.py', 'settings.gis.api_google = ', '"{}"'.format(api_key)) | ||||
|     # Sahana Demo | ||||
|     if app_exists('sahana-demo'): | ||||
|         replace_file_line('/srv/sahana-demo/conf/000_config.py', 'settings.gis.api_google = ', '"{}"'.format(api_key)) | ||||
|     # SAMBRO | ||||
|     if app_exists('sambro'): | ||||
|         replace_file_line('/srv/sambro/conf/000_config.py', 'settings.gis.api_google = ', '"{}"'.format(api_key)) | ||||
|     # Sigmah | ||||
|     if app_exists('sigmah'): | ||||
|         replace_file_line('/srv/sigmah/conf/sigmah.properties', 'maps.key=', api_key) | ||||
|     # Ushahidi | ||||
|     if app_exists('ushahidi'): | ||||
|         replace_file_line('/srv/ushahidi/conf/config.json', '    "google_analytics_id": ', '"{}"'.format(api_key)) | ||||
| 
 | ||||
| def update_email(email): | ||||
|     # CKAN | ||||
|     if app_exists('ckan'): | ||||
|         replace_file_line('/srv/ckan/conf/ckan.ini', 'smtp.mail_from = ', email) | ||||
|         replace_file_line('/srv/ckan-datapusher/conf/datapusher_settings.py', 'FROM_EMAIL = ', '\'{}\''.format(email)) | ||||
|     # Crisis Cleanup | ||||
|     if app_exists('crisiscleanup'): | ||||
|         replace_file_line('/srv/crisiscleanup/conf/initializers/devise.rb', '  config.mailer_sender = ', '\'{}\''.format(email)) | ||||
|     # CTS | ||||
|     if app_exists('cts'): | ||||
|         replace_file_line('/srv/cts/conf/spotter.py', 'SERVER_EMAIL = ', '\'{}\''.format(email)) | ||||
|     # GNU Health | ||||
|     if app_exists('gnuhealth'): | ||||
|         replace_file_line('/srv/gnuhealth/conf/trytond.conf', 'from = ', email) | ||||
|     # KanBoard | ||||
|     if app_exists('kanboard'): | ||||
|         replace_file_line('/srv/kanboard/conf/config.php', 'define(\'MAIL_FROM\', ', '\'{}\');'.format(email)) | ||||
|     # Mifos X | ||||
|     if app_exists('mifosx'): | ||||
|         query = 'UPDATE `c_external_service_properties` SET `value` = "{}" WHERE `external_service_id` = 2 and `name` LIKE "username";'.format(email) | ||||
|         run_mysql_query(query, 'mifostenant-default') | ||||
|     # Sahana | ||||
|     if app_exists('sahana'): | ||||
|         replace_file_line('/srv/sahana/conf/000_config.py', 'settings.mail.sender = ', '"{}"'.format(email)) | ||||
|         replace_file_line('/srv/sahana/conf/000_config.py', 'settings.mail.approver = ', '"{}"'.format(email)) | ||||
|     # Sahana Demo | ||||
|     if app_exists('sahana-demo'): | ||||
|         replace_file_line('/srv/sahana-demo/conf/000_config.py', 'settings.mail.sender = ', '"{}"'.format(email)) | ||||
|         replace_file_line('/srv/sahana-demo/conf/000_config.py', 'settings.mail.approver = ', '"{}"'.format(email)) | ||||
|     # SAMBRO | ||||
|     if app_exists('sambro'): | ||||
|         replace_file_line('/srv/sambro/conf/000_config.py', 'settings.mail.sender = ', '"{}"'.format(email)) | ||||
|         replace_file_line('/srv/sambro/conf/000_config.py', 'settings.mail.approver = ', '"{}"'.format(email)) | ||||
|     # SeedDMS | ||||
|     if app_exists('seeddms'): | ||||
|         replace_file_line('/srv/seeddms/conf/settings.xml', '        <smtp smtpServer="host" smtpPort="25" smtpSendFrom=', '"{}" smtpUser="" smtpPassword=""/>'.format(email)) | ||||
|     # Sigmah | ||||
|     if app_exists('sigmah'): | ||||
|         replace_file_line('/srv/sigmah/conf/sigmah.properties', 'mail.from.address=', email) | ||||
|         replace_file_line('/srv/sigmah/conf/sigmah.properties', 'mail.support.to=', email) | ||||
|     # Ushahidi | ||||
|     if app_exists('ushahidi'): | ||||
|         email_json = '{{\\"incoming_type\\":\\"IMAP\\",\\"incoming_server\\":\\"localhost\\",\\"incoming_port\\":143,\\"incoming_security\\":\\"None\\",\\"incoming_username\\":\\"{}\\",\\"incoming_password\\":\\"password\\",\\"outgoing_type\\":\\"SMTP\\",\\"outgoing_server\\":\\"host\\",\\"outgoing_port\\":25,\\"outgoing_security\\":\\"None\\",\\"outgoing_username\\":\\"{}\\",\\"outgoing_password\\":\\"password\\",\\"from\\":\\"{}\\",\\"from_name\\":\\"Ushahidi\\"}}'.format(email, email, email) | ||||
|         query = 'UPDATE `config` SET `config_value` = "{}" WHERE `group_name` LIKE "data-provider" AND `config_key` LIKE "email";'.format(email_json) | ||||
|         run_mysql_query(query, 'ushahidi') | ||||
|         query = 'UPDATE `config` SET `config_value` = "\\"{}\\"" WHERE `group_name` LIKE "site" AND `config_key` LIKE "email";'.format(email) | ||||
|         run_mysql_query(query, 'ushahidi') | ||||
| 
 | ||||
| def update_url(domain, port): | ||||
|     host = tools.compile_url(domain, port, None) | ||||
|     # CKAN | ||||
|     if app_exists('ckan'): | ||||
|         replace_file_line('/srv/ckan/conf/ckan.ini', 'ckan.site_url = ', 'https://ckan.{}'.format(host)) | ||||
|     # Mifos X | ||||
|     if app_exists('mifosx'): | ||||
|         replace_file_line('/srv/mifosx/conf/server.xml', '               proxyName=', '"{}"'.format(domain)) | ||||
|         replace_file_line('/srv/mifosx/conf/server.xml', '               proxyPort=', '"{}"'.format(port)) | ||||
|     # Motech | ||||
|     if app_exists('motech'): | ||||
|         replace_file_line('/srv/motech/conf/config/motech-settings.properties', 'server.url=', 'https://motech.{}'.format(host)) | ||||
|     # OpenDataKit | ||||
|     if app_exists('opendatakit'): | ||||
|         replace_file_line('/srv/opendatakit/conf/server.xml', '               proxyName=', '"{}"'.format(domain)) | ||||
|         replace_file_line('/srv/opendatakit/conf/server.xml', '               proxyPort=', '"{}"'.format(port)) | ||||
|         replace_file_line('/srv/opendatakit/conf/security.properties', 'security.server.securePort=', port) | ||||
|     # Pan.do/ra | ||||
|     if app_exists('pandora'): | ||||
|         replace_file_line('/srv/pandora/conf/config.jsonc', '        "url": ', '"pandora.{}"'.format(host)) | ||||
|     # Sahana | ||||
|     if app_exists('sahana'): | ||||
|         replace_file_line('/srv/sahana/conf/000_config.py', 'settings.base.public_url = ', '"https://sahana.{}"'.format(host)) | ||||
|     # Sahana Demo | ||||
|     if app_exists('sahana-demo'): | ||||
|         replace_file_line('/srv/sahana-demo/conf/000_config.py', 'settings.base.public_url = ', '"https://sahana-demo.{}"'.format(host)) | ||||
|     # SAMBRO | ||||
|     if app_exists('sambro'): | ||||
|         replace_file_line('/srv/sambro/conf/000_config.py', 'settings.base.public_url = ', '"https://sambro.{}"'.format(host)) | ||||
|     # Ushahidi | ||||
|     if app_exists('ushahidi'): | ||||
|         replace_file_line('/srv/ushahidi/conf/config.json', '    "backend_url": ', '"https://ush.{}/platform",'.format(host)) | ||||
|         api_url = '\\"https:\\\\/\\\\/ush.{}\\\\/platform\\\\/api\\\\/v3\\\\/config\\\\/data-provider\\"'.format(host) | ||||
|         query = 'UPDATE `config` SET `config_value` = "{}" WHERE `group_name` LIKE "data-provider" AND `config_key` LIKE "url";'.format(api_url) | ||||
|         run_mysql_query(query, 'ushahidi') | ||||
| @ -10,22 +10,20 @@ import socket | ||||
| import ssl | ||||
| import subprocess | ||||
| 
 | ||||
| NULL_IP = '[100::1]' | ||||
| 
 | ||||
| def compile_url(domain, port, proto='https'): | ||||
|     port = '' if (proto == 'https' and  port == '443') or (proto == 'http' and port == '80') else ':{}'.format(port) | ||||
|     host = '{}{}'.format(domain, port) | ||||
|     return '{}://{}'.format(proto, host) if proto is not None else host | ||||
| 
 | ||||
| def get_local_ipv4(): | ||||
|     # Return first routable IPv4 address | ||||
|     # Return first routable IPv4 address of the VM (container host) | ||||
|     try: | ||||
|         return subprocess.run(['/sbin/ip', 'route', 'get', '1'], check=True, stdout=subprocess.PIPE).stdout.decode().split()[-1] | ||||
|     except: | ||||
|         return None | ||||
| 
 | ||||
| def get_local_ipv6(): | ||||
|     # Return first routable IPv6 address | ||||
|     # Return first routable IPv6 address of the VM (container host) | ||||
|     try: | ||||
|         return subprocess.run(['/sbin/ip', 'route', 'get', '2003::'], check=True, stdout=subprocess.PIPE).stdout.decode().split()[-3] | ||||
|     except: | ||||
| @ -90,7 +88,7 @@ def restart_service(service): | ||||
|     subprocess.run(['/sbin/service', service, 'restart']) | ||||
| 
 | ||||
| def reload_nginx(): | ||||
|     subprocess.run(['/sbin/service', 'nginx', 'reload']) | ||||
|     subprocess.run(['/usr/sbin/nginx', '-s', 'reload']) | ||||
| 
 | ||||
| def restart_nginx(): | ||||
|     restart_service('nginx') | ||||
| @ -107,10 +105,6 @@ def adminpwd_hash(password): | ||||
| def adminpwd_verify(password, hash): | ||||
|     return bcrypt.checkpw(password.encode(), hash.encode()) | ||||
| 
 | ||||
| def update_luks_password(oldpassword, newpassword): | ||||
|     input = '{}\n{}'.format(oldpassword, newpassword).encode() | ||||
|     subprocess.run(['cryptsetup', 'luksChangeKey', '/dev/sda2'], input=input, check=True) | ||||
| 
 | ||||
| def shutdown_vm(): | ||||
|     subprocess.run(['/sbin/poweroff']) | ||||
| 
 | ||||
| @ -142,14 +136,6 @@ def update_hosts_lease(ip, app): | ||||
|     with open('/etc/hosts', 'w') as fd: | ||||
|         fd.writelines(hosts) | ||||
| 
 | ||||
| def get_container_ip(app): | ||||
|     # Return an IP of a container. If the container doesn't exist, return address from IPv6 discard prefix instead | ||||
|     with open('/etc/hosts', 'r') as fd: | ||||
|         for line in fd: | ||||
|             if line.strip().endswith(' {}'.format(app)): | ||||
|                 return line.split()[0] | ||||
|     return NULL_IP | ||||
| 
 | ||||
| def set_container_ip(pid, ip): | ||||
|     # Set IP in container based on PID given via lxc.hook.start-host hook | ||||
|     cmd = 'ip addr add {}/16 broadcast 172.17.255.255 dev eth0 && ip route add default via 172.17.0.1'.format(ip) | ||||
|  | ||||
| @ -5,6 +5,7 @@ SOURCE_DIR=$(realpath $(dirname "${0}"))/setup | ||||
| 
 | ||||
| # Configure CKAN DataPusher | ||||
| mkdir -p /srv/ckan-datapusher/conf /srv/ckan-datapusher/data | ||||
| cp ${SOURCE_DIR}/srv/ckan-datapusher/update-conf.sh /srv/ckan-datapusher/update-conf.sh | ||||
| cp ${SOURCE_DIR}/srv/ckan-datapusher/conf/datapusher.wsgi /srv/ckan-datapusher/conf/datapusher.wsgi | ||||
| cp ${SOURCE_DIR}/srv/ckan-datapusher/conf/datapusher_settings.py /srv/ckan-datapusher/conf/datapusher_settings.py | ||||
| chown -R 8004:8004 /srv/ckan-datapusher/data | ||||
|  | ||||
							
								
								
									
										3
									
								
								ckan-datapusher/setup/srv/ckan-datapusher/update-conf.sh
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										3
									
								
								ckan-datapusher/setup/srv/ckan-datapusher/update-conf.sh
									
									
									
									
									
										Executable file
									
								
							| @ -0,0 +1,3 @@ | ||||
| #!/bin/sh | ||||
| 
 | ||||
| sed -i "s|\(^FROM_EMAIL = \).*|\1'${EMAIL}'|" /srv/ckan-datapusher/conf/datapusher_settings.py | ||||
| @ -22,6 +22,7 @@ service solr restart | ||||
| 
 | ||||
| # Configure CKAN | ||||
| mkdir -p /srv/ckan/conf /srv/ckan/data | ||||
| cp ${SOURCE_DIR}/srv/ckan/update-conf.sh /srv/ckan/update-conf.sh | ||||
| export CKAN_SECRET=$(head -c 18 /dev/urandom | base64) | ||||
| export CKAN_UUID=$(cat /proc/sys/kernel/random/uuid) | ||||
| envsubst <${SOURCE_DIR}/srv/ckan/conf/ckan.ini >/srv/ckan/conf/ckan.ini | ||||
|  | ||||
							
								
								
									
										8
									
								
								ckan/setup/srv/ckan/update-conf.sh
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										8
									
								
								ckan/setup/srv/ckan/update-conf.sh
									
									
									
									
									
										Executable file
									
								
							| @ -0,0 +1,8 @@ | ||||
| #!/bin/sh | ||||
| 
 | ||||
| HOST="${DOMAIN}" | ||||
| [ "${PORT}" != "443" ] && HOST="${DOMAIN}:${PORT}" | ||||
| sed -i "s|\(^ckan\.site_url = \).*|\1https://${HOST}|" /srv/ckan/conf/ckan.ini | ||||
| 
 | ||||
| sed -i "s|\(^smtp\.mail_from = \).*|\1${EMAIL}|" /srv/ckan/conf/ckan.ini | ||||
| sed -i "s|\(^ckanext\.geoview\.gapi_key = \).*|\1${GMAPS_API_KEY}|" /srv/ckan/conf/ckan.ini | ||||
| @ -16,6 +16,7 @@ chown 8005:8005 /srv/crisiscleanup/conf | ||||
| cp -r /var/lib/lxc/crisiscleanup/crisiscleanup/srv/crisiscleanup/config/. /srv/crisiscleanup/conf | ||||
| 
 | ||||
| # Configure CrisisCleanup | ||||
| cp ${SOURCE_DIR}/srv/crisiscleanup/update-conf.sh /srv/crisiscleanup/update-conf.sh | ||||
| export CRISISCLEANUP_ADMIN_USER="Admin" | ||||
| export CRISISCLEANUP_ADMIN_EMAIL="admin@example.com" | ||||
| export CRISISCLEANUP_ADMIN_PWD=$(head -c 12 /dev/urandom | base64) | ||||
|  | ||||
							
								
								
									
										4
									
								
								crisiscleanup/setup/srv/crisiscleanup/update-conf.sh
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										4
									
								
								crisiscleanup/setup/srv/crisiscleanup/update-conf.sh
									
									
									
									
									
										Executable file
									
								
							| @ -0,0 +1,4 @@ | ||||
| #!/bin/sh | ||||
| 
 | ||||
| sed -i "s|\(^  config\.mailer_sender = \).*|\1'${EMAIL}'|" /srv/crisiscleanup/conf/initializers/devise.rb | ||||
| sed -i "s|\(^ENV['GOOGLE_MAPS_API_KEY'] = \).*|\1${GMAPS_API_KEY}|" /srv/crisiscleanup/conf/boot.rb | ||||
| @ -15,6 +15,7 @@ mkdir -p /srv/cts/conf | ||||
| cp /var/lib/lxc/cts/cts/srv/cts/cts/settings/base.py /srv/cts/conf | ||||
| 
 | ||||
| # Configure CTS | ||||
| cp ${SOURCE_DIR}/srv/cts/update-conf.sh /srv/cts/update-conf.sh | ||||
| export CTS_SECRET=$(head -c 26 /dev/urandom | base64) | ||||
| envsubst <${SOURCE_DIR}/srv/cts/conf/spotter.py >/srv/cts/conf/spotter.py | ||||
| touch /srv/cts/conf/__init__.py | ||||
|  | ||||
							
								
								
									
										3
									
								
								cts/setup/srv/cts/update-conf.sh
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										3
									
								
								cts/setup/srv/cts/update-conf.sh
									
									
									
									
									
										Executable file
									
								
							| @ -0,0 +1,3 @@ | ||||
| #!/bin/sh | ||||
| 
 | ||||
| sed -i "s|\(^SERVER_EMAIL = \).*|\1'${EMAIL}'|" /srv/cts/conf/spotter.py | ||||
| @ -12,6 +12,7 @@ envsubst <${SOURCE_DIR}/createdb.sql | lxc-attach -u 5432 -g 5432 postgres -- ps | ||||
| 
 | ||||
| # Configure GNU Health | ||||
| mkdir -p /srv/gnuhealth/conf/ | ||||
| cp ${SOURCE_DIR}/srv/gnuhealth/update-conf.sh /srv/gnuhealth/update-conf.sh | ||||
| envsubst <${SOURCE_DIR}/srv/gnuhealth/conf/trytond.conf >/srv/gnuhealth/conf/trytond.conf | ||||
| 
 | ||||
| # Populate database | ||||
|  | ||||
							
								
								
									
										3
									
								
								gnuhealth/setup/srv/gnuhealth/update-conf.sh
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										3
									
								
								gnuhealth/setup/srv/gnuhealth/update-conf.sh
									
									
									
									
									
										Executable file
									
								
							| @ -0,0 +1,3 @@ | ||||
| #!/bin/sh | ||||
| 
 | ||||
| sed -i "s|\(^from = \).*|\1${EMAIL}|" /srv/gnuhealth/conf/trytond.conf | ||||
| @ -13,6 +13,7 @@ cat /var/lib/lxc/kanboard/kanboard/srv/kanboard/app/Schema/Sql/postgres.sql | lx | ||||
| 
 | ||||
| # Configure Kanboard | ||||
| mkdir -p /srv/kanboard/conf /srv/kanboard/data | ||||
| cp ${SOURCE_DIR}/srv/kanboard/update-conf.sh /srv/kanboard/update-conf.sh | ||||
| chown -R 8009:8009 /srv/kanboard/data | ||||
| envsubst <${SOURCE_DIR}/srv/kanboard/conf/config.php >/srv/kanboard/conf/config.php | ||||
| export KANBOARD_ADMIN_USER=admin | ||||
|  | ||||
							
								
								
									
										3
									
								
								kanboard/setup/srv/kanboard/update-conf.sh
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										3
									
								
								kanboard/setup/srv/kanboard/update-conf.sh
									
									
									
									
									
										Executable file
									
								
							| @ -0,0 +1,3 @@ | ||||
| #!/bin/sh | ||||
| 
 | ||||
| sed -i "s|\(^define('MAIL_FROM', \).*|\1'${EMAIL}');|" /srv/kanboard/conf/config.php | ||||
| @ -16,6 +16,7 @@ envsubst <${SOURCE_DIR}/schemapwd.sql | lxc-attach mariadb -- mysql mifosplatfor | ||||
| 
 | ||||
| # Configure Mifos X | ||||
| mkdir -p /srv/mifosx/conf | ||||
| cp ${SOURCE_DIR}/srv/mifosx/update-conf.sh /srv/mifosx/update-conf.sh | ||||
| envsubst <${SOURCE_DIR}/srv/mifosx/conf/context.xml >/srv/mifosx/conf/context.xml | ||||
| cp ${SOURCE_DIR}/srv/mifosx/conf/server.xml /srv/mifosx/conf/server.xml | ||||
| 
 | ||||
|  | ||||
							
								
								
									
										7
									
								
								mifosx/setup/srv/mifosx/update-conf.sh
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										7
									
								
								mifosx/setup/srv/mifosx/update-conf.sh
									
									
									
									
									
										Executable file
									
								
							| @ -0,0 +1,7 @@ | ||||
| #!/bin/sh | ||||
| 
 | ||||
| sed -i "s|\(^\s\+proxyName=\).*|\1\"${DOMAIN}\"|" /srv/mifosx/conf/server.xml | ||||
| sed -i "s|\(^\s\+proxyPort=\).*|\1\"${PORT}\"|" /srv/mifosx/conf/server.xml | ||||
| 
 | ||||
| QUERY="UPDATE \`c_external_service_properties\` SET `value` = '${EMAIL}' WHERE \`external_service_id\` = 2 and \`name\` LIKE 'username'" | ||||
| lxc-attach mariadb -- mysql -e "${QUERY}" mifostenant-default | ||||
| @ -13,6 +13,7 @@ envsubst <${SOURCE_DIR}/createdb.sql | lxc-attach -u 5432 -g 5432 postgres -- ps | ||||
| 
 | ||||
| # Configure Motech | ||||
| mkdir -p /srv/motech/conf/config/org.motechproject.motech-platform-email | ||||
| cp ${SOURCE_DIR}/srv/motech/update-conf.sh /srv/motech/update-conf.sh | ||||
| envsubst <${SOURCE_DIR}/srv/motech/conf/config/bootstrap.properties >/srv/motech/conf/config/bootstrap.properties | ||||
| cp ${SOURCE_DIR}/srv/motech/conf/config-locations.properties /srv/motech/conf/config-locations.properties | ||||
| cp ${SOURCE_DIR}/srv/motech/conf/config/motech-settings.properties /srv/motech/conf/config/motech-settings.properties | ||||
|  | ||||
							
								
								
									
										5
									
								
								motech/setup/srv/motech/update-conf.sh
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										5
									
								
								motech/setup/srv/motech/update-conf.sh
									
									
									
									
									
										Executable file
									
								
							| @ -0,0 +1,5 @@ | ||||
| #!/bin/sh | ||||
| 
 | ||||
| HOST="${DOMAIN}" | ||||
| [ "${PORT}" != "443" ] && HOST="${DOMAIN}:${PORT}" | ||||
| sed -i "s|\(^server\.url=\).*|\1https://motech.${HOST}|" /srv/motech/conf/config/motech-settings.properties | ||||
| @ -11,9 +11,8 @@ export OPENDATAKIT_PWD=$(head -c 18 /dev/urandom | base64) | ||||
| envsubst <${SOURCE_DIR}/createdb.sql | lxc-attach -u 5432 -g 5432 postgres -- psql | ||||
| 
 | ||||
| # Configure OpenDataKit | ||||
| export OPENDATAKIT_ADMIN_USER=admin | ||||
| export OPENDATAKIT_ADMIN_REALM=spotter | ||||
| mkdir -p /srv/opendatakit/conf | ||||
| cp ${SOURCE_DIR}/srv/opendatakit/update-conf.sh /srv/opendatakit/update-conf.sh | ||||
| envsubst <${SOURCE_DIR}/srv/opendatakit/conf/jdbc.properties >/srv/opendatakit/conf/jdbc.properties | ||||
| envsubst <${SOURCE_DIR}/srv/opendatakit/conf/security.properties >/srv/opendatakit/conf/security.properties | ||||
| cp ${SOURCE_DIR}/srv/opendatakit/conf/server.xml /srv/opendatakit/conf/server.xml | ||||
| @ -31,6 +30,8 @@ done | ||||
| service opendatakit stop | ||||
| 
 | ||||
| # Update admin account | ||||
| export OPENDATAKIT_ADMIN_USER=admin | ||||
| export OPENDATAKIT_ADMIN_REALM=spotter | ||||
| export OPENDATAKIT_ADMIN_PWD=$(head -c 12 /dev/urandom | base64) | ||||
| export OPENDATAKIT_ADMIN_SALT=$(head -c 4 /dev/urandom | hexdump -e '"%x"') # Must be 8 characters | ||||
| export OPENDATAKIT_ADMIN_BASIC_HASH=$(echo -n "${OPENDATAKIT_ADMIN_PWD}{${OPENDATAKIT_ADMIN_SALT}}" | sha1sum | tr -d " -") | ||||
|  | ||||
							
								
								
									
										5
									
								
								opendatakit/setup/srv/opendatakit/update-conf.sh
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										5
									
								
								opendatakit/setup/srv/opendatakit/update-conf.sh
									
									
									
									
									
										Executable file
									
								
							| @ -0,0 +1,5 @@ | ||||
| #!/bin/sh | ||||
| 
 | ||||
| sed -i "s|\(^\s\+proxyName=\).*|\1\"${DOMAIN}\"|" /srv/mifosx/conf/server.xml | ||||
| sed -i "s|\(^\s\+proxyPort=\).*|\1\"${PORT}\"|" /srv/mifosx/conf/server.xml | ||||
| sed -i "s|\(^security\.server\.securePort=\).*|\1${PORT}|" /srv/opendatakit/conf/security.properties | ||||
| @ -19,6 +19,7 @@ lxc-attach rabbitmq -- rabbitmqctl set_permissions -p /pandora pandora ".*" ".*" | ||||
| 
 | ||||
| # Configure Pandora | ||||
| mkdir -p /srv/pandora/conf /srv/pandora/data | ||||
| cp ${SOURCE_DIR}/srv/pandora/update-conf.sh /srv/pandora/update-conf.sh | ||||
| chown 8002:8002 /srv/pandora/data | ||||
| # Copy customized configuration if VANILLA environment variable is not set, else use the default pandora config | ||||
| if [ ${VANILLA:-0} -eq 0 ]; then | ||||
|  | ||||
							
								
								
									
										7
									
								
								pandora/setup/srv/pandora/update-conf.sh
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										7
									
								
								pandora/setup/srv/pandora/update-conf.sh
									
									
									
									
									
										Executable file
									
								
							| @ -0,0 +1,7 @@ | ||||
| #!/bin/sh | ||||
| 
 | ||||
| HOST="${DOMAIN}" | ||||
| [ "${PORT}" != "443" ] && HOST="${DOMAIN}:${PORT}" | ||||
| sed -i "s|\(^\s\+\"url\": \).*|\1\"pandora.${HOST}\"|" /srv/pandora/conf/config.jsonc | ||||
| 
 | ||||
| sed -i "s|\(^GOOGLE_API_KEY = \).*|\1'${GMAPS_API_KEY}'|" /srv/pandora/conf/local_settings.py | ||||
| @ -18,6 +18,7 @@ cp -rp /var/lib/lxc/sahana/sahana/srv/web2py/applications/eden/models/. /srv/sah | ||||
| cp -rp /var/lib/lxc/sahana/sahana/srv/web2py/applications/eden/modules/templates/${TEMPLATE}/. /srv/sahana-demo/data/${TEMPLATE} | ||||
| 
 | ||||
| # Configure Sahana | ||||
| cp ${SOURCE_DIR}/srv/sahana-demo/update-conf.sh /srv/sahana-demo/update-conf.sh | ||||
| export SAHANADEMO_HMAC=$(head -c 18 /dev/urandom | base64) | ||||
| export SAHANADEMO_ADMIN_USER=admin@example.com | ||||
| export SAHANADEMO_ADMIN_PWD=$(head -c 12 /dev/urandom | base64) | ||||
|  | ||||
							
								
								
									
										9
									
								
								sahana-demo/setup/srv/sahana-demo/update-conf.sh
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										9
									
								
								sahana-demo/setup/srv/sahana-demo/update-conf.sh
									
									
									
									
									
										Executable file
									
								
							| @ -0,0 +1,9 @@ | ||||
| #!/bin/sh | ||||
| 
 | ||||
| HOST="${DOMAIN}" | ||||
| [ "${PORT}" != "443" ] && HOST="${PORT}:${DOMAIN}" | ||||
| sed -i "s|\(^settings\.base\.public_url = \).*|\1\"https://sahana.${HOST}\"|" /srv/sahana-demo/conf/000_config.py | ||||
| 
 | ||||
| sed -i "s|\(^settings\.mail\.sender = \).*|\1\"${EMAIL}\"|" /srv/sahana-demo/conf/000_config.py | ||||
| sed -i "s|\(^settings\.mail\.approver = \).*|\1\"${EMAIL}\"|" /srv/sahana-demo/conf/000_config.py | ||||
| sed -i "s|\(^settings\.gis\.api_google = \).*|\1\"${GMAPS_API_KEY}\"|" /srv/sahana-demo/conf/000_config.py | ||||
| @ -20,6 +20,7 @@ cp -r ${SOURCE_DIR}/srv/sahana/data/Spotter /srv/sahana/data/ | ||||
| chown -R 8001:8001 /srv/sahana/data | ||||
| 
 | ||||
| # Configure Sahana | ||||
| cp ${SOURCE_DIR}/srv/sahana/update-conf.sh /srv/sahana/update-conf.sh | ||||
| export SAHANA_HMAC=$(head -c 18 /dev/urandom | base64) | ||||
| export SAHANA_ADMIN_USER=admin@example.com | ||||
| export SAHANA_ADMIN_PWD=$(head -c 12 /dev/urandom | base64) | ||||
|  | ||||
							
								
								
									
										9
									
								
								sahana/setup/srv/sahana/update-conf.sh
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										9
									
								
								sahana/setup/srv/sahana/update-conf.sh
									
									
									
									
									
										Executable file
									
								
							| @ -0,0 +1,9 @@ | ||||
| #!/bin/sh | ||||
| 
 | ||||
| HOST="${DOMAIN}" | ||||
| [ "${PORT}" != "443" ] && HOST="${PORT}:${DOMAIN}" | ||||
| sed -i "s|\(^settings\.base\.public_url = \).*|\1\"https://sahana.${HOST}\"|" /srv/sahana/conf/000_config.py | ||||
| 
 | ||||
| sed -i "s|\(^settings\.mail\.sender = \).*|\1\"${EMAIL}\"|" /srv/sahana/conf/000_config.py | ||||
| sed -i "s|\(^settings\.mail\.approver = \).*|\1\"${EMAIL}\"|" /srv/sahana/conf/000_config.py | ||||
| sed -i "s|\(^settings\.gis\.api_google = \).*|\1\"${GMAPS_API_KEY}\"|" /srv/sahana/conf/000_config.py | ||||
| @ -17,6 +17,7 @@ cp -rp /var/lib/lxc/sahana/sahana/srv/web2py/applications/eden/models/. /srv/sah | ||||
| cp -rp /var/lib/lxc/sahana/sahana/srv/web2py/applications/eden/modules/templates/SAMBRO/. /srv/sahana-demo/data/SAMBRO | ||||
| 
 | ||||
| # Configure SAMBRO | ||||
| cp ${SOURCE_DIR}/srv/sambro/update-conf.sh /srv/sambro/update-conf.sh | ||||
| export SAMBRO_HMAC=$(head -c 18 /dev/urandom | base64) | ||||
| export SAMBRO_ADMIN_USER=admin@example.com | ||||
| export SAMBRO_ADMIN_PWD=$(head -c 12 /dev/urandom | base64) | ||||
|  | ||||
							
								
								
									
										9
									
								
								sambro/setup/srv/sambro/update-conf.sh
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										9
									
								
								sambro/setup/srv/sambro/update-conf.sh
									
									
									
									
									
										Executable file
									
								
							| @ -0,0 +1,9 @@ | ||||
| #!/bin/sh | ||||
| 
 | ||||
| HOST="${DOMAIN}" | ||||
| [ "${PORT}" != "443" ] && HOST="${PORT}:${DOMAIN}" | ||||
| sed -i "s|\(^settings\.base\.public_url = \).*|\1\"https://sahana.${HOST}\"|" /srv/sambro/conf/000_config.py | ||||
| 
 | ||||
| sed -i "s|\(^settings\.mail\.sender = \).*|\1\"${EMAIL}\"|" /srv/sambro/conf/000_config.py | ||||
| sed -i "s|\(^settings\.mail\.approver = \).*|\1\"${EMAIL}\"|" /srv/sambro/conf/000_config.py | ||||
| sed -i "s|\(^settings\.gis\.api_google = \).*|\1\"${GMAPS_API_KEY}\"|" /srv/sambro/conf/000_config.py | ||||
| @ -19,6 +19,7 @@ cp -rp /var/lib/lxc/seeddms/seeddms/srv/seeddms/data/. /srv/seeddms/data | ||||
| chown -R 8010:8010 /srv/seeddms/data | ||||
| 
 | ||||
| # Configure SeedDMS | ||||
| cp ${SOURCE_DIR}/srv/seeddms/update-conf.sh /srv/seeddms/update-conf.sh | ||||
| envsubst <${SOURCE_DIR}/srv/seeddms/conf/settings.xml >/srv/seeddms/conf/settings.xml | ||||
| export SEEDDMS_ADMIN_USER=admin | ||||
| export SEEDDMS_ADMIN_PWD=$(head -c 12 /dev/urandom | base64) | ||||
|  | ||||
							
								
								
									
										3
									
								
								seeddms/setup/srv/seeddms/update-conf.sh
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										3
									
								
								seeddms/setup/srv/seeddms/update-conf.sh
									
									
									
									
									
										Executable file
									
								
							| @ -0,0 +1,3 @@ | ||||
| #!/bin/sh | ||||
| 
 | ||||
| sed -i "s|\(^\s\+<smtp smtpServer=\"host\" smtpPort=\"25\" smtpSendFrom=\).*|\1\"${EMAIL}\" smtpUser=\"\" smtpPassword=\"\"/>|" /srv/seeddms/conf/settings.xml | ||||
| @ -12,6 +12,7 @@ envsubst <${SOURCE_DIR}/createdb.sql | lxc-attach -u 5432 -g 5432 postgres -- ps | ||||
| 
 | ||||
| # Configure Sigmah | ||||
| mkdir -p /srv/sigmah/conf /srv/sigmah/data/files /srv/sigmah/data/archives | ||||
| cp ${SOURCE_DIR}/srv/sigmah/update-conf.sh /srv/sigmah/update-conf.sh | ||||
| chown -R 8011:8011 /srv/sigmah/data | ||||
| envsubst <${SOURCE_DIR}/srv/sigmah/conf/persistence.xml >/srv/sigmah/conf/persistence.xml | ||||
| cp ${SOURCE_DIR}/srv/sigmah/conf/sigmah.properties /srv/sigmah/conf/sigmah.properties | ||||
|  | ||||
							
								
								
									
										5
									
								
								sigmah/setup/srv/sigmah/update-conf.sh
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										5
									
								
								sigmah/setup/srv/sigmah/update-conf.sh
									
									
									
									
									
										Executable file
									
								
							| @ -0,0 +1,5 @@ | ||||
| #!/bin/sh | ||||
| 
 | ||||
| sed -i "s|\(^mail\.from\.address=\).*|\1${EMAIL}|" /srv/sigmah/conf/sigmah.properties | ||||
| sed -i "s|\(^mail\.support\.to=\).*|\1${EMAIL}|" /srv/sigmah/conf/sigmah.properties | ||||
| sed -i "s|\(^maps\.key=\).*|\1${GMAPS_API_KEY}|" /srv/sigmah/conf/sigmah.properties | ||||
| @ -12,6 +12,7 @@ envsubst <${SOURCE_DIR}/createdb.sql | lxc-attach mariadb -- mysql | ||||
| 
 | ||||
| # Configure Ushahidi | ||||
| mkdir -p /srv/ushahidi/conf /srv/ushahidi/data | ||||
| cp ${SOURCE_DIR}/srv/ushahidi/update-conf.sh /srv/ushahidi/update-conf.sh | ||||
| chown 8014:8014 /srv/ushahidi/data | ||||
| envsubst <${SOURCE_DIR}/srv/ushahidi/conf/env >/srv/ushahidi/conf/env | ||||
| cp ${SOURCE_DIR}/srv/ushahidi/conf/config.json /srv/ushahidi/conf/config.json | ||||
|  | ||||
							
								
								
									
										15
									
								
								ushahidi/setup/srv/ushahidi/update-conf.sh
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										15
									
								
								ushahidi/setup/srv/ushahidi/update-conf.sh
									
									
									
									
									
										Executable file
									
								
							| @ -0,0 +1,15 @@ | ||||
| #!/bin/sh | ||||
| 
 | ||||
| HOST="${DOMAIN}" | ||||
| [ "${PORT}" != "443" ] && HOST="${DOMAIN}:${PORT}" | ||||
| sed -i "s|\(^\s\+\"backend_url\": \).*|\1\"https://ush.${HOST}/platform\"|" /srv/ushahidi/conf/config.json | ||||
| API_URL="\"https:\\\/\\\/ush.${HOST}\\\/platform\\\/api\\\/v3\\\/config\\\/data-provider\"" | ||||
| QUERY="UPDATE \`config\` SET \`config_value\` = '${API_URL}' WHERE \`group_name\` LIKE 'data-provider' AND \`config_key\` LIKE 'url'" | ||||
| lxc-attach mariadb -- mysql -e "${QUERY}" ushahidi | ||||
| 
 | ||||
| JSON="{\"incoming_type\":\"IMAP\",\"incoming_server\":\"localhost\",\"incoming_port\":143,\"incoming_security\":\"None\",\"incoming_username\":\"${EMAIL}\",\"incoming_password\":\"password\",\"outgoing_type\":\"SMTP\",\"outgoing_server\":\"host\",\"outgoing_port\":25,\"outgoing_security\":\"None\",\"outgoing_username\":\"${EMAIL}\",\"outgoing_password\":\"password\",\"from\":\"${EMAIL}\",\"from_name\":\"Ushahidi\"}" | ||||
| QUERY="UPDATE \`config\` SET \`config_value\` = '${JSON}' WHERE \`group_name\` LIKE 'data-provider' AND \`config_key\` LIKE 'email'" | ||||
| lxc-attach mariadb -- mysql -e "${QUERY}" ushahidi | ||||
| QUERY="UPDATE \`config\` SET \`config_value\` = '\"${EMAIL}\"' WHERE \`group_name\` LIKE 'site' AND \`config_key\` LIKE 'email'" | ||||
| lxc-attach mariadb -- mysql -e "${QUERY}" ushahidi | ||||
| sed -i "s|\(^\s\+\"google_analytics_id\": \).*|\1\"${GMAPS_API_KEY}\"|" /srv/ushahidi/conf/config.json | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user