selfhosted-apps-docker/README.md

165 lines
6.0 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
2021-01-10 21:00:30 +00:00
* [ofelia](ofelia/) - job scheduler
2020-05-01 09:40:53 +00:00
* [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
2020-07-19 16:39:31 +00:00
* [unifi](unifi/) - mangment utility for ubiquiti devices
2020-05-01 09:40:53 +00:00
* [watchtower](watchtower/) - automatic docker images update
2020-07-19 16:39:31 +00:00
* [wireguard](wireguard/) - the one and only VPN to ever consider
2020-05-10 21:48:51 +00:00
* [arch_linux_host_install](arch_linux_host_install)
2020-04-09 22:52:11 +00:00
2021-01-05 12:37:11 +00:00
# How to self host various services
2021-01-05 12:33:56 +00:00
You do need to have **basic linux and basic docker-compose knowledge**,
the shit here is pretty hand holding and detailed, but it still should not be
2020-06-24 19:00:04 +00:00
your first time running a docker container.
2021-02-22 22:25:12 +00:00
a certain format is followed in the services pages
2020-06-24 19:02:49 +00:00
2021-01-05 12:33:56 +00:00
* **Purpose & Overview** - basic overview and intented use
* **Files and directory structure** - lists all the files/folder involved
and their placement
2021-01-05 12:37:11 +00:00
* **docker-compose** - the recipe file how to build a container, with .env file too
* **Reverse proxy** - reverse proxy specific settings, if a container has
a webserver providing web interface
2021-01-05 12:33:56 +00:00
* **Update** - how to update the container, usually just running Watchtower
* **Backup and restore** - of the entire container using borg backup
* **Backup of just user data** - steps to backup databases and other user data
* **Restore the user data** - steps to restore user data in a brand new setup
2020-05-22 16:05:03 +00:00
2021-01-05 12:33:56 +00:00
The core of the setup is Caddy reverse proxy.</br>
It's described in most details.
2020-05-22 16:05:03 +00:00
2021-01-05 12:33:56 +00:00
# Some extra info
2020-05-22 16:05:03 +00:00
### Compose
2020-05-12 18:25:19 +00:00
2020-05-20 18:29:12 +00:00
When making changes use `docker-compose down` and `docker-compose up -d`,
not just restart or stop/start.
2020-05-20 17:20:01 +00:00
2020-06-24 19:00:04 +00:00
* 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
2020-05-12 17:55:28 +00:00
2021-01-05 12:33:56 +00:00
Often the `.env` file is used as `env_file`,
which can be a bit difficult concept at a first glance.
2020-05-12 17:55:28 +00:00
2020-05-20 18:29:12 +00:00
`env_file: .env`
* `.env` - actual name of a file that is used only by compose.</br>
2020-05-12 17:59:50 +00:00
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-20 18:38:44 +00:00
Variables in it are available during the building of the container,
but unless named in the `environment:` 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
2021-01-05 12:33:56 +00:00
So a compose file having `env_file: .env` mixes these two together.
2020-06-24 19:07:10 +00:00
2021-01-05 12:33:56 +00:00
Benefit is that you do not need to make changes at multiple places.
Adding variables or changing a name in `.env` does not require you
to also go in to compose to add/change it there... also the compose file
looks much cleaner, less cramped.
2020-05-12 17:55:28 +00:00
2020-06-24 19:12:31 +00:00
Only issue is that **all** variables from the `.env` file are available in
all containers that use this `env_file: .env` method.</br>
2020-06-24 19:18:47 +00:00
That can lead to potential issues if a container picks up enviroment
2020-06-24 19:12:31 +00:00
variable that is intented for a different container of the stack.
2020-06-24 19:18:47 +00:00
In the setups here it works and is tested, but if you start to use this
everywhere without understanding it, you can encounter issues.
2020-06-24 19:12:31 +00:00
So first troubleshooting step should be abandoning `.env` and write out
2021-01-05 12:33:56 +00:00
the variables directly in the compose file only under containers that want them.
2020-05-12 17:55:28 +00:00
2020-05-12 18:25:19 +00:00
---
2021-01-08 20:46:27 +00:00
### Docker images latest tag
2020-05-12 18:25:19 +00:00
2020-05-20 18:38:44 +00:00
All images are without any tag, which defaults to `latest` tag being used.</br>
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-20 18:38:44 +00:00
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.
2020-05-13 20:11:30 +00:00
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.
2020-05-20 18:38:44 +00:00
Only the password(actual value of apikey) changes,
which you generate in apikey section on SendGrid website.
2020-05-13 20:11:30 +00:00
2020-06-24 19:18:47 +00:00
Though I heard complains lately that is not as easy as it was to register on SendGrid.
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
2021-01-08 20:46:27 +00:00
benefits. Like proxy between your domain and your server, so no one
2020-05-13 20:11:30 +00:00
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)
2020-07-19 16:39:31 +00:00
---
### 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.
2020-07-19 16:46:46 +00:00
* hardware use overview, so you know which container uses how much cpu, ram, bandwith, IO,...
* detailed info on a container, it's IP, published and exposed ports, when it was created,..
* quick managment, quick exec in to a container, check logs, stop it,...
2020-07-19 16:39:31 +00:00
2020-07-19 16:46:46 +00:00
Written in Go, so its super fast and installation is trivial when it is a single binary,
2020-07-19 16:48:50 +00:00
as likely your distro does not have it in repos. If you use arch, like I do, its on AUR.
2021-01-08 20:46:27 +00:00
2021-01-08 20:47:08 +00:00
---
2021-01-08 20:46:27 +00:00
### other guides
2022-01-17 20:43:12 +00:00
* [StarWhiz/docker_deployment_notes](https://github.com/StarWhiz/docker_deployment_notes/blob/master/README.md)
2021-01-08 20:46:27 +00:00
- got inspired and wrote in similar way setup for various services
2022-01-17 20:43:12 +00:00
* [BaptisteBdn/docker-selfhosted-apps](https://github.com/BaptisteBdn/docker-selfhosted-apps)
- many services using traefik for reverse proxy
2021-01-08 20:46:27 +00:00