86 lines
2.6 KiB
Markdown
86 lines
2.6 KiB
Markdown
# Docker Compose GitOps (dc-ops)
|
|
|
|
`dc-ops` is a simple python script that automates the update and deployment of multiple Docker Compose applications.
|
|
|
|
## How does it work?
|
|
It reads a list of git repositories from a YAML configuration file (`config.yml`), pulls the latest changes for each repo, and runs `docker compose up` for each specified `docker-compose.yml` file.
|
|
|
|
## Features
|
|
- Automatically checks for updates in git repositories
|
|
- Supports multiple Docker Compose files per repository
|
|
- Can be configured to skip certain repositories
|
|
|
|
## Requirements
|
|
See `requirements.txt`
|
|
|
|
## Usage
|
|
1. Install the required Python packages: `pip install -r requirements.txt`
|
|
2. Adapt `config.yml.example` to your needs and save it as `config.yml`
|
|
3. Run `dc-ops` from the shell or from a cron job
|
|
|
|
### Cron
|
|
|
|
Recommended crontab usage:
|
|
|
|
`*/15 * * * * python3 /opt/dc-ops/dc-ops 2>&1 | ts "\%FT\%H:\%M:\%S" >>/var/log/dc-ops.log`
|
|
|
|
(do not forget logrotate)
|
|
|
|
### Systemd
|
|
|
|
Recommended systemd usage:
|
|
|
|
```toml
|
|
# /etc/systemd/system/dc-ops.service
|
|
[Unit]
|
|
Description=Run dc-ops once
|
|
After=docker.target
|
|
|
|
[Service]
|
|
Type=simple
|
|
WorkingDirectory=/opt/dc-ops/
|
|
ExecStart=python3 dc-ops
|
|
```
|
|
|
|
```toml
|
|
# /etc/systemd/system/dc-ops.timer
|
|
[Unit]
|
|
Description=Start dc-ops service periodically
|
|
|
|
[Timer]
|
|
Persistent=true
|
|
OnCalendar=*:0/15
|
|
Unit=dc-ops.service
|
|
|
|
[Install]
|
|
WantedBy=timers.target
|
|
```
|
|
|
|
Enable and start the timer:
|
|
```
|
|
systemctl enable dc-ops.timer
|
|
systemctl start dc-ops.timer
|
|
```
|
|
|
|
## Parameters
|
|
|
|
See `dc-ops --help`
|
|
|
|
## Configuration Options
|
|
- `stacks`: an array containing details for each repository. Each element is a dictionary containing the following keys:
|
|
- `dir`: the directory of the repository on your local machine.
|
|
- `compose-files`: (optional) array of paths (relative to `dir`) to docker-compose files. Uses `["docker-compose.yml"]` by default if not set.
|
|
- `enabled`: (optional) `false` if this repository should be skipped. Defaults to `true` if not set.
|
|
- `pre`: (optional) a command to be run before `docker compose up`, executed in `dir`.
|
|
- `post`: (optional) a command to be run after `docker compose up`, executed in `dir`.
|
|
- `compose-opts`: (optional) define additional parameters to `docker compose up -d`.
|
|
- `loglevel`: (optional) define loglevel. Defaults to "INFO" if not set.
|
|
- `self-update`: (optional) update this script on startup. Defaults to `false`.
|
|
|
|
## Detailed process
|
|
For each enabled stack in the config file, the following process will be executed:
|
|
|
|
1. Checking directory existence
|
|
2. Fetching latest changes from remote repository
|
|
3. If there is a new commit, it will pull the changes
|
|
4. Running Docker Compose with the defined or default compose-file(s)
|