Rewrite spotter-appmgr (partial squashmerge)

This commit is contained in:
Disassembler 2018-04-29 20:48:57 +02:00
parent 19ec74de4d
commit c5e55e7f2e
No known key found for this signature in database
GPG Key ID: 524BD33A0EE29499
73 changed files with 773 additions and 539 deletions

View File

@ -7,12 +7,9 @@ docker image ls | grep -q java || $(realpath $(dirname "${0}"))/java.sh
# Build Docker container # Build Docker container
docker build -t activemq ${SOURCE_DIR} docker build -t activemq ${SOURCE_DIR}
cp ${SOURCE_DIR}/etc/init.d/activemq /etc/init.d/activemq
rc-update -u
# Configure ActiveMQ # Configure ActiveMQ
mkdir -p /srv/activemq/data mkdir -p /srv/activemq/data
chown -R 61616:61616 /srv/activemq/data chown -R 61616:61616 /srv/activemq/data
# Configure Solr service
cp ${SOURCE_DIR}/etc/init.d/activemq /etc/init.d/activemq
rc-update add activemq
service activemq start

View File

@ -3,8 +3,7 @@
description="ActiveMQ docker container" description="ActiveMQ docker container"
depend() { depend() {
need docker net need docker
use dns logger netmount
} }
start() { start() {

View File

@ -27,20 +27,23 @@ cp ${SOURCE_DIR}/etc/conf.d/ntpd /etc/conf.d/ntpd
# Create a self-signed certificate # Create a self-signed certificate
mkdir /etc/ssl/private mkdir /etc/ssl/private
openssl req -x509 -new -out /etc/ssl/certs/services.pem -keyout /etc/ssl/private/services.key -nodes -days 3654 -subj "/CN=$(hostname)" openssl req -x509 -new -out /etc/ssl/certs/services.pem -keyout /etc/ssl/private/services.key -nodes -days 7305 -subj "/CN=$(hostname)"
chmod 640 /etc/ssl/private/services.key chmod 640 /etc/ssl/private/services.key
# Configure acme.sh
cp ${SOURCE_DIR}/usr/local/bin/update-acme.sh /usr/local/bin/update-acme.sh
/usr/local/bin/update-acme.sh
# Configure nginx # Configure nginx
cp ${SOURCE_DIR}/etc/nginx/nginx.conf /etc/nginx/nginx.conf cp ${SOURCE_DIR}/etc/nginx/nginx.conf /etc/nginx/nginx.conf
# Download and configure acme.sh
mkdir /etc/acme.sh.d
wget https://raw.githubusercontent.com/Neilpang/acme.sh/master/acme.sh -O /usr/bin/acme.sh
sed -i 's|$HOME/.$PROJECT_NAME|/etc/acme.sh.d|' /usr/bin/acme.sh
cp ${SOURCE_DIR}/etc/periodic/daily/acme-sh /etc/periodic/daily/acme-sh
chmod +x /usr/bin/acme.sh
# Copy Spotter resources # Copy Spotter resources
mkdir /etc/spotter mkdir /etc/spotter
cp ${SOURCE_DIR}/etc/spotter/apps.json /etc/spotter/apps.json cp ${SOURCE_DIR}/srv/config.json /srv/config.json
cp ${SOURCE_DIR}/usr/local/bin/spotter-appmgr /usr/local/bin/spotter-appmgr cp ${SOURCE_DIR}/usr/bin/spotter-appmgr /usr/bin/spotter-appmgr
cp -r ${SOURCE_DIR}/srv/portal /srv/portal cp -r ${SOURCE_DIR}/srv/portal /srv/portal
# Configure services # Configure services

View File

@ -36,7 +36,5 @@ start_pre() {
} }
start_post() { start_post() {
until [ -e /var/run/docker.sock ]; do ewaitfile 1 /var/run/docker.sock
usleep 100000
done
} }

View File

@ -0,0 +1,3 @@
#!/bin/sh
[ -x /usr/bin/acme.sh ] && /usr/bin/acme.sh --cron >/dev/null

View File

@ -1 +0,0 @@
{"_": {"domain": "spotter.vm", "port": "443"}, "cluster-spotter": {}}

134
basic/srv/config.json Normal file
View File

@ -0,0 +1,134 @@
{
"apps":{
"ckan":{
"host":"ckan",
"login":"N/A",
"password":"N/A",
"tiles":[],
"tiles-shown":false
},
"crisiscleanup":{
"host":"cc",
"login":"N/A",
"password":"N/A",
"tiles":[],
"tiles-shown":false
},
"cts":{
"host":"cts",
"login":"N/A",
"password":"N/A",
"tiles":[],
"tiles-shown":false
},
"frontlinesms":{
"host":"sms",
"login":"N/A",
"password":"N/A",
"tiles":[],
"tiles-shown":false
},
"gnuhealth":{
"host":"gh",
"login":"N/A",
"password":"N/A",
"tiles":["gnuhealth-clients"],
"tiles-shown":false
},
"kanboard":{
"host":"kb",
"login":"N/A",
"password":"N/A",
"tiles":["kanboard-mobile"],
"tiles-shown":false
},
"mifosx":{
"host":"mifosx",
"login":"N/A",
"password":"N/A",
"tiles":["mifosx-mobile"],
"tiles-shown":false
},
"motech":{
"host":"motech",
"login":"N/A",
"password":"N/A",
"tiles":[],
"tiles-shown":false
},
"opendatakit":{
"host":"odk",
"login":"N/A",
"password":"N/A",
"tiles":["opendatakit-clients"],
"tiles-shown":false
},
"opendatakit-build":{
"host":"odkbuild",
"login":"N/A",
"password":"N/A",
"tiles":[],
"tiles-shown":false
},
"openmapkit":{
"host":"omk",
"login":"N/A",
"password":"N/A",
"tiles":["geoodk-clients", "openmapkit-clients"],
"tiles-shown":false
},
"pandora":{
"host":"pandora",
"login":"N/A",
"password":"N/A",
"tiles":[],
"tiles-shown":false
},
"sahana":{
"host":"sahana",
"login":"N/A",
"password":"N/A",
"tiles":[],
"tiles-shown":false
},
"sahana-demo":{
"host":"sahana-demo",
"login":"N/A",
"password":"N/A",
"tiles":[],
"tiles-shown":false
},
"sambro":{
"host":"sambro",
"login":"N/A",
"password":"N/A",
"tiles":["sambro-mobile"],
"tiles-shown":false
},
"seeddms":{
"host":"dms",
"login":"N/A",
"password":"N/A",
"tiles":[],
"tiles-shown":false
},
"sigmah":{
"host":"sigmah",
"login":"N/A",
"password":"N/A",
"tiles":[],
"tiles-shown":false
},
"ushahidi":{
"host":"ush",
"login":"N/A",
"password":"N/A",
"tiles":["ushahidi-mobile"],
"tiles-shown":false
}
},
"host":{
"domain":"spotter.vm",
"port": "443"
}
}

View File

@ -50,7 +50,7 @@ header p {
margin: 0px; margin: 0px;
} }
.c, .c2 { .c {
background-color: white; background-color: white;
position: relative; position: relative;
min-width: 365px; min-width: 365px;
@ -62,9 +62,6 @@ header p {
margin-right: 13px; margin-right: 13px;
border: solid 1px black; border: solid 1px black;
padding: 10px; padding: 10px;
}
.c {
display: none; display: none;
} }
@ -73,6 +70,10 @@ header p {
width: 95%; width: 95%;
} }
.visible {
display: initial;
}
.ico { .ico {
margin-right: 5px; margin-right: 5px;
width: 20px; width: 20px;

View File

@ -0,0 +1,15 @@
<!DOCTYPE html>
<html lang="cs">
<head>
<meta charset="utf-8">
<meta name="author" content="TS">
<meta name="copyright" content="page is under CC BY-NC-ND 3.0 CZ">
<meta name="generator" content="Spotter.ngo">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Chyba</title>
</head>
<body>
<h1>Chyba spojení</h1>
<p>Aplikace, ke které se pokoušíte připojit, není dostupná. Nejspíše byla vypnuta správcem serveru.</p>
</body>
</html>

View File

@ -19,7 +19,7 @@
</header> </header>
<div class="c c2" id="sahana"> <div class="c c2" id="sahana">
<h2><a href="#"><img src="img/EDEN.png" alt="Sahana EDEN" title="Sahana EDEN">Sahana EDEN</a></h2> <h2><a href="https://sahana.{host}"><img src="img/EDEN.png" alt="Sahana EDEN" title="Sahana EDEN">Sahana EDEN</a></h2>
<p><strong>Registr kontaktů</strong> asociací, organizací, jednotek zaměstnanců, dobrovolníků, <strong>Registr prostředků</strong>, materiálních zdrojů určených pro činnost v krizových situacích, <strong>logistika</strong> krizového zboží ve skladištích, úkrytech, <strong>organizace lidských zdrojů</strong>, diobrovolníků, <strong>mapová vizualizace</strong> pro lokalizaci a popis krizové události a <strong>mnoho dalších funkcí</strong>.</p> <p><strong>Registr kontaktů</strong> asociací, organizací, jednotek zaměstnanců, dobrovolníků, <strong>Registr prostředků</strong>, materiálních zdrojů určených pro činnost v krizových situacích, <strong>logistika</strong> krizového zboží ve skladištích, úkrytech, <strong>organizace lidských zdrojů</strong>, diobrovolníků, <strong>mapová vizualizace</strong> pro lokalizaci a popis krizové události a <strong>mnoho dalších funkcí</strong>.</p>
<ul> <ul>
<li><strong>Login:</strong> <span class="login"></span></li> <li><strong>Login:</strong> <span class="login"></span></li>
@ -28,7 +28,7 @@
</div> </div>
<div class="c" id="sahana-demo"> <div class="c" id="sahana-demo">
<h2><a href="#"><img src="img/EDEN.png" alt="Sahana EDEN DEMO" title="Sahana EDEN DEMO">Sahana EDEN DEMO</a></h2> <h2><a href="https://sahana-demo.{host}"><img src="img/EDEN.png" alt="Sahana EDEN DEMO" title="Sahana EDEN DEMO">Sahana EDEN DEMO</a></h2>
<p>Přístup určený k bezpečnému vyzkoušení aplikace. Zde můžete přidávat i mazat testovací data.</p> <p>Přístup určený k bezpečnému vyzkoušení aplikace. Zde můžete přidávat i mazat testovací data.</p>
<ul> <ul>
<li><strong>Login:</strong> <span class="login"></span></li> <li><strong>Login:</strong> <span class="login"></span></li>
@ -37,7 +37,7 @@
</div> </div>
<div class="c" id="sambro"> <div class="c" id="sambro">
<h2><a href="#"><img src="img/EDEN.png" alt="Sahana EDEN SAMBRO" title="Sahana EDEN SAMBRO">Sahana EDEN SAMBRO</a></h2> <h2><a href="https://sambro.{host}"><img src="img/EDEN.png" alt="Sahana EDEN SAMBRO" title="Sahana EDEN SAMBRO">Sahana EDEN SAMBRO</a></h2>
<p>Samostatná instance Sahana EDEN s šablonou SAMBRO.</p> <p>Samostatná instance Sahana EDEN s šablonou SAMBRO.</p>
<ul> <ul>
<li><strong>Login:</strong> <span class="login"></span></li> <li><strong>Login:</strong> <span class="login"></span></li>
@ -52,12 +52,12 @@
<a href="https://play.google.com/store/apps/details?id=io.sahana.sambro.mobile"><img src="img/android.png" class="ico" alt="Android">Android 4.0 a vyšší</a> <a href="https://play.google.com/store/apps/details?id=io.sahana.sambro.mobile"><img src="img/android.png" class="ico" alt="Android">Android 4.0 a vyšší</a>
</p> </p>
<ul> <ul>
<li><strong>URL:</strong> <span class="clienturl"></span></li> <li><strong>URL:</strong> <span class="clienturl">https://sambro.{host}/eden/</span></li>
</ul> </ul>
</div> </div>
<div class="c" id="ccleanup"> <div class="c" id="crisiscleanup">
<h2><a href="#"><img src="img/Crisis_Cleanup.png" alt="Crisis Cleanup" title="Crisis Cleanup">Crisis Cleanup</a></h2> <h2><a href="https://cc.{host}"><img src="img/Crisis_Cleanup.png" alt="Crisis Cleanup" title="Crisis Cleanup">Crisis Cleanup</a></h2>
<p><strong>Mapování krizové pomoci</strong> při odstraňování následků katastrof a koordinaci práce. Jde o majetek, ne o lidi.</p> <p><strong>Mapování krizové pomoci</strong> při odstraňování následků katastrof a koordinaci práce. Jde o majetek, ne o lidi.</p>
<ul> <ul>
<li><strong>Login:</strong> <span class="login"></span></li> <li><strong>Login:</strong> <span class="login"></span></li>
@ -66,7 +66,7 @@
</div> </div>
<div class="c" id="ckan"> <div class="c" id="ckan">
<h2><a href="#"><img src="img/CKAN.png" alt="CKAN" title="CKAN">CKAN</a></h2> <h2><a href="https://ckan.{host}"><img src="img/CKAN.png" alt="CKAN" title="CKAN">CKAN</a></h2>
<p><strong>Repository</strong> management a datová analýza pro vytváření otevřených dat.</p> <p><strong>Repository</strong> management a datová analýza pro vytváření otevřených dat.</p>
<ul> <ul>
<li><strong>Login:</strong> <span class="login"></span></li> <li><strong>Login:</strong> <span class="login"></span></li>
@ -74,27 +74,27 @@
</ul> </ul>
</div> </div>
<div class="c" id="odkbuild"> <div class="c" id="opendatakit-build">
<h2><a href="#"><img src="img/ODK.png" alt="Open Data Kit" title="Open Data Kit">ODK Build</a></h2> <h2><a href="https://odkbuild.{host}"><img src="img/ODK.png" alt="Open Data Kit" title="Open Data Kit">ODK Build</a></h2>
<p><strong>Sběr dat s pomocí smartphone</strong>.<br>Aplikace pro návrh formulářů<br> <p><strong>Sběr dat s pomocí smartphone</strong>.<br>Aplikace pro návrh formulářů<br>
<p><a href="http://opendatakit.org/xiframe/">XLSForm</a> - online konverter XLS.<br> <p><a href="http://opendatakit.org/xiframe/">XLSForm</a> - online konverter XLS.<br>
<a href="https://opendatakit.org/downloads/download-info/odk-formuploader/"><img src="img/java.png" class="ico" alt="ODK Form Uploader">ODK Form Uploader</a><br> <a href="https://opendatakit.org/downloads/download-info/odk-formuploader/"><img src="img/java.png" class="ico" alt="ODK Form Uploader">ODK Form Uploader</a><br>
<a href="https://opendatakit.org/downloads/download-info/odk-validate-2/"><img src="img/java.png" class="ico" alt="ODK Validate">ODK Validate</a></p> <a href="https://opendatakit.org/downloads/download-info/odk-validate-2/"><img src="img/java.png" class="ico" alt="ODK Validate">ODK Validate</a></p>
</div> </div>
<div class="c" id="odk-clients"> <div class="c" id="opendatakit-clients">
<h2><a href="#"><img src="img/ODK_Collect.png" alt="Open Data Kit" title="Open Data Kit">ODK Collect</a></h2> <h2><a href="#"><img src="img/ODK_Collect.png" alt="Open Data Kit" title="Open Data Kit">ODK Collect</a></h2>
<p>Mobilní aplikace<br> <p>Mobilní aplikace<br>
<a href="https://play.google.com/store/apps/details?id=org.odk.collect.android"><img src="img/android.png" class="ico" alt="ODK Collect">ODK Collect pro Android</a><br> <a href="https://play.google.com/store/apps/details?id=org.odk.collect.android"><img src="img/android.png" class="ico" alt="ODK Collect">ODK Collect pro Android</a><br>
<a href="https://opendatakit.org/downloads/download-info/odk-briefcase/"><img src="img/java.png" class="ico" alt="ODK Briefcase">ODK Briefcase</a><br> <a href="https://opendatakit.org/downloads/download-info/odk-briefcase/"><img src="img/java.png" class="ico" alt="ODK Briefcase">ODK Briefcase</a><br>
</p> </p>
<ul> <ul>
<li><strong>URL:</strong> <span class="clienturl"></span></li> <li><strong>URL:</strong> <span class="clienturl">https://odk.{host}/aggregate</span></li>
</ul> </ul>
</div> </div>
<div class="c" id="odk"> <div class="c" id="opendatakit">
<h2><a href="#"><img src="img/ODK.png" alt="Open Data Kit" title="Open Data Kit">ODK Aggregate</a></h2> <h2><a href="https://odk.{host}"><img src="img/ODK.png" alt="Open Data Kit" title="Open Data Kit">ODK Aggregate</a></h2>
<p><strong>Sběr dat s pomocí smartphone</strong>.<br> <p><strong>Sběr dat s pomocí smartphone</strong>.<br>
<a href="http://geoodk.com">GeoODK Collect</a> - náhrada papírových dotazníků smartphonem. <a href="http://geoodk.com">GeoODK Collect</a> - náhrada papírových dotazníků smartphonem.
</p> </p>
@ -104,8 +104,8 @@
</ul> </ul>
</div> </div>
<div class="c" id="omk"> <div class="c" id="openmapkit">
<h2><a href="#"><img src="img/OMK.png" alt="Open Map Kit" title="Open Map Kit">OpenMapKit Server</a></h2> <h2><a href="https://omk.{host}"><img src="img/OMK.png" alt="Open Map Kit" title="Open Map Kit">OpenMapKit Server</a></h2>
<p><strong>Sběr dat s pomocí smartphone</strong>.<br> <p><strong>Sběr dat s pomocí smartphone</strong>.<br>
<ul> <ul>
<li><strong>Login:</strong> <span class="login"></span></li> <li><strong>Login:</strong> <span class="login"></span></li>
@ -119,23 +119,23 @@
<a href="https://play.google.com/store/apps/details?id=com.geoodk.collect.android"><img src="img/android.png" class="ico" alt="GeoODK Collect">GeoODK Collect pro Android</a> <a href="https://play.google.com/store/apps/details?id=com.geoodk.collect.android"><img src="img/android.png" class="ico" alt="GeoODK Collect">GeoODK Collect pro Android</a>
</p> </p>
<ul> <ul>
<li><strong>URL:</strong> <span class="clienturl"></span></li> <li><strong>URL:</strong> <span class="clienturl">https://omk.{host}</span></li>
</ul> </ul>
</div> </div>
<div class="c" id="omk-clients"> <div class="c" id="openmapkit-clients">
<h2><a href="#"><img src="img/OMK.png" alt="Open Map Kit" title="Open Map Kit">OpenMapKit</a></h2> <h2><a href="#"><img src="img/OMK.png" alt="Open Map Kit" title="Open Map Kit">OpenMapKit</a></h2>
<p>Mobilní aplikace<br> <p>Mobilní aplikace<br>
<a href="https://play.google.com/store/apps/details?id=org.odk.collect.android"><img src="img/android.png" class="ico" alt="ODK Collect">ODK Collect pro Android</a><br> <a href="https://play.google.com/store/apps/details?id=org.odk.collect.android"><img src="img/android.png" class="ico" alt="ODK Collect">ODK Collect pro Android</a><br>
<a href="https://play.google.com/store/apps/details?id=org.redcross.openmapkit"><img src="img/android.png" class="ico" alt="Android">OpenMapKit pro Android 4.1 a vyšší</a> <a href="https://play.google.com/store/apps/details?id=org.redcross.openmapkit"><img src="img/android.png" class="ico" alt="Android">OpenMapKit pro Android 4.1 a vyšší</a>
</p> </p>
<ul> <ul>
<li><strong>URL:</strong> <span class="clienturl"></span></li> <li><strong>URL:</strong> <span class="clienturl">https://omk.{host}</span></li>
</ul> </ul>
</div> </div>
<div class="c" id="flsms"> <div class="c" id="frontlinesms">
<h2><a href="#"><img src="img/FrontlineSMS.png" alt="FrontlineSMS" title="FrontlineSMS">FrontlineSMS</a></h2> <h2><a href="https://sms.{host}"><img src="img/FrontlineSMS.png" alt="FrontlineSMS" title="FrontlineSMS">FrontlineSMS</a></h2>
<p><strong>SMS messaging</strong> přes veřejné datové brány</p> <p><strong>SMS messaging</strong> přes veřejné datové brány</p>
<ul> <ul>
<li><strong>Login:</strong> <span class="login"></span></li> <li><strong>Login:</strong> <span class="login"></span></li>
@ -144,7 +144,7 @@
</div> </div>
<div class="c" id="seeddms"> <div class="c" id="seeddms">
<h2><a href="#"><img src="img/SeedDMS.png" alt="SeedDMS" title="SeedDMS">SeedDMS</a></h2> <h2><a href="https://dms.{host}"><img src="img/SeedDMS.png" alt="SeedDMS" title="SeedDMS">SeedDMS</a></h2>
<p><strong>Dokument management</strong> na dokumentaci a projektovou dokumentaci</p> <p><strong>Dokument management</strong> na dokumentaci a projektovou dokumentaci</p>
<ul> <ul>
<li><strong>Login:</strong> <span class="login"></span></li> <li><strong>Login:</strong> <span class="login"></span></li>
@ -153,7 +153,7 @@
</div> </div>
<div class="c" id="pandora"> <div class="c" id="pandora">
<h2><a href="#"><img src="img/Pandora.png" alt="Pan.do/ra" title="Pan.do/ra">Pan.do/ra</a></h2> <h2><a href="https://pandora.{host}"><img src="img/Pandora.png" alt="Pan.do/ra" title="Pan.do/ra">Pan.do/ra</a></h2>
<p><strong>Media management</strong> na foto a video z krizové události. Tvorba metadat, komentářů, lokalizace v čase a na mapě.</p> <p><strong>Media management</strong> na foto a video z krizové události. Tvorba metadat, komentářů, lokalizace v čase a na mapě.</p>
<ul> <ul>
<li><strong>Login:</strong> <span class="login"></span></li> <li><strong>Login:</strong> <span class="login"></span></li>
@ -162,7 +162,7 @@
</div> </div>
<div class="c" id="ushahidi"> <div class="c" id="ushahidi">
<h2><a href="#"><img src="img/Ushahidi.png" alt="Ushahidi" title="Ushahidi">Ushahidi</a></h2> <h2><a href="https://ush.{host}"><img src="img/Ushahidi.png" alt="Ushahidi" title="Ushahidi">Ushahidi</a></h2>
<p>Reakce na krizovou událost. Shromažďujte zprávy od obětí a pracovníků v terénu prostřednictvím SMS, e-mailu, webu, Twitteru.</p> <p>Reakce na krizovou událost. Shromažďujte zprávy od obětí a pracovníků v terénu prostřednictvím SMS, e-mailu, webu, Twitteru.</p>
<ul> <ul>
<li><strong>Login:</strong> <span class="login"></span></li> <li><strong>Login:</strong> <span class="login"></span></li>
@ -177,7 +177,7 @@
<a href="https://play.google.com/store/apps/details?id=com.ushahidi.mobile"><img src="img/android.png" class="ico" alt="Android">Android 4.4 a vyšší</a> <a href="https://play.google.com/store/apps/details?id=com.ushahidi.mobile"><img src="img/android.png" class="ico" alt="Android">Android 4.4 a vyšší</a>
</p> </p>
<ul> <ul>
<li><strong>URL:</strong> <span class="clienturl"></span></li> <li><strong>URL:</strong> <span class="clienturl">ushahidi.{host}</span></li>
</ul> </ul>
</div> </div>
@ -189,7 +189,7 @@
</div> </div>
<div class="c" id="kanboard"> <div class="c" id="kanboard">
<h2><a href="#"><img src="img/Kanboard.png" alt="Kanboard" title="Kanboard">Kanboard</a></h2> <h2><a href="https://kb.{host}"><img src="img/Kanboard.png" alt="Kanboard" title="Kanboard">Kanboard</a></h2>
<p>Usnadňuje tvorbu a řízení projektů s pomocí Kanban metodiky.</p> <p>Usnadňuje tvorbu a řízení projektů s pomocí Kanban metodiky.</p>
<ul> <ul>
<li><strong>Login:</strong> <span class="login"></span></li> <li><strong>Login:</strong> <span class="login"></span></li>
@ -204,12 +204,12 @@
<a href="https://f-droid.org/packages/in.andres.kandroid/"><img src="img/android.png" class="ico" alt="Android">Kandroid pro Android 4.2 a vyšší</a> <a href="https://f-droid.org/packages/in.andres.kandroid/"><img src="img/android.png" class="ico" alt="Android">Kandroid pro Android 4.2 a vyšší</a>
</p> </p>
<ul> <ul>
<li><strong>URL:</strong> <span class="clienturl"></span></li> <li><strong>URL:</strong> <span class="clienturl">https://kb.{host}</span></li>
</ul> </ul>
</div> </div>
<div class="c" id="cts"> <div class="c" id="cts">
<h2><a href="#"><img src="img/CTS.png" alt="CTS" title="CTS">CTS</a></h2> <h2><a href="https://cts.{host}"><img src="img/CTS.png" alt="CTS" title="CTS">CTS</a></h2>
<p>Logistika hmotné pomoci pro humanitární potřeby.</p> <p>Logistika hmotné pomoci pro humanitární potřeby.</p>
<ul> <ul>
<li><strong>Login:</strong> <span class="login"></span></li> <li><strong>Login:</strong> <span class="login"></span></li>
@ -218,7 +218,7 @@
</div> </div>
<div class="c" id="gnuhealth"> <div class="c" id="gnuhealth">
<h2><a href="#"><img src="img/GNU_Health.png" alt="GNU Health" title="GNU Health">GNU Health</a></h2> <h2><a href="https://gh.{host}"><img src="img/GNU_Health.png" alt="GNU Health" title="GNU Health">GNU Health</a></h2>
<p>Zdravotní a nemocniční informační systém.</p> <p>Zdravotní a nemocniční informační systém.</p>
<ul> <ul>
<li><strong>Login:</strong> <span class="login"></span></li> <li><strong>Login:</strong> <span class="login"></span></li>
@ -235,12 +235,12 @@
<a href="https://downloads.tryton.org/4.2/tryton-last.tar.gz"><img src="img/Linux.png" class="ico" alt="Linux">Linux</a> <a href="https://downloads.tryton.org/4.2/tryton-last.tar.gz"><img src="img/Linux.png" class="ico" alt="Linux">Linux</a>
</p> </p>
<ul> <ul>
<li><strong>URL:</strong> <span class="clienturl"></span></li> <li><strong>URL:</strong> <span class="clienturl">gh.{host}</span></li>
</ul> </ul>
</div> </div>
<div class="c" id="sigmah"> <div class="c" id="sigmah">
<h2><a href="#"><img src="img/Sigmah.png" alt="Sigmah" title="Sigmah">Sigmah</a></h2> <h2><a href="https://sigmah.{host}"><img src="img/Sigmah.png" alt="Sigmah" title="Sigmah">Sigmah</a></h2>
<p>Rozpočtování získávání finančních prostředků.</p> <p>Rozpočtování získávání finančních prostředků.</p>
<ul> <ul>
<li><strong>Login:</strong> <span class="login"></span></li> <li><strong>Login:</strong> <span class="login"></span></li>
@ -249,7 +249,7 @@
</div> </div>
<div class="c" id="motech"> <div class="c" id="motech">
<h2><a href="#"><img src="img/Motech.png" alt="Motech" title="Motech">Motech</a></h2> <h2><a href="https://motech.{host}"><img src="img/Motech.png" alt="Motech" title="Motech">Motech</a></h2>
<p>Integrace zdravotnických a komunikačních služeb.</p> <p>Integrace zdravotnických a komunikačních služeb.</p>
<ul> <ul>
<li><strong>Login:</strong> <span class="login"></span></li> <li><strong>Login:</strong> <span class="login"></span></li>
@ -258,7 +258,7 @@
</div> </div>
<div class="c" id="mifosx"> <div class="c" id="mifosx">
<h2><a href="#"><img src="img/MifosX.png" alt="Mifos X" title="Mifos X">Mifos X</a></h2> <h2><a href="https://mifosx.{host}"><img src="img/MifosX.png" alt="Mifos X" title="Mifos X">Mifos X</a></h2>
<p>Nástroj na rozvojovou, humanitární pomoc a mikrofinancování.</p> <p>Nástroj na rozvojovou, humanitární pomoc a mikrofinancování.</p>
<ul> <ul>
<li><strong>Login:</strong> <span class="login"></span></li> <li><strong>Login:</strong> <span class="login"></span></li>
@ -272,7 +272,7 @@
<a href="https://play.google.com/store/apps/details?id=com.mifos.mifosxdroid"><img src="img/android.png" class="ico" alt="KanBoard">Mifos X client pro Android 3.0 a vyšší</a><br> <a href="https://play.google.com/store/apps/details?id=com.mifos.mifosxdroid"><img src="img/android.png" class="ico" alt="KanBoard">Mifos X client pro Android 3.0 a vyšší</a><br>
</p> </p>
<ul> <ul>
<li><strong>URL:</strong> <span class="clienturl"></span></li> <li><strong>URL:</strong> <span class="clienturl">mifosx.{host}</span></li>
<li><strong>Tenant ID:</strong> <span>default</span></li> <li><strong>Tenant ID:</strong> <span>default</span></li>
</ul> </ul>
</div> </div>
@ -296,7 +296,7 @@
<p><strong>Portable Open Street Map</strong> - softwarový balík na offline používání OpenStreet Map v samostatné virtuální image.</p> <p><strong>Portable Open Street Map</strong> - softwarový balík na offline používání OpenStreet Map v samostatné virtuální image.</p>
</div> </div>
<div class="c" id="cluster-spotter"> <div class="c visible" id="cluster-spotter">
<h2><a href="http://spotter.ngo"><img src="img/cluster_spotter.png" alt="Cluster Spotter" title="Cluster Spotter">Cluster Spotter</a></h2> <h2><a href="http://spotter.ngo"><img src="img/cluster_spotter.png" alt="Cluster Spotter" title="Cluster Spotter">Cluster Spotter</a></h2>
<p>Info o Misi a Vizi projektu, včetně kontaktu. Zachovejte data bezpečná a neposkytujte je nepovolaným osobám.<br> <p>Info o Misi a Vizi projektu, včetně kontaktu. Zachovejte data bezpečná a neposkytujte je nepovolaným osobám.<br>
<small>CC 4.0 CZ by <a href="http://trendspotter.cz">TS</a>. Content is based on PD, CC, GNU/GPL. Brand names, trademarks belong to their respective holders.</small> <small>CC 4.0 CZ by <a href="http://trendspotter.cz">TS</a>. Content is based on PD, CC, GNU/GPL. Brand names, trademarks belong to their respective holders.</small>

View File

@ -1,13 +1,21 @@
$(function() { $(function() {
$.getJSON('apps.json', function(data) { $.getJSON('config.json', function(data) {
var host = data._.domain + (data._.port != '443' ? ':'+data._.port : '') $.each(data.apps, function(app, appdata) {
$.each(data, function(id, props) { if (!appdata['tiles-shown'])
var div = $('#'+id).show(); return true;
if (props.hasOwnProperty('url')) var div = $('#'+app).show();
div.find('h2 a').attr('href', props.url.replace('{host}', host)); div.find('.login').text(appdata.login);
$.each(props, function(key, value) { div.find('.password').text(appdata.password);
div.find('.'+key).text(value.replace('{host}', host)); $.each(appdata.tiles, function(tile) {
$('#'+tile).show();
}); });
}); });
var host = data.host.domain + (data.host.port != '443' ? ':'+data.host.port : '')
$('a').each(function(){
$(this).attr('href', $(this).attr('href').replace('{host}', host));
});
$('span').each(function(){
$(this).text($(this).text().replace('{host}', host));
});
}); });
}); });

317
basic/usr/bin/spotter-appmgr Executable file
View File

@ -0,0 +1,317 @@
#!/usr/bin/python
# -*- coding: utf-8 -*-
import argparse
import json
import os
import subprocess
CONF_FILE = '/srv/config.json'
ISSUE_FILE = '/etc/issue'
NGINX_DIR = '/etc/nginx/conf.d'
NGINX_TEMPLATE = '''server {{
listen [::]:{port} ssl http2;
server_name {host}.{domain};
access_log /var/log/nginx/{app}.access.log;
error_log /var/log/nginx/{app}.error.log;
location / {{
proxy_pass http://{ip}:8080;
}}
error_page 502 /errror.html;
location /error.html {{
root /srv/portal;
}}
}}
'''
NGINX_DEFAULT_TEMPLATE = '''server {{
listen [::]:80 default_server ipv6only=off;
location / {{
return 301 https://$host:{port}$request_uri;
}}
location /.well-known/acme-challenge/ {{
root /etc/acme.sh.d;
}}
}}
server {{
listen [::]:{port} ssl http2 default_server ipv6only=off;
root /srv/portal;
index index.html;
location / {{
try_files $uri $uri/ =404;
}}
location /config.json {{
alias /srv/config.json;
}}
error_page 404 /error.html;
}}
'''
ISSUE_TEMPLATE = '''
\x1b[1;32m _____ _ _ __ ____ __
/ ____| | | | | \\\\ \\\\ / / \\\\/ |
| (___ _ __ ___ | |_| |_ ___ _ _\\\\ \\\\ / /| \\\\ / |
\\\\___ \\\\| '_ \\\\ / _ \\\\| __| __/ _ \\\\ '__\\\\ \\\\/ / | |\\\\/| |
____) | |_) | (_) | |_| || __/ | \\\\ / | | | |
|_____/| .__/ \\\\___/ \\\\__|\\\\__\\\\___|_| \\\\/ |_| |_|
| |
|_|\x1b[0m
\x1b[1;33mUPOZORNĚNÍ:\x1b[0m Neoprávněný přístup k tomuto zařízení je zakázán.
Musíte mít výslovné oprávnění k přístupu nebo konfiguraci tohoto zařízení.
Neoprávněné pokusy a kroky k přístupu nebo používání tohoto systému mohou mít
za následek občanské nebo trestní sankce.
\x1b[1;33mCAUTION:\x1b[0m Unauthozired access to this device is prohibited.
You must have explicit, authorized permission to access or configure this
device. Unauthorized attempts and actions to access or use this system may
result in civil or criminal penalties.
Pro přístup k aplikacím otevřete URL \x1b[1mhttps://{host}\x1b[0m ve Vašem
internetovém prohlížeči.
\x1b[0;30m
'''
class SpotterManager:
def __init__(self):
# Load JSON configuration
with open(CONF_FILE, 'r') as f:
self.conf = json.load(f)
self.domain = self.conf['host']['domain']
self.port = self.conf['host']['port']
def save_conf(self):
# Save a sorted JSON configuration object with indentation
with open(CONF_FILE, 'w') as f:
json.dump(self.conf, f, sort_keys=True, indent=4)
def update_login(self, app, login, password):
# Update login and password for an app in the configuration
if login is not None:
self.conf['apps'][app]['login'] = login
if password is not None:
self.conf['apps'][app]['password'] = password
self.save_conf()
def show_tiles(self, app):
# Update tiles-shown for the app in the configuration
self.conf['apps'][app]['tiles-shown'] = True
self.save_conf()
def hide_tiles(self, app):
# Update tiles-shown for the app in the configuration
self.conf['apps'][app]['tiles-shown'] = False
self.save_conf()
def start_app(self, app):
# Start the actual app service
subprocess.call(['/sbin/service', app, 'start'])
def stop_app(self, app):
# Stop the actual app service
subprocess.call(['/sbin/service', app, 'stop'])
# Stop the app service's dependencies if they are not used by any other running app
deps = self.build_deps_tree()
for dep in self.get_app_deps(app):
if False not in [self.is_app_started(d) for d in deps[dep]]:
subprocess.call(['/sbin/service', dep, 'stop'])
def build_deps_tree(self):
# Fisrt, build a dictionary of {app: [needs]}
needs = {}
for app in self.conf['apps']:
needs[app] = self.get_app_deps(app)
# Then reverse it to {need: [apps]}
deps = {}
for app, need in needs.iteritems():
for n in need:
deps.setdefault(n, []).append(app)
return deps
def get_app_deps(self, app):
# Get "needs" line from init script and split it to list, skipping first two elements (docker, net)
try:
with open(os.path.join('/etc/init.d', app), 'r') as f:
return [l.split()[2:] for l in f.readlines() if l.startswith('\tneed')][0]
except:
return []
def is_app_started(self, app):
# Check OpenRC service status without calling any binary
return os.path.exists(os.path.join('/run/openrc/started', app))
def enable_autostart(self, app):
# Add the app to OpenRC default runlevel
subprocess.call(['/sbin/rc-update', 'add', app])
def disable_autostart(self, app):
# Remove the app from OpenRC default runlevel
subprocess.call(['/sbin/rc-update', 'del', app])
def register_proxy(self, app):
# Rebuild nginx configuration using an actual IP of referenced app container
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=self.get_container_ip(app), domain=self.domain, port=self.port))
subprocess.call(['/sbin/service', 'nginx', 'reload'])
def unregister_proxy(self, app):
# Remove nginx configuration to prevent proxy mismatch when the container IP is reassigned to another container
nginx_conf = os.path.join(NGINX_DIR, '{}.conf'.format(app))
if os.path.exists(nginx_conf):
os.unlink(nginx_conf)
subprocess.call(['/sbin/service', 'nginx', 'reload'])
def get_container_ip(self, app):
# Return an IP address of a container. If the container is not running, return localhost address instead
try:
return subprocess.check_output(['/usr/bin/docker', 'inspect', '-f', '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}', app]).strip()
except:
return '127.0.0.1'
def update_domain(self, domain, port):
self.domain = self.conf['host']['domain'] = domain
self.port = self.conf['host']['port'] = port
self.save_conf()
self.rebuild_nginx()
self.rebuild_issue()
self.restart_apps()
def rebuild_nginx(self):
# Remove all nginx config files to prevent errors during reloads invoked by app restarts
for f in os.listdir(NGINX_DIR):
os.unlink(os.path.join(NGINX_DIR, f))
# Rebuild nginx config for the portal app and restart nginx to properly bind the new listen port
with open(os.path.join(NGINX_DIR, 'default.conf'), 'w') as f:
f.write(NGINX_DEFAULT_TEMPLATE.format(port=self.port))
subprocess.call(['/sbin/service', 'nginx', 'restart'])
def rebuild_issue(self):
# Compile the HTTPS host displayed in terminal banner
host = self.domain
# If the dummy host is used, take an IP address of a primary interface instead
if self.domain == 'spotter.vm':
host = subprocess.check_output(['ip', 'route', 'get', '1']).split()[-1]
# Show port number only when using the non-default HTTPS port
if self.port != '443':
host = ':{}'.format(self.port)
# Rebuild the terminal banner
with open(ISSUE_FILE, 'w') as f:
f.write(ISSUE_TEMPLATE.format(host=host))
def restart_apps(self):
for app in self.conf['apps']:
# Check if a script for internal update of URL in the app exists and is executable and run it
script_path = os.path.join('/srv', app, 'update-url.sh')
if os.path.exists(script_path) and os.access(script_path, os.X_OK):
subprocess.call([script_path, '{}.{}'.format(self.conf['apps'][app]['host'], self.domain), self.port])
# If the app is currently running, restart the app service
if self.is_app_started(app):
subprocess.call(['/sbin/service', app, 'restart'])
def request_cert(self, email):
# Compile an acme.sh command for certificate requisition
cmd = ['/usr/bin/acme.sh', '--issue', '-d', self.domain]
for app in self.conf['apps']:
cmd += ['-d', '{}.{}'.format(self.conf['apps'][app]['host'], self.domain)]
cmd += ['-w', '/etc/acme.sh.d', '--accountemail', email]
# Request the certificate. If the requisition command fails, CalledProcessError will be raised
subprocess.check_output(cmd, stderr=subprocess.STDOUT)
# Install the issued certificate
subprocess.call(['/usr/bin/acme.sh', '--installcert', '-d', self.domain, '--keypath', '/etc/ssl/private/services.key', '--fullchainpath', '/etc/ssl/certs/services.pem', '--reloadcmd', 'service nginx reload'])
if __name__ == '__main__':
parser = argparse.ArgumentParser(description='Spotter VM application manager')
subparsers = parser.add_subparsers()
parser_update_login = subparsers.add_parser('update-login', help='Updates application login')
parser_update_login.set_defaults(action='update-login')
parser_update_login.add_argument('app', help='Application name')
parser_update_login.add_argument('login', help='Administrative login')
parser_update_login.add_argument('password', help='Administrative password')
parser_show_tiles = subparsers.add_parser('show-tiles', help='Shows application tiles in Portal')
parser_show_tiles.set_defaults(action='show-tiles')
parser_show_tiles.add_argument('app', help='Application name')
parser_hide_tiles = subparsers.add_parser('hide-tiles', help='Hides application tiles in Portal')
parser_hide_tiles.set_defaults(action='hide-tiles')
parser_hide_tiles.add_argument('app', help='Application name')
parser_start_app = subparsers.add_parser('start-app', help='Start application including it\'s dependencies')
parser_start_app.set_defaults(action='start-app')
parser_start_app.add_argument('app', help='Application name')
parser_stop_app = subparsers.add_parser('stop-app', help='Stops application including it\'s dependencies if they are not used by another running application')
parser_stop_app.set_defaults(action='stop-app')
parser_stop_app.add_argument('app', help='Application name')
parser_enable_autostart = subparsers.add_parser('enable-autostart', help='Enables application autostart')
parser_enable_autostart.set_defaults(action='enable-autostart')
parser_enable_autostart.add_argument('app', help='Application name')
parser_disable_autostart = subparsers.add_parser('disable-autostart', help='Disables application autostart')
parser_disable_autostart.set_defaults(action='disable-autostart')
parser_disable_autostart.add_argument('app', help='Application name')
parser_register_proxy = subparsers.add_parser('register-proxy', help='Rebuilds nginx proxy target for an application container')
parser_register_proxy.set_defaults(action='register-proxy')
parser_register_proxy.add_argument('app', help='Application name')
parser_unregister_proxy = subparsers.add_parser('unregister-proxy', help='Removes nginx proxy target for an application container')
parser_unregister_proxy.set_defaults(action='unregister-proxy')
parser_unregister_proxy.add_argument('app', help='Application name')
parser_update_domain = subparsers.add_parser('update-domain', help='Rebuilds domain structure of VM with new domain name and new HTTPS port')
parser_update_domain.set_defaults(action='update-domain')
parser_update_domain.add_argument('domain', help='Domain name')
parser_update_domain.add_argument('port', help='HTTPS port')
parser_request_cert = subparsers.add_parser('request-cert', help='Requests and installs Let\'s Encrypt certificate for currently set domain')
parser_request_cert.set_defaults(action='request-cert')
parser_request_cert.add_argument('email', help='Email address to receive certificate notifications')
args = parser.parse_args()
sm = SpotterManager()
if args.action == 'update-login':
sm.update_login(args.app, args.login, args.password)
elif args.action == 'show-tiles':
sm.show_tiles(args.app)
elif args.action == 'hide-tiles':
sm.hide_tiles(args.app)
elif args.action == 'start-app':
sm.start_app(args.app)
elif args.action == 'stop-app':
sm.stop_app(args.app)
elif args.action == 'enable-autostart':
sm.enable_autostart(args.app)
elif args.action == 'disable-autostart':
sm.disable_autostart(args.app)
elif args.action == 'register-proxy':
sm.register_proxy(args.app)
elif args.action == 'unregister-proxy':
sm.unregister_proxy(args.app)
elif args.action == 'update-domain':
sm.update_domain(args.domain, args.port)
elif args.action == 'request-cert':
sm.request_cert(args.email)

View File

@ -1,197 +0,0 @@
#!/usr/bin/python
# -*- coding: utf-8 -*-
import argparse
import json
import os
import subprocess
CONF_FILE = '/etc/spotter/apps.json'
ISSUE_FILE = '/etc/issue'
NGINX_DIR = '/etc/nginx/conf.d'
NGINX_TEMPLATE = '''server {{
listen [::]:{port} ssl http2;
server_name {app}.{domain};
access_log /var/log/nginx/{app}.access.log;
error_log /var/log/nginx/{app}.error.log;
location / {{
proxy_pass http://{ip}:8080;
}}
}}
'''
NGINX_DEFAULT_TEMPLATE = '''server {{
listen [::]:80 default_server ipv6only=off;
location / {{
return 301 https://$host:{port}$request_uri;
}}
location /.well-known/acme-challenge/ {{
root /etc/acme.sh.d;
}}
}}
server {{
listen [::]:{port} ssl http2 default_server ipv6only=off;
root /srv/portal;
index index.html;
location / {{
try_files $uri $uri/ =404;
}}
location /apps.json {{
alias /etc/spotter/apps.json;
}}
}}
'''
ISSUE_TEMPLATE = '''
\x1b[1;32m _____ _ _ __ ____ __
/ ____| | | | | \\\\ \\\\ / / \\\\/ |
| (___ _ __ ___ | |_| |_ ___ _ _\\\\ \\\\ / /| \\\\ / |
\\\\___ \\\\| '_ \\\\ / _ \\\\| __| __/ _ \\\\ '__\\\\ \\\\/ / | |\\\\/| |
____) | |_) | (_) | |_| || __/ | \\\\ / | | | |
|_____/| .__/ \\\\___/ \\\\__|\\\\__\\\\___|_| \\\\/ |_| |_|
| |
|_|\x1b[0m
\x1b[1;33mUPOZORNĚNÍ:\x1b[0m Neoprávněný přístup k tomuto zařízení je zakázán.
Musíte mít výslovné oprávnění k přístupu nebo konfiguraci tohoto zařízení.
Neoprávněné pokusy a kroky k přístupu nebo používání tohoto systému mohou mít
za následek občanské nebo trestní sankce.
\x1b[1;33mCAUTION:\x1b[0m Unauthozired access to this device is prohibited.
You must have explicit, authorized permission to access or configure this
device. Unauthorized attempts and actions to access or use this system may
result in civil or criminal penalties.
Pro přístup k aplikacím otevřete URL \x1b[1mhttps://{host}/\x1b[0m ve Vašem
internetovém prohlížeči.
\x1b[0;30m
'''
class SpotterManager:
def __init__(self):
self.conf = {}
with open(CONF_FILE, 'r') as f:
self.conf = json.load(f)
self.domain = self.conf["_"]["domain"]
self.port = self.conf["_"]["port"]
def save_conf(self):
with open(CONF_FILE, 'w') as f:
json.dump(self.conf, f)
def add_app(self, app, args):
self.add_app_to_conf(app, args)
if args.url:
self.update_app_conf(app)
def add_app_to_conf(self, app, args):
self.conf[app] = {}
for key in ('url', 'login', 'password'):
value = getattr(args, key)
if value:
self.conf[app][key] = value
if args.property:
for key, value in args.property:
self.conf[app][key] = value
self.save_conf()
def update_app_conf(self, app):
script_path = os.path.join('/srv', app, 'update-url.sh')
if os.path.exists(script_path) and os.access(script_path, os.X_OK):
host = '{}.{}'.format(app, self.domain)
subprocess.call([script_path, host, self.port])
subprocess.call(['service', app, 'restart'])
def update_proxy(self, app):
self.add_app_to_nginx(app)
subprocess.call(['service', 'nginx', 'reload'])
def add_app_to_nginx(self, app):
ip = get_container_ip(app)
with open(os.path.join(NGINX_DIR, '{}.conf'.format(app)), 'w') as f:
f.write(NGINX_TEMPLATE.format(app=app, ip=ip, domain=self.domain, port=self.port))
def update_domain(self, domain, port):
self.domain = self.conf["_"]["domain"] = domain
self.port = self.conf["_"]["port"] = port
self.save_conf()
self.update_app_confs()
self.rebuild_nginx()
self.rebuild_issue()
subprocess.call(['service', 'nginx', 'restart'])
def update_app_confs(self):
for app in self.conf.iteritems():
if 'url' in app[1]:
self.update_app_conf(app[0])
def rebuild_nginx(self):
for f in os.listdir(NGINX_DIR):
os.unlink(os.path.join(NGINX_DIR, f))
with open(os.path.join(NGINX_DIR, 'default.conf'), 'w') as f:
f.write(NGINX_DEFAULT_TEMPLATE.format(port=self.port))
for app in self.conf.iteritems():
if 'url' in app[1]:
self.add_app_to_nginx(app[0])
def rebuild_issue(self):
host = self.domain
if self.port != '443':
host = '{}:{}'.format(host, self.port)
with open(ISSUE_FILE, 'w') as f:
f.write(ISSUE_TEMPLATE.format(host=host))
def get_container_ip(app):
try:
return subprocess.check_output(['docker', 'inspect', '-f', '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}', app]).strip()
except:
return '127.0.0.1'
if __name__ == '__main__':
parser = argparse.ArgumentParser(description='Spotter VM application manager')
subparsers = parser.add_subparsers()
parser_add_app = subparsers.add_parser('add-app', help='Registers a new application')
parser_add_app.set_defaults(action='add-app')
parser_add_app.add_argument('app', help='Application name')
parser_add_app.add_argument('url', nargs='?', help='URL to the application. Use "{host}" as a host placeholder')
parser_add_app.add_argument('login', nargs='?', help='Administrative login')
parser_add_app.add_argument('password', nargs='?', help='Administrative password')
parser_add_app.add_argument('-p', '--property', nargs=2, action='append', help='Add arbitrary key-value to the application properties')
parser_update_proxy = subparsers.add_parser('update-proxy', help='Updates nginx proxy target for an application container')
parser_update_proxy.set_defaults(action='update-proxy')
parser_update_proxy.add_argument('app', help='Application name')
parser_update_domain = subparsers.add_parser('update-domain', help='Rebuilds domain structure of VM with new domain name and new HTTPS port')
parser_update_domain.set_defaults(action='update-domain')
parser_update_domain.add_argument('domain', help='Domain name')
parser_update_domain.add_argument('port', help='HTTPS port')
args = parser.parse_args()
sm = SpotterManager()
if args.action == 'add-app':
sm.add_app(args.app, args)
elif args.action == 'update-proxy':
sm.update_proxy(args.app)
elif args.action == 'update-domain':
sm.update_domain(args.domain, args.port)

View File

@ -1,6 +0,0 @@
#!/bin/sh
mkdir -p /etc/acme.sh.d
wget https://raw.githubusercontent.com/Neilpang/acme.sh/master/acme.sh -O /usr/local/bin/acme.sh
sed -i 's/\$HOME\/.\$PROJECT_NAME/\/etc\/acme.sh.d/' /usr/local/bin/acme.sh
chmod +x /usr/local/bin/acme.sh

View File

@ -6,9 +6,12 @@ SOURCE_DIR=$(realpath $(dirname "${0}"))/ccleanup
docker image ls | grep -q postfix || $(realpath $(dirname "${0}"))/postfix.sh 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 postgres || $(realpath $(dirname "${0}"))/postgres.sh
docker image ls | grep -q ruby || $(realpath $(dirname "${0}"))/ruby.sh docker image ls | grep -q ruby || $(realpath $(dirname "${0}"))/ruby.sh
service postgres start
# Build Docker container # Build Docker container
docker build -t ccleanup ${SOURCE_DIR} docker build -t ccleanup ${SOURCE_DIR}
cp ${SOURCE_DIR}/etc/init.d/ccleanup /etc/init.d/ccleanup
rc-update -u
# Create database # Create database
export CCLEANUP_PWD=$(head -c 18 /dev/urandom | base64) export CCLEANUP_PWD=$(head -c 18 /dev/urandom | base64)
@ -28,17 +31,10 @@ envsubst <${SOURCE_DIR}/srv/ccleanup/conf/database.yml >/srv/ccleanup/conf/datab
cp ${SOURCE_DIR}/srv/ccleanup/conf/boot.rb /srv/ccleanup/conf/boot.rb cp ${SOURCE_DIR}/srv/ccleanup/conf/boot.rb /srv/ccleanup/conf/boot.rb
cp ${SOURCE_DIR}/srv/ccleanup/conf/initializers/devise.rb /srv/ccleanup/conf/initializers/devise.rb cp ${SOURCE_DIR}/srv/ccleanup/conf/initializers/devise.rb /srv/ccleanup/conf/initializers/devise.rb
cp ${SOURCE_DIR}/srv/ccleanup/conf/environments/production.rb /srv/ccleanup/conf/environments/production.rb cp ${SOURCE_DIR}/srv/ccleanup/conf/environments/production.rb /srv/ccleanup/conf/environments/production.rb
spotter-appmgr update-login ccleanup "${CCLEANUP_ADMIN_EMAIL}" "${CCLEANUP_ADMIN_PWD}"
# Populate database # Populate database
envsubst <${SOURCE_DIR}/srv/ccleanup/db/seeds.rb >/tmp/seeds.rb envsubst <${SOURCE_DIR}/srv/ccleanup/db/seeds.rb >/tmp/seeds.rb
docker run --rm -h ccleanup --link postgres -v /srv/ccleanup/conf:/srv/ccleanup/config ccleanup rake db:schema:load docker run --rm -h ccleanup --link postgres -v /srv/ccleanup/conf:/srv/ccleanup/config ccleanup rake db:schema:load
docker run --rm -h ccleanup --link postgres -v /srv/ccleanup/conf:/srv/ccleanup/config -v /tmp/seeds.rb:/srv/ccleanup/db/seeds.rb ccleanup rake db:seed docker run --rm -h ccleanup --link postgres -v /srv/ccleanup/conf:/srv/ccleanup/config -v /tmp/seeds.rb:/srv/ccleanup/db/seeds.rb ccleanup rake db:seed
rm /tmp/seeds.rb rm /tmp/seeds.rb
# Create CrisisCleanup service
cp ${SOURCE_DIR}/etc/init.d/ccleanup /etc/init.d/ccleanup
rc-update add ccleanup
service ccleanup start
# Add application definition
spotter-appmgr add-app ccleanup "https://ccleanup.{host}/" "${CCLEANUP_ADMIN_EMAIL}" "${CCLEANUP_ADMIN_PWD}"

View File

@ -3,8 +3,7 @@
description="Crisis Cleanup docker container" description="Crisis Cleanup docker container"
depend() { depend() {
need docker net postgres need docker postfix postgres
use dns logger netmount postfix
} }
start() { start() {
@ -18,7 +17,11 @@ start() {
} }
start_post() { start_post() {
/usr/local/bin/spotter-appmgr update-proxy ccleanup /usr/bin/spotter-appmgr register-proxy ccleanup
}
stop_pre() {
/usr/bin/spotter-appmgr unregister-proxy ccleanup
} }
stop() { stop() {

14
ckan.sh
View File

@ -8,9 +8,14 @@ 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 postgres || $(realpath $(dirname "${0}"))/postgres.sh
docker image ls | grep -q redis || $(realpath $(dirname "${0}"))/redis.sh docker image ls | grep -q redis || $(realpath $(dirname "${0}"))/redis.sh
docker image ls | grep -q solr || $(realpath $(dirname "${0}"))/solr.sh docker image ls | grep -q solr || $(realpath $(dirname "${0}"))/solr.sh
service postgres start
service redis start
service solr start
# Build Docker container # Build Docker container
docker build -t ckan ${SOURCE_DIR} docker build -t ckan ${SOURCE_DIR}
cp ${SOURCE_DIR}/etc/init.d/ckan /etc/init.d/ckan
rc-update -u
# Create database # Create database
export CKAN_PWD=$(head -c 18 /dev/urandom | base64) export CKAN_PWD=$(head -c 18 /dev/urandom | base64)
@ -51,14 +56,7 @@ export CKAN_ADMIN_PWD=$(head -c 12 /dev/urandom | base64)
export CKAN_ADMIN_HASH=$(docker run --rm ckan python -c "from passlib.hash import pbkdf2_sha512;print pbkdf2_sha512.encrypt('${CKAN_ADMIN_PWD}')") export CKAN_ADMIN_HASH=$(docker run --rm ckan python -c "from passlib.hash import pbkdf2_sha512;print pbkdf2_sha512.encrypt('${CKAN_ADMIN_PWD}')")
export CKAN_ADMIN_EMAIL="admin@example.com" export CKAN_ADMIN_EMAIL="admin@example.com"
envsubst <${SOURCE_DIR}/adminpwd.sql | docker exec -i postgres psql ckan envsubst <${SOURCE_DIR}/adminpwd.sql | docker exec -i postgres psql ckan
spotter-appmgr update-login ckan "${CKAN_ADMIN_USER}" "${CKAN_ADMIN_PWD}"
# Configure CKAN service
cp ${SOURCE_DIR}/etc/init.d/ckan /etc/init.d/ckan
rc-update add ckan
service ckan start
# Install cron job # Install cron job
cp ${SOURCE_DIR}/etc/periodic/hourly/ckan /etc/periodic/hourly/ckan cp ${SOURCE_DIR}/etc/periodic/hourly/ckan /etc/periodic/hourly/ckan
# Add application definition
spotter-appmgr add-app ckan "https://ckan.{host}/" "${CKAN_ADMIN_USER}" "${CKAN_ADMIN_PWD}"

View File

@ -3,9 +3,7 @@
description="CKAN docker container" description="CKAN docker container"
depend() { depend() {
need docker net postgres need docker ckandp postfix postgres redis solr
use dns logger netmount postfix
after ckandp redis solr
} }
start() { start() {
@ -23,7 +21,11 @@ start() {
} }
start_post() { start_post() {
/usr/local/bin/spotter-appmgr update-proxy ckan /usr/bin/spotter-appmgr register-proxy ckan
}
stop_pre() {
/usr/bin/spotter-appmgr unregister-proxy ckan
} }
stop() { stop() {

View File

@ -56,7 +56,7 @@ ckan.datastore.default_fts_index_method = gist
## Site Settings ## Site Settings
ckan.site_url = http://127.0.0.1 ckan.site_url = https://ckan.spotter.vm
#ckan.use_pylons_response_cleanup_middleware = true #ckan.use_pylons_response_cleanup_middleware = true
## Authorization Settings ## Authorization Settings

View File

@ -4,14 +4,11 @@ SOURCE_DIR=$(realpath $(dirname "${0}"))/ckandp
# Build Docker container # Build Docker container
docker build -t ckandp ${SOURCE_DIR} docker build -t ckandp ${SOURCE_DIR}
cp ${SOURCE_DIR}/etc/init.d/ckandp /etc/init.d/ckandp
rc-update -u
# Configure CKAN DataPusher # Configure CKAN DataPusher
mkdir -p /srv/ckandp/conf /srv/ckandp/data mkdir -p /srv/ckandp/conf /srv/ckandp/data
cp ${SOURCE_DIR}/srv/ckandp/conf/datapusher.wsgi /srv/ckandp/conf/datapusher.wsgi cp ${SOURCE_DIR}/srv/ckandp/conf/datapusher.wsgi /srv/ckandp/conf/datapusher.wsgi
cp ${SOURCE_DIR}/srv/ckandp/conf/datapusher_settings.py /srv/ckandp/conf/datapusher_settings.py cp ${SOURCE_DIR}/srv/ckandp/conf/datapusher_settings.py /srv/ckandp/conf/datapusher_settings.py
chown -R 8004:8004 /srv/ckandp/data chown -R 8004:8004 /srv/ckandp/data
# Configure CKAN DataPusher service
cp ${SOURCE_DIR}/etc/init.d/ckandp /etc/init.d/ckandp
rc-update add ckandp
service ckandp start

View File

@ -3,8 +3,7 @@
description="CKAN DataPusher docker container" description="CKAN DataPusher docker container"
depend() { depend() {
need docker net need docker
use dns logger netmount
} }
start() { start() {

12
cts.sh
View File

@ -4,9 +4,12 @@ SOURCE_DIR=$(realpath $(dirname "${0}"))/cts
# Check prerequisites # Check prerequisites
docker image ls | grep -q postgres || $(realpath $(dirname "${0}"))/postgres.sh docker image ls | grep -q postgres || $(realpath $(dirname "${0}"))/postgres.sh
service postgres start
# Build Docker container # Build Docker container
docker build -t cts ${SOURCE_DIR} docker build -t cts ${SOURCE_DIR}
cp ${SOURCE_DIR}/etc/init.d/cts /etc/init.d/cts
rc-update -u
# Create database # Create database
export CTS_PWD=$(head -c 18 /dev/urandom | base64) export CTS_PWD=$(head -c 18 /dev/urandom | base64)
@ -35,11 +38,4 @@ export CTS_ADMIN_PWD=$(head -c 12 /dev/urandom | base64)
export CTS_ADMIN_HASH=$(docker run --rm -h cts -v /srv/cts/conf:/srv/cts/cts/settings cts python -c "from django.contrib.auth.hashers import make_password; print make_password('${CTS_ADMIN_PWD}')") export CTS_ADMIN_HASH=$(docker run --rm -h cts -v /srv/cts/conf:/srv/cts/cts/settings cts python -c "from django.contrib.auth.hashers import make_password; print make_password('${CTS_ADMIN_PWD}')")
export CTS_ADMIN_SECRET=$(head -c 12 /dev/urandom | sha256sum | cut -c1-13) export CTS_ADMIN_SECRET=$(head -c 12 /dev/urandom | sha256sum | cut -c1-13)
envsubst <${SOURCE_DIR}/adminpwd.sql | docker exec -i postgres psql cts envsubst <${SOURCE_DIR}/adminpwd.sql | docker exec -i postgres psql cts
spotter-appmgr update-login cts "${CTS_ADMIN_EMAIL}" "${CTS_ADMIN_PWD}"
# Create CTS service
cp ${SOURCE_DIR}/etc/init.d/cts /etc/init.d/cts
rc-update add cts
service cts start
# Add application definition
spotter-appmgr add-app cts "https://cts.{host}/" "${CTS_ADMIN_EMAIL}" "${CTS_ADMIN_PWD}"

View File

@ -3,8 +3,7 @@
description="CTS docker container" description="CTS docker container"
depend() { depend() {
need docker net postgres need docker postgres
use dns logger netmount
} }
start() { start() {
@ -17,7 +16,11 @@ start() {
} }
start_post() { start_post() {
/usr/local/bin/spotter-appmgr update-proxy cts /usr/bin/spotter-appmgr register-proxy cts
}
stop_pre() {
/usr/bin/spotter-appmgr unregister-proxy cts
} }
stop() { stop() {

View File

@ -7,20 +7,15 @@ docker image ls | grep -q java || $(realpath $(dirname "${0}"))/java.sh
# Build Docker container # Build Docker container
docker build -t flsms ${SOURCE_DIR} docker build -t flsms ${SOURCE_DIR}
cp ${SOURCE_DIR}/etc/init.d/flsms /etc/init.d/flsms
rc-update -u
# Configure FrontlineSMS # Configure FrontlineSMS
mkdir -p /srv/flsms/data mkdir -p /srv/flsms/data
export FLSMS_ADMIN_USER=admin export FLSMS_ADMIN_USER="admin"
export FLSMS_ADMIN_PWD=$(head -c 12 /dev/urandom | base64) export FLSMS_ADMIN_PWD=$(head -c 12 /dev/urandom | base64)
export FLSMS_ADMIN_USER_HASH=$(echo -n "${FLSMS_ADMIN_USER}" | base64) export FLSMS_ADMIN_USER_HASH=$(echo -n "${FLSMS_ADMIN_USER}" | base64)
export FLSMS_ADMIN_PWD_HASH=$(echo -n "${FLSMS_ADMIN_PWD}" | base64) export FLSMS_ADMIN_PWD_HASH=$(echo -n "${FLSMS_ADMIN_PWD}" | base64)
envsubst <${SOURCE_DIR}/srv/flsms/data/app-settings.properties >/srv/flsms/data/app-settings.properties envsubst <${SOURCE_DIR}/srv/flsms/data/app-settings.properties >/srv/flsms/data/app-settings.properties
chown -R 8018:8018 /srv/flsms/data chown -R 8018:8018 /srv/flsms/data
spotter-appmgr update-login flsms "${FLSMS_ADMIN_USER}" "${FLSMS_ADMIN_PWD}"
# Create FrontlineSMS service
cp ${SOURCE_DIR}/etc/init.d/flsms /etc/init.d/flsms
rc-update add flsms
service flsms start
# Add application definition
spotter-appmgr add-app flsms "https://flsms.{host}/" "${FLSMS_ADMIN_USER}" "${FLSMS_ADMIN_PWD}"

View File

@ -3,8 +3,7 @@
description="FrontlineSMS docker container" description="FrontlineSMS docker container"
depend() { depend() {
need docker net need docker
use dns logger netmount
} }
start() { start() {
@ -16,7 +15,11 @@ start() {
} }
start_post() { start_post() {
/usr/local/bin/spotter-appmgr update-proxy flsms /usr/bin/spotter-appmgr register-proxy flsms
}
stop_pre() {
/usr/bin/spotter-appmgr unregister-proxy flsms
} }
stop() { stop() {

View File

@ -5,9 +5,12 @@ SOURCE_DIR=$(realpath $(dirname "${0}"))/gnuhealth
# Check prerequisites # Check prerequisites
docker image ls | grep -q postfix || $(realpath $(dirname "${0}"))/postfix.sh 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 postgres || $(realpath $(dirname "${0}"))/postgres.sh
service postgres start
# Build Docker container # Build Docker container
docker build -t gnuhealth ${SOURCE_DIR} docker build -t gnuhealth ${SOURCE_DIR}
cp ${SOURCE_DIR}/etc/init.d/gnuhealth /etc/init.d/gnuhealth
rc-update -u
# Create databases # Create databases
export GNUHEALTH_PWD=$(head -c 18 /dev/urandom | base64 | tr -d '/+=') export GNUHEALTH_PWD=$(head -c 18 /dev/urandom | base64 | tr -d '/+=')
@ -18,21 +21,14 @@ mkdir -p /srv/gnuhealth/conf/
envsubst <${SOURCE_DIR}/srv/gnuhealth/conf/trytond.conf >/srv/gnuhealth/conf/trytond.conf envsubst <${SOURCE_DIR}/srv/gnuhealth/conf/trytond.conf >/srv/gnuhealth/conf/trytond.conf
# Populate database # Populate database
export GNUHEALTH_ADMIN_USER="admin"
export GNUHEALTH_ADMIN_PWD=$(head -c 12 /dev/urandom | base64) export GNUHEALTH_ADMIN_PWD=$(head -c 12 /dev/urandom | base64)
echo ${GNUHEALTH_ADMIN_PWD} >/tmp/.adminpwd echo ${GNUHEALTH_ADMIN_PWD} >/tmp/.adminpwd
docker run --rm -h gnuhealth --link postgres -v /srv/gnuhealth/conf:/srv/gnuhealth/gnuhealth/tryton/server/config -v /tmp/.adminpwd:/tmp/.adminpwd -e TRYTONPASSFILE=/tmp/.adminpwd gnuhealth /srv/gnuhealth/gnuhealth/tryton/server/trytond-4.2.10/bin/trytond-admin -d gnuhealth --all -v docker run --rm -h gnuhealth --link postgres -v /srv/gnuhealth/conf:/srv/gnuhealth/gnuhealth/tryton/server/config -v /tmp/.adminpwd:/tmp/.adminpwd -e TRYTONPASSFILE=/tmp/.adminpwd gnuhealth /srv/gnuhealth/gnuhealth/tryton/server/trytond-4.2.10/bin/trytond-admin -d gnuhealth --all -v
rm -f /tmp/.adminpwd rm -f /tmp/.adminpwd
spotter-appmgr update-login gnuhealth "${GNUHEALTH_ADMIN_USER}" "${GNUHEALTH_ADMIN_PWD}"
# Populate demo database # Populate demo database
wget http://health.gnu.org/downloads/postgres_dumps/gnuhealth-32-demo.sql.gz -O /tmp/gnuhealth_demo.sql.gz wget http://health.gnu.org/downloads/postgres_dumps/gnuhealth-32-demo.sql.gz -O /tmp/gnuhealth_demo.sql.gz
zcat /tmp/gnuhealth_demo.sql.gz | docker exec -i -e PGPASSWORD=${GNUHEALTH_PWD} postgres psql gnuhealth_demo gnuhealth zcat /tmp/gnuhealth_demo.sql.gz | docker exec -i -e PGPASSWORD=${GNUHEALTH_PWD} postgres psql gnuhealth_demo gnuhealth
rm -f /tmp/gnuhealth_demo.sql.gz rm -f /tmp/gnuhealth_demo.sql.gz
# Create GNU Health service
cp ${SOURCE_DIR}/etc/init.d/gnuhealth /etc/init.d/gnuhealth
rc-update add gnuhealth
service gnuhealth start
# Add application definition
spotter-appmgr add-app gnuhealth "https://gnuhealth.{host}/index.html" admin "${GNUHEALTH_ADMIN_PWD}"
spotter-appmgr add-app gnuhealth-clients -p clienturl "gnuhealth.{host}"

View File

@ -3,8 +3,7 @@
description="GNU Health docker container" description="GNU Health docker container"
depend() { depend() {
need docker net postgres need docker postgres
use dns logger netmount postfix
} }
start() { start() {
@ -18,7 +17,11 @@ start() {
} }
start_post() { start_post() {
/usr/local/bin/spotter-appmgr update-proxy gnuhealth /usr/bin/spotter-appmgr register-proxy gnuhealth
}
stop_pre() {
/usr/bin/spotter-appmgr unregister-proxy gnuhealth
} }
stop() { stop() {

View File

@ -5,9 +5,12 @@ SOURCE_DIR=$(realpath $(dirname "${0}"))/kanboard
# Check prerequisites # Check prerequisites
docker image ls | grep -q postfix || $(realpath $(dirname "${0}"))/postfix.sh 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 postgres || $(realpath $(dirname "${0}"))/postgres.sh
service postgres start
# Build Docker container # Build Docker container
docker build -t kanboard ${SOURCE_DIR} docker build -t kanboard ${SOURCE_DIR}
cp ${SOURCE_DIR}/etc/init.d/kanboard /etc/init.d/kanboard
rc-update -u
# Populate database # Populate database
export KANBOARD_PWD=$(head -c 18 /dev/urandom | base64) export KANBOARD_PWD=$(head -c 18 /dev/urandom | base64)
@ -22,15 +25,7 @@ export KANBOARD_ADMIN_USER=admin
export KANBOARD_ADMIN_PWD=$(head -c 12 /dev/urandom | base64) export KANBOARD_ADMIN_PWD=$(head -c 12 /dev/urandom | base64)
export KANBOARD_ADMIN_HASH=$(docker run --rm kanboard php -r "echo password_hash('${KANBOARD_ADMIN_PWD}', PASSWORD_BCRYPT);") export KANBOARD_ADMIN_HASH=$(docker run --rm kanboard php -r "echo password_hash('${KANBOARD_ADMIN_PWD}', PASSWORD_BCRYPT);")
envsubst <${SOURCE_DIR}/adminpwd.sql | docker exec -i postgres psql kanboard envsubst <${SOURCE_DIR}/adminpwd.sql | docker exec -i postgres psql kanboard
spotter-appmgr update-login kanboard "${KANBOARD_ADMIN_USER}" "${KANBOARD_ADMIN_PWD}"
# Create KanBoard service
cp ${SOURCE_DIR}/etc/init.d/kanboard /etc/init.d/kanboard
rc-update add kanboard
service kanboard start
# Install cron job # Install cron job
cp ${SOURCE_DIR}/etc/periodic/daily/kanboard /etc/periodic/daily/kanboard cp ${SOURCE_DIR}/etc/periodic/daily/kanboard /etc/periodic/daily/kanboard
# Add application definition
spotter-appmgr add-app kanboard "https://kanboard.{host}/" "${KANBOARD_ADMIN_USER}" "${KANBOARD_ADMIN_PWD}"
spotter-appmgr add-app kanboard-mobile -p clienturl "https://kanboard.{host}"

View File

@ -3,8 +3,7 @@
description="KanBoard docker container" description="KanBoard docker container"
depend() { depend() {
need docker net postgres need docker postfix postgres
use dns logger netmount postfix
} }
start() { start() {
@ -19,7 +18,11 @@ start() {
} }
start_post() { start_post() {
/usr/local/bin/spotter-appmgr update-proxy kanboard /usr/bin/spotter-appmgr register-proxy kanboard
}
stop_pre() {
/usr/bin/spotter-appmgr unregister-proxy kanboard
} }
stop() { stop() {

View File

@ -4,6 +4,8 @@ SOURCE_DIR=$(realpath $(dirname "${0}"))/mariadb
# Build Docker container # Build Docker container
docker build -t mariadb ${SOURCE_DIR} docker build -t mariadb ${SOURCE_DIR}
cp ${SOURCE_DIR}/etc/init.d/mariadb /etc/init.d/mariadb
rc-update -u
# Create MariaDB instance # Create MariaDB instance
mkdir -p /srv/mariadb/conf /srv/mariadb/data mkdir -p /srv/mariadb/conf /srv/mariadb/data
@ -18,11 +20,6 @@ if [ ${DEBUG:-0} -eq 1 ]; then
sed -i 's/#general_log/general_log/g' /srv/mariadb/conf/my.cnf sed -i 's/#general_log/general_log/g' /srv/mariadb/conf/my.cnf
fi fi
# Configure MariaDB service
cp ${SOURCE_DIR}/etc/init.d/mariadb /etc/init.d/mariadb
rc-update add mariadb
service mariadb start
# Configure MariaDB admin # Configure MariaDB admin
docker exec -i mariadb sh -c 'until [ -x /run/mysqld/mysqld.sock ]; do usleep 100000; done' service mariadb start
cat ${SOURCE_DIR}/adminpwd.sql | docker exec -i mariadb mysql cat ${SOURCE_DIR}/adminpwd.sql | docker exec -i mariadb mysql

View File

@ -3,8 +3,7 @@
description="MariaDB docker container" description="MariaDB docker container"
depend() { depend() {
need docker net need docker
use dns logger netmount
} }
start() { start() {
@ -16,6 +15,10 @@ start() {
mariadb mariadb
} }
start_post() {
timeout -t 3 docker exec mariadb sh -c 'until [ -e /run/mysqld/mysqld.sock ]; do usleep 50000; done'
}
stop() { stop() {
/usr/bin/docker stop mariadb /usr/bin/docker stop mariadb
} }

View File

@ -6,9 +6,12 @@ SOURCE_DIR=$(realpath $(dirname "${0}"))/mifosx
docker image ls | grep -q mariadb || $(realpath $(dirname "${0}"))/mariadb.sh docker image ls | grep -q mariadb || $(realpath $(dirname "${0}"))/mariadb.sh
docker image ls | grep -q postfix || $(realpath $(dirname "${0}"))/postfix.sh docker image ls | grep -q postfix || $(realpath $(dirname "${0}"))/postfix.sh
docker image ls | grep -q tomcat || $(realpath $(dirname "${0}"))/tomcat.sh docker image ls | grep -q tomcat || $(realpath $(dirname "${0}"))/tomcat.sh
service mariadb start
# Build Docker container # Build Docker container
docker build -t mifosx ${SOURCE_DIR} docker build -t mifosx ${SOURCE_DIR}
cp ${SOURCE_DIR}/etc/init.d/mifosx /etc/init.d/mifosx
rc-update -u
# Create databases # Create databases
export MIFOSX_PWD=$(head -c 18 /dev/urandom | base64) export MIFOSX_PWD=$(head -c 18 /dev/urandom | base64)
@ -24,22 +27,17 @@ envsubst <${SOURCE_DIR}/srv/mifosx/conf/context.xml >/srv/mifosx/conf/context.xm
cp ${SOURCE_DIR}/srv/mifosx/conf/server.xml /srv/mifosx/conf/server.xml cp ${SOURCE_DIR}/srv/mifosx/conf/server.xml /srv/mifosx/conf/server.xml
cp ${SOURCE_DIR}/srv/mifosx/update-url.sh /srv/mifosx/update-url.sh cp ${SOURCE_DIR}/srv/mifosx/update-url.sh /srv/mifosx/update-url.sh
# Create Mifos X service # Populate database
cp ${SOURCE_DIR}/etc/init.d/mifosx /etc/init.d/mifosx
rc-update add mifosx
service mifosx start service mifosx start
# Update admin account
echo `date` '- Waiting for database to be populated. This should take about a minute.' echo `date` '- Waiting for database to be populated. This should take about a minute.'
until docker logs mifosx 2>&1 | grep -q 'Migrating schema `mifostenant-default` to version 5000'; do until docker logs mifosx 2>&1 | grep -q 'Migrating schema `mifostenant-default` to version 5000'; do
sleep 1 sleep 1
done done
# Update admin account
export MIFOSX_ADMIN_USER=admin export MIFOSX_ADMIN_USER=admin
export MIFOSX_ADMIN_EMAIL=admin@example.com export MIFOSX_ADMIN_EMAIL=admin@example.com
export MIFOSX_ADMIN_PWD=$(head -c 12 /dev/urandom | base64 | tr -d "+") export MIFOSX_ADMIN_PWD=$(head -c 12 /dev/urandom | base64 | tr -d "+")
export MIFOSX_ADMIN_HASH=$(echo -n "${MIFOSX_ADMIN_PWD}{1}" | sha256sum | awk '{print $1}') export MIFOSX_ADMIN_HASH=$(echo -n "${MIFOSX_ADMIN_PWD}{1}" | sha256sum | awk '{print $1}')
envsubst <${SOURCE_DIR}/adminpwd.sql | docker exec -i mariadb mysql mifostenant-default envsubst <${SOURCE_DIR}/adminpwd.sql | docker exec -i mariadb mysql mifostenant-default
spotter-appmgr update-login mifosx "${MIFOSX_ADMIN_USER}" "${MIFOSX_ADMIN_PWD}"
# Add application definition
spotter-appmgr add-app mifosx "https://mifosx.{host}/community-app/" "${MIFOSX_ADMIN_USER}" "${MIFOSX_ADMIN_PWD}"
spotter-appmgr add-app mifosx-mobile -p clienturl "mifosx.{host}"

View File

@ -3,8 +3,7 @@
description="Mifos X docker container" description="Mifos X docker container"
depend() { depend() {
need docker net mariadb need docker mariadb postfix
use dns logger netmount postfix
} }
start() { start() {
@ -19,7 +18,11 @@ start() {
} }
start_post() { start_post() {
/usr/local/bin/spotter-appmgr update-proxy mifosx /usr/bin/spotter-appmgr register-proxy mifosx
}
stop_pre() {
/usr/bin/spotter-appmgr unregister-proxy mifosx
} }
stop() { stop() {

View File

@ -68,7 +68,7 @@
--> -->
<Connector port="8080" protocol="HTTP/1.1" <Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000" connectionTimeout="20000"
proxyName="127.0.0.1" proxyName="mifosx.spotter.vm"
proxyPort="443" proxyPort="443"
scheme="https" secure="true" scheme="https" secure="true"
redirectPort="8443" /> redirectPort="8443" />

View File

@ -7,9 +7,12 @@ docker image ls | grep -q activemq || $(realpath $(dirname "${0}"))/activemq.sh
docker image ls | grep -q postfix || $(realpath $(dirname "${0}"))/postfix.sh 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 postgres || $(realpath $(dirname "${0}"))/postgres.sh
docker image ls | grep -q tomcat || $(realpath $(dirname "${0}"))/tomcat.sh docker image ls | grep -q tomcat || $(realpath $(dirname "${0}"))/tomcat.sh
service postgres start
# Build Docker container # Build Docker container
docker build -t motech ${SOURCE_DIR} docker build -t motech ${SOURCE_DIR}
cp ${SOURCE_DIR}/etc/init.d/motech /etc/init.d/motech
rc-update -u
# Create database # Create database
export MOTECH_PWD=$(head -c 18 /dev/urandom | base64) export MOTECH_PWD=$(head -c 18 /dev/urandom | base64)
@ -24,12 +27,8 @@ cp ${SOURCE_DIR}/srv/motech/conf/config/org.motechproject.motech-platform-email/
chown -R 8013:8013 /srv/motech/conf chown -R 8013:8013 /srv/motech/conf
cp ${SOURCE_DIR}/srv/motech/update-url.sh /srv/motech/update-url.sh cp ${SOURCE_DIR}/srv/motech/update-url.sh /srv/motech/update-url.sh
# Create Motech service # Populate database and create admin account
cp ${SOURCE_DIR}/etc/init.d/motech /etc/init.d/motech
rc-update add motech
service motech start service motech start
# Configure Motech admin
echo `date` '- Waiting for database to be populated. This should take about a minute.' echo `date` '- Waiting for database to be populated. This should take about a minute.'
MOTECH_IP=$(docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' motech) MOTECH_IP=$(docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' motech)
until curl -s "http://${MOTECH_IP}:8080/motech/module/server/startup/" | grep -q adminLogin; do until curl -s "http://${MOTECH_IP}:8080/motech/module/server/startup/" | grep -q adminLogin; do
@ -39,6 +38,4 @@ export MOTECH_ADMIN_USER="admin"
export MOTECH_ADMIN_EMAIL="admin@example.com" export MOTECH_ADMIN_EMAIL="admin@example.com"
export MOTECH_ADMIN_PWD=$(head -c 12 /dev/urandom | base64) export MOTECH_ADMIN_PWD=$(head -c 12 /dev/urandom | base64)
curl -H "Content-Type: application/json" -X POST -d "{\"adminLogin\":\"${MOTECH_ADMIN_USER}\",\"adminEmail\":\"${MOTECH_ADMIN_EMAIL}\",\"adminPassword\":\"${MOTECH_ADMIN_PWD}\",\"adminConfirmPassword\":\"${MOTECH_ADMIN_PWD}\",\"language\":\"cs\",\"providerName\":\"\",\"providerUrl\":\"\",\"schedulerUrl\":\"\"}" http://${MOTECH_IP}:8080/motech/module/server/startup/ curl -H "Content-Type: application/json" -X POST -d "{\"adminLogin\":\"${MOTECH_ADMIN_USER}\",\"adminEmail\":\"${MOTECH_ADMIN_EMAIL}\",\"adminPassword\":\"${MOTECH_ADMIN_PWD}\",\"adminConfirmPassword\":\"${MOTECH_ADMIN_PWD}\",\"language\":\"cs\",\"providerName\":\"\",\"providerUrl\":\"\",\"schedulerUrl\":\"\"}" http://${MOTECH_IP}:8080/motech/module/server/startup/
spotter-appmgr update-login motech "${MOTECH_ADMIN_USER}" "${MOTECH_ADMIN_PWD}"
# Add application definition
spotter-appmgr add-app motech "https://motech.{host}/motech/" "${MOTECH_ADMIN_USER}" "${MOTECH_ADMIN_PWD}"

View File

@ -3,8 +3,7 @@
description="Motech docker container" description="Motech docker container"
depend() { depend() {
need docker net postgres activemq need docker activemq postfix postgres
use dns logger netmount postfix
} }
start() { start() {
@ -19,7 +18,11 @@ start() {
} }
start_post() { start_post() {
/usr/local/bin/spotter-appmgr update-proxy motech /usr/bin/spotter-appmgr register-proxy motech
}
stop_pre() {
/usr/bin/spotter-appmgr unregister-proxy motech
} }
stop() { stop() {

View File

@ -1,3 +1,3 @@
system.language=en system.language=en
login.mode=repository login.mode=repository
server.url=http://127.0.0.1 server.url=https://motech.spotter.vm

18
odk.sh
View File

@ -6,9 +6,12 @@ SOURCE_DIR=$(realpath $(dirname "${0}"))/odk
docker image ls | grep -q postgres || $(realpath $(dirname "${0}"))/postgres.sh docker image ls | grep -q postgres || $(realpath $(dirname "${0}"))/postgres.sh
docker image ls | grep -q postfix || $(realpath $(dirname "${0}"))/postfix.sh docker image ls | grep -q postfix || $(realpath $(dirname "${0}"))/postfix.sh
docker image ls | grep -q tomcat || $(realpath $(dirname "${0}"))/tomcat.sh docker image ls | grep -q tomcat || $(realpath $(dirname "${0}"))/tomcat.sh
service postgres start
# Build Docker container # Build Docker container
docker build -t odk ${SOURCE_DIR} docker build -t odk ${SOURCE_DIR}
cp ${SOURCE_DIR}/etc/init.d/odk /etc/init.d/odk
rc-update -u
# Create databases # Create databases
export ODK_PWD=$(head -c 18 /dev/urandom | base64) export ODK_PWD=$(head -c 18 /dev/urandom | base64)
@ -24,21 +27,16 @@ cp ${SOURCE_DIR}/srv/odk/conf/server.xml /srv/odk/conf/server.xml
cp ${SOURCE_DIR}/srv/odk/update-url.sh /srv/odk/update-url.sh cp ${SOURCE_DIR}/srv/odk/update-url.sh /srv/odk/update-url.sh
chown -R 8015:8015 /srv/odk/conf chown -R 8015:8015 /srv/odk/conf
# Create OpenDataKit service # Populate database
cp ${SOURCE_DIR}/etc/init.d/odk /etc/init.d/odk
rc-update add odk
service odk start service odk start
until docker logs odk 2>&1 | grep -q 'org.apache.catalina.startup.Catalina.start'; do
sleep 1
done
# Update admin account # Update admin account
export ODK_ADMIN_PWD=$(head -c 12 /dev/urandom | base64) export ODK_ADMIN_PWD=$(head -c 12 /dev/urandom | base64)
export ODK_ADMIN_SALT=$(head -c 4 /dev/urandom | hexdump -e '"%x"') # Must be 8 characters export ODK_ADMIN_SALT=$(head -c 4 /dev/urandom | hexdump -e '"%x"') # Must be 8 characters
export ODK_ADMIN_BASIC_HASH=$(echo -n "${ODK_ADMIN_PWD}{${ODK_ADMIN_SALT}}" | sha1sum | tr -d " -") export ODK_ADMIN_BASIC_HASH=$(echo -n "${ODK_ADMIN_PWD}{${ODK_ADMIN_SALT}}" | sha1sum | tr -d " -")
export ODK_ADMIN_DIGEST_HASH=$(echo -n "${ODK_ADMIN_USER}:${ODK_ADMIN_REALM}:${ODK_ADMIN_PWD}" | md5sum | tr -d " -") export ODK_ADMIN_DIGEST_HASH=$(echo -n "${ODK_ADMIN_USER}:${ODK_ADMIN_REALM}:${ODK_ADMIN_PWD}" | md5sum | tr -d " -")
until docker logs odk 2>&1 | grep -q 'org.apache.catalina.startup.Catalina.start'; do
sleep 1
done
envsubst <${SOURCE_DIR}/adminpwd.sql | docker exec -i postgres psql odk envsubst <${SOURCE_DIR}/adminpwd.sql | docker exec -i postgres psql odk
spotter-appmgr update-login odk "${ODK_ADMIN_USER}" "${ODK_ADMIN_PWD}"
# Add application definition
spotter-appmgr add-app odk "https://odk.{host}/aggregate/" "${ODK_ADMIN_USER}" "${ODK_ADMIN_PWD}"
spotter-appmgr add-app odk-clients -p clienturl "https://odk.{host}/aggregate"

View File

@ -3,8 +3,7 @@
description="OpenDataKit Aggregate docker container" description="OpenDataKit Aggregate docker container"
depend() { depend() {
need docker net postgres need docker postfix postgres
use dns logger netmount postfix
} }
start() { start() {
@ -20,7 +19,11 @@ start() {
} }
start_post() { start_post() {
/usr/local/bin/spotter-appmgr update-proxy odk /usr/bin/spotter-appmgr register-proxy odk
}
stop_pre() {
/usr/bin/spotter-appmgr unregister-proxy odk
} }
stop() { stop() {

View File

@ -68,7 +68,7 @@
--> -->
<Connector port="8080" protocol="HTTP/1.1" <Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000" connectionTimeout="20000"
proxyName="127.0.0.1" proxyName="odk.spotter.vm"
proxyPort="443" proxyPort="443"
scheme="https" secure="true" scheme="https" secure="true"
redirectPort="8443" /> redirectPort="8443" />

View File

@ -5,9 +5,12 @@ SOURCE_DIR=$(realpath $(dirname "${0}"))/odkbuild
# Check prerequisites # Check prerequisites
docker image ls | grep -q postgres || $(realpath $(dirname "${0}"))/postgres.sh docker image ls | grep -q postgres || $(realpath $(dirname "${0}"))/postgres.sh
docker image ls | grep -q ruby || $(realpath $(dirname "${0}"))/ruby.sh docker image ls | grep -q ruby || $(realpath $(dirname "${0}"))/ruby.sh
service postgres start
# Build Docker container # Build Docker container
docker build -t odkbuild ${SOURCE_DIR} docker build -t odkbuild ${SOURCE_DIR}
cp ${SOURCE_DIR}/etc/init.d/odkbuild /etc/init.d/odkbuild
rc-update -u
# Create databases # Create databases
export ODKBUILD_PWD=$(head -c 18 /dev/urandom | base64) export ODKBUILD_PWD=$(head -c 18 /dev/urandom | base64)
@ -18,11 +21,3 @@ export ODKBUILD_COOKIE_SECRET=$(head -c 8 /dev/urandom | hexdump -e '"%x"')
mkdir -p /srv/odkbuild/conf mkdir -p /srv/odkbuild/conf
envsubst <${SOURCE_DIR}/srv/odkbuild/conf/config.yml >/srv/odkbuild/conf/config.yml envsubst <${SOURCE_DIR}/srv/odkbuild/conf/config.yml >/srv/odkbuild/conf/config.yml
docker run --rm -h odkbuild --link postgres -v /srv/odkbuild/conf/config.yml:/srv/odkbuild/config.yml -w /srv/odkbuild odkbuild rake db:migrate docker run --rm -h odkbuild --link postgres -v /srv/odkbuild/conf/config.yml:/srv/odkbuild/config.yml -w /srv/odkbuild odkbuild rake db:migrate
# Create OpenDataKit service
cp ${SOURCE_DIR}/etc/init.d/odkbuild /etc/init.d/odkbuild
rc-update add odkbuild
service odkbuild start
# Add application definition
spotter-appmgr add-app odkbuild "https://odkbuild.{host}/"

View File

@ -3,8 +3,7 @@
description="OpenDataKit Build docker container" description="OpenDataKit Build docker container"
depend() { depend() {
need docker net postgres need docker postgres
use dns logger netmount
} }
start() { start() {
@ -17,7 +16,11 @@ start() {
} }
start_post() { start_post() {
/usr/local/bin/spotter-appmgr update-proxy odkbuild /usr/bin/spotter-appmgr register-proxy odkbuild
}
stop_pre() {
/usr/bin/spotter-appmgr unregister-proxy odkbuild
} }
stop() { stop() {

13
omk.sh
View File

@ -7,6 +7,8 @@ docker image ls | grep -q java || $(realpath $(dirname "${0}"))/java.sh
# Build Docker container # Build Docker container
docker build -t omk ${SOURCE_DIR} docker build -t omk ${SOURCE_DIR}
cp ${SOURCE_DIR}/etc/init.d/omk /etc/init.d/omk
rc-update -u
# Configure OpenMapKit # Configure OpenMapKit
export OMK_ADMIN_USER="admin" export OMK_ADMIN_USER="admin"
@ -15,13 +17,4 @@ mkdir -p /srv/omk/conf /srv/omk/data
chown -R 8007:8007 /srv/omk/data chown -R 8007:8007 /srv/omk/data
docker run --rm -v /srv/omk/data:/mnt/data omk cp -rp /srv/omk/data/. /mnt/data docker run --rm -v /srv/omk/data:/mnt/data omk cp -rp /srv/omk/data/. /mnt/data
envsubst <${SOURCE_DIR}/srv/omk/conf/settings.js >/srv/omk/conf/settings.js envsubst <${SOURCE_DIR}/srv/omk/conf/settings.js >/srv/omk/conf/settings.js
spotter-appmgr update-login omk "${OMK_ADMIN_USER}" "${OMK_ADMIN_PWD}"
# Configure OpenMapKit service
cp ${SOURCE_DIR}/etc/init.d/omk /etc/init.d/omk
rc-update add omk
service omk start
# Add application definition
spotter-appmgr add-app omk "https://omk.{host}/" "${OMK_ADMIN_USER}" "${OMK_ADMIN_PWD}"
spotter-appmgr add-app omk-clients -p clienturl "https://omk.{host}"
spotter-appmgr add-app geoodk-clients -p clienturl "https://omk.{host}"

View File

@ -3,8 +3,7 @@
description="OpenMapKit docker container" description="OpenMapKit docker container"
depend() { depend() {
need docker net need docker
use dns logger netmount
} }
start() { start() {
@ -17,7 +16,11 @@ start() {
} }
start_post() { start_post() {
/usr/local/bin/spotter-appmgr update-proxy omk /usr/bin/spotter-appmgr register-proxy omk
}
stop_pre() {
/usr/bin/spotter-appmgr unregister-proxy omk
} }
stop() { stop() {

View File

@ -6,9 +6,13 @@ SOURCE_DIR=$(realpath $(dirname "${0}"))/pandora
docker image ls | grep -q postfix || $(realpath $(dirname "${0}"))/postfix.sh 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 postgres || $(realpath $(dirname "${0}"))/postgres.sh
docker image ls | grep -q rabbitmq || $(realpath $(dirname "${0}"))/rabbitmq.sh docker image ls | grep -q rabbitmq || $(realpath $(dirname "${0}"))/rabbitmq.sh
service postgres start
service rabbitmq start
# Build Docker container # Build Docker container
docker build -t pandora ${SOURCE_DIR} docker build -t pandora ${SOURCE_DIR}
cp ${SOURCE_DIR}/etc/init.d/pandora /etc/init.d/pandora
rc-update -u
# Create PostgreSQL user and database # Create PostgreSQL user and database
export PANDORA_PWD=$(head -c 18 /dev/urandom | base64) export PANDORA_PWD=$(head -c 18 /dev/urandom | base64)
@ -50,11 +54,4 @@ export PANDORA_ADMIN_EMAIL=admin@example.com
export PANDORA_ADMIN_PWD=$(head -c 12 /dev/urandom | base64) export PANDORA_ADMIN_PWD=$(head -c 12 /dev/urandom | base64)
export PANDORA_ADMIN_HASH=$(docker run --rm -h pandora -e DJANGO_SETTINGS_MODULE=pandora.settings -v /srv/pandora/conf:/srv/pandora/conf pandora python3 -c "from django.contrib.auth.hashers import make_password; print(make_password('${PANDORA_ADMIN_PWD}'))") export PANDORA_ADMIN_HASH=$(docker run --rm -h pandora -e DJANGO_SETTINGS_MODULE=pandora.settings -v /srv/pandora/conf:/srv/pandora/conf pandora python3 -c "from django.contrib.auth.hashers import make_password; print(make_password('${PANDORA_ADMIN_PWD}'))")
envsubst <${SOURCE_DIR}/adminpwd.sql | docker exec -i postgres psql pandora envsubst <${SOURCE_DIR}/adminpwd.sql | docker exec -i postgres psql pandora
spotter-appmgr update-login pandora "${PANDORA_ADMIN_USER}" "${PANDORA_ADMIN_PWD}"
# Configure Pandora service
cp ${SOURCE_DIR}/etc/init.d/pandora /etc/init.d/pandora
rc-update add pandora
service pandora start
# Add application definition
spotter-appmgr add-app pandora "https://pandora.{host}/" "${PANDORA_ADMIN_USER}" "${PANDORA_ADMIN_PWD}"

View File

@ -3,8 +3,7 @@
description="Pan.do/ra docker container" description="Pan.do/ra docker container"
depend() { depend() {
need docker net postgres rabbitmq need docker postfix postgres rabbitmq
use dns logger netmount postfix
} }
start() { start() {
@ -20,7 +19,11 @@ start() {
} }
start_post() { start_post() {
/usr/local/bin/spotter-appmgr update-proxy pandora /usr/bin/spotter-appmgr register-proxy pandora
}
stop_pre() {
/usr/bin/spotter-appmgr unregister-proxy pandora
} }
stop() { stop() {

View File

@ -4,6 +4,8 @@ SOURCE_DIR=$(realpath $(dirname "${0}"))/postfix
# Build Docker container # Build Docker container
docker build -t postfix ${SOURCE_DIR} docker build -t postfix ${SOURCE_DIR}
cp ${SOURCE_DIR}/etc/init.d/postfix /etc/init.d/postfix
rc-update -u
# Copy existing config files into persistent storage # Copy existing config files into persistent storage
mkdir -p /srv/postfix/conf /srv/postfix/data mkdir -p /srv/postfix/conf /srv/postfix/data
@ -11,8 +13,3 @@ docker run --rm -v /srv/postfix/conf:/mnt/conf postfix cp -rp /etc/postfix/. /mn
# Configure postfix # Configure postfix
cp ${SOURCE_DIR}/srv/postfix/conf/main.cf /srv/postfix/conf/main.cf cp ${SOURCE_DIR}/srv/postfix/conf/main.cf /srv/postfix/conf/main.cf
# Configure postfix service
cp ${SOURCE_DIR}/etc/init.d/postfix /etc/init.d/postfix
rc-update add postfix
service postfix start

View File

@ -3,8 +3,7 @@
description="Postfix docker container" description="Postfix docker container"
depend() { depend() {
need docker net need docker
use dns logger netmount
} }
start() { start() {

View File

@ -4,6 +4,8 @@ SOURCE_DIR=$(realpath $(dirname "${0}"))/postgres
# Build Docker container # Build Docker container
docker build -t postgres ${SOURCE_DIR} docker build -t postgres ${SOURCE_DIR}
cp ${SOURCE_DIR}/etc/init.d/postgres /etc/init.d/postgres
rc-update -u
# Create Postgres instance # Create Postgres instance
mkdir -p /srv/postgres/data mkdir -p /srv/postgres/data
@ -14,14 +16,8 @@ docker run --rm --name postgres -h postgres -v /srv/postgres/data:/var/lib/postg
# Configure Postgres # Configure Postgres
cp ${SOURCE_DIR}/srv/postgres/data/postgresql.conf /srv/postgres/data/postgresql.conf cp ${SOURCE_DIR}/srv/postgres/data/postgresql.conf /srv/postgres/data/postgresql.conf
cp ${SOURCE_DIR}/srv/postgres/data/pg_hba.conf /srv/postgres/data/pg_hba.conf cp ${SOURCE_DIR}/srv/postgres/data/pg_hba.conf /srv/postgres/data/pg_hba.conf
# Enable query logging. Only if the DEBUG environment variable is set # Enable query logging. Only if the DEBUG environment variable is set
if [ ${DEBUG:-0} -eq 1 ]; then if [ ${DEBUG:-0} -eq 1 ]; then
sed -i 's/^#log_destination/log_destination/' /srv/postgres/data/postgresql.conf sed -i 's/^#log_destination/log_destination/' /srv/postgres/data/postgresql.conf
sed -i 's/^#log_statement/log_statement/' /srv/postgres/data/postgresql.conf sed -i 's/^#log_statement/log_statement/' /srv/postgres/data/postgresql.conf
fi fi
# Configure Postgres service
cp ${SOURCE_DIR}/etc/init.d/postgres /etc/init.d/postgres
rc-update add postgres
service postgres start

View File

@ -3,8 +3,7 @@
description="Postgres docker container" description="Postgres docker container"
depend() { depend() {
need docker net need docker
use dns logger netmount
} }
start() { start() {
@ -15,6 +14,10 @@ start() {
postgres postgres
} }
start_post() {
timeout -t 3 docker exec postgres sh -c 'until [ -e /var/run/postgresql/.s.PGSQL.5432 ]; do usleep 50000; done'
}
stop() { stop() {
/usr/bin/docker stop postgres /usr/bin/docker stop postgres
} }

View File

@ -4,12 +4,9 @@ SOURCE_DIR=$(realpath $(dirname "${0}"))/rabbitmq
# Build Docker container # Build Docker container
docker build -t rabbitmq ${SOURCE_DIR} docker build -t rabbitmq ${SOURCE_DIR}
cp ${SOURCE_DIR}/etc/init.d/rabbitmq /etc/init.d/rabbitmq
rc-update -u
# Create RabbitMQ directory structure # Create RabbitMQ directory structure
mkdir -p /srv/rabbitmq/data mkdir -p /srv/rabbitmq/data
chown 5672:5672 /srv/rabbitmq/data chown 5672:5672 /srv/rabbitmq/data
# Configure RabbitMQ service
cp ${SOURCE_DIR}/etc/init.d/rabbitmq /etc/init.d/rabbitmq
rc-update add rabbitmq
service rabbitmq start

View File

@ -3,8 +3,7 @@
description="RabbitMQ docker container" description="RabbitMQ docker container"
depend() { depend() {
need docker net need docker
use dns logger netmount
} }
start() { start() {

View File

@ -4,13 +4,10 @@ SOURCE_DIR=$(realpath $(dirname "${0}"))/redis
# Build Docker container # Build Docker container
docker build -t redis ${SOURCE_DIR} docker build -t redis ${SOURCE_DIR}
cp ${SOURCE_DIR}/etc/init.d/redis /etc/init.d/redis
rc-update -u
# Configure Redis # Configure Redis
mkdir -p /srv/redis/conf /srv/redis/data mkdir -p /srv/redis/conf /srv/redis/data
cp ${SOURCE_DIR}/srv/redis/conf/redis.conf /srv/redis/conf/redis.conf cp ${SOURCE_DIR}/srv/redis/conf/redis.conf /srv/redis/conf/redis.conf
chown -R 6379:6379 /srv/redis/data chown -R 6379:6379 /srv/redis/data
# Configure Redis service
cp ${SOURCE_DIR}/etc/init.d/redis /etc/init.d/redis
rc-update add redis
service redis start

View File

@ -3,8 +3,7 @@
description="Redis docker container" description="Redis docker container"
depend() { depend() {
need docker net need docker
use dns logger netmount
} }
start() { start() {

View File

@ -6,7 +6,12 @@ export TEMPLATE=${TEMPLATE:-"default"}
# Check prerequisites # Check prerequisites
docker image ls | grep -q postfix || $(realpath $(dirname "${0}"))/postfix.sh 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 postgres || $(realpath $(dirname "${0}"))/postgres.sh
docker image ls | grep -q sahana || docker build -t sahana $(realpath $(dirname "${0}"))/sahana service postgres start
# Build Docker container
docker build -t sahana ${SOURCE_DIR}
envsubst <${SOURCE_DIR}/etc/init.d/sahana-demo >/etc/init.d/sahana-demo
chmod +x /etc/init.d/sahana-demo
# Create PostgreSQL user and database # Create PostgreSQL user and database
export SAHANADEMO_PWD=$(head -c 18 /dev/urandom | base64) export SAHANADEMO_PWD=$(head -c 18 /dev/urandom | base64)
@ -25,16 +30,8 @@ export SAHANADEMO_ADMIN_PWD=$(head -c 12 /dev/urandom | base64)
envsubst <${SOURCE_DIR}/srv/sahana-demo/conf/000_config.py >/srv/sahana-demo/conf/000_config.py envsubst <${SOURCE_DIR}/srv/sahana-demo/conf/000_config.py >/srv/sahana-demo/conf/000_config.py
envsubst <${SOURCE_DIR}/masterUsers.csv >/tmp/masterUsers.csv envsubst <${SOURCE_DIR}/masterUsers.csv >/tmp/masterUsers.csv
cp ${SOURCE_DIR}/srv/sahana-demo/update-url.sh /srv/sahana-demo/update-url.sh cp ${SOURCE_DIR}/srv/sahana-demo/update-url.sh /srv/sahana-demo/update-url.sh
spotter-appmgr update-login sahana-demo "${SAHANADEMO_ADMIN_USER}" "${SAHANADEMO_ADMIN_PWD}"
# Populate database # 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/databases:/srv/web2py/applications/eden/databases -v /tmp/masterUsers.csv:/srv/web2py/applications/eden/modules/templates/default/users/masterUsers.csv sahana su - sahana -c "./web2py.py -S eden -M -R applications/eden/static/scripts/tools/noop.py" docker run --rm -h sahana-demo --link postgres -v /srv/sahana-demo/conf:/srv/web2py/applications/eden/models -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 su - sahana -c "./web2py.py -S eden -M -R applications/eden/static/scripts/tools/noop.py"
rm /tmp/masterUsers.csv rm /tmp/masterUsers.csv
# Create Sahana service
envsubst <${SOURCE_DIR}/etc/init.d/sahana-demo >/etc/init.d/sahana-demo
chmod +x /etc/init.d/sahana-demo
rc-update add sahana-demo
service sahana-demo start
# Add application definition
spotter-appmgr add-app sahana-demo "https://sahana-demo.{host}/eden/" "${SAHANADEMO_ADMIN_USER}" "${SAHANADEMO_ADMIN_PWD}"

View File

@ -3,8 +3,7 @@
description="Sahana Eden Demo docker container" description="Sahana Eden Demo docker container"
depend() { depend() {
need docker net postgres need docker postfix postgres
use dns logger netmount postfix
} }
start() { start() {
@ -21,7 +20,11 @@ start() {
} }
start_post() { start_post() {
/usr/local/bin/spotter-appmgr update-proxy sahana-demo /usr/bin/spotter-appmgr register-proxy sahana-demo
}
stop_pre() {
/usr/bin/spotter-appmgr unregister-proxy sahana-demo
} }
stop() { stop() {

View File

@ -50,7 +50,7 @@ settings.gis.spatialdb = True
#settings.base.system_name = T("Sahana Eden Humanitarian Management Platform") #settings.base.system_name = T("Sahana Eden Humanitarian Management Platform")
#settings.base.system_name_short = T("Sahana Eden") #settings.base.system_name_short = T("Sahana Eden")
# Set this to the Public URL of the instance # Set this to the Public URL of the instance
settings.base.public_url = "http://127.0.0.1" settings.base.public_url = "https://sahana-demo.spotter.vm"
# Switch to "False" in Production for a Performance gain # Switch to "False" in Production for a Performance gain
# (need to set to "True" again when Table definitions are changed) # (need to set to "True" again when Table definitions are changed)

View File

@ -5,9 +5,12 @@ SOURCE_DIR=$(realpath $(dirname "${0}"))/sahana
# Check prerequisites # Check prerequisites
docker image ls | grep -q postfix || $(realpath $(dirname "${0}"))/postfix.sh 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 postgres || $(realpath $(dirname "${0}"))/postgres.sh
service postgres start
# Build Docker container # Build Docker container
docker build -t sahana ${SOURCE_DIR} docker build -t sahana ${SOURCE_DIR}
cp ${SOURCE_DIR}/etc/init.d/sahana /etc/init.d/sahana
rc-update -u
# Create PostgreSQL user and database # Create PostgreSQL user and database
export SAHANA_PWD=$(head -c 18 /dev/urandom | base64) export SAHANA_PWD=$(head -c 18 /dev/urandom | base64)
@ -30,6 +33,7 @@ envsubst <${SOURCE_DIR}/srv/sahana/conf/000_config.py >/srv/sahana/conf/000_conf
envsubst <${SOURCE_DIR}/srv/sahana/data/Spotter/masterUsers.csv >/srv/sahana/data/Spotter/masterUsers.csv envsubst <${SOURCE_DIR}/srv/sahana/data/Spotter/masterUsers.csv >/srv/sahana/data/Spotter/masterUsers.csv
cp ${SOURCE_DIR}/srv/sahana/conf/00_settings.py /srv/sahana/conf/00_settings.py cp ${SOURCE_DIR}/srv/sahana/conf/00_settings.py /srv/sahana/conf/00_settings.py
cp ${SOURCE_DIR}/srv/sahana/update-url.sh /srv/sahana/update-url.sh cp ${SOURCE_DIR}/srv/sahana/update-url.sh /srv/sahana/update-url.sh
spotter-appmgr update-login sahana "${SAHANA_ADMIN_USER}" "${SAHANA_ADMIN_PWD}"
# Populate database # Populate database
docker run --rm -h sahana --link postgres -v /srv/sahana/conf:/srv/web2py/applications/eden/models -v /srv/sahana/data/Spotter:/srv/web2py/applications/eden/modules/templates/Spotter -v /srv/sahana/data/databases:/srv/web2py/applications/eden/databases sahana su - sahana -c "./web2py.py -S eden -M -R applications/eden/static/scripts/tools/noop.py" docker run --rm -h sahana --link postgres -v /srv/sahana/conf:/srv/web2py/applications/eden/models -v /srv/sahana/data/Spotter:/srv/web2py/applications/eden/modules/templates/Spotter -v /srv/sahana/data/databases:/srv/web2py/applications/eden/databases sahana su - sahana -c "./web2py.py -S eden -M -R applications/eden/static/scripts/tools/noop.py"
@ -40,11 +44,3 @@ if [ ${DEBUG:-0} -eq 0 ]; then
sed -i 's/settings.base.debug = True/settings.base.debug = False/' /srv/sahana/conf/000_config.py sed -i 's/settings.base.debug = True/settings.base.debug = False/' /srv/sahana/conf/000_config.py
sed -i 's/#settings.base.prepopulate = 0/settings.base.prepopulate = 0/' /srv/sahana/conf/000_config.py sed -i 's/#settings.base.prepopulate = 0/settings.base.prepopulate = 0/' /srv/sahana/conf/000_config.py
fi fi
# Create Sahana service
cp ${SOURCE_DIR}/etc/init.d/sahana /etc/init.d/sahana
rc-update add sahana
service sahana start
# Add application definition
spotter-appmgr add-app sahana "https://sahana.{host}/eden/" "${SAHANA_ADMIN_USER}" "${SAHANA_ADMIN_PWD}"

View File

@ -3,8 +3,7 @@
description="Sahana Eden docker container" description="Sahana Eden docker container"
depend() { depend() {
need docker net postgres need docker postfix postgres
use dns logger netmount postfix
} }
start() { start() {
@ -21,7 +20,11 @@ start() {
} }
start_post() { start_post() {
/usr/local/bin/spotter-appmgr update-proxy sahana /usr/bin/spotter-appmgr register-proxy sahana
}
stop_pre() {
/usr/bin/spotter-appmgr unregister-proxy sahana
} }
stop() { stop() {

View File

@ -50,7 +50,7 @@ settings.gis.spatialdb = True
#settings.base.system_name = T("Sahana Eden Humanitarian Management Platform") #settings.base.system_name = T("Sahana Eden Humanitarian Management Platform")
#settings.base.system_name_short = T("Sahana Eden") #settings.base.system_name_short = T("Sahana Eden")
# Set this to the Public URL of the instance # Set this to the Public URL of the instance
settings.base.public_url = "http://127.0.0.1" settings.base.public_url = "https://sahana.spotter.vm"
# Switch to "False" in Production for a Performance gain # Switch to "False" in Production for a Performance gain
# (need to set to "True" again when Table definitions are changed) # (need to set to "True" again when Table definitions are changed)

View File

@ -5,7 +5,12 @@ SOURCE_DIR=$(realpath $(dirname "${0}"))/sambro
# Check prerequisites # Check prerequisites
docker image ls | grep -q postfix || $(realpath $(dirname "${0}"))/postfix.sh 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 postgres || $(realpath $(dirname "${0}"))/postgres.sh
docker image ls | grep -q sahana || docker build -t sahana $(realpath $(dirname "${0}"))/sahana service postgres start
# Build Docker container
docker build -t sahana ${SOURCE_DIR}
cp ${SOURCE_DIR}/etc/init.d/sambro /etc/init.d/sambro
rc-update -u
# Create PostgreSQL user and database # Create PostgreSQL user and database
export SAMBRO_PWD=$(head -c 18 /dev/urandom | base64) export SAMBRO_PWD=$(head -c 18 /dev/urandom | base64)
@ -26,6 +31,7 @@ envsubst <${SOURCE_DIR}/masterUsers.csv >/tmp/masterUsers.csv
cp ${SOURCE_DIR}/srv/sambro/conf/00_settings.py /srv/sambro/conf/00_settings.py cp ${SOURCE_DIR}/srv/sambro/conf/00_settings.py /srv/sambro/conf/00_settings.py
cp ${SOURCE_DIR}/srv/sambro/data/SAMBRO/config.py /srv/sambro/data/SAMBRO/config.py cp ${SOURCE_DIR}/srv/sambro/data/SAMBRO/config.py /srv/sambro/data/SAMBRO/config.py
cp ${SOURCE_DIR}/srv/sambro/update-url.sh /srv/sambro/update-url.sh cp ${SOURCE_DIR}/srv/sambro/update-url.sh /srv/sambro/update-url.sh
spotter-appmgr update-login sambro "${SAMBRO_ADMIN_USER}" "${SAMBRO_ADMIN_PWD}"
# Populate database # Populate database
docker run --rm -h sambro --link postgres -v /srv/sambro/conf:/srv/web2py/applications/eden/models -v /srv/sambro/data/SAMBRO:/srv/web2py/applications/eden/modules/templates/SAMBRO -v /tmp/masterUsers.csv:/srv/web2py/applications/eden/modules/templates/default/users/masterUsers.csv -v /srv/sambro/data/databases:/srv/web2py/applications/eden/databases sahana su - sahana -c "./web2py.py -S eden -M -R applications/eden/static/scripts/tools/noop.py" docker run --rm -h sambro --link postgres -v /srv/sambro/conf:/srv/web2py/applications/eden/models -v /srv/sambro/data/SAMBRO:/srv/web2py/applications/eden/modules/templates/SAMBRO -v /tmp/masterUsers.csv:/srv/web2py/applications/eden/modules/templates/default/users/masterUsers.csv -v /srv/sambro/data/databases:/srv/web2py/applications/eden/databases sahana su - sahana -c "./web2py.py -S eden -M -R applications/eden/static/scripts/tools/noop.py"
@ -37,12 +43,3 @@ if [ ${DEBUG:-0} -eq 0 ]; then
sed -i 's/settings.base.debug = True/settings.base.debug = False/' /srv/sambro/conf/000_config.py sed -i 's/settings.base.debug = True/settings.base.debug = False/' /srv/sambro/conf/000_config.py
sed -i 's/#settings.base.prepopulate = 0/settings.base.prepopulate = 0/' /srv/sambro/conf/000_config.py sed -i 's/#settings.base.prepopulate = 0/settings.base.prepopulate = 0/' /srv/sambro/conf/000_config.py
fi fi
# Create SAMBRO service
cp ${SOURCE_DIR}/etc/init.d/sambro /etc/init.d/sambro
rc-update add sambro
service sambro start
# Add application definition
spotter-appmgr add-app sambro "https://sambro.{host}/eden/" "${SAMBRO_ADMIN_USER}" "${SAMBRO_ADMIN_PWD}"
spotter-appmgr add-app sambro-mobile -p clienturl "https://sambro.{host}/eden/"

View File

@ -3,8 +3,7 @@
description="SAMBRO docker container" description="SAMBRO docker container"
depend() { depend() {
need docker net postgres need docker postfix postgres
use dns logger netmount postfix
} }
start() { start() {
@ -21,7 +20,11 @@ start() {
} }
start_post() { start_post() {
/usr/local/bin/spotter-appmgr update-proxy sambro /usr/bin/spotter-appmgr register-proxy sambro
}
stop_pre() {
/usr/bin/spotter-appmgr unregister-proxy sambro
} }
stop() { stop() {

View File

@ -50,7 +50,7 @@ settings.gis.spatialdb = True
#settings.base.system_name = T("Sahana Eden Humanitarian Management Platform") #settings.base.system_name = T("Sahana Eden Humanitarian Management Platform")
#settings.base.system_name_short = T("Sahana Eden") #settings.base.system_name_short = T("Sahana Eden")
# Set this to the Public URL of the instance # Set this to the Public URL of the instance
settings.base.public_url = "http://127.0.0.1" settings.base.public_url = "https://sambro.spotter.vm"
# Switch to "False" in Production for a Performance gain # Switch to "False" in Production for a Performance gain
# (need to set to "True" again when Table definitions are changed) # (need to set to "True" again when Table definitions are changed)

View File

@ -5,9 +5,12 @@ SOURCE_DIR=$(realpath $(dirname "${0}"))/seeddms
# Check prerequisites # Check prerequisites
docker image ls | grep -q postfix || $(realpath $(dirname "${0}"))/postfix.sh 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 postgres || $(realpath $(dirname "${0}"))/postgres.sh
service postgres start
# Build Docker container # Build Docker container
docker build -t seeddms ${SOURCE_DIR} docker build -t seeddms ${SOURCE_DIR}
cp ${SOURCE_DIR}/etc/init.d/seeddms /etc/init.d/seeddms
rc-update -u
# Populate database # Populate database
export SEEDDMS_PWD=$(head -c 18 /dev/urandom | base64) export SEEDDMS_PWD=$(head -c 18 /dev/urandom | base64)
@ -27,14 +30,7 @@ export SEEDDMS_ADMIN_PWD=$(head -c 12 /dev/urandom | base64)
export SEEDDMS_ADMIN_EMAIL=admin@example.com export SEEDDMS_ADMIN_EMAIL=admin@example.com
envsubst <${SOURCE_DIR}/adminpwd.sql | docker exec -i postgres psql seeddms envsubst <${SOURCE_DIR}/adminpwd.sql | docker exec -i postgres psql seeddms
chown -R 8010:8010 /srv/seeddms/conf chown -R 8010:8010 /srv/seeddms/conf
spotter-appmgr update-login seeddms "${SEEDDMS_ADMIN_USER}" "${SEEDDMS_ADMIN_PWD}"
# Create SeedDMS service
cp ${SOURCE_DIR}/etc/init.d/seeddms /etc/init.d/seeddms
rc-update add seeddms
service seeddms start
# Install cron job # Install cron job
cp ${SOURCE_DIR}/etc/periodic/hourly/seeddms /etc/periodic/hourly/seeddms cp ${SOURCE_DIR}/etc/periodic/hourly/seeddms /etc/periodic/hourly/seeddms
# Add application definition
spotter-appmgr add-app seeddms "https://seeddms.{host}/" "${SEEDDMS_ADMIN_USER}" "${SEEDDMS_ADMIN_PWD}"

View File

@ -3,8 +3,7 @@
description="SeedDMS docker container" description="SeedDMS docker container"
depend() { depend() {
need docker net postgres need docker postfix postgres
use dns logger netmount postfix
} }
start() { start() {
@ -19,7 +18,11 @@ start() {
} }
start_post() { start_post() {
/usr/local/bin/spotter-appmgr update-proxy seeddms /usr/bin/spotter-appmgr register-proxy seeddms
}
stop_pre() {
/usr/bin/spotter-appmgr unregister-proxy seeddms
} }
stop() { stop() {

View File

@ -6,9 +6,12 @@ SOURCE_DIR=$(realpath $(dirname "${0}"))/sigmah
docker image ls | grep -q postgres || $(realpath $(dirname "${0}"))/postgres.sh docker image ls | grep -q postgres || $(realpath $(dirname "${0}"))/postgres.sh
docker image ls | grep -q postfix || $(realpath $(dirname "${0}"))/postfix.sh docker image ls | grep -q postfix || $(realpath $(dirname "${0}"))/postfix.sh
docker image ls | grep -q tomcat || $(realpath $(dirname "${0}"))/tomcat.sh docker image ls | grep -q tomcat || $(realpath $(dirname "${0}"))/tomcat.sh
service postgres start
# Build Docker container # Build Docker container
docker build -t sigmah ${SOURCE_DIR} docker build -t sigmah ${SOURCE_DIR}
cp ${SOURCE_DIR}/etc/init.d/sigmah /etc/init.d/sigmah
rc-update -u
# Create database # Create database
export SIGMAH_PWD=$(head -c 18 /dev/urandom | base64) export SIGMAH_PWD=$(head -c 18 /dev/urandom | base64)
@ -41,11 +44,4 @@ sed -i "s|\$2a\$10\$pMcTA1p9fefR8U9NoOPei.H0eq/TbbdSF27M0tn9iDWBrA4JHeCDC|${SIGM
cat /tmp/sigmah-MinimumDataKit.sql | docker exec -i -e PGPASSWORD=${SIGMAH_PWD} postgres psql -U sigmah sigmah cat /tmp/sigmah-MinimumDataKit.sql | docker exec -i -e PGPASSWORD=${SIGMAH_PWD} postgres psql -U sigmah sigmah
cat /tmp/sigmah-newOrganizationLaunchScript.sql | docker exec -i -e PGPASSWORD=${SIGMAH_PWD} postgres psql -U sigmah sigmah cat /tmp/sigmah-newOrganizationLaunchScript.sql | docker exec -i -e PGPASSWORD=${SIGMAH_PWD} postgres psql -U sigmah sigmah
rm -f /tmp/sigmah-MinimumDataKit.sql /tmp/sigmah-newOrganizationLaunchScript.sql rm -f /tmp/sigmah-MinimumDataKit.sql /tmp/sigmah-newOrganizationLaunchScript.sql
spotter-appmgr update-login sigmah "${SIGMAH_ADMIN_EMAIL}" "${SIGMAH_ADMIN_PWD}"
# Create Sigmah service
cp ${SOURCE_DIR}/etc/init.d/sigmah /etc/init.d/sigmah
rc-update add sigmah
service sigmah start
# Add application definition
spotter-appmgr add-app sigmah "https://sigmah.{host}/sigmah/" "${SIGMAH_ADMIN_EMAIL}" "${SIGMAH_ADMIN_PWD}"

View File

@ -3,8 +3,7 @@
description="Sigmah docker container" description="Sigmah docker container"
depend() { depend() {
need docker net postgres need docker postfix postgres
use dns logger netmount postfix
} }
start() { start() {
@ -20,7 +19,11 @@ start() {
} }
start_post() { start_post() {
/usr/local/bin/spotter-appmgr update-proxy sigmah /usr/bin/spotter-appmgr register-proxy sigmah
}
stop_pre() {
/usr/bin/spotter-appmgr unregister-proxy sigmah
} }
stop() { stop() {

View File

@ -7,14 +7,11 @@ docker image ls | grep -q java || $(realpath $(dirname "${0}"))/java.sh
# Build Docker container # Build Docker container
docker build -t solr ${SOURCE_DIR} docker build -t solr ${SOURCE_DIR}
cp ${SOURCE_DIR}/etc/init.d/solr /etc/init.d/solr
rc-update -u
# Configure Solr # Configure Solr
mkdir -p /srv/solr/data mkdir -p /srv/solr/data
cp ${SOURCE_DIR}/srv/solr/data/solr.xml /srv/solr/data/solr.xml cp ${SOURCE_DIR}/srv/solr/data/solr.xml /srv/solr/data/solr.xml
cp ${SOURCE_DIR}/srv/solr/data/.solr.in.sh /srv/solr/data/.solr.in.sh cp ${SOURCE_DIR}/srv/solr/data/.solr.in.sh /srv/solr/data/.solr.in.sh
chown -R 8983:8983 /srv/solr/data chown -R 8983:8983 /srv/solr/data
# Configure Solr service
cp ${SOURCE_DIR}/etc/init.d/solr /etc/init.d/solr
rc-update add solr
service solr start

View File

@ -3,8 +3,7 @@
description="Solr docker container" description="Solr docker container"
depend() { depend() {
need docker net need docker
use dns logger netmount
} }
start() { start() {

View File

@ -5,9 +5,12 @@ SOURCE_DIR=$(realpath $(dirname "${0}"))/ushahidi
# Check prerequisites # Check prerequisites
docker image ls | grep -q mariadb || $(realpath $(dirname "${0}"))/mariadb.sh docker image ls | grep -q mariadb || $(realpath $(dirname "${0}"))/mariadb.sh
docker image ls | grep -q postfix || $(realpath $(dirname "${0}"))/postfix.sh docker image ls | grep -q postfix || $(realpath $(dirname "${0}"))/postfix.sh
service mariadb start
# Build Docker container # Build Docker container
docker build -t ushahidi ${SOURCE_DIR} docker build -t ushahidi ${SOURCE_DIR}
cp ${SOURCE_DIR}/etc/init.d/ushahidi /etc/init.d/ushahidi
rc-update -u
# Create database # Create database
export USHAHIDI_PWD=$(head -c 18 /dev/urandom | base64) export USHAHIDI_PWD=$(head -c 18 /dev/urandom | base64)
@ -28,15 +31,7 @@ export USHAHIDI_ADMIN_USER=admin@example.com
export USHAHIDI_ADMIN_PWD=$(head -c 12 /dev/urandom | base64) export USHAHIDI_ADMIN_PWD=$(head -c 12 /dev/urandom | base64)
export USHAHIDI_ADMIN_HASH=$(docker run --rm ushahidi php -r "echo password_hash('${USHAHIDI_ADMIN_PWD}', PASSWORD_BCRYPT);") export USHAHIDI_ADMIN_HASH=$(docker run --rm ushahidi php -r "echo password_hash('${USHAHIDI_ADMIN_PWD}', PASSWORD_BCRYPT);")
envsubst <${SOURCE_DIR}/adminpwd.sql | docker exec -i mariadb mysql ushahidi envsubst <${SOURCE_DIR}/adminpwd.sql | docker exec -i mariadb mysql ushahidi
spotter-appmgr update-login ushahidi "${USHAHIDI_ADMIN_USER}" "${USHAHIDI_ADMIN_PWD}"
# Create Ushahidi service
cp ${SOURCE_DIR}/etc/init.d/ushahidi /etc/init.d/ushahidi
rc-update add ushahidi
service ushahidi start
# Install cron job # Install cron job
cp ${SOURCE_DIR}/etc/periodic/15min/ushahidi /etc/periodic/15min/ushahidi cp ${SOURCE_DIR}/etc/periodic/15min/ushahidi /etc/periodic/15min/ushahidi
# Add application definition
spotter-appmgr add-app ushahidi "https://ushahidi.{host}/" "${USHAHIDI_ADMIN_USER}" "${USHAHIDI_ADMIN_PWD}"
spotter-appmgr add-app ushahidi-mobile -p clienturl "ushahidi.{host}"

View File

@ -2,4 +2,4 @@ UPDATE users SET email = '${USHAHIDI_ADMIN_USER}', password = '${USHAHIDI_ADMIN_
INSERT INTO `config` (`group_name`, `config_key`, `config_value`) VALUES INSERT INTO `config` (`group_name`, `config_key`, `config_value`) VALUES
('data-provider','email','{\"incoming_type\":\"IMAP\",\"incoming_server\":\"localhost\",\"incoming_port\":143,\"incoming_security\":\"None\",\"incoming_username\":\"ushahidi@spotter.ngo\",\"incoming_password\":\"password\",\"outgoing_type\":\"SMTP\",\"outgoing_server\":\"postfix\",\"outgoing_port\":25,\"outgoing_security\":\"None\",\"outgoing_username\":\"ushahidi@spotter.ngo\",\"outgoing_password\":\"password\",\"from\":\"ushahidi@spotter.ngo\",\"from_name\":\"Ushahidi\"}'), ('data-provider','email','{\"incoming_type\":\"IMAP\",\"incoming_server\":\"localhost\",\"incoming_port\":143,\"incoming_security\":\"None\",\"incoming_username\":\"ushahidi@spotter.ngo\",\"incoming_password\":\"password\",\"outgoing_type\":\"SMTP\",\"outgoing_server\":\"postfix\",\"outgoing_port\":25,\"outgoing_security\":\"None\",\"outgoing_username\":\"ushahidi@spotter.ngo\",\"outgoing_password\":\"password\",\"from\":\"ushahidi@spotter.ngo\",\"from_name\":\"Ushahidi\"}'),
('data-provider','url','\"http:\\/\\/127.0.0.1\\/platform\\/api\\/v3\\/config\\/data-provider\"'); ('data-provider','url','\"https:\\/\\/ush.spotter.vm\\/platform\\/api\\/v3\\/config\\/data-provider\"');

View File

@ -3,8 +3,7 @@
description="Ushahidi docker container" description="Ushahidi docker container"
depend() { depend() {
need docker net mariadb need docker mariadb postfix
use dns logger netmount postfix
} }
start() { start() {
@ -20,7 +19,11 @@ start() {
} }
start_post() { start_post() {
/usr/local/bin/spotter-appmgr update-proxy ushahidi /usr/bin/spotter-appmgr register-proxy ushahidi
}
stop_pre() {
/usr/bin/spotter-appmgr unregister-proxy ushahidi
} }
stop() { stop() {

View File

@ -1,5 +1,5 @@
{ {
"backend_url": "http://127.0.0.1/platform", "backend_url": "https://ush.spotter.vm/platform",
"client_id": "ushahidiui", "client_id": "ushahidiui",
"client_secret": "35e7f0bca957836d05ca0492211b0ac707671261", "client_secret": "35e7f0bca957836d05ca0492211b0ac707671261",
"google_analytics_id": "AIzaSyBvIF3D550tlpL6o1xRrDurGo-81VhHlOw" "google_analytics_id": "AIzaSyBvIF3D550tlpL6o1xRrDurGo-81VhHlOw"