mirror of
https://github.com/DoTheEvo/selfhosted-apps-docker
synced 2024-11-18 21:28:13 +00:00
170 lines
4.0 KiB
Markdown
170 lines
4.0 KiB
Markdown
|
# Ofelia in docker
|
||
|
|
||
|
###### guide-by-example
|
||
|
|
||
|
# Purpose
|
||
|
|
||
|
Scheduling jobs that will be run in docker containers.
|
||
|
|
||
|
* [Github](https://github.com/mcuadros/ofelia)
|
||
|
* [DockerHub image used](https://hub.docker.com/r/mcuadros/ofelia/)
|
||
|
|
||
|
Ofelia is a simple scheduler for docker containers, replacing cron.</br>
|
||
|
Written in go, its binary is running in the background as a daemon,
|
||
|
executing scheduled tasks as set in a simple config file.
|
||
|
|
||
|
|
||
|
# Files and directory structure
|
||
|
|
||
|
```
|
||
|
/home/
|
||
|
└── ~/
|
||
|
└── docker/
|
||
|
└── ofelia/
|
||
|
├── docker-compose.yml
|
||
|
└── config.ini
|
||
|
```
|
||
|
|
||
|
* `docker-compose.yml` - a docker compose file, telling docker how to run the container
|
||
|
* `config.ini` - ofelia's configuration file bind mounted in to the container
|
||
|
|
||
|
All files need to be provided.
|
||
|
|
||
|
# docker-compose
|
||
|
|
||
|
`docker-compose.yml`
|
||
|
```yml
|
||
|
version: "3"
|
||
|
services:
|
||
|
|
||
|
ofelia:
|
||
|
image: mcuadros/ofelia
|
||
|
container_name: ofelia
|
||
|
hostname: ofelia
|
||
|
restart: unless-stopped
|
||
|
volumes:
|
||
|
- ./config.ini:/etc/ofelia/config.ini:ro
|
||
|
- /var/run/docker.sock:/var/run/docker.sock:ro
|
||
|
```
|
||
|
|
||
|
# Config
|
||
|
|
||
|
config.ini contains scheduled jobs.</br>
|
||
|
There are several [types](https://github.com/mcuadros/ofelia/blob/master/docs/jobs.md),
|
||
|
but here is just the basic most common use: *job-exec*</br>
|
||
|
which executes command inside an already running container.
|
||
|
|
||
|
`config.ini`
|
||
|
```ini
|
||
|
[job-exec "test1"]
|
||
|
schedule = @every 5m
|
||
|
container = phpipam_phpipam-web_1
|
||
|
command = touch /tmp/bla
|
||
|
|
||
|
[job-exec "test2"]
|
||
|
schedule = @every 1h
|
||
|
container = phpipam_phpipam-mariadb_1
|
||
|
command = touch /tmp/bla
|
||
|
|
||
|
[job-exec "test3"]
|
||
|
schedule = @every 1h30m10s
|
||
|
container = phpipam_phpipam-cron_1
|
||
|
command = touch /tmp/bla
|
||
|
```
|
||
|
|
||
|
# Logging
|
||
|
|
||
|
![logo](https://i.imgur.com/5SgWE0I.png)
|
||
|
|
||
|
Docker containers log shows which jobs are active and when they were executed.
|
||
|
|
||
|
But Ofelia has several build in
|
||
|
[logging options.](https://github.com/mcuadros/ofelia#logging)
|
||
|
|
||
|
#### email
|
||
|
|
||
|
Unfortunetly seems `[global]` section, where email settings would be set once
|
||
|
and then enabled per job is not working.
|
||
|
So either the settings would go
|
||
|
in to `[global]` and be set for every single job, or every job that requires
|
||
|
email logging will have to have all the email settings writen out in full.
|
||
|
|
||
|
`config.ini`
|
||
|
```ini
|
||
|
[job-exec "test1"]
|
||
|
schedule = @every 5m
|
||
|
container = phpipam_phpipam-web_1
|
||
|
command = touch /tmp/zla
|
||
|
smtp-user = apikey
|
||
|
smtp-password = SG.***************************
|
||
|
smtp-host = smtp.sendgrid.net
|
||
|
smtp-port = 465
|
||
|
mail-only-on-error = false
|
||
|
email-to = whoever@example.com
|
||
|
email-from = test@example.com
|
||
|
|
||
|
[job-exec "test2"]
|
||
|
schedule = @every 2m
|
||
|
container = phpipam_phpipam-mariadb_1
|
||
|
command = touch /tmp/zla
|
||
|
|
||
|
```
|
||
|
|
||
|
#### save-folder
|
||
|
|
||
|
Saves result of every job execution in to a file.
|
||
|
|
||
|
By defining `save-folder` path for the job.</br>
|
||
|
The path used should be bind mounted from the host,
|
||
|
for persistence of the data and easier access.
|
||
|
|
||
|
`docker-compose.yml`
|
||
|
```yml
|
||
|
version: "3"
|
||
|
services:
|
||
|
|
||
|
ofelia:
|
||
|
image: mcuadros/ofelia
|
||
|
container_name: ofelia
|
||
|
hostname: ofelia
|
||
|
restart: unless-stopped
|
||
|
volumes:
|
||
|
- ./config.ini:/etc/ofelia/config.ini:ro
|
||
|
- /var/run/docker.sock:/var/run/docker.sock:ro
|
||
|
- ./logs:/tmp/logs
|
||
|
```
|
||
|
|
||
|
`config.ini`
|
||
|
```ini
|
||
|
[job-exec "test1"]
|
||
|
schedule = @every 5m
|
||
|
container = nginx
|
||
|
command = touch /tmp/example
|
||
|
save-folder = /tmp/logs
|
||
|
```
|
||
|
|
||
|
# Update
|
||
|
|
||
|
[Watchtower](https://github.com/DoTheEvo/selfhosted-apps-docker/tree/master/watchtower)
|
||
|
updates the image automatically.
|
||
|
|
||
|
Manual image update:
|
||
|
|
||
|
- `docker-compose pull`</br>
|
||
|
- `docker-compose up -d`</br>
|
||
|
- `docker image prune`
|
||
|
|
||
|
# Backup and restore
|
||
|
|
||
|
#### Backup
|
||
|
|
||
|
Using [borg](https://github.com/DoTheEvo/selfhosted-apps-docker/tree/master/borg_backup)
|
||
|
that makes daily snapshot of the entire directory.
|
||
|
|
||
|
#### Restore
|
||
|
|
||
|
* down the homer container `docker-compose down`</br>
|
||
|
* delete the entire homer directory</br>
|
||
|
* from the backup copy back the homer directory</br>
|
||
|
* start the container `docker-compose up -d`
|