selfhosted-apps-docker/README.md

99 lines
3.3 KiB
Markdown
Raw Normal View History

2020-05-01 09:38:43 +00:00
# Selfhosted-Apps-Docker
2020-04-09 22:52:11 +00:00
2020-05-18 22:49:18 +00:00
###### guide-by-example
2020-04-09 22:52:11 +00:00
2020-05-01 09:51:20 +00:00
---
2020-05-01 09:38:43 +00:00
![logo](https://i.imgur.com/u5LH0jI.png)
2020-04-09 22:52:11 +00:00
2020-05-01 09:51:20 +00:00
---
2020-05-01 09:55:39 +00:00
* [caddy_v2](caddy_v2/) - reverse proxy
2020-05-01 09:40:53 +00:00
* [bitwarden_rs](bitwarden_rs/) - password manager
* [bookstack](bookstack/) - notes and documentation
* [borg_backup](borg_backup/) - backup utility
* [ddclient](ddclient/) - automatic DNS update
2020-05-10 21:48:51 +00:00
* [dnsmasq](dnsmasq/) - DNS and DHCP server
2020-05-01 09:40:53 +00:00
* [homer](homer/) - homepage
* [nextcloud](nextcloud/) - file share & sync
2020-05-12 17:59:50 +00:00
* [portainer](portainer/) - docker management
2020-05-01 09:40:53 +00:00
* [prometheus_grafana](prometheus_grafana/) - monitoring
* [watchtower](watchtower/) - automatic docker images update
2020-05-10 21:48:51 +00:00
* [arch_linux_host_install](arch_linux_host_install)
2020-04-09 22:52:11 +00:00
2020-05-12 17:55:28 +00:00
The core of the setup is Caddy reverse proxy.</br>
It's described in most details.
2020-05-12 17:59:50 +00:00
# Some docker basics and some info
2020-05-12 17:55:28 +00:00
2020-05-12 19:10:39 +00:00
### Compose and environment variables
2020-05-12 18:25:19 +00:00
2020-05-12 17:55:28 +00:00
You **do not** need to fuck with `docker-compose.yml` to get something up,
simple copy paste should suffice.
2020-05-13 20:11:30 +00:00
You **do** need to fuck with `.env` file, that's where all the variables are.
2020-05-12 17:55:28 +00:00
2020-05-13 20:11:30 +00:00
Sometimes the `.env` file is used as `env_file`
2020-05-12 17:55:28 +00:00
2020-05-12 17:59:50 +00:00
* `.env` - actual name of a file, used only by compose.</br>
It is used automatically just by being in the directory
2020-05-12 17:55:28 +00:00
with the `docker-compose.yml`</br>
2020-05-13 20:11:30 +00:00
Variables set there are available during the building of the container,
2020-05-13 20:13:43 +00:00
but unless named in the `enviroment:` option they are not available
2020-05-13 20:11:30 +00:00
in the running containers.
2020-05-13 20:23:40 +00:00
* `env_file` - an option in compose that defines an existing external file.</br>
Variables in this file will be available in the running container,
but not during building of the container.
2020-05-12 17:55:28 +00:00
So to not have polluted huge ass compose file, or to not have multiple places
2020-05-12 17:59:50 +00:00
where changes need to be made when adding a variable... `env_file: .env` BAM.
2020-05-12 17:55:28 +00:00
2020-05-12 18:25:19 +00:00
Only issue is that all variables from `.env` are available in
containers that use this.</br>
2020-05-12 17:59:50 +00:00
That can lead to potential conflicts and clashes, looking at you nextcloud.
2020-05-12 17:55:28 +00:00
2020-05-12 17:59:50 +00:00
In those cases variables names are declared per container.
2020-05-12 17:55:28 +00:00
2020-05-12 17:59:50 +00:00
But `env_file: .env` is just easier, prettier... and mostly painless.
2020-05-12 17:55:28 +00:00
2020-05-12 18:25:19 +00:00
---
### Images latest tag
All images are without any tag, which defaults to `latest` tag being used.
2020-05-12 19:11:15 +00:00
This is [frowned upon](https://vsupalov.com/docker-latest-tag/),
2020-05-13 20:11:30 +00:00
but feel free to choose a version and sticking with it once it goes to real use.
2020-05-12 18:25:19 +00:00
2020-05-12 19:10:39 +00:00
---
2020-05-12 18:25:19 +00:00
### Bind mount
2020-05-16 13:18:21 +00:00
No docker volumes are used. Directories and files from the host
2020-05-12 19:09:38 +00:00
are bind mounted in to containers.</br>
Don't feel like I know all of the aspects of this,
2020-05-13 20:11:30 +00:00
but I know its easier to edit a random file on a host,
or backup a directory when its just there, sitting on the host.
2020-05-13 20:13:43 +00:00
---
2020-05-13 20:11:30 +00:00
### SendGrid
For sending emails free sendgrid account is used, which provides 100 free emails
a day.
2020-05-13 20:23:40 +00:00
The configuration in `.env` files is almost universal, `apikey` is
really the username, not some placeholder.
Only the password changes, which you generate in apikey section on SendGrid website.
2020-05-13 20:11:30 +00:00
2020-05-13 20:13:43 +00:00
---
2020-05-13 20:11:30 +00:00
### Cloudflare
For managing DNS records. The free tier provides lot of managment options and
benefits. Like proxy between your domain/subdomain and your server, so no one
can get your public IP just from your domain name. Or 5 firewall rules that allow
you to geoblock whole world except your country.
[How to move to cloudflare.](https://support.cloudflare.com/hc/en-us/articles/205195708-Changing-your-domain-nameservers-to-Cloudflare)