You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

122 lines
4.1 KiB
Markdown

4 years ago
# Selfhosted-Apps-Docker
4 years ago
4 years ago
###### guide-by-example
4 years ago
4 years ago
---
4 years ago
![logo](https://i.imgur.com/u5LH0jI.png)
4 years ago
4 years ago
---
4 years ago
* [caddy_v2](caddy_v2/) - reverse proxy
4 years ago
* [bitwarden_rs](bitwarden_rs/) - password manager
* [bookstack](bookstack/) - notes and documentation
* [borg_backup](borg_backup/) - backup utility
* [ddclient](ddclient/) - automatic DNS update
4 years ago
* [dnsmasq](dnsmasq/) - DNS and DHCP server
4 years ago
* [homer](homer/) - homepage
* [nextcloud](nextcloud/) - file share & sync
4 years ago
* [portainer](portainer/) - docker management
4 years ago
* [prometheus_grafana](prometheus_grafana/) - monitoring
* [watchtower](watchtower/) - automatic docker images update
4 years ago
* [arch_linux_host_install](arch_linux_host_install)
4 years ago
4 years ago
The core of the setup is Caddy reverse proxy.</br>
It's described in most details.
4 years ago
You do need to have **basic docker and docker-compose knowledge**,
shit here is pretty hand holding and detailed, but it still should not be
4 years ago
your first time running a docker container.
4 years ago
# Some extra info
4 years ago
### Caddy
When making changes to Caddyfile, the config needs to be reloaded afterwards.
On the docker host:<br>
`docker exec -w /etc/caddy caddy caddy reload`
Assuming container name is kept as `caddy`.
### Compose
4 years ago
4 years ago
When making changes use `docker-compose down` and `docker-compose up -d`,
not just restart or stop/start.
4 years ago
4 years ago
* you **do not** need to fuck with `docker-compose.yml` to get something up,
simple copy paste should suffice
* you **do** need to fuck with `.env` file, that's where all the variables are
4 years ago
4 years ago
Often the `.env` file is used as `env_file`
4 years ago
4 years ago
`env_file: .env`
* `.env` - actual name of a file that is used only by compose.</br>
4 years ago
It is used automatically just by being in the directory
4 years ago
with the `docker-compose.yml`</br>
4 years ago
Variables in it are available during the building of the container,
but unless named in the `environment:` option, they are not available
4 years ago
in the running containers.
4 years ago
* `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.
4 years ago
4 years ago
So a setup having `env_file: .env` in the compose mixes these two together.
4 years ago
Benefit is that you do not need to make changes at multiple places,
4 years ago
adding variable or changing a name in `.env` does not require
to also go in to compose to add/change it there...</br>
4 years ago
Also the compose file looks less cramped.
4 years ago
4 years ago
Only issue is that **all** variables from the `.env` file are available in
all containers that use this `env_file: .env` method.</br>
That can lead to potential issues if some containers picks up enviroment
variable that is intented for a different container of the stack.
This is tested and works in all setups here, but if you start to use this
everywhere without understanding it, you can encounter unknown issues.
So first troubleshooting step should be abandoning `.env` and write out
the variables directly in the compose file.
4 years ago
4 years ago
---
### Images latest tag
4 years ago
All images are without any tag, which defaults to `latest` tag being used.</br>
4 years ago
This is [frowned upon](https://vsupalov.com/docker-latest-tag/),
4 years ago
but feel free to choose a version and sticking with it once it goes to real use.
4 years ago
4 years ago
---
4 years ago
### Bind mount
4 years ago
No docker volumes are used. Directories and files from the host
4 years ago
are bind mounted in to containers.</br>
Don't feel like I know all of the aspects of this,
4 years ago
but I know it's easier to edit a random file on a host,
or backup a directory when it's just there, sitting on the host.
4 years ago
4 years ago
---
4 years ago
### SendGrid
For sending emails free sendgrid account is used, which provides 100 free emails
a day.
4 years ago
The configuration in `.env` files is almost universal, `apikey` is
really the username, not some placeholder.
4 years ago
Only the password(actual value of apikey) changes,
which you generate in apikey section on SendGrid website.
4 years ago
4 years ago
---
4 years ago
### 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)