One thing I do to prevent stuff from getting into a public git repo is:
In the git repo, make a file called .gitignore then add the line .env to it. Then git will ignore any file named .env
edit compose files from a computer that is separate from the one that gets secrets. I have my desktop setup to push to github. Then I make a change, then simply run `git pull on my server to download the changes.
make the .env only viewable by root (you'll have to use sudo nano) by running sudo chmod 600 .env && sudo chown root:root .env
You can specify a folder in your files for configs, and a different one for the compose and env:
Edit: then you can map your volume not to
./config:/config
but instead to/config/containerName:/config