Skip to content
[Unit] [Unit]
Description=Run git puller every 10 minutes Description=Run dump all dayly
[Timer] [Timer]
OnUnitActiveSec=10min OnCalendar=*-*-* 00:15:30
[Install] [Install]
WantedBy=timers.target 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/server-wide/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/server-wide/haproxy/haproxy.cfg
[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
Before=mysql@%i.service
[Service]
Type=oneshot
RemainAfterExit=yes
Environment=USER=%i
ExecStart=/data/indiehosters/importers/mysql.sh
[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
[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/per-user/%i/%p/data:/var/lib/mysql \
--env-file /data/per-user/%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 for %i etcd registration
# Requirements
Requires=etcd.service
Requires=nginx@%i.service
# Dependency ordering
After=etcd.service
After=nginx@%i.service
# Dependency binding
BindsTo=nginx@%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 -ceux ' \
app=`echo %p | cut -d"-" -f1`; \
/usr/bin/etcdctl rm /services/$app/%i
[Path]
PathExists=/data/per-user/%i/nginx/data/git-url.txt
[Unit]
Description=nginx git puller
# Dependency ordering
Before=nginx@%i.service
[Service]
ExecStart=cd /data/per-user/%i/nginx/data/www-content && git pull
[Install]
WantedBy=nginx@%i.service
[Unit]
Description=nginx importer
# Dependency ordering
Before=nginx@%i.service
[Service]
Type=oneshot
RemainAfterExit=yes
Environment=USER=%i
ExecStart=/data/indiehosters/importers/nginx.sh
[Install]
WantedBy=nginx@%i.service
[Unit]
Description=%p-%i
# Requirements
Requires=docker.service
Requires=%p-importer@%i.service
Requires=%p-discovery@%i.service
# Dependency ordering
After=docker.service
After=%p-importer@%i.service
Before=%p-discovery@%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 \
-v /data/per-user/%i/%p/data/www-content:/app \
indiehosters/nginx
ExecReload=/usr/bin/docker restart %p-%i
ExecStop=/usr/bin/docker stop %p-%i
[Install]
WantedBy=multi-user.target
[Unit] [Unit]
Description=%p Description=%p-%i
# Requirements # Requirements
Requires=docker.service Requires=docker.service
...@@ -9,15 +9,15 @@ After=docker.service ...@@ -9,15 +9,15 @@ After=docker.service
[Service] [Service]
Restart=always Restart=always
ExecStartPre=-/usr/bin/docker kill %p RestartSec=10
ExecStartPre=-/usr/bin/docker rm %p TimeoutStartSec=60
ExecStart=/usr/bin/docker run \ TimeoutStopSec=15
--name %p \ EnvironmentFile=-/system/%i/env
-v /data/server-wide/postfix/:/data \ Environment=HOSTNAME=%H
-p 25:25 \ WorkingDirectory=/system/%i/
indiehosters/postfix-forwarder ExecStartPre=-docker-compose rm -f
ExecReload=/usr/bin/docker restart %p ExecStart=/bin/bash -euxc "docker-compose up"
ExecStop=/usr/bin/docker stop %p ExecStop=docker-compose stop
[Install] [Install]
WantedBy=multi-user.target WantedBy=multi-user.target
[Unit]
Description=Turn on swap
[Service]
Type=oneshot
RemainAfterExit=true
ExecStartPre=-/bin/bash -euxc ' \
fallocate -l 8192m /swap &&\
chmod 600 /swap &&\
mkswap /swap'
ExecStart=/sbin/swapon /swap
ExecStop=/sbin/swapoff /swap
[Install]
WantedBy=local.target
[Unit] [Unit]
Description=%p Description=%p-%i
# Requirements # Requirements
Requires=docker.service Requires=docker.service
...@@ -9,16 +9,15 @@ After=docker.service ...@@ -9,16 +9,15 @@ After=docker.service
[Service] [Service]
Restart=always Restart=always
ExecStartPre=-/usr/bin/docker kill %p RestartSec=10
ExecStartPre=-/usr/bin/docker rm %p TimeoutStartSec=60
ExecStart=/usr/bin/docker run \ TimeoutStopSec=15
--name %p \ EnvironmentFile=-/data/domains/%i/env
-v /data/server-wide/haproxy:/etc/haproxy \ Environment=HOSTNAME=%H
-p 80:80 \ WorkingDirectory=/data/domains/%i/
-p 443:443 \ ExecStartPre=-docker-compose rm -f
indiehosters/haproxy ExecStart=/bin/bash -euxc "LETSENCRYPT_HOST=%i VIRTUAL_HOST=%i,www.%i docker-compose up"
ExecReload=/usr/bin/docker restart %p ExecStop=docker-compose stop
ExecStop=/usr/bin/docker stop %p
[Install] [Install]
WantedBy=multi-user.target WantedBy=multi-user.target
[Unit]
Description=Create lb_web network
Requires=docker.service
After=docker.service
[Service]
Type=oneshot
RemainAfterExit=true
ExecStart=/usr/bin/docker network create lb_web
ExecStop=/usr/bin/docker network rm lb_web
[Install]
WantedBy=local.target
[Unit]
Description=%p for %i etcd registration
# Requirements
Requires=etcd.service
Requires=wordpress@%i.service
# Dependency ordering
After=etcd.service
After=wordpress@%i.service
# Dependency binding
BindsTo=wordpress@%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 -ceux ' \
app=`echo %p | cut -d"-" -f1`; \
/usr/bin/etcdctl rm /services/$app/%i
[Unit]
Description=WordPress importer
# Dependency ordering
After=mysql-importer@%i.service
Before=wordpress@%i.service
[Service]
Type=oneshot
RemainAfterExit=yes
Environment=USER=%i
ExecStart=/data/indiehosters/importers/wordpress.sh
[Install]
WantedBy=wordpress@%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
# Dependency ordering
After=docker.service
After=mysql@%i.service
After=%p-importer@%i.service
Before=%p-discovery@%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/per-user/%i/%p/data/wp-content:/app/wp-content \
-v /data/per-user/%i/%p/data/.htaccess:/app/.htaccess \
--env-file /data/per-user/%i/%p/.env \
indiehosters/wordpress
ExecReload=/usr/bin/docker restart %p-%i
ExecStop=/usr/bin/docker stop %p-%i
[Install]
WantedBy=multi-user.target
#cloud-config
ssh_authorized_keys:
- "PUT YOUR SSH KEY PUBLIC HERE"
write_files:
- path: /etc/ssh/sshd_config
permissions: 0600
owner: root:root
content: |
# Use most defaults for sshd configuration.
UsePrivilegeSeparation sandbox
Subsystem sftp internal-sftp
PermitRootLogin no
AllowUsers core
PasswordAuthentication no
ChallengeResponseAuthentication no
- path: /etc/sysctl.d/libresh.conf
permissions: 0644
owner: root
content: |
fs.aio-max-nr=1048576
vm.max_map_count=262144
vm.overcommit_memory=1
vm.nr_hugepages=0
- path: /etc/hosts
permissions: 0644
owner: root
content: |
127.0.0.1 localhost
255.255.255.255 broadcasthost
::1 localhost
- path: /etc/environment
permissions: 0644
owner: root
content: |
NAMECHEAP_URL="namecheap.com"
NAMECHEAP_API_USER="pierreo"
NAMECHEAP_API_KEY=
IP=`curl -s http://icanhazip.com/`
FirstName="Pierre"
LastName="Ozoux"
Address=""
PostalCode=""
Country="Portugal"
Phone="+351.967184553"
EmailAddress="pierre@ozoux.net"
City="Lisbon"
CountryCode="PT"
BACKUP_DESTINATION=root@xxxxx:port
MAIL_USER=
MAIL_PASS=
MAIL_HOST=mail.indie.host
MAIL_PORT=587
coreos:
update:
reboot-strategy: off
units:
- name: systemd-sysctl.service
command: restart
- name: swap.service
enable: true
command: start
content: |
[Unit]
Description=Turn on swap
[Service]
Type=oneshot
RemainAfterExit=true
ExecStartPre=-/bin/bash -euxc ' \
fallocate -l 8192m /swap &&\
chmod 600 /swap &&\
mkswap /swap'
ExecStart=/sbin/swapon /swap
ExecStop=/sbin/swapoff /swap
[Install]
WantedBy=local.target
- name: install-compose.service
command: start
content: |
[Unit]
Description=Install Docker Compose
[Service]
Type=oneshot
RemainAfterExit=true
ExecStart=-/bin/bash -euxc ' \
mkdir -p /opt/bin &&\
url=$(curl -s https://api.github.com/repos/docker/compose/releases/latest | jq -r \'.assets[].browser_download_url | select(contains("Linux") and contains("x86_64"))\') &&\
curl -L $url > /opt/bin/docker-compose &&\
chmod +x /opt/bin/docker-compose'
- name: install-libresh.service
command: start
content: |
[Unit]
Description=Install libre.sh
[Service]
Type=oneshot
RemainAfterExit=true
ExecStart=-/bin/bash -euxc ' \
git clone https://github.com/indiehosters/libre.sh.git /libre.sh &&\
mkdir /{data,system} &&\
mkdir /data/trash &&\
cp /libre.sh/unit-files/* /etc/systemd/system && systemctl daemon-reload &&\
systemctl enable web-net.service &&\
systemctl start web-net.service &&\
cp /libre.sh/utils/* /opt/bin/'