Fix Directory Hardcodes, Documentation Improvements (#10)
* Improve the main crontab example. * Remove /opt/Docker hardcodes. * Add periods. * Improve readability. * Begin removing hardcoded path from the bin files. * Update main README to no longer enforce hardcoded path. Other improvements. * Add the load folder with a README. * Add load folder and its README. * Improve reverse proxy text files. * Switch to tabs. * Update all scripts for tabs, DOCKER_HOME, and comments. * Let users know the directory choice is optional. * Fix environment file. * Add more details for the reverse proxy load balancing. * Don't actually listen for postgres. * Fix comments on source file. * Be more explicit on the pathing.
This commit is contained in:
parent
e383520ebb
commit
8602f7ada2
4
.gitignore
vendored
4
.gitignore
vendored
@ -14,8 +14,8 @@ Config/ReverseProxy/config/hosts/*
|
||||
Config/ReverseProxy/config/load.conf.d/*
|
||||
Config/ReverseProxy/config/mail.conf.d/*
|
||||
|
||||
# Ignore downloaded mail server files
|
||||
# Ignore downloaded mail server files.
|
||||
Config/MailServer/setup.sh
|
||||
|
||||
# Ignore any private key information
|
||||
# Ignore any private key information.
|
||||
private.key
|
||||
|
@ -13,13 +13,15 @@ product's self-built solutions can be found below.
|
||||
git clone https://github.com/Hyperling/docker $PROJECT_DIR
|
||||
```
|
||||
|
||||
1. Add your Afraid DNS account key to $PROJECT_DIR/Config/DynamicDNS/private.key
|
||||
Account key can be found [here](https://freedns.afraid.org/dynamic/v2/).
|
||||
1. Add your user key to `$PROJECT_DIR/Config/DynamicDNS/private.key`. The key can
|
||||
be found on [this page](https://freedns.afraid.org/dynamic/v2/) after signing in.
|
||||
|
||||
1. Add this line to the system's cron scheduling using a command like `crontab -e`.
|
||||
The sleep waits anywhere from 0 to 55 minutes due to the
|
||||
[Random/10](https://tldp.org/LDP/abs/html/randomvar.html).
|
||||
|
||||
```
|
||||
5 * * * * $PROJECT_DIR/Config/DynamicDNS/update_dns.sh
|
||||
@hourly sleep $(( $RANDOM / 10 )); $PROJECT_DIR/Config/DynamicDNS/update_dns.sh
|
||||
```
|
||||
|
||||
### TESTING
|
||||
@ -61,6 +63,6 @@ and preferably add a 30-45 second sleep so that you do not hit near :00 seconds.
|
||||
|
||||
### No-IP.org Instructions
|
||||
|
||||
Please see this guide on installing the Dynamic Update Client (DUC).
|
||||
Please see the official guide on installing the Dynamic Update Client (DUC).
|
||||
|
||||
https://my.noip.com/dynamic-dns/duc
|
||||
|
@ -13,7 +13,7 @@ services:
|
||||
restart: always
|
||||
command: --transaction-isolation=READ-COMMITTED --binlog-format=ROW
|
||||
volumes:
|
||||
- /opt/Docker/Volumes/Nextcloud/mariadb:/var/lib/mysql
|
||||
- ../../Volumes/Nextcloud/mariadb:/var/lib/mysql
|
||||
environment:
|
||||
- MYSQL_ROOT_PASSWORD=ChangeMe
|
||||
- MYSQL_DATABASE=nextcloud
|
||||
@ -28,11 +28,10 @@ services:
|
||||
links:
|
||||
- db
|
||||
volumes:
|
||||
- /opt/Docker/Volumes/Nextcloud/nextcloud:/var/www/html
|
||||
- ../../Volumes/Nextcloud/nextcloud:/var/www/html
|
||||
environment:
|
||||
- MYSQL_DATABASE=nextcloud
|
||||
- MYSQL_USER=nc
|
||||
- MYSQL_PASSWORD=changeme
|
||||
- MYSQL_HOST=db
|
||||
- PHP_UPLOAD_LIMIT=5G
|
||||
|
||||
|
@ -1,3 +1,2 @@
|
||||
# Upstream Host Configuration
|
||||
For systems which do not resolve well such as ignoring `/etc/hosts`.
|
||||
|
||||
|
@ -5,4 +5,3 @@ upstream example-proxy-site {
|
||||
#server 127.0.0.1:8080;
|
||||
server hyperling.com;
|
||||
}
|
||||
|
||||
|
@ -1,7 +1,6 @@
|
||||
# HTML Sites
|
||||
If the reverse proxy also serves static HTML sites,
|
||||
the root directories of each can be placed here.
|
||||
Then in `../conf.d` add a file which points the domain to the HTML web root,
|
||||
such as `/etc/nginx/html/www.website.name`.
|
||||
An example for this exists called `html.example.com`.
|
||||
It should be fairly easy to recreate for another website.
|
||||
If the reverse proxy also serves static HTML sites, the root directories of each
|
||||
can be placed here. Then in `../conf.d` add a file which points the domain to
|
||||
the HTML web root, such as `/etc/nginx/html/www.website.name`. An example for
|
||||
this exists called `html.example.com`. It should be fairly easy to recreate for
|
||||
another website.
|
||||
|
8
Config/ReverseProxy/config/load.conf.d/README.md
Normal file
8
Config/ReverseProxy/config/load.conf.d/README.md
Normal file
@ -0,0 +1,8 @@
|
||||
# Load Balancing Files
|
||||
Allow requests coming to this server to be spread amongst multiple servers based
|
||||
on port number. It does not seem possible to spread them based on `server_name`
|
||||
or other directives like a reverse proxy. The server simply listens on the port
|
||||
then runs through the upstream list to determine the destination.
|
||||
|
||||
## Official Documentation
|
||||
http://nginx.org/en/docs/stream/ngx_stream_core_module.html
|
15
Config/ReverseProxy/config/load.conf.d/example.com
Normal file
15
Config/ReverseProxy/config/load.conf.d/example.com
Normal file
@ -0,0 +1,15 @@
|
||||
# Example of how to load balance 4 Postgres servers for example.com. Since this
|
||||
# does not act under a reverse proxy situation, code is commented so that the
|
||||
# container does not needlessly start listening on the port.
|
||||
|
||||
#upstream postgres_servers {
|
||||
# server 1.2.3.1:5432;
|
||||
# server 1.2.3.2:5432;
|
||||
# server 1.2.3.3:5432;
|
||||
# server 1.2.3.4:5432;
|
||||
#}
|
||||
#
|
||||
#server {
|
||||
# listen 5432;
|
||||
# proxy_pass postgres_servers;
|
||||
#}
|
@ -66,12 +66,17 @@ http {
|
||||
include /etc/nginx/conf.d/*;
|
||||
}
|
||||
|
||||
# TBD, going live with HTTP first.
|
||||
## TBD.
|
||||
mail {
|
||||
## Reverse Proxied Mail Server Configurations ##
|
||||
#include /etc/nginx/mail.conf.d/*;
|
||||
}
|
||||
|
||||
## Under Experimentation
|
||||
# So far does not seem like server_name works, only listen, so not useful as a
|
||||
# reverse proxy. Such as 2 Postgres servers needing traffic from different
|
||||
# domains, or two SMTP servers on the same IP serving two different domains.
|
||||
# Those possibilities do not seem to exist here, unfortunately.
|
||||
stream {
|
||||
## Service Forwarding and Load Balancing ##
|
||||
# If this supports the `listen` and `server_name` directives then this may
|
||||
|
42
README.md
42
README.md
@ -1,21 +1,28 @@
|
||||
# My Docker Setup
|
||||
Scripting my way into the Docker world.
|
||||
I was unable to find a good tutorial on using and managing containers so this is what made sense to me based on practice with `docker-compose`.
|
||||
I am still new to Docker and am likely to make mistakes, but you're welcome to learn with me. ;)
|
||||
Scripting my way into the Docker world. I was unable to find a good tutorial on
|
||||
using and managing containers so this is what made sense to me based on practice
|
||||
with `docker-compose`. I am still new-ish to Docker and am likely to make
|
||||
mistakes, but you're welcome to learn with me. ;)
|
||||
|
||||
## Disclaimer
|
||||
Currently the project only focuses on `apt` based operating systems.
|
||||
|
||||
## Other README's
|
||||
Each `./Config/PROJECT/` folder also contains its own README file with specific
|
||||
information to running that sub project. This file's job is to cover the general
|
||||
Docker installation. The others then contain details on their program setup.
|
||||
|
||||
## How To Use
|
||||
Most of these commands benefit from being root. Something like a `sudo su -` if you feel comfortable with it.
|
||||
Otherwise be aware that using sudo may cause file permission conflicts when interacting with the configuration files and folders.
|
||||
Most of these commands benefit from being root. Something like a `sudo su -` if
|
||||
you feel comfortable with it. Otherwise be aware that using sudo may cause file
|
||||
permission conflicts when interacting with the configuration files and folders.
|
||||
|
||||
Install the project dependencies.
|
||||
```
|
||||
apt install git bash
|
||||
```
|
||||
|
||||
Clone the project.
|
||||
Clone the project. You may choose anywhere, but `/opt/Docker` is recommended.
|
||||
```
|
||||
git clone https://github.com/hyperling/docker /opt/Docker
|
||||
```
|
||||
@ -25,7 +32,7 @@ Load the environment variables.
|
||||
source /opt/Docker/source.env
|
||||
```
|
||||
|
||||
Install docker to the system.
|
||||
Install docker to the system using the official repos.
|
||||
```
|
||||
install.sh
|
||||
```
|
||||
@ -50,19 +57,24 @@ Cross your fingers and hope to profit!
|
||||
## Folders
|
||||
|
||||
### Config
|
||||
Compose projects are set up here. Each folder should have a `docker-compose.yml` file set up.
|
||||
Compose projects are set up here. Each folder should have a `docker-compose.yml`
|
||||
file set up.
|
||||
|
||||
### Volumes
|
||||
The data of the files go here if the Config is done correctly.
|
||||
I think this should be easier to remember than `/var/lib/docker/volumes` when it comes time for migrations.
|
||||
Hopefully all that'd be needed is to rsync `/opt/Docker` and run `install.sh` and then `start.sh` on the new server.
|
||||
That's my opinion though, if someone else uses this then they are welcome to place it where they'd like.
|
||||
The data of the files go here if the Config is done correctly. I think this
|
||||
should be easier to remember than `/var/lib/docker/volumes` when it comes time
|
||||
for migrations. Hopefully all that'd be needed is to rsync `/opt/Docker` and run
|
||||
`install.sh` and then `start.sh` on the new server. You are welcome to use a
|
||||
directory other than `/opt/Docker`, this project is location agnostic.
|
||||
|
||||
### bin
|
||||
Scripts to help make life easier. Some are pretty basic, but others do nice things like handle the container IDs.
|
||||
Scripts to help make life easier. Some are pretty basic, but others do nice
|
||||
things like handle the container IDs.
|
||||
* `install.sh` : Install dependencies on a new server with apt.
|
||||
* `create.sh` : Create a new folder with the needed yml file.
|
||||
* `start.sh` : Start all compose containers.
|
||||
* `stop.sh` : Stop all compose containers.
|
||||
* `get_logs.sh` : Create log files rather than using the `docker log` command or searching in /var/whatever.
|
||||
* `uninstall.sh` : If something goes wrong and you'd like to start from scratch without provisioning a new server then this should do the job.
|
||||
* `get_logs.sh` : Create log files rather than using the `docker log` command or
|
||||
searching in /var/whatever.
|
||||
* `uninstall.sh` : If something goes wrong and you'd like to start from scratch
|
||||
without provisioning a new server then this should do the job.
|
||||
|
@ -3,7 +3,17 @@
|
||||
# Create new container template.
|
||||
# usage: create.sh PROJECT_NAME
|
||||
|
||||
source /opt/Docker/source.env
|
||||
## Setup ##
|
||||
|
||||
DIR="`dirname $0`"
|
||||
PROG=`basename $0`
|
||||
if [[ $DIR == *"."* ]]; then
|
||||
DIR="`pwd`"
|
||||
fi
|
||||
|
||||
if [[ -z $DOCKER_HOME ]]; then
|
||||
DOCKER_HOME="$DIR/.."
|
||||
fi
|
||||
|
||||
## Validation ##
|
||||
|
||||
@ -32,4 +42,3 @@ echo "${file}:"
|
||||
cat "$file"
|
||||
|
||||
exit 0
|
||||
|
||||
|
@ -3,21 +3,31 @@
|
||||
# Put active logs into files for analysis.
|
||||
# usage: get_logs.sh
|
||||
|
||||
source /opt/Docker/source.env
|
||||
## Setup ##
|
||||
|
||||
DIR="`dirname $0`"
|
||||
PROG=`basename $0`
|
||||
if [[ $DIR == *"."* ]]; then
|
||||
DIR="`pwd`"
|
||||
fi
|
||||
if [[ -z $DOCKER_HOME ]]; then
|
||||
DOCKER_HOME="$DIR/.."
|
||||
fi
|
||||
|
||||
dir=logs
|
||||
date_format="+%Y%m%d-%H%M%S"
|
||||
|
||||
## Main ##
|
||||
|
||||
cd $DOCKER_HOME
|
||||
mkdir -p $dir
|
||||
docker ps | while read container_id image_name other; do
|
||||
image_name=${image_name##*/}
|
||||
echo $container_id $image_name
|
||||
docker inspect $container_id 1>/dev/null 2>&1 &&
|
||||
docker logs $container_id 1>${dir}/${image_name}.log.`date $date_format` 2>&1
|
||||
image_name=${image_name##*/}
|
||||
echo $container_id $image_name
|
||||
docker inspect $container_id 1>/dev/null 2>&1 &&
|
||||
docker logs $container_id 1>${dir}/${image_name}.log.`date $date_format` 2>&1
|
||||
done
|
||||
|
||||
chmod -R 755 $dir
|
||||
|
||||
exit 0
|
||||
|
||||
|
@ -4,7 +4,16 @@
|
||||
# Original comands came from here: https://docs.docker.com/engine/install/debian/
|
||||
# usage: install.sh
|
||||
|
||||
## Variables ##
|
||||
## Setup ##
|
||||
|
||||
DIR="`dirname $0`"
|
||||
PROG=`basename $0`
|
||||
if [[ $DIR == *"."* ]]; then
|
||||
DIR="`pwd`"
|
||||
fi
|
||||
if [[ -z $DOCKER_HOME ]]; then
|
||||
DOCKER_HOME="$DIR/.."
|
||||
fi
|
||||
|
||||
os=`grep ^'NAME=' /etc/os-release`
|
||||
pkgmgr=""
|
||||
|
24
bin/start.sh
24
bin/start.sh
@ -3,16 +3,26 @@
|
||||
# Start all containers.
|
||||
# usage: start.sh
|
||||
|
||||
source /opt/Docker/source.env
|
||||
## Setup ##
|
||||
|
||||
DIR="`dirname $0`"
|
||||
PROG=`basename $0`
|
||||
if [[ $DIR == *"."* ]]; then
|
||||
DIR="`pwd`"
|
||||
fi
|
||||
if [[ -z $DOCKER_HOME ]]; then
|
||||
DOCKER_HOME="$DIR/.."
|
||||
fi
|
||||
|
||||
## Main ##
|
||||
|
||||
cd $DOCKER_HOME/Config
|
||||
for dir in `ls`; do
|
||||
[ -d $dir ] && cd $dir || continue
|
||||
pwd
|
||||
[ -e Dockerfile ] && docker compose build
|
||||
[ -e docker-compose.yml ] && docker compose up -d
|
||||
cd ..
|
||||
[ -d $dir ] && cd $dir || continue
|
||||
pwd
|
||||
[ -e Dockerfile ] && docker compose build
|
||||
[ -e docker-compose.yml ] && docker compose up -d
|
||||
cd ..
|
||||
done
|
||||
|
||||
exit 0
|
||||
|
||||
|
22
bin/stop.sh
22
bin/stop.sh
@ -3,15 +3,25 @@
|
||||
# Stop all containers.
|
||||
# usage: stop.sh
|
||||
|
||||
source /opt/Docker/source.env
|
||||
## Setup ##
|
||||
|
||||
DIR="`dirname $0`"
|
||||
PROG=`basename $0`
|
||||
if [[ $DIR == *"."* ]]; then
|
||||
DIR="`pwd`"
|
||||
fi
|
||||
if [[ -z $DOCKER_HOME ]]; then
|
||||
DOCKER_HOME="$DIR/.."
|
||||
fi
|
||||
|
||||
## Main ##
|
||||
|
||||
cd $DOCKER_HOME/Config
|
||||
for dir in `ls`; do
|
||||
[ -d $dir ] && cd $dir || continue
|
||||
pwd
|
||||
[ -e docker-compose.yml ] && docker compose down
|
||||
cd ..
|
||||
[ -d $dir ] && cd $dir || continue
|
||||
pwd
|
||||
[ -e docker-compose.yml ] && docker compose down
|
||||
cd ..
|
||||
done
|
||||
|
||||
exit 0
|
||||
|
||||
|
@ -9,4 +9,3 @@ rm -v /etc/apt/sources.list.d/docker.list &&
|
||||
rm -rfv /var/lib/docker
|
||||
|
||||
exit 0
|
||||
|
||||
|
@ -4,9 +4,9 @@
|
||||
|
||||
docker compose down
|
||||
docker compose pull &&
|
||||
docker compose build &&
|
||||
docker compose up -d &&
|
||||
exit 0
|
||||
|
||||
echo "ERROR: Did not update or start correctly." &&
|
||||
exit 1
|
||||
|
||||
|
22
source.env
Normal file → Executable file
22
source.env
Normal file → Executable file
@ -1,19 +1,7 @@
|
||||
#!/bin/bash
|
||||
# Provide any necessary project variables.
|
||||
# Script is a shell file so that the paths can be relative.
|
||||
# Needs run in the current shell environment, such as:
|
||||
# source /PATH_TO_GIT_PROJECT/source.env
|
||||
|
||||
DIR=`dirname $0`
|
||||
if [[ $DIR == \.* ]]; then
|
||||
DIR=`pwd`
|
||||
fi
|
||||
|
||||
# Some projects are hard-coded to use /opt/Docker/Volumes so display a notice
|
||||
# until they are updated to be directory agnostic. Will help with testing!
|
||||
PREFERRED_HOME="/opt/Docker"
|
||||
if [[ $DIR != $PREFERRED_HOME ]]; then
|
||||
echo "WARNING: Preferred home is $PREFERRED_HOME but using $DIR." >&2
|
||||
fi
|
||||
|
||||
DOCKER_HOME=$DIR
|
||||
DOCKER_PATH=$DOCKER_HOME/bin
|
||||
PATH=$DOCKER_PATH:$PATH
|
||||
export DOCKER_HOME="$(dirname -- "${BASH_SOURCE[0]}")"
|
||||
export DOCKER_PATH="$DOCKER_HOME/bin"
|
||||
export PATH="$DOCKER_PATH:$PATH"
|
||||
|
Loading…
x
Reference in New Issue
Block a user