Skip to content
#!/bin/bash -eux
cp /data/indiehosters/unit-files/* /etc/systemd/system && sudo systemctl daemon-reload
image=$1
# prepare data
mkdir -p /data/import/$image.test/TLS
cp /data/indiehosters/scripts/unsecure-certs/example.dev.pem /data/import/$image.test/TLS/$image.test.pem
if [ "$image" == "static-git" ]; then
mkdir -p /data/import/$image.test/static-git
echo "https://github.com/indiehosters/website.git" > /data/import/$image.test/static-git/GITURL
fi
# start image from import
systemctl start $image@$image.test
if [ "$image" == "wordpress" ]; then
sleep 40
else
sleep 10
fi
# tests
systemctl list-units | grep "$image\.test" | grep -c failed | grep 0
ip=`docker inspect --format {{.NetworkSettings.IPAddress}} $image-$image.test`
curl -L $ip
# start image from backup
/data/indiehosters/tests/runtime-clean-image.sh $image
if [ "$image" == "wordpress" ]; then
echo should fail until implementation of mysql backup importer
fi
systemctl start $image@$image.test
sleep 10
# tests
systemctl list-units | grep "$image\.test" | grep -c failed | grep 0
ip=`docker inspect --format {{.NetworkSettings.IPAddress}} $image-$image.test`
curl $ip
#!/bin/bash -eux
# testing static
/data/indiehosters/tests/image.sh static
# clean static tests
/data/indiehosters/tests/clean-image.sh static
# testing static-git
/data/indiehosters/tests/image.sh static-git
# clean static tests
/data/indiehosters/tests/clean-image.sh static-git
# testing wordpress
/data/indiehosters/tests/image.sh wordpress
# clean static tests
/data/indiehosters/tests/clean-image.sh wordpress
#!/bin/bash -eux
image=$1
systemctl stop *@$image.test.timer
systemctl stop *@$image.test
systemctl reset-failed
systemctl list-units | grep -c "$image\.test" | grep 0
rm -rf /data/import/$image.test
rm -rf /data/runtime/domains/$image.test
[Unit]
Description=Back up domain data to a git repo and push it out
[Service]
Type=oneshot
ExecStartPre=-/usr/bin/docker kill mysqldump-%i
ExecStartPre=-/usr/bin/docker rm mysqldump-%i
ExecStartPre=/bin/bash -euxc ' \
if [ -d /data/domains/%i/mysql ]; then \
echo "Backing up mysql databases for %i"; \
mysql_passwd=`cat /data/domains/%i/mysql/.env | cut -d= -f2`; \
/usr/bin/docker run \
--rm \
--name mysqldump-%i \
--link mysql-%i:db \
--env-file /data/domains/%i/mysql/.env \
indiehosters/mysql \
mysqldump \
--all-databases \
--events \
-uadmin \
-p$mysql_passwd \
-h db > /data/domains/%i/mysql/dump.sql; \
fi'
ExecStart=/bin/bash -euxc ' \
echo "Committing everything"; \
cd /data/domains/%i/; \
git add *; \
git status; \
git commit --allow-empty -am"backup %i @ `hostname` - `date`"; \
git push origin master'
[Service]
Type=oneshot
Environment=PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/opt/bin
ExecStart=/opt/bin/dump_all.sh
[Unit]
Description=Hourly backup of www and mysql content to a git repo
Description=Run dump all dayly
[Timer]
OnActiveSec=10
OnUnitActiveSec=60min
OnCalendar=*-*-* 00:15:30
[Install]
WantedBy=timers.target
[Unit]
Description=%p
# Requirements
Requires=docker.service
Requires=etcd.service
# Dependency ordering
After=docker.service
After=etcd.service
Before=haproxy.service
[Service]
Restart=always
ExecStartPre=-/usr/bin/docker kill %p
ExecStartPre=-/usr/bin/docker rm %p
ExecStart=/usr/bin/docker run \
--name %p \
-v /data/runtime/haproxy/:/etc/haproxy/ \
-v /data/indiehosters/confd/:/etc/confd/ \
-v /var/run/docker.sock:/var/run/docker.sock \
indiehosters/confd
ExecReload=/usr/bin/docker restart %p
ExecStop=/usr/bin/docker stop %p
[Install]
WantedBy=multi-user.target
[Path]
PathExists=/data/runtime/haproxy/haproxy.cfg
[Install]
WantedBy=multi-user.target
[Unit]
Description=Initializer
[Service]
Type=oneshot
RemainAfterExit=yes
ExecStartPre=/bin/bash -euxc ' \
BACKUP_DESTINATION=`cat /data/BACKUP_DESTINATION`; \
echo "Intitializing backups with $BACKUP_DESTINATION"; \
if [ ! -d /data/domains/%i/.git ]; then \
if [ `ssh $BACKUP_DESTINATION "test -d %i"; echo $?` -eq 0 ]; then \
git clone $BACKUP_DESTINATION:%i /data/domains/%i; \
cd /data/domains/%i; \
else \
ssh $BACKUP_DESTINATION "mkdir -p %i;cd %i;git init --bare;"; \
if [ ! -d /data/domains/%i ]; then \
mkdir /data/domains/%i; \
fi; \
cd /data/domains/%i; \
git init; \
git remote add origin $BACKUP_DESTINATION:%i; \
fi; \
git config --local user.email "backups@`hostname`"; \
git config --local user.name "`hostname` hourly backups"; \
fi'
ExecStart=/bin/bash -euxc ' \
if [ -d /data/import/%i ]; then \
cp -r /data/import/%i/* /data/domains/%i; \
rm -rf /data/import/%i; \
fi'
[Unit]
Description=%p for %i etcd registration
# Requirements
Requires=etcd.service
# Dependency ordering
After=etcd.service
After=known@%i.service
# Dependency binding
BindsTo=known@%i.service
[Service]
# Start
## Test whether service is accessible and then register useful information
ExecStart=/bin/bash -c ' \
sleep 30; \
while true; do \
app=`echo %p | cut -d"-" -f1`; \
ip=`docker inspect --format \'{{.NetworkSettings.IPAddress}}\' $app-%i`; \
curl -f $ip; \
if [ $? -eq 0 ]; then \
etcdctl set /services/$app/%i \'{"ip":"\'$ip\'", "port":"80"}\' --ttl 60; \
else \
etcdctl rm /services/$app/%i; \
fi; \
sleep 50; \
done'
# Stop
ExecStop=-/bin/bash -euxc ' \
app=`echo %p | cut -d"-" -f1`; \
/usr/bin/etcdctl rm /services/$app/%i
[Unit]
Description=WordPress importer
# Requirements
Requires=init@%i.service
# Dependency ordering
After=init@%i.service
After=mysql@%i.service
Before=known@%i.service
Before=backup@%i.timer
# Dependency binding
BindsTo=known@%i.service
[Service]
Type=oneshot
RemainAfterExit=yes
ExecStart=/bin/bash -euxc ' \
cp /data/domains/%i/TLS/%i.pem /data/runtime/haproxy/approved-certs/%i.pem; \
known_folder=/data/domains/%i/known; \
if [ ! -d $known_folder/known-content ]; then \
mkdir -p $known_folder; \
cd $known_folder; \
tar xvzf /data/indiehosters/blueprints/known-0.6.5.tgz; \
touch .htaccess; \
fi; \
cat /data/domains/%i/mysql/.env | sed s/MYSQL_PASS/DB_PASS/ > $known_folder/.env'
[Install]
WantedBy=known@%i.service
[Unit]
Description=%p-%i
# Requirements
Requires=docker.service
Requires=etcd.service
Requires=mysql@%i.service
Requires=%p-importer@%i.service
Requires=%p-discovery@%i.service
Requires=backup@%i.timer
# Dependency ordering
After=docker.service
After=mysql@%i.service
After=%p-importer@%i.service
Before=%p-discovery@%i.service
# Dependency binding
BindsTo=mysql@%i.service
[Service]
Restart=always
ExecStartPre=-/usr/bin/docker kill %p-%i
ExecStartPre=-/usr/bin/docker rm %p-%i
ExecStart=/usr/bin/docker run \
--name %p-%i \
--link mysql-%i:db \
-v /data/domains/%i/%p/known-content:/app/known-content \
-v /data/domains/%i/%p/.htaccess:/app/.htaccess \
--env-file /data/domains/%i/%p/.env \
indiehosters/known
ExecReload=/usr/bin/docker restart %p-%i
ExecStop=/usr/bin/docker stop %p-%i
[Install]
WantedBy=multi-user.target
[Service]
Type=oneshot
ExecStart=/libre.sh/utils/mail-mon.sh
[Unit]
Description=Run mail mon hourly and on boot
[Timer]
OnBootSec=15min
OnUnitActiveSec=1h
[Install]
WantedBy=timers.target
[Unit]
Description=MySQL importer
# Dependency ordering
After=init@%i.service
Before=mysql@%i.service
# Dependency binding
BindsTo=mysql@%i.service
[Service]
Type=oneshot
RemainAfterExit=yes
ExecStart=/bin/bash -euxc ' \
mysql_folder=/data/domains/%i/mysql; \
if [ ! -d /data/runtime/domains/%i/mysql ]; then \
if [ ! -d $mysql_folder ]; then \
mkdir -p $mysql_folder; \
pass=`echo $RANDOM ${date} | md5sum | base64 | cut -c-10`; \
echo MYSQL_PASS=$pass > $mysql_folder/.env; \
mkdir -p /data/runtime/domains/%i/mysql; \
fi; \
fi'
[Install]
WantedBy=mysql@%i.service
[Unit]
Description=%p-%i
# Requirements
Requires=docker.service
Requires=%p-importer@%i.service
# Dependency ordering
After=docker.service
After=%p-importer@%i.service
Before=backup@%i.timer
[Service]
Restart=always
ExecStartPre=-/usr/bin/docker kill %p-%i
ExecStartPre=-/usr/bin/docker rm %p-%i
ExecStart=/usr/bin/docker run \
--name %p-%i \
-v /data/runtime/domains/%i/%p/db_files:/var/lib/mysql \
-e STARTUP_SQL="/data/domains/%i/%p/dump.sql" \
--env-file /data/domains/%i/%p/.env \
indiehosters/mysql
ExecReload=/usr/bin/docker restart %p-%i
ExecStop=/usr/bin/docker stop %p-%i
[Install]
WantedBy=multi-user.target
[Unit]
Description=%p
Description=%p-%i
# Requirements
Requires=docker.service
......@@ -9,15 +9,15 @@ After=docker.service
[Service]
Restart=always
ExecStartPre=-/usr/bin/docker kill %p
ExecStartPre=-/usr/bin/docker rm %p
ExecStart=/usr/bin/docker run \
--name %p \
-v /data/runtime/postfix/:/data \
-p 25:25 \
indiehosters/postfix-forwarder
ExecReload=/usr/bin/docker restart %p
ExecStop=/usr/bin/docker stop %p
RestartSec=10
TimeoutStartSec=60
TimeoutStopSec=15
EnvironmentFile=-/system/%i/env
Environment=HOSTNAME=%H
WorkingDirectory=/system/%i/
ExecStartPre=-docker-compose rm -f
ExecStart=/bin/bash -euxc "docker-compose up"
ExecStop=docker-compose stop
[Install]
WantedBy=multi-user.target
[Unit]
Description=%p for %i etcd registration
# Requirements
Requires=etcd.service
# Dependency ordering
After=etcd.service
After=static@%i.service
# Dependency binding
BindsTo=static@%i.service
[Service]
# Start
## Test whether service is accessible and then register useful information
ExecStart=/bin/bash -c ' \
sleep 3; \
while true; do \
app=`echo %p | cut -d"-" -f1`; \
ip=`docker inspect --format \'{{.NetworkSettings.IPAddress}}\' $app-%i`; \
curl -f $ip; \
if [ $? -eq 0 ]; then \
etcdctl set /services/$app/%i \'{"ip":"\'$ip\'", "port":"80"}\' --ttl 60; \
else \
etcdctl rm /services/$app/%i; \
fi; \
sleep 50; \
done'
# Stop
ExecStop=-/bin/bash -euxc ' \
app=`echo %p | cut -d"-" -f1`; \
/usr/bin/etcdctl rm /services/$app/%i
[Unit]
Description=%p for %i etcd registration
# Requirements
Requires=etcd.service
# Dependency ordering
After=etcd.service
After=static-git@%i.service
# Dependency binding
BindsTo=static-git@%i.service
[Service]
# Start
## Test whether service is accessible and then register useful information
ExecStart=/bin/bash -c ' \
sleep 3; \
while true; do \
app=`echo %p | cut -d"-" -f1,2`; \
ip=`docker inspect --format \'{{.NetworkSettings.IPAddress}}\' $app-%i`; \
curl -f $ip; \
if [ $? -eq 0 ]; then \
etcdctl set /services/$app/%i \'{"ip":"\'$ip\'", "port":"80"}\' --ttl 60; \
else \
etcdctl rm /services/$app/%i; \
fi; \
sleep 50; \
done'
# Stop
ExecStop=-/bin/bash -euxc ' \
app=`echo %p | cut -d"-" -f1`; \
/usr/bin/etcdctl rm /services/$app/%i
[Unit]
Description=static importer
# Requirements
Requires=init@%i.service
# Dependency ordering
After=init@%i.service
Before=static-git@%i.service
Before=backup@%i.timer
[Service]
Type=oneshot
RemainAfterExit=yes
ExecStart=/bin/bash -euxc ' \
cp /data/domains/%i/TLS/%i.pem /data/runtime/haproxy/approved-certs/%i.pem; \
git_folder=/data/runtime/domains/%i/static-git; \
if [ ! -d $git_folder/www-content/.git ]; then \
mkdir -p $git_folder; \
git clone `cat /data/domains/%i/static-git/GITURL` $git_folder/www-content; \
fi;'
[Install]
WantedBy=static-git@%i.service