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.

146 lines
5.0 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
4 years ago
* [unifi](unifi/) - mangment utility for ubiquiti devices
4 years ago
* [watchtower](watchtower/) - automatic docker images update
4 years ago
* [wireguard](wireguard/) - the one and only VPN to ever consider
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
4 years ago
When making changes to `Caddyfile`, the config needs to be reloaded afterwards.
4 years ago
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>
4 years ago
That can lead to potential issues if a container picks up enviroment
4 years ago
variable that is intented for a different container of the stack.
4 years ago
In the setups here it works and is tested, but if you start to use this
everywhere without understanding it, you can encounter issues.
4 years ago
So first troubleshooting step should be abandoning `.env` and write out
4 years ago
the variables directly in the compose file under containers that want them.
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
Though I heard complains lately that is not as easy as it was to register on SendGrid.
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)
4 years ago
---
### ctop
[official site](https://github.com/bcicen/ctop)
![ctop-look](https://i.imgur.com/nGAd1MQ.png)
htop like utility for quick containers managment.
It is absofuckinglutely amazing in how simple yet effective it is.
* gives you hardware use overview, so you know which container use how much cpu, ram, bandwith, IO,...
* gives you detailed info on container so you know IP, which ports are published, when it was created,..
* allows quick managment - need to exec in to a container, need to see logs, need to stop it?
Written in go, so its super fast and installing is easy, as likely your distro does not have in repos,
if you use arch like I do its on AUR.