Compare commits
	
		
			130 Commits
		
	
	
		
			167d813599
			...
			prod
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| 221a446996 | |||
| 2e4520d6ae | |||
| 7dd2ef5e75 | |||
| ffabb62f94 | |||
| b76898d146 | |||
| 57b2a1c986 | |||
| c2bb70ee23 | |||
| 5f1db78b25 | |||
| 89d166f0cc | |||
| 05374bf501 | |||
| 945039bd8a | |||
| 46e786b219 | |||
| f2604ff1fd | |||
| f12f945a04 | |||
| 12bf792e65 | |||
| c607fe1968 | |||
| 50a975b8ec | |||
| 40268e40b0 | |||
| d92a1f1205 | |||
| b4b366a857 | |||
| 87048191ce | |||
| 564dec0b63 | |||
| 427471d825 | |||
| 165c2aa64c | |||
| 4772826d4a | |||
| 052b28e265 | |||
| 4cc229a66d | |||
| 978a9778a5 | |||
| e5c68aa12e | |||
| b16bf3cf07 | |||
| 50b7629860 | |||
| 91dfbca76e | |||
| c0a220cebe | |||
| 369728b7ef | |||
| 31dda9d64f | |||
| 0e87eb3515 | |||
| bf0497c02a | |||
| 9079afd570 | |||
| 93e0971050 | |||
| c19b73e3f0 | |||
| 018c3c9ceb | |||
| 7e733dedcb | |||
| dac5c0de17 | |||
| 3ae7a6f8f9 | |||
| 567f1de450 | |||
| 3ca8b036ad | |||
| 3897d6f3c3 | |||
| fdff4f0d27 | |||
| 7b9bbcbc26 | |||
| cbaf052ea2 | |||
| c4c3cb6434 | |||
| e0f846164e | |||
| 9314bb8bb4 | |||
| b9d9771523 | |||
| d2aa3c195b | |||
| dd60d5a721 | |||
| c04eb08f78 | |||
| 418983c490 | |||
| 95060838e2 | |||
| 6973640b4e | |||
| a49d0129e7 | |||
| 394acfa06d | |||
| 04089744e6 | |||
| 75711c6c20 | |||
| c4032b5b94 | |||
| d7820ed373 | |||
| d9f8318e66 | |||
| a5a80276ac | |||
| c070d7cb92 | |||
| c138fe67d6 | |||
| 2697645abe | |||
| ce111d01f3 | |||
| 7abe909cdf | |||
| f57a0d322d | |||
| 9381d61d99 | |||
| bde78a1489 | |||
| 4acbd47388 | |||
| 51d6d32790 | |||
| 1e665a40b7 | |||
| 675ac90c31 | |||
| f0679bd05f | |||
| 897493dd1f | |||
| 5a5035fd33 | |||
| e178141357 | |||
| 6062818475 | |||
| f77557151a | |||
| fb7e31ed69 | |||
| 0478e8e108 | |||
| 2663bb5351 | |||
| 4aa7fa4b00 | |||
| d7a1e6f58a | |||
| f622cba366 | |||
| e86660d34e | |||
| cfb07a6e93 | |||
| 4dd0661e1e | |||
| d6e1186d86 | |||
| 57ade9f67d | |||
| ddeadcf723 | |||
| dbb54b6f81 | |||
| 5afc3bfaee | |||
| 5323b6647f | |||
| 6dac535211 | |||
| d035f9d8e7 | |||
| dfb9a306c5 | |||
| 1ba2739665 | |||
| 0ca793423b | |||
| 1284fc3946 | |||
| a3d6cdcee1 | |||
| a868f874d7 | |||
| 7046699ed6 | |||
| eb2dda9d66 | |||
| 15f01061ba | |||
| 4aebf1e21d | |||
| 5af5c13f43 | |||
| 27689e25d8 | |||
| 29d1affcd8 | |||
| 43ee8de7ef | |||
| 83fdb54768 | |||
| 16df857f08 | |||
| 620f3f81b2 | |||
| 593b1fbaf2 | |||
| e661b67b57 | |||
| 8aaa8e97b9 | |||
| 8c6b258f48 | |||
| 8b7f94d51f | |||
| ac60f54142 | |||
| 7265823f58 | |||
| 811442cd94 | |||
| a90bf8bf28 | |||
| 82547068e3 | 
							
								
								
									
										28
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										28
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							@@ -25,9 +25,11 @@ Config/DNS/config/*
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
# Ignore anything in disabled folders.
 | 
					# Ignore anything in disabled folders.
 | 
				
			||||||
disabled
 | 
					disabled
 | 
				
			||||||
 | 
					*.disabled
 | 
				
			||||||
 | 
					disabled.*
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# Ignore any .env files which are not explicitly committed to the project.
 | 
					# Ignore any .env files which are not explicitly committed to the project.
 | 
				
			||||||
*.env
 | 
					.env
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# 2024-01-23 Ignore true docker-compose files, only show examples from now on.
 | 
					# 2024-01-23 Ignore true docker-compose files, only show examples from now on.
 | 
				
			||||||
docker-compose.yml
 | 
					docker-compose.yml
 | 
				
			||||||
@@ -35,6 +37,28 @@ docker-compose.yml
 | 
				
			|||||||
# 2024-01-24 Hide static files for Hyperling.com.
 | 
					# 2024-01-24 Hide static files for Hyperling.com.
 | 
				
			||||||
Config/Hyperling.com/files/*
 | 
					Config/Hyperling.com/files/*
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# Ignore things like Config/Hyperling.com-Stage/
 | 
					# Ignore things like "Config/Hyperling.com-Stage/"
 | 
				
			||||||
*-Stage
 | 
					*-Stage
 | 
				
			||||||
 | 
					*-stage
 | 
				
			||||||
 | 
					*-STAGE
 | 
				
			||||||
Stage-*
 | 
					Stage-*
 | 
				
			||||||
 | 
					stage-*
 | 
				
			||||||
 | 
					STAGE-*
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Ignore copies of the Hugo configuration, such as "Config/Hugo-MyWebsite".
 | 
				
			||||||
 | 
					Hugo-*
 | 
				
			||||||
 | 
					*-Hugo
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Ignore Prod and Dev copies as well.
 | 
				
			||||||
 | 
					*-Prod
 | 
				
			||||||
 | 
					*-prod
 | 
				
			||||||
 | 
					*-PROD
 | 
				
			||||||
 | 
					Prod-*
 | 
				
			||||||
 | 
					prod-*
 | 
				
			||||||
 | 
					PROD-*
 | 
				
			||||||
 | 
					*-Dev
 | 
				
			||||||
 | 
					*-dev
 | 
				
			||||||
 | 
					*-DEV
 | 
				
			||||||
 | 
					Dev-*
 | 
				
			||||||
 | 
					dev-*
 | 
				
			||||||
 | 
					DEV-*
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,5 +1,5 @@
 | 
				
			|||||||
# Local DNS
 | 
					# Local DNS
 | 
				
			||||||
Host a local DNS server in case your router/gateway is not cutting it. Allows
 | 
					Host a local DNS server in case your router/gateway is not cutting it. Allows
 | 
				
			||||||
the ability to use simple names across the network witrhout editing `/etc/hosts`
 | 
					the ability to use simple names across the network witrhout editing `/etc/hosts`
 | 
				
			||||||
on each machine. The IP of this server should be added to the router/gateway's
 | 
					on each machine. The IP of this server will be added to the router/gateway's
 | 
				
			||||||
settings so that all machines on the network know to use it and can benefit.
 | 
					settings so that all machines on the network know to use it and can benefit.
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -19,8 +19,5 @@ services:
 | 
				
			|||||||
      mode: global
 | 
					      mode: global
 | 
				
			||||||
      resources:
 | 
					      resources:
 | 
				
			||||||
        limits:
 | 
					        limits:
 | 
				
			||||||
          cpus: '0.50'
 | 
					          cpus: $CPU
 | 
				
			||||||
          memory: 512M
 | 
					          memory: $MEM
 | 
				
			||||||
        reservations:
 | 
					 | 
				
			||||||
          cpus: '0.25'
 | 
					 | 
				
			||||||
          memory: 128M
 | 
					 | 
				
			||||||
							
								
								
									
										12
									
								
								Config/DNS/example.env
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										12
									
								
								Config/DNS/example.env
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,12 @@
 | 
				
			|||||||
 | 
					# This file will need copied as `.env`.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					## Docker ##
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					CMPOSE_BAKE=true
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					## Performance ##
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Standard Server
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					CPU=0.50
 | 
				
			||||||
 | 
					MEM=0.50G
 | 
				
			||||||
@@ -42,7 +42,7 @@ function usage {
 | 
				
			|||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
function check {
 | 
					function check {
 | 
				
			||||||
	# Accepts parameter of status and whether the program should quit.
 | 
						# Accepts parameter of status and whether the program is needs to quit.
 | 
				
			||||||
	status=$1
 | 
						status=$1
 | 
				
			||||||
	quit=$2
 | 
						quit=$2
 | 
				
			||||||
	if [[ $status != 0 ]]; then
 | 
						if [[ $status != 0 ]]; then
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										34
									
								
								Config/Gitea/docker-compose.example.yml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										34
									
								
								Config/Gitea/docker-compose.example.yml
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,34 @@
 | 
				
			|||||||
 | 
					# 2024-12-30 Hyperling
 | 
				
			||||||
 | 
					# Gitea self-hosted git server!
 | 
				
			||||||
 | 
					#   https://hub.docker.com/r/gitea/gitea
 | 
				
			||||||
 | 
					#   https://docs.gitea.com/installation/install-with-docker
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Takes nearly double the resources of Gogs.
 | 
				
			||||||
 | 
					# Has a nicer UI and more features. Can anyone say, "Dark Theme"? ;D
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					services:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  app:
 | 
				
			||||||
 | 
					    ## Database ##
 | 
				
			||||||
 | 
					    # SQL Lite
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    ## App ##
 | 
				
			||||||
 | 
					    container_name: gitea-app
 | 
				
			||||||
 | 
					    image: gitea/gitea:latest
 | 
				
			||||||
 | 
					    restart: always
 | 
				
			||||||
 | 
					    ports:
 | 
				
			||||||
 | 
					      - "3001:3000"
 | 
				
			||||||
 | 
					      - "2201:22"
 | 
				
			||||||
 | 
					    volumes:
 | 
				
			||||||
 | 
					      - ../../Volumes/Gitea/gitea:/data
 | 
				
			||||||
 | 
					      - /etc/timezone:/etc/timezone:ro
 | 
				
			||||||
 | 
					      - /etc/localtime:/etc/localtime:ro
 | 
				
			||||||
 | 
					    environment:
 | 
				
			||||||
 | 
					      - USER_UID=1000
 | 
				
			||||||
 | 
					      - USER_GID=1000
 | 
				
			||||||
 | 
					    deploy:
 | 
				
			||||||
 | 
					      mode: global
 | 
				
			||||||
 | 
					      resources:
 | 
				
			||||||
 | 
					        limits:
 | 
				
			||||||
 | 
					          cpus: $CPU
 | 
				
			||||||
 | 
					          memory: $MEM
 | 
				
			||||||
@@ -1,71 +0,0 @@
 | 
				
			|||||||
# 2024-12-30 Hyperling
 | 
					 | 
				
			||||||
# Gitea self-hosted git server!
 | 
					 | 
				
			||||||
#   https://hub.docker.com/r/gitea/gitea
 | 
					 | 
				
			||||||
#   https://docs.gitea.com/installation/install-with-docker
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
# Takes nearly double the resources of Gogs.
 | 
					 | 
				
			||||||
# Has a nicer UI and more features. Can anyone say, "Dark Theme"? ;D
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
services:
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  app:
 | 
					 | 
				
			||||||
    ## Database ##
 | 
					 | 
				
			||||||
    # SQL Lite
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    ## App ##
 | 
					 | 
				
			||||||
    container_name: gitea-app
 | 
					 | 
				
			||||||
    image: gitea/gitea:latest
 | 
					 | 
				
			||||||
    restart: always
 | 
					 | 
				
			||||||
    ports:
 | 
					 | 
				
			||||||
      - "3001:3000"
 | 
					 | 
				
			||||||
      - "2201:22"
 | 
					 | 
				
			||||||
    volumes:
 | 
					 | 
				
			||||||
      - ../../Volumes/Gitea/gitea:/data
 | 
					 | 
				
			||||||
      - /etc/timezone:/etc/timezone:ro
 | 
					 | 
				
			||||||
      - /etc/localtime:/etc/localtime:ro
 | 
					 | 
				
			||||||
    environment:
 | 
					 | 
				
			||||||
      - USER_UID=1000
 | 
					 | 
				
			||||||
      - USER_GID=1000
 | 
					 | 
				
			||||||
    #networks:
 | 
					 | 
				
			||||||
    #  - gitea
 | 
					 | 
				
			||||||
    deploy:
 | 
					 | 
				
			||||||
      mode: global
 | 
					 | 
				
			||||||
      resources:
 | 
					 | 
				
			||||||
        limits:
 | 
					 | 
				
			||||||
        # Minimum requirements for processes to start properly.
 | 
					 | 
				
			||||||
        # Takes a while to start up and migrate projects, but does work.
 | 
					 | 
				
			||||||
          ###cpus: '0.05'
 | 
					 | 
				
			||||||
          ###memory: 64M
 | 
					 | 
				
			||||||
        # Production-quality performance.
 | 
					 | 
				
			||||||
          ###cpus: '0.10'
 | 
					 | 
				
			||||||
          ###memory: 128M
 | 
					 | 
				
			||||||
        # Extra! Idles around 120M but exceeds 170M sometimes after busy.
 | 
					 | 
				
			||||||
          ###cpus: '0.25'
 | 
					 | 
				
			||||||
          ###memory: 192M
 | 
					 | 
				
			||||||
        # Final thoughts after tests.
 | 
					 | 
				
			||||||
          cpus: '0.50'
 | 
					 | 
				
			||||||
          memory: 192M
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
## Test Results ##
 | 
					 | 
				
			||||||
# 0.05 CPU, 64MB RAM
 | 
					 | 
				
			||||||
# - Migrate https://github.com/hyperling/ansible
 | 
					 | 
				
			||||||
#   - Page: 10512ms Template: 2111ms
 | 
					 | 
				
			||||||
# - Migrate https://github.com/hyperling/website
 | 
					 | 
				
			||||||
#   - Page: 6514ms  Template: 807ms
 | 
					 | 
				
			||||||
# - Migrate https://github.com/hyperling/docker
 | 
					 | 
				
			||||||
#   - Page: 8105ms  Template: 1201ms
 | 
					 | 
				
			||||||
# 0.10 CPU, 128MB RAM
 | 
					 | 
				
			||||||
# - Migrate https://github.com/hyperling/ansible
 | 
					 | 
				
			||||||
#   - Page: 2501ms Template: 294ms
 | 
					 | 
				
			||||||
# - Migrate https://github.com/hyperling/website
 | 
					 | 
				
			||||||
#   - Page: 786ms Template: 194ms
 | 
					 | 
				
			||||||
# - Migrate https://github.com/hyperling/docker
 | 
					 | 
				
			||||||
#   - Page: 1283ms Template: 87ms
 | 
					 | 
				
			||||||
# 0.25 CPU, 192MB RAM
 | 
					 | 
				
			||||||
# - Migrate https://github.com/hyperling/ansible
 | 
					 | 
				
			||||||
#   - Page: 439ms Template: 101ms
 | 
					 | 
				
			||||||
# - Migrate https://github.com/hyperling/website
 | 
					 | 
				
			||||||
#   - Page: 541ms Template: 2ms
 | 
					 | 
				
			||||||
# - Migrate https://github.com/hyperling/docker
 | 
					 | 
				
			||||||
#   - Page: 254ms Template: 86ms
 | 
					 | 
				
			||||||
## ##
 | 
					 | 
				
			||||||
							
								
								
									
										45
									
								
								Config/Gitea/example.env
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										45
									
								
								Config/Gitea/example.env
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,45 @@
 | 
				
			|||||||
 | 
					# This file wll need copied as `.env`.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					## Docker ##
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					COMPOSE_BAKE=true
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					## Performance ##
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Micro Server
 | 
				
			||||||
 | 
					CPU=0.20
 | 
				
			||||||
 | 
					MEM=0.20G
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Standard Server
 | 
				
			||||||
 | 
					#CPU=1.00
 | 
				
			||||||
 | 
					#MEM=1.00G
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					## Test Results
 | 
				
			||||||
 | 
					# 0.05 CPU, 64MB RAM
 | 
				
			||||||
 | 
					# : Minimum requirements for processes to start properly.
 | 
				
			||||||
 | 
					# : Takes a while to start up and migrate projects, but does work.
 | 
				
			||||||
 | 
					# - Migrate https://github.com/hyperling/ansible
 | 
				
			||||||
 | 
					#   - Page: 10512ms Template: 2111ms
 | 
				
			||||||
 | 
					# - Migrate https://github.com/hyperling/website
 | 
				
			||||||
 | 
					#   - Page: 6514ms  Template: 807ms
 | 
				
			||||||
 | 
					# - Migrate https://github.com/hyperling/docker
 | 
				
			||||||
 | 
					#   - Page: 8105ms  Template: 1201ms
 | 
				
			||||||
 | 
					# 0.10 CPU, 128MB RAM
 | 
				
			||||||
 | 
					# : Production-quality performance.
 | 
				
			||||||
 | 
					# - Migrate https://github.com/hyperling/ansible
 | 
				
			||||||
 | 
					#   - Page: 2501ms Template: 294ms
 | 
				
			||||||
 | 
					# - Migrate https://github.com/hyperling/website
 | 
				
			||||||
 | 
					#   - Page: 786ms Template: 194ms
 | 
				
			||||||
 | 
					# - Migrate https://github.com/hyperling/docker
 | 
				
			||||||
 | 
					#   - Page: 1283ms Template: 87ms
 | 
				
			||||||
 | 
					# 0.25 CPU, 192MB RAM
 | 
				
			||||||
 | 
					# : Extra! Idles around 120M but exceeds 170M sometimes after busy.
 | 
				
			||||||
 | 
					# - Migrate https://github.com/hyperling/ansible
 | 
				
			||||||
 | 
					#   - Page: 439ms Template: 101ms
 | 
				
			||||||
 | 
					# - Migrate https://github.com/hyperling/website
 | 
				
			||||||
 | 
					#   - Page: 541ms Template: 2ms
 | 
				
			||||||
 | 
					# - Migrate https://github.com/hyperling/docker
 | 
				
			||||||
 | 
					#   - Page: 254ms Template: 86ms
 | 
				
			||||||
 | 
					# 0.50 CPU, 192MB RAM
 | 
				
			||||||
 | 
					# : Final thoughts after more production usage.
 | 
				
			||||||
 | 
					##
 | 
				
			||||||
							
								
								
									
										33
									
								
								Config/Gogs/docker-compose.example.yml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										33
									
								
								Config/Gogs/docker-compose.example.yml
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,33 @@
 | 
				
			|||||||
 | 
					# 2024-12-30 Hyperling
 | 
				
			||||||
 | 
					# Gogs self-hosted git server!
 | 
				
			||||||
 | 
					#   https://hub.docker.com/r/gogs/gogs
 | 
				
			||||||
 | 
					#   https://gist.github.com/ahromis/4ce4a58623847ca82cb1b745c2f83c82
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Takes nearly half the resources of Gitea.
 | 
				
			||||||
 | 
					# Has a more basic UI and may be lacking features. So slim though!!
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					services:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  app:
 | 
				
			||||||
 | 
					    ## Database ##
 | 
				
			||||||
 | 
					    # SQL Lite
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    ## App ##
 | 
				
			||||||
 | 
					    container_name: gogs-app
 | 
				
			||||||
 | 
					    image: gogs/gogs:latest
 | 
				
			||||||
 | 
					    restart: always
 | 
				
			||||||
 | 
					    ports:
 | 
				
			||||||
 | 
					      - "3000:3000"
 | 
				
			||||||
 | 
					      - "2202:22"
 | 
				
			||||||
 | 
					    volumes:
 | 
				
			||||||
 | 
					      - ../../Volumes/Gogs/gogs:/data
 | 
				
			||||||
 | 
					      - /etc/timezone:/etc/timezone:ro
 | 
				
			||||||
 | 
					      - /etc/localtime:/etc/localtime:ro
 | 
				
			||||||
 | 
					    environment:
 | 
				
			||||||
 | 
					      - "RUN_CROND=true"
 | 
				
			||||||
 | 
					    deploy:
 | 
				
			||||||
 | 
					      mode: global
 | 
				
			||||||
 | 
					      resources:
 | 
				
			||||||
 | 
					        limits:
 | 
				
			||||||
 | 
					          cpus: $CPU
 | 
				
			||||||
 | 
					          memory: $MEM
 | 
				
			||||||
@@ -1,70 +0,0 @@
 | 
				
			|||||||
# 2024-12-30 Hyperling
 | 
					 | 
				
			||||||
# Gogs self-hosted git server!
 | 
					 | 
				
			||||||
#   https://hub.docker.com/r/gogs/gogs
 | 
					 | 
				
			||||||
#   https://gist.github.com/ahromis/4ce4a58623847ca82cb1b745c2f83c82
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
# Takes nearly half the resources of Gitea.
 | 
					 | 
				
			||||||
# Has a more basic UI and may be lacking features. So slim though!!
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
services:
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  app:
 | 
					 | 
				
			||||||
    ## Database ##
 | 
					 | 
				
			||||||
    # SQL Lite
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    ## App ##
 | 
					 | 
				
			||||||
    container_name: gogs-app
 | 
					 | 
				
			||||||
    image: gogs/gogs:latest
 | 
					 | 
				
			||||||
    restart: always
 | 
					 | 
				
			||||||
    ports:
 | 
					 | 
				
			||||||
      - "3000:3000"
 | 
					 | 
				
			||||||
      - "2202:22"
 | 
					 | 
				
			||||||
    volumes:
 | 
					 | 
				
			||||||
      - ../../Volumes/Gogs/gogs:/data
 | 
					 | 
				
			||||||
      - /etc/timezone:/etc/timezone:ro
 | 
					 | 
				
			||||||
      - /etc/localtime:/etc/localtime:ro
 | 
					 | 
				
			||||||
    environment:
 | 
					 | 
				
			||||||
      - "RUN_CROND=true"
 | 
					 | 
				
			||||||
    #networks:
 | 
					 | 
				
			||||||
    #  - gogs
 | 
					 | 
				
			||||||
    deploy:
 | 
					 | 
				
			||||||
      mode: global
 | 
					 | 
				
			||||||
      resources:
 | 
					 | 
				
			||||||
        limits:
 | 
					 | 
				
			||||||
        # Minimum requirements for processes to start properly.
 | 
					 | 
				
			||||||
        # Works pretty well! Takes a little to migrate, otherwise snappy!
 | 
					 | 
				
			||||||
          ###cpus: '0.02'
 | 
					 | 
				
			||||||
          ###memory: 32M
 | 
					 | 
				
			||||||
        # Seamless performance.
 | 
					 | 
				
			||||||
          ###cpus: '0.05'
 | 
					 | 
				
			||||||
          ###memory: 64M
 | 
					 | 
				
			||||||
        # Extra! Idles at 50M, will probably never use all this for 1 user.
 | 
					 | 
				
			||||||
          ###cpus: '0.25'
 | 
					 | 
				
			||||||
          ###memory: 192M
 | 
					 | 
				
			||||||
        # Final thoughts after tests.
 | 
					 | 
				
			||||||
          cpus: '0.50'
 | 
					 | 
				
			||||||
          memory: 96M
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
## Test Results ##
 | 
					 | 
				
			||||||
# 0.02 CPU, 32MB RAM
 | 
					 | 
				
			||||||
# - Migrate https://github.com/hyperling/ansible
 | 
					 | 
				
			||||||
#   - Page: 20684ms Template: 3001ms, Page: 16503ms Template: 492ms
 | 
					 | 
				
			||||||
# - Migrate https://github.com/hyperling/website
 | 
					 | 
				
			||||||
#   - Page: 12495ms Template: 800ms
 | 
					 | 
				
			||||||
# - Migrate https://github.com/hyperling/docker
 | 
					 | 
				
			||||||
#   - Page: 9591ms  Template: 591ms
 | 
					 | 
				
			||||||
# 0.05 CPU, 64MB RAM
 | 
					 | 
				
			||||||
# - Migrate https://github.com/hyperling/ansible
 | 
					 | 
				
			||||||
#   - Page: 4602ms Template: 2ms
 | 
					 | 
				
			||||||
# - Migrate https://github.com/hyperling/website
 | 
					 | 
				
			||||||
#   - Page: 3269ms Template: 1ms
 | 
					 | 
				
			||||||
# - Migrate https://github.com/hyperling/docker
 | 
					 | 
				
			||||||
#   - Page: 2481ms Template: 1ms
 | 
					 | 
				
			||||||
# 0.25 CPU, 192MB RAM
 | 
					 | 
				
			||||||
# - Migrate https://github.com/hyperling/ansible
 | 
					 | 
				
			||||||
#   - Page: 575ms Template: 2ms
 | 
					 | 
				
			||||||
# - Migrate https://github.com/hyperling/website
 | 
					 | 
				
			||||||
#   - Page: 131ms Template: 4ms
 | 
					 | 
				
			||||||
# - Migrate https://github.com/hyperling/docker
 | 
					 | 
				
			||||||
#   - Page: 350ms Template: 1ms
 | 
					 | 
				
			||||||
## ##
 | 
					 | 
				
			||||||
							
								
								
									
										45
									
								
								Config/Gogs/example.env
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										45
									
								
								Config/Gogs/example.env
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,45 @@
 | 
				
			|||||||
 | 
					# This file will need to be renamed as `.env`.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					## Docker ##
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					COMPOSE_BAKE=true
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					## Performance ##
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Micro Server
 | 
				
			||||||
 | 
					CPU=0.10
 | 
				
			||||||
 | 
					MEM=0.10G
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Standard Server
 | 
				
			||||||
 | 
					#CPU=0.50
 | 
				
			||||||
 | 
					#MEM=0.50G
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					## Test Results
 | 
				
			||||||
 | 
					# 0.02 CPU, 32MB RAM
 | 
				
			||||||
 | 
					# : Minimum requirements for processes to start properly.
 | 
				
			||||||
 | 
					# : Works pretty well! Takes a little to migrate, otherwise snappy!
 | 
				
			||||||
 | 
					# - Migrate https://github.com/hyperling/ansible
 | 
				
			||||||
 | 
					#   - Page: 20684ms Template: 3001ms, Page: 16503ms Template: 492ms
 | 
				
			||||||
 | 
					# - Migrate https://github.com/hyperling/website
 | 
				
			||||||
 | 
					#   - Page: 12495ms Template: 800ms
 | 
				
			||||||
 | 
					# - Migrate https://github.com/hyperling/docker
 | 
				
			||||||
 | 
					#   - Page: 9591ms  Template: 591ms
 | 
				
			||||||
 | 
					# 0.05 CPU, 64MB RAM
 | 
				
			||||||
 | 
					# : Seamless performance.
 | 
				
			||||||
 | 
					# - Migrate https://github.com/hyperling/ansible
 | 
				
			||||||
 | 
					#   - Page: 4602ms Template: 2ms
 | 
				
			||||||
 | 
					# - Migrate https://github.com/hyperling/website
 | 
				
			||||||
 | 
					#   - Page: 3269ms Template: 1ms
 | 
				
			||||||
 | 
					# - Migrate https://github.com/hyperling/docker
 | 
				
			||||||
 | 
					#   - Page: 2481ms Template: 1ms
 | 
				
			||||||
 | 
					# 0.25 CPU, 192MB RAM
 | 
				
			||||||
 | 
					# : Extra! Idles at 50M, will probably never use all this for 1 user.
 | 
				
			||||||
 | 
					# - Migrate https://github.com/hyperling/ansible
 | 
				
			||||||
 | 
					#   - Page: 575ms Template: 2ms
 | 
				
			||||||
 | 
					# - Migrate https://github.com/hyperling/website
 | 
				
			||||||
 | 
					#   - Page: 131ms Template: 4ms
 | 
				
			||||||
 | 
					# - Migrate https://github.com/hyperling/docker
 | 
				
			||||||
 | 
					#   - Page: 350ms Template: 1ms
 | 
				
			||||||
 | 
					# 0.50 CPU, 96MB RAM
 | 
				
			||||||
 | 
					# : Final thoughts after tests.
 | 
				
			||||||
 | 
					##
 | 
				
			||||||
							
								
								
									
										35
									
								
								Config/HugoExample/Dockerfile
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										35
									
								
								Config/HugoExample/Dockerfile
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,35 @@
 | 
				
			|||||||
 | 
					# 2025-08-13 Hyperling
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					## Image ##
 | 
				
			||||||
 | 
					FROM debian:trixie-slim
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					## Setup ##
 | 
				
			||||||
 | 
					# System Dependencies
 | 
				
			||||||
 | 
					RUN apt-get update && apt-get install -y git hugo nginx cron curl bash sudo htop
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# User and Group
 | 
				
			||||||
 | 
					#RUN groupadd -r hugo && useradd -r -g hugo hugo
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Hugo Directory Tree
 | 
				
			||||||
 | 
					RUN mkdir -pv /var/www/hugo/
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# NGINX Directory Tree
 | 
				
			||||||
 | 
					RUN mkdir -pv /var/www/html/
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Copy Cron Job to Update Git Repo
 | 
				
			||||||
 | 
					COPY files/crontab /etc/crontab
 | 
				
			||||||
 | 
					COPY files/cronjob.sh /var/www/hugo/cronjob.sh
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Hugo User Permissions
 | 
				
			||||||
 | 
					RUN chown -Rv www-data:www-data /var/www/
 | 
				
			||||||
 | 
					RUN chmod +x /var/www/hugo/cronjob.sh
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Copy Start Script
 | 
				
			||||||
 | 
					COPY files/main.sh /root/main.sh
 | 
				
			||||||
 | 
					RUN chmod +x /root/main.sh
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					## Main ##
 | 
				
			||||||
 | 
					# Install + Run Website
 | 
				
			||||||
 | 
					WORKDIR /var/www/
 | 
				
			||||||
 | 
					USER root
 | 
				
			||||||
 | 
					CMD /root/main.sh "$REPO" "$BRANCH" "$PROD" "$DEV"
 | 
				
			||||||
							
								
								
									
										30
									
								
								Config/HugoExample/docker-compose.example.yml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										30
									
								
								Config/HugoExample/docker-compose.example.yml
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,30 @@
 | 
				
			|||||||
 | 
					# 2025-08-13
 | 
				
			||||||
 | 
					# Configuration for running a Hugo website pulled from Git.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					services:
 | 
				
			||||||
 | 
					  app:
 | 
				
			||||||
 | 
					    container_name: hugo
 | 
				
			||||||
 | 
					    build:
 | 
				
			||||||
 | 
					      context: ./
 | 
				
			||||||
 | 
					      network: host
 | 
				
			||||||
 | 
					    restart: always
 | 
				
			||||||
 | 
					    ports:
 | 
				
			||||||
 | 
					      - 8013:80   # Production minified files served using NGINX.
 | 
				
			||||||
 | 
					      - 1380:1380 # Development files with drafts served by Hugo Server.
 | 
				
			||||||
 | 
					    environment:
 | 
				
			||||||
 | 
					      - REPO=$REPO
 | 
				
			||||||
 | 
					      - BRANCH=$BRANCH
 | 
				
			||||||
 | 
					      - PROD=$PROD
 | 
				
			||||||
 | 
					      - DEV=$DEV
 | 
				
			||||||
 | 
					    healthcheck:
 | 
				
			||||||
 | 
					      test: curl -sS http://localhost:80 || curl -sS http://localhost:1380 || exit 1
 | 
				
			||||||
 | 
					      interval: 1m
 | 
				
			||||||
 | 
					      timeout: 10s
 | 
				
			||||||
 | 
					      retries: 2
 | 
				
			||||||
 | 
					      start_period: 30s
 | 
				
			||||||
 | 
					    deploy:
 | 
				
			||||||
 | 
					      mode: global
 | 
				
			||||||
 | 
					      resources:
 | 
				
			||||||
 | 
					        limits:
 | 
				
			||||||
 | 
					          cpus: $CPU
 | 
				
			||||||
 | 
					          memory: $MEM
 | 
				
			||||||
							
								
								
									
										28
									
								
								Config/HugoExample/example.env
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										28
									
								
								Config/HugoExample/example.env
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,28 @@
 | 
				
			|||||||
 | 
					# 2025-08-13 Hyperling
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#
 | 
				
			||||||
 | 
					## Docker ##
 | 
				
			||||||
 | 
					#
 | 
				
			||||||
 | 
					COMPOSE_BAKE=true
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#
 | 
				
			||||||
 | 
					## Git Website Repository ##
 | 
				
			||||||
 | 
					#
 | 
				
			||||||
 | 
					REPO=https://git.hyperling.com/me/hugo-jackanope
 | 
				
			||||||
 | 
					BRANCH=prod
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#
 | 
				
			||||||
 | 
					## Web Environments ##
 | 
				
			||||||
 | 
					# Please use values YES/TRUE and NO/FALSE.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Whether to start NGINX
 | 
				
			||||||
 | 
					PROD=YES
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Whether to start Hugo Server
 | 
				
			||||||
 | 
					DEV=NO
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#
 | 
				
			||||||
 | 
					## Resources ##
 | 
				
			||||||
 | 
					#
 | 
				
			||||||
 | 
					CPU=0.10
 | 
				
			||||||
 | 
					MEM=0.10G
 | 
				
			||||||
							
								
								
									
										26
									
								
								Config/HugoExample/files/cronjob.sh
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										26
									
								
								Config/HugoExample/files/cronjob.sh
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,26 @@
 | 
				
			|||||||
 | 
					#!/usr/bin/env bash
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					cd /var/www/hugo/site
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					echo "*** Running cronjob @ `date` ***"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Pull any updates, and if the project is already up to date, exit successfully.
 | 
				
			||||||
 | 
					git pull | grep -v "up to date"
 | 
				
			||||||
 | 
					status="$?"
 | 
				
			||||||
 | 
					echo "* Pull status is '$status'."
 | 
				
			||||||
 | 
					if [[ $status != 0 && -e /var/www/html/index.html ]]; then
 | 
				
			||||||
 | 
						echo "* Site is already up to date and copied, exiting."
 | 
				
			||||||
 | 
						exit 0
 | 
				
			||||||
 | 
					fi
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# If the project was not already up to date, build the new files for NGINX.
 | 
				
			||||||
 | 
					hugo --gc --minify
 | 
				
			||||||
 | 
					status="$?"
 | 
				
			||||||
 | 
					echo "* Hugo status is '$status'."
 | 
				
			||||||
 | 
					if [[ $status == 0 && -e public/index.html ]]; then
 | 
				
			||||||
 | 
						echo "* Copying files..."
 | 
				
			||||||
 | 
						rm -rfv /var/www/html/*
 | 
				
			||||||
 | 
						mv -v public/* /var/www/html/
 | 
				
			||||||
 | 
					fi
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					exit 0
 | 
				
			||||||
							
								
								
									
										1
									
								
								Config/HugoExample/files/crontab
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										1
									
								
								Config/HugoExample/files/crontab
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1 @@
 | 
				
			|||||||
 | 
					* * * * * www-data /var/www/hugo/cronjob.sh
 | 
				
			||||||
							
								
								
									
										92
									
								
								Config/HugoExample/files/main.sh
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										92
									
								
								Config/HugoExample/files/main.sh
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,92 @@
 | 
				
			|||||||
 | 
					#!/usr/bin/env bash
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					REPO="$1"
 | 
				
			||||||
 | 
					echo "REPO='$REPO'"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					BRANCH="$2"
 | 
				
			||||||
 | 
					if [[ -n $BRANCH ]]; then
 | 
				
			||||||
 | 
						BRANCH="--branch $BRANCH"
 | 
				
			||||||
 | 
					fi
 | 
				
			||||||
 | 
					echo "BRANCH='$BRANCH'"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					PROD="$3"
 | 
				
			||||||
 | 
					typeset -u PROD
 | 
				
			||||||
 | 
					echo "PROD='$PROD'"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					DEV="$4"
 | 
				
			||||||
 | 
					typeset -u DEV
 | 
				
			||||||
 | 
					echo "DEV='$DEV'"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					SITE="/var/www/hugo/site"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					echo "*** Creating Git Repo ***"
 | 
				
			||||||
 | 
					if [[ -d $SITE ]]; then
 | 
				
			||||||
 | 
						rm -rfv $SITE
 | 
				
			||||||
 | 
					fi
 | 
				
			||||||
 | 
					sudo -u www-data git clone --recurse-submodules $BRANCH $REPO $SITE
 | 
				
			||||||
 | 
					status="$?"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					echo "*** Validating Git Repo ***"
 | 
				
			||||||
 | 
					if [[ $status != 0 || ! -d $SITE/.git ]]; then
 | 
				
			||||||
 | 
						echo "ERROR: Hugo project may not have cloned correctly. status='$status'"
 | 
				
			||||||
 | 
						echo "Aborting."
 | 
				
			||||||
 | 
						exit 1
 | 
				
			||||||
 | 
					fi
 | 
				
			||||||
 | 
					echo "* Site exists!"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					echo "*** Copying Static Files to NGINX ***"
 | 
				
			||||||
 | 
					rm -rfv /var/www/html/*
 | 
				
			||||||
 | 
					sudo -u www-data /var/www/hugo/cronjob.sh
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					echo "*** Starting Cron ***"
 | 
				
			||||||
 | 
					service cron start
 | 
				
			||||||
 | 
					service cron status
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					if [[ "$PROD" == "Y"* || "$PROD" == "T"*  ]]; then
 | 
				
			||||||
 | 
						echo "*** Starting Production Server Loop ***"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						while true; do
 | 
				
			||||||
 | 
							http_code="`curl -sS http://localhost:80 -o /dev/null -w "%{http_code}"`"
 | 
				
			||||||
 | 
							if [[ $http_code != 200 ]]; then
 | 
				
			||||||
 | 
								echo "* Prod server not detected, starting..."
 | 
				
			||||||
 | 
								service nginx status
 | 
				
			||||||
 | 
								service nginx start
 | 
				
			||||||
 | 
								service nginx status
 | 
				
			||||||
 | 
							fi
 | 
				
			||||||
 | 
							sleep 15
 | 
				
			||||||
 | 
						done &
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						cd /var/log/nginx
 | 
				
			||||||
 | 
						tail -f access.log error.log &
 | 
				
			||||||
 | 
					fi
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					if [[ "$DEV" == "Y"* || "$DEV" == "T"* ]]; then
 | 
				
			||||||
 | 
						echo "*** Starting Development Server Loop ***"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						while true; do
 | 
				
			||||||
 | 
							http_code="`curl -sS http://localhost:1380 -o /dev/null -w "%{http_code}"`"
 | 
				
			||||||
 | 
							if [[ $http_code != 200 ]]; then
 | 
				
			||||||
 | 
								echo "* Dev server not detected, starting..."
 | 
				
			||||||
 | 
								cd $SITE
 | 
				
			||||||
 | 
								killall hugo 2>/dev/null
 | 
				
			||||||
 | 
								sudo -u www-data hugo server -D --noBuildLock --bind 0.0.0.0 -p 1380 &
 | 
				
			||||||
 | 
							fi
 | 
				
			||||||
 | 
							sleep 30
 | 
				
			||||||
 | 
						done &
 | 
				
			||||||
 | 
					fi
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					echo "*** Following Mail Files ***"
 | 
				
			||||||
 | 
					cd /var/mail
 | 
				
			||||||
 | 
					touch mail www-data
 | 
				
			||||||
 | 
					chown -v mail:mail mail
 | 
				
			||||||
 | 
					chown -v www-data:mail www-data
 | 
				
			||||||
 | 
					chmod -v 660 mail www-data
 | 
				
			||||||
 | 
					tail -f mail www-data &
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					cd
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					echo "*** Finished $0 @ `date` ***"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					wait -n
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					exit $?
 | 
				
			||||||
@@ -6,20 +6,28 @@
 | 
				
			|||||||
FROM node:lts-slim
 | 
					FROM node:lts-slim
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# Cache System Dependencies
 | 
					# Cache System Dependencies
 | 
				
			||||||
RUN apt-get update && apt-get install -y git php-cli
 | 
					RUN apt-get update && apt-get install -y git php-cli sudo curl procps
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# Cache Node Dependencies
 | 
					# Cache Node Dependencies
 | 
				
			||||||
RUN mkdir -p /var/www/api
 | 
					RUN mkdir -p /var/www/api
 | 
				
			||||||
WORKDIR /var/www/api
 | 
					WORKDIR /var/www/api
 | 
				
			||||||
RUN echo '{ "dependencies": { "express": "" } }' > package.json
 | 
					RUN echo '{ "dependencies": { "express": ">=4.18.1 < 5.0.0" } }' > package.json
 | 
				
			||||||
RUN npm install
 | 
					RUN npm install
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# Install + Run Website
 | 
					# Install + Run Website
 | 
				
			||||||
CMD cd /var/www/api && \
 | 
					CMD cd /var/www/api && \
 | 
				
			||||||
    rm -rfv pages main.js run.sh && \
 | 
					    echo "Dockerfile: Ensure symlink is properly deleted if it exists..." && \
 | 
				
			||||||
    git clone https://git.hyperling.com/me/nodejs-website website && \
 | 
					    ls -l website/files; rm -v website/files; sleep 0 && \
 | 
				
			||||||
    rm -rfv website/files && \
 | 
					    echo "Dockerfile: Clone the website's Git repo..." && \
 | 
				
			||||||
    mv -v website/* ./ && \
 | 
					 | 
				
			||||||
    rm -rfv website && \
 | 
					    rm -rfv website && \
 | 
				
			||||||
    echo "Starting Website" && \
 | 
					    git clone https://git.hyperling.com/me/nodejs-website $BRANCH website && \
 | 
				
			||||||
 | 
					    echo "Dockerfile: Remove dummy files and replace with symlink..." && \
 | 
				
			||||||
 | 
					    rm -rfv website/files && \
 | 
				
			||||||
 | 
					    cd website && \
 | 
				
			||||||
 | 
					    echo -n "Dockerfile: Using branch " && \
 | 
				
			||||||
 | 
					    git branch && \
 | 
				
			||||||
 | 
					    ln -sv ../files ./files && \
 | 
				
			||||||
 | 
					    echo "Dockerfile: Allow files under files/ to be ignored by Git..." && \
 | 
				
			||||||
 | 
					    find ./files -exec git update-index --assume-unchanged {} \; && \
 | 
				
			||||||
 | 
					    echo "Dockerfile: Start website!" && \
 | 
				
			||||||
    ./run.sh
 | 
					    ./run.sh
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -10,11 +10,13 @@ services:
 | 
				
			|||||||
    restart: always
 | 
					    restart: always
 | 
				
			||||||
    ports:
 | 
					    ports:
 | 
				
			||||||
      - 8317:8080
 | 
					      - 8317:8080
 | 
				
			||||||
 | 
					    environment:
 | 
				
			||||||
 | 
					      - BRANCH=$BRANCH
 | 
				
			||||||
    volumes:
 | 
					    volumes:
 | 
				
			||||||
      - ./files:/var/www/api/files
 | 
					      - ./files:/var/www/api/files
 | 
				
			||||||
    deploy:
 | 
					    deploy:
 | 
				
			||||||
      mode: global
 | 
					      mode: global
 | 
				
			||||||
      resources:
 | 
					      resources:
 | 
				
			||||||
        limits:
 | 
					        limits:
 | 
				
			||||||
          cpus: '0.25'
 | 
					          cpus: $CPU
 | 
				
			||||||
          memory: 256M
 | 
					          memory: $MEM
 | 
				
			||||||
@@ -1,21 +0,0 @@
 | 
				
			|||||||
# 2022-10-29
 | 
					 | 
				
			||||||
# Hyperling.com configuration.
 | 
					 | 
				
			||||||
# 2023-01-24 container needs 128M to get started fully then settles to 25M.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
services:
 | 
					 | 
				
			||||||
  app:
 | 
					 | 
				
			||||||
    container_name: www-app
 | 
					 | 
				
			||||||
    build:
 | 
					 | 
				
			||||||
      context: ./
 | 
					 | 
				
			||||||
      network: host
 | 
					 | 
				
			||||||
    restart: always
 | 
					 | 
				
			||||||
    ports:
 | 
					 | 
				
			||||||
      - 8317:8080
 | 
					 | 
				
			||||||
    volumes:
 | 
					 | 
				
			||||||
      - ./files:/var/www/api/files
 | 
					 | 
				
			||||||
    deploy:
 | 
					 | 
				
			||||||
      mode: global
 | 
					 | 
				
			||||||
      resources:
 | 
					 | 
				
			||||||
        limits:
 | 
					 | 
				
			||||||
          cpus: '0.10'
 | 
					 | 
				
			||||||
          memory: 128M
 | 
					 | 
				
			||||||
							
								
								
									
										24
									
								
								Config/Hyperling.com/example.env
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										24
									
								
								Config/Hyperling.com/example.env
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,24 @@
 | 
				
			|||||||
 | 
					# This file will need renamed '.env' and have any private values modified.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					## 2025-06-16
 | 
				
			||||||
 | 
					## Performance Notes for Enabling BAKE
 | 
				
			||||||
 | 
					# Compose by itself takes about 35s to build this project.
 | 
				
			||||||
 | 
					# Enabling this setting first cause the build to take 80s.
 | 
				
			||||||
 | 
					# Subsequent builds consistently take less than 2 seconds.
 | 
				
			||||||
 | 
					# Testing was done on the micro server, not a workstation.
 | 
				
			||||||
 | 
					COMPOSE_BAKE=true
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					## Branch ##
 | 
				
			||||||
 | 
					# Allow choosing the branch. By leaving it blank, the main branch will be used.
 | 
				
			||||||
 | 
					# Needs to be in the full "--branch my-branch" syntax.
 | 
				
			||||||
 | 
					BRANCH=
 | 
				
			||||||
 | 
					#BRANCH="--branch dev"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					## Performance ##
 | 
				
			||||||
 | 
					# Standard Server
 | 
				
			||||||
 | 
					CPU=0.25
 | 
				
			||||||
 | 
					MEM=0.25G
 | 
				
			||||||
 | 
					# Micro Server
 | 
				
			||||||
 | 
					# 2023-01-24 container needs 128M to get started fully then settles to 25M.
 | 
				
			||||||
 | 
					#CPU=0.10
 | 
				
			||||||
 | 
					#MEM=128M
 | 
				
			||||||
							
								
								
									
										3
									
								
								Config/LibreTranslate/Dockerfile
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										3
									
								
								Config/LibreTranslate/Dockerfile
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,3 @@
 | 
				
			|||||||
 | 
					# Install and run LibreTranslate
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					FROM libretranslate/libretranslate:latest
 | 
				
			||||||
							
								
								
									
										31
									
								
								Config/LibreTranslate/README.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										31
									
								
								Config/LibreTranslate/README.md
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,31 @@
 | 
				
			|||||||
 | 
					# LibreTranslate Configuration
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					## Install
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					1. Copy `env.example` to `.env` and adjust the values as necessary.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					```
 | 
				
			||||||
 | 
					cd $DOCKER_HOME/Config/LibreTranslate
 | 
				
			||||||
 | 
					cp env.example .env
 | 
				
			||||||
 | 
					vi .env
 | 
				
			||||||
 | 
					```
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					2. Run the `prep.sh` file to create the volume mounts.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					```
 | 
				
			||||||
 | 
					./prep.sh
 | 
				
			||||||
 | 
					```
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					3. If using a temporary location for `models/` such as `/tmp/`, ensure
 | 
				
			||||||
 | 
					that the reboot script is in `root`'s crontab to set the folders back up.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					```
 | 
				
			||||||
 | 
					@reboot /opt/Docker/Config/LibreTranslate/cron-reboot.sh
 | 
				
			||||||
 | 
					```
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					4. Start the container up as normal.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					```
 | 
				
			||||||
 | 
					cp docker-compose.main.yml docker-compose.yml
 | 
				
			||||||
 | 
					docker compose up -d
 | 
				
			||||||
 | 
					```
 | 
				
			||||||
							
								
								
									
										23
									
								
								Config/LibreTranslate/cron-reboot.sh
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										23
									
								
								Config/LibreTranslate/cron-reboot.sh
									
									
									
									
									
										Executable file
									
								
							@@ -0,0 +1,23 @@
 | 
				
			|||||||
 | 
					#!/usr/bin/env bash
 | 
				
			||||||
 | 
					# 2025-07-26 Hyperling
 | 
				
			||||||
 | 
					# Ensure the LibreTranslate container starts correctly after a reboot, especially if placing models/ under /tmp/.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					## Setup ##
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					DIR="$(dirname -- "${BASH_SOURCE[0]}")"
 | 
				
			||||||
 | 
					cd $DIR
 | 
				
			||||||
 | 
					source ./.env
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					## Main ##
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Shutdown the container.
 | 
				
			||||||
 | 
					docker compose down
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Create folders.
 | 
				
			||||||
 | 
					./prep.sh
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Start the container.
 | 
				
			||||||
 | 
					docker compose up -d
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Finish successfully.
 | 
				
			||||||
 | 
					exit 0
 | 
				
			||||||
							
								
								
									
										55
									
								
								Config/LibreTranslate/docker-compose.example.yml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										55
									
								
								Config/LibreTranslate/docker-compose.example.yml
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,55 @@
 | 
				
			|||||||
 | 
					# LibreTranslate configuration.
 | 
				
			||||||
 | 
					# Example docker-compose.yml:
 | 
				
			||||||
 | 
					#   https://github.com/LibreTranslate/LibreTranslate/blob/main/docker-compose.yml
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Named volumes ensure that the container user gets the correct permissions.
 | 
				
			||||||
 | 
					volumes:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  libretranslate_api_keys:
 | 
				
			||||||
 | 
					    driver: local
 | 
				
			||||||
 | 
					    driver_opts:
 | 
				
			||||||
 | 
					      type: none
 | 
				
			||||||
 | 
					      device: $API_KEYS_DIR
 | 
				
			||||||
 | 
					      o: bind
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  libretranslate_models:
 | 
				
			||||||
 | 
					    driver: local
 | 
				
			||||||
 | 
					    driver_opts:
 | 
				
			||||||
 | 
					      type: none
 | 
				
			||||||
 | 
					      device: $MODELS_DIR
 | 
				
			||||||
 | 
					      o: bind
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					services:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  ## Main ##
 | 
				
			||||||
 | 
					  lt-app:
 | 
				
			||||||
 | 
					    container_name: lt-app
 | 
				
			||||||
 | 
					    build:
 | 
				
			||||||
 | 
					      context: ./
 | 
				
			||||||
 | 
					      network: host
 | 
				
			||||||
 | 
					    restart: always
 | 
				
			||||||
 | 
					    ports:
 | 
				
			||||||
 | 
					      - "5000:5000"
 | 
				
			||||||
 | 
					    # Uncomment this for logging in docker compose logs
 | 
				
			||||||
 | 
					    tty: true
 | 
				
			||||||
 | 
					    healthcheck:
 | 
				
			||||||
 | 
					      test: ['CMD-SHELL', './venv/bin/python scripts/healthcheck.py']
 | 
				
			||||||
 | 
					    command: --req-limit $REQUESTS --char-limit $CHARACTERS
 | 
				
			||||||
 | 
					    environment:
 | 
				
			||||||
 | 
					      # Allow the saving of API Keys. Requires volume libretranslate_api_keys.
 | 
				
			||||||
 | 
					      - LT_API_KEYS=true
 | 
				
			||||||
 | 
					      - LT_API_KEYS_DB_PATH=/app/db/api_keys.db
 | 
				
			||||||
 | 
					      # Optimize loading time. Requires volume libretranslate_models.
 | 
				
			||||||
 | 
					      - LT_UPDATE_MODELS=$UPDATE_MODELS
 | 
				
			||||||
 | 
					      - $LANGUAGES
 | 
				
			||||||
 | 
					    volumes:
 | 
				
			||||||
 | 
					      # Store the API keys.
 | 
				
			||||||
 | 
					      - libretranslate_api_keys:/app/db
 | 
				
			||||||
 | 
					      # Avoid re-downloading language models every reboot.
 | 
				
			||||||
 | 
					      - libretranslate_models:/home/libretranslate/.local:rw
 | 
				
			||||||
 | 
					    deploy:
 | 
				
			||||||
 | 
					      mode: global
 | 
				
			||||||
 | 
					      resources:
 | 
				
			||||||
 | 
					        limits:
 | 
				
			||||||
 | 
					          cpus: $CPU
 | 
				
			||||||
 | 
					          memory: $RAM
 | 
				
			||||||
							
								
								
									
										53
									
								
								Config/LibreTranslate/example.env
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										53
									
								
								Config/LibreTranslate/example.env
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,53 @@
 | 
				
			|||||||
 | 
					# This file will need renamed '.env' and have any private values modified.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					COMPOSE_BAKE=true
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					### Container Specs ###
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					## For a small-scale server (such as 1 CPU, 1GB RAM).
 | 
				
			||||||
 | 
					# CPU=0.25
 | 
				
			||||||
 | 
					# RAM=640M
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					## For a fully capable server.
 | 
				
			||||||
 | 
					CPU=2.00
 | 
				
			||||||
 | 
					RAM=4.0G
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# How much the users are able to utilize the server.
 | 
				
			||||||
 | 
					REQUESTS=100
 | 
				
			||||||
 | 
					CHARACTERS=2000
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					### Languages ###
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					## Check for language model updates on each run.
 | 
				
			||||||
 | 
					UPDATE_MODELS=true
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					## Use default behavior of downloading all models.
 | 
				
			||||||
 | 
					# LANGUAGES=ALL
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					## Otherwise set to a comma-separated list to enable only the desired models.
 | 
				
			||||||
 | 
					LANGUAGES='LT_LOAD_ONLY=en,es,fr,de'
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					### API Keys ###
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					API_KEYS=true
 | 
				
			||||||
 | 
					API_KEYS_DB_PATH=/app/db/api_keys.db
 | 
				
			||||||
 | 
					API_KEYS_DIR=../../Volumes/LibreTranslate/api_keys
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					### Models ###
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					## Storing models prevents them from needing downloaded each run.
 | 
				
			||||||
 | 
					## Placing them under Volumes means they will increase backup sizes.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					MODELS_DIR=../../Volumes/LibreTranslate/models
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					## Not providing any location puts them in the default Docker /var/ location.
 | 
				
			||||||
 | 
					# MODELS_DIR=
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					## Storing them in /tmp/ will cause them to get reset after reboots, but hides
 | 
				
			||||||
 | 
					## them from backup type locations such as Volumes/LibreTranslate/ and /var/.
 | 
				
			||||||
 | 
					## Please see the README for the CRON command related to this setting.
 | 
				
			||||||
 | 
					# MODELS_DIR=/tmp/LibreTranslate/models
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					## Can also place them under /opt/ which may be recommended by FHS standards.
 | 
				
			||||||
 | 
					## This keeps them from taking up precious RAM / swap if using tmpfs or similar.
 | 
				
			||||||
 | 
					# MODELS_DIR=/opt/LibreTranslate/models
 | 
				
			||||||
							
								
								
									
										25
									
								
								Config/LibreTranslate/prep.sh
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										25
									
								
								Config/LibreTranslate/prep.sh
									
									
									
									
									
										Executable file
									
								
							@@ -0,0 +1,25 @@
 | 
				
			|||||||
 | 
					#!/usr/bin/env bash
 | 
				
			||||||
 | 
					# 2025-07-22 Hyperling
 | 
				
			||||||
 | 
					# Create the necessary folders for LibreTranslate's volumes to work.
 | 
				
			||||||
 | 
					# This must be run before the container will start properly.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					## Setup ##
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					DIR="$(dirname -- "${BASH_SOURCE[0]}")"
 | 
				
			||||||
 | 
					source $DIR/.env
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					## Main ##
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Create folders.
 | 
				
			||||||
 | 
					if [[ $API_KEYS_DIR == "../*" ]]; then
 | 
				
			||||||
 | 
						API_KEYS_DIR="$DIR/$API_KEYS_DIR"
 | 
				
			||||||
 | 
					fi
 | 
				
			||||||
 | 
					mkdir -pv $API_KEYS_DIR
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					if [[ $MODELS_DIR == "../*" ]]; then
 | 
				
			||||||
 | 
						MODELS_DIR="$DIR/$MODELS_DIR"
 | 
				
			||||||
 | 
					fi
 | 
				
			||||||
 | 
					mkdir -pv $MODELS_DIR
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Finish successfully.
 | 
				
			||||||
 | 
					exit 0
 | 
				
			||||||
							
								
								
									
										11
									
								
								Config/Nextcloud/Dockerfile
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										11
									
								
								Config/Nextcloud/Dockerfile
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,11 @@
 | 
				
			|||||||
 | 
					# 2025-06-16 Hyperling
 | 
				
			||||||
 | 
					# Tired of running fixes.sh to install extra packages. Bake them in!
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					FROM nextcloud:stable
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Cache System Dependencies
 | 
				
			||||||
 | 
					RUN apt-get update && apt-get install -y sudo libmagickcore-7.q16-10-extra htop \
 | 
				
			||||||
 | 
					    iputils-ping dnsutils vim bzip2 libbz2-dev
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Configure PHP Dependency
 | 
				
			||||||
 | 
					RUN docker-php-ext-install bz2
 | 
				
			||||||
@@ -1,7 +1,7 @@
 | 
				
			|||||||
#!/bin/bash
 | 
					#!/bin/bash
 | 
				
			||||||
# 2023-08-25 Hyperling
 | 
					# 2023-08-25 Hyperling
 | 
				
			||||||
# Put the cron command in a script as well as other automation.
 | 
					# Put the cron command in a script as well as other automation.
 | 
				
			||||||
# This should be added to root's crontab with the full path, such as:
 | 
					# This will need added to root's crontab with the full path, such as:
 | 
				
			||||||
#   */5 * * * * /opt/Docker/Config/Nextcloud/cron.ksh
 | 
					#   */5 * * * * /opt/Docker/Config/Nextcloud/cron.ksh
 | 
				
			||||||
 | 
					
 | 
				
			||||||
DIR="$(dirname -- "${BASH_SOURCE[0]}")"
 | 
					DIR="$(dirname -- "${BASH_SOURCE[0]}")"
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -72,7 +72,8 @@ services:
 | 
				
			|||||||
  ## Nextcloud ##
 | 
					  ## Nextcloud ##
 | 
				
			||||||
  nc-app:
 | 
					  nc-app:
 | 
				
			||||||
    container_name: nc-app
 | 
					    container_name: nc-app
 | 
				
			||||||
    image: nextcloud:stable
 | 
					    build:
 | 
				
			||||||
 | 
					      context: ./
 | 
				
			||||||
    restart: always
 | 
					    restart: always
 | 
				
			||||||
    ports:
 | 
					    ports:
 | 
				
			||||||
      - 8080:80
 | 
					      - 8080:80
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -73,7 +73,8 @@ services:
 | 
				
			|||||||
  ## Nextcloud ##
 | 
					  ## Nextcloud ##
 | 
				
			||||||
  nc-app:
 | 
					  nc-app:
 | 
				
			||||||
    container_name: nc-app
 | 
					    container_name: nc-app
 | 
				
			||||||
    image: nextcloud:stable
 | 
					    build:
 | 
				
			||||||
 | 
					      context: ./
 | 
				
			||||||
    restart: always
 | 
					    restart: always
 | 
				
			||||||
    ports:
 | 
					    ports:
 | 
				
			||||||
      - 8080:80
 | 
					      - 8080:80
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,5 +1,6 @@
 | 
				
			|||||||
# Example environment file for Nextcloud stack, should be copied as `.env`. The
 | 
					# Example environment file for Nextcloud stack, needs copied as `.env`.
 | 
				
			||||||
#   variables here only apply to the compose file. If you need it passed to a
 | 
					
 | 
				
			||||||
 | 
					# The variables here only apply to the compose file. If you need it passed to a
 | 
				
			||||||
#   container then it also needs specified in its `environment:` operator.
 | 
					#   container then it also needs specified in its `environment:` operator.
 | 
				
			||||||
#
 | 
					#
 | 
				
			||||||
# ** All usernames and passwords need changed before running in production! **
 | 
					# ** All usernames and passwords need changed before running in production! **
 | 
				
			||||||
@@ -7,6 +8,17 @@
 | 
				
			|||||||
# Full guide on the Nextcloud parameters which may be supplied:
 | 
					# Full guide on the Nextcloud parameters which may be supplied:
 | 
				
			||||||
#   https://github.com/docker-library/docs/blob/master/nextcloud/README.md#auto-configuration-via-environment-variables
 | 
					#   https://github.com/docker-library/docs/blob/master/nextcloud/README.md#auto-configuration-via-environment-variables
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#
 | 
				
			||||||
 | 
					## Docker ##
 | 
				
			||||||
 | 
					#
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# 20250616 - Performance testing was done on an old workstation.
 | 
				
			||||||
 | 
					#   Only Compose: 3.8, 2.5, 1.8, 1.8, 2.1, 2.0, 1.7 seconds
 | 
				
			||||||
 | 
					#   Compose Bake: 3.7, 0.9, 2.3, 2.0, 3.1, 2.1, 1.8 seconds
 | 
				
			||||||
 | 
					# Not really needed but also not harmful and will eliminate the warning.
 | 
				
			||||||
 | 
					# Timings do not include the initial pull for either method.
 | 
				
			||||||
 | 
					COMPOSE_BAKE=true
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#
 | 
					#
 | 
				
			||||||
## Nextcloud ##
 | 
					## Nextcloud ##
 | 
				
			||||||
#
 | 
					#
 | 
				
			||||||
@@ -20,7 +32,7 @@ PHP_UPLOAD_LIMIT=32M
 | 
				
			|||||||
#
 | 
					#
 | 
				
			||||||
## MariaDB ##
 | 
					## MariaDB ##
 | 
				
			||||||
#
 | 
					#
 | 
				
			||||||
# Should load automatically the first run. Then config.php is the source of
 | 
					# Will load automatically the first run. Then config.php is the source of
 | 
				
			||||||
#   truth for these values. So, if something like the DB password is changed,
 | 
					#   truth for these values. So, if something like the DB password is changed,
 | 
				
			||||||
#   updating it here will have no effect. This is only used for the install.
 | 
					#   updating it here will have no effect. This is only used for the install.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -41,7 +53,7 @@ REDIS_HOST_PASSWORD=someredispassword
 | 
				
			|||||||
###
 | 
					###
 | 
				
			||||||
#### OnlyOffice ##
 | 
					#### OnlyOffice ##
 | 
				
			||||||
###
 | 
					###
 | 
				
			||||||
### How Nextcloud's ONLYOFFICE Admin Settings should be set up:
 | 
					### How Nextcloud's ONLYOFFICE Admin Settings needs set up:
 | 
				
			||||||
###   OO Address: https://FQDN-For-Reverse-Proxied-OO-Server
 | 
					###   OO Address: https://FQDN-For-Reverse-Proxied-OO-Server
 | 
				
			||||||
###   OO Secret: Contents-Of-$JWT_SECRET
 | 
					###   OO Secret: Contents-Of-$JWT_SECRET
 | 
				
			||||||
###   OO Header:
 | 
					###   OO Header:
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,5 +1,6 @@
 | 
				
			|||||||
# Example environment file for Nextcloud stack, should be copied as `.env`. The
 | 
					# Example environment file for Nextcloud stack, needs copied as `.env`.
 | 
				
			||||||
#   variables here only apply to the compose file. If you need it passed to a
 | 
					
 | 
				
			||||||
 | 
					# The variables here only apply to the compose file. If you need it passed to a
 | 
				
			||||||
#   container then it also needs specified in its `environment:` operator.
 | 
					#   container then it also needs specified in its `environment:` operator.
 | 
				
			||||||
#
 | 
					#
 | 
				
			||||||
# ** All usernames and passwords need changed before running in production! **
 | 
					# ** All usernames and passwords need changed before running in production! **
 | 
				
			||||||
@@ -7,6 +8,17 @@
 | 
				
			|||||||
# Full guide on the Nextcloud parameters which may be supplied:
 | 
					# Full guide on the Nextcloud parameters which may be supplied:
 | 
				
			||||||
#   https://github.com/docker-library/docs/blob/master/nextcloud/README.md#auto-configuration-via-environment-variables
 | 
					#   https://github.com/docker-library/docs/blob/master/nextcloud/README.md#auto-configuration-via-environment-variables
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#
 | 
				
			||||||
 | 
					## Docker ##
 | 
				
			||||||
 | 
					#
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# 20250616 - Performance testing was done on an old workstation.
 | 
				
			||||||
 | 
					#   Only Compose: 3.8, 2.5, 1.8, 1.8, 2.1, 2.0, 1.7 seconds
 | 
				
			||||||
 | 
					#   Compose Bake: 3.7, 0.9, 2.3, 2.0, 3.1, 2.1, 1.8 seconds
 | 
				
			||||||
 | 
					# Not really needed but also not harmful and will eliminate the warning.
 | 
				
			||||||
 | 
					# Timings do not include the initial pull for either method.
 | 
				
			||||||
 | 
					COMPOSE_BAKE=true
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#
 | 
					#
 | 
				
			||||||
## Nextcloud ##
 | 
					## Nextcloud ##
 | 
				
			||||||
#
 | 
					#
 | 
				
			||||||
@@ -20,7 +32,7 @@ PHP_UPLOAD_LIMIT=5G
 | 
				
			|||||||
#
 | 
					#
 | 
				
			||||||
## MariaDB ##
 | 
					## MariaDB ##
 | 
				
			||||||
#
 | 
					#
 | 
				
			||||||
# Should load automatically the first run. Then config.php is the source of
 | 
					# Will load automatically the first run. Then config.php is the source of
 | 
				
			||||||
#   truth for these values. So, if something like the DB password is changed,
 | 
					#   truth for these values. So, if something like the DB password is changed,
 | 
				
			||||||
#   updating it here will have no effect. This is only used for the install.
 | 
					#   updating it here will have no effect. This is only used for the install.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -41,7 +53,7 @@ REDIS_HOST_PASSWORD=someredispassword
 | 
				
			|||||||
#
 | 
					#
 | 
				
			||||||
## OnlyOffice ##
 | 
					## OnlyOffice ##
 | 
				
			||||||
#
 | 
					#
 | 
				
			||||||
# How Nextcloud's ONLYOFFICE Admin Settings should be set up:
 | 
					# How Nextcloud's ONLYOFFICE Admin Settings needs set up:
 | 
				
			||||||
#   OO Address: https://FQDN-For-Reverse-Proxied-OO-Server
 | 
					#   OO Address: https://FQDN-For-Reverse-Proxied-OO-Server
 | 
				
			||||||
#   OO Secret: Contents-Of-$JWT_SECRET
 | 
					#   OO Secret: Contents-Of-$JWT_SECRET
 | 
				
			||||||
#   OO Header:
 | 
					#   OO Header:
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,6 +1,6 @@
 | 
				
			|||||||
#!/bin/bash
 | 
					#!/bin/bash
 | 
				
			||||||
# 2022-09-25 Hyperling
 | 
					# 2022-09-25 Hyperling
 | 
				
			||||||
# Put fixes in a file so they do not need remembered.
 | 
					# Put maintenance needs into a file so the commands do not need remembered.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
## Setup ##
 | 
					## Setup ##
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -11,19 +11,20 @@ source $DIR/../../source.env
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
## Main ##
 | 
					## Main ##
 | 
				
			||||||
 | 
					
 | 
				
			||||||
echo -e "\n*** APT ***"
 | 
					##### 20250616 - Apt and PHP commands now baked into the Dockerfile!! :D #####
 | 
				
			||||||
 | 
					###echo -e "\n*** APT ***"
 | 
				
			||||||
echo -e "\n`date` - Update Apt Cache"
 | 
					###
 | 
				
			||||||
docker exec -it nc-app apt update -y
 | 
					###echo -e "\n`date` - Update Apt Cache"
 | 
				
			||||||
 | 
					###docker exec -it nc-app apt update -y
 | 
				
			||||||
echo -e "\n`date` - Install Additional Software"
 | 
					###
 | 
				
			||||||
docker exec -it nc-app apt install -y sudo libmagickcore-6.q16-6-extra htop \
 | 
					###echo -e "\n`date` - Install Additional Software"
 | 
				
			||||||
	iputils-ping dnsutils vim bzip2 libbz2-dev # php-bz2
 | 
					###docker exec -it nc-app apt install -y sudo libmagickcore-6.q16-6-extra htop \
 | 
				
			||||||
 | 
					###	iputils-ping dnsutils vim bzip2 libbz2-dev # php-bz2
 | 
				
			||||||
# 20240130
 | 
					###
 | 
				
			||||||
# https://help.nextcloud.com/t/docker-image-setup-warning-missing-bz2-after-update-to-nc-28-0-0/176605
 | 
					#### 20240130
 | 
				
			||||||
echo -e "\n`date` - Compile PHP Modules"
 | 
					#### https://help.nextcloud.com/t/docker-image-setup-warning-missing-bz2-after-update-to-nc-28-0-0/176605
 | 
				
			||||||
docker exec -it nc-app docker-php-ext-install bz2
 | 
					###echo -e "\n`date` - Compile PHP Modules"
 | 
				
			||||||
 | 
					###docker exec -it nc-app docker-php-ext-install bz2
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# 2023-12-04 Make sure cron and chmod commands get run.
 | 
					# 2023-12-04 Make sure cron and chmod commands get run.
 | 
				
			||||||
echo -e "\n*** CRON ***"
 | 
					echo -e "\n*** CRON ***"
 | 
				
			||||||
@@ -34,12 +35,27 @@ $DOCKER_HOME/Config/Nextcloud/cron.sh && echo "Success!"
 | 
				
			|||||||
# 2022-10-30 More additions after moving to Nextcloud version 25.
 | 
					# 2022-10-30 More additions after moving to Nextcloud version 25.
 | 
				
			||||||
echo -e "\n*** DATABASE ***"
 | 
					echo -e "\n*** DATABASE ***"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					echo -e "\n`date` - Enable Maintenance Mode"
 | 
				
			||||||
 | 
					docker exec -itu www-data nc-app ./occ maintenance:mode --on
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# 20251004: Disabled since it has not been working.
 | 
				
			||||||
# Clear DB errors by allowing the DB to perform any incremental upgrades.
 | 
					# Clear DB errors by allowing the DB to perform any incremental upgrades.
 | 
				
			||||||
# https://jira.mariadb.org/browse/MDEV-26342
 | 
					# https://jira.mariadb.org/browse/MDEV-26342
 | 
				
			||||||
echo -e "\n`date` - mysql_upgrade"
 | 
					#echo -e "\n`date` - mysql_upgrade"
 | 
				
			||||||
docker exec -itu www-data nc-app ./occ maintenance:mode --on
 | 
					#time docker exec -it nc-db mysql_upgrade \
 | 
				
			||||||
time docker exec -it nc-db mysql_upgrade \
 | 
					#	-user="root" --password="$MYSQL_ROOT_PASSWORD"
 | 
				
			||||||
	-user="root" --password="$MYSQL_ROOT_PASSWORD"
 | 
					
 | 
				
			||||||
 | 
					echo -e "\n`date` - Enable Dynamic Row Formats"
 | 
				
			||||||
 | 
					docker exec -it nc-db mysql -u "$MYSQL_USER" -p"$MYSQL_PASSWORD" \
 | 
				
			||||||
 | 
					    -e "SELECT CONCAT('ALTER TABLE ', TABLE_NAME,' ROW_FORMAT=DYNAMIC; ') FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA = '$MYSQL_DATABASE' AND ENGINE = 'InnoDB' AND ROW_FORMAT != 'DYNAMIC'; " \
 | 
				
			||||||
 | 
					    -B -N |
 | 
				
			||||||
 | 
					while read -r sql; do
 | 
				
			||||||
 | 
					    echo "SQL being executed: $sql "
 | 
				
			||||||
 | 
					    docker exec nc-db mysql -u "$MYSQL_USER" -p"$MYSQL_PASSWORD" -e "$sql" "$MYSQL_DATABASE";
 | 
				
			||||||
 | 
					    echo " - Done!\ "
 | 
				
			||||||
 | 
					done
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					echo -e "\n`date` - Disable Maintenance Mode"
 | 
				
			||||||
docker exec -itu www-data nc-app ./occ maintenance:mode --off
 | 
					docker exec -itu www-data nc-app ./occ maintenance:mode --off
 | 
				
			||||||
 | 
					
 | 
				
			||||||
echo -e "\n`date` - Add Missing Columns"
 | 
					echo -e "\n`date` - Add Missing Columns"
 | 
				
			||||||
@@ -121,8 +121,8 @@ services:
 | 
				
			|||||||
      mode: global
 | 
					      mode: global
 | 
				
			||||||
      resources:
 | 
					      resources:
 | 
				
			||||||
        limits:
 | 
					        limits:
 | 
				
			||||||
          cpus: '2.00'
 | 
					          cpus: $CPU
 | 
				
			||||||
          memory: 2G
 | 
					          memory: $MEM
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  ## Database Server (recommended)
 | 
					  ## Database Server (recommended)
 | 
				
			||||||
  ## see https://docs.photoprism.app/getting-started/faq/#should-i-use-sqlite-mariadb-or-mysql
 | 
					  ## see https://docs.photoprism.app/getting-started/faq/#should-i-use-sqlite-mariadb-or-mysql
 | 
				
			||||||
@@ -152,8 +152,8 @@ services:
 | 
				
			|||||||
      mode: global
 | 
					      mode: global
 | 
				
			||||||
      resources:
 | 
					      resources:
 | 
				
			||||||
        limits:
 | 
					        limits:
 | 
				
			||||||
          cpus: '0.50'
 | 
					          cpus: $CPU_DB
 | 
				
			||||||
          memory: 512M
 | 
					          memory: $MEM_DB
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  # Configured but not using this, would prefer to update manually, and the
 | 
					  # Configured but not using this, would prefer to update manually, and the
 | 
				
			||||||
  # volume needs also seem sort of odd. Do not want it to harm other projects.
 | 
					  # volume needs also seem sort of odd. Do not want it to harm other projects.
 | 
				
			||||||
@@ -1,3 +1,10 @@
 | 
				
			|||||||
 | 
					# This file will need to be copied as `.env`.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					##
 | 
				
			||||||
 | 
					# Docker
 | 
				
			||||||
 | 
					##
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					COMPOSE_BAKE=true
 | 
				
			||||||
 | 
					
 | 
				
			||||||
##
 | 
					##
 | 
				
			||||||
# PhotoPrism
 | 
					# PhotoPrism
 | 
				
			||||||
@@ -8,7 +15,7 @@ PHOTOPRISM_ADMIN_USER = "admin"                 # admin login username
 | 
				
			|||||||
PHOTOPRISM_ADMIN_PASSWORD = "PleaseChangeMe"    # initial admin password (8-72 characters)
 | 
					PHOTOPRISM_ADMIN_PASSWORD = "PleaseChangeMe"    # initial admin password (8-72 characters)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# External FQDN
 | 
					# External FQDN
 | 
				
			||||||
#  Should be in the format "http(s)://domain.name(:port)/(path)".
 | 
					#  In the format "http(s)://domain.name(:port)/(path)".
 | 
				
			||||||
#  Seems to work best if you leave off the s if behind a revese proxy,
 | 
					#  Seems to work best if you leave off the s if behind a revese proxy,
 | 
				
			||||||
#   such as: PHOTOPRISM_SITE_URL = "http://photoprism.example.com"
 | 
					#   such as: PHOTOPRISM_SITE_URL = "http://photoprism.example.com"
 | 
				
			||||||
PHOTOPRISM_SITE_URL = "http://localhost:2342"
 | 
					PHOTOPRISM_SITE_URL = "http://localhost:2342"
 | 
				
			||||||
@@ -38,3 +45,12 @@ MARIADB_DATABASE = "photoprism"
 | 
				
			|||||||
MARIADB_USER = "photoprism"
 | 
					MARIADB_USER = "photoprism"
 | 
				
			||||||
MARIADB_PASSWORD = "PleaseChangeMe"
 | 
					MARIADB_PASSWORD = "PleaseChangeMe"
 | 
				
			||||||
MARIADB_ROOT_PASSWORD = "PleaseChangeMe"
 | 
					MARIADB_ROOT_PASSWORD = "PleaseChangeMe"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					##
 | 
				
			||||||
 | 
					# Performance
 | 
				
			||||||
 | 
					##
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					CPU=2.00
 | 
				
			||||||
 | 
					MEM=2.00G
 | 
				
			||||||
 | 
					CPU_DB=0.50
 | 
				
			||||||
 | 
					MEM_DB=0.50G
 | 
				
			||||||
							
								
								
									
										21
									
								
								Config/ProvisionTests/Dockerfiles/arch
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										21
									
								
								Config/ProvisionTests/Dockerfiles/arch
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,21 @@
 | 
				
			|||||||
 | 
					# Create a VM for testing Ansible provisioning.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					FROM archlinux:base
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					ARG PACKAGES
 | 
				
			||||||
 | 
					ENV PACKAGES="$PACKAGES"
 | 
				
			||||||
 | 
					ARG EXTRA_ARCH
 | 
				
			||||||
 | 
					ENV EXTRA_ARCH="$EXTRA_ARCH"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Arch is rolling, and therefore recommends updating the container immediately.
 | 
				
			||||||
 | 
					#  https://hub.docker.com/_/archlinux#updating
 | 
				
			||||||
 | 
					RUN pacman -Syyu --noconfirm
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					RUN pacman -Syy  --noconfirm $PACKAGES $EXTRA_ARCH
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					COPY bin/main.sh /root/main.sh
 | 
				
			||||||
 | 
					RUN chmod +x /root/main.sh
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					WORKDIR /root/
 | 
				
			||||||
 | 
					USER root
 | 
				
			||||||
 | 
					CMD ./main.sh
 | 
				
			||||||
							
								
								
									
										20
									
								
								Config/ProvisionTests/Dockerfiles/debian
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										20
									
								
								Config/ProvisionTests/Dockerfiles/debian
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,20 @@
 | 
				
			|||||||
 | 
					# Create a VM for testing Ansible provisioning.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					FROM debian:latest
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					ARG PACKAGES
 | 
				
			||||||
 | 
					ENV PACKAGES="$PACKAGES"
 | 
				
			||||||
 | 
					ARG EXTRA_DEBIAN
 | 
				
			||||||
 | 
					ENV EXTRA_DEBIAN="$EXTRA_DEBIAN"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Use the image as it comes, do not upgrade it, so that it stays reproducible.
 | 
				
			||||||
 | 
					#RUN apt update && apt dist-upgrade -y
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					RUN apt update && apt install -y $PACKAGES $EXTRA_DEBIAN
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					COPY bin/main.sh /root/main.sh
 | 
				
			||||||
 | 
					RUN chmod +x /root/main.sh
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					WORKDIR /root/
 | 
				
			||||||
 | 
					USER root
 | 
				
			||||||
 | 
					CMD ./main.sh
 | 
				
			||||||
							
								
								
									
										20
									
								
								Config/ProvisionTests/Dockerfiles/fedora
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										20
									
								
								Config/ProvisionTests/Dockerfiles/fedora
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,20 @@
 | 
				
			|||||||
 | 
					# Create a VM for testing Ansible provisioning.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					FROM fedora:latest
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					ARG PACKAGES
 | 
				
			||||||
 | 
					ENV PACKAGES="$PACKAGES"
 | 
				
			||||||
 | 
					ARG EXTRA_FEDORA
 | 
				
			||||||
 | 
					ENV EXTRA_FEDORA="$EXTRA_FEDORA"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Use the image as it comes, do not upgrade it, so that it stays reproducible.
 | 
				
			||||||
 | 
					#RUN dnf upgrade --refresh -y
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					RUN dnf install --refresh -y $PACKAGES $EXTRA_FEDORA
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					COPY bin/main.sh /root/main.sh
 | 
				
			||||||
 | 
					RUN chmod +x /root/main.sh
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					WORKDIR /root/
 | 
				
			||||||
 | 
					USER root
 | 
				
			||||||
 | 
					CMD ./main.sh
 | 
				
			||||||
							
								
								
									
										20
									
								
								Config/ProvisionTests/Dockerfiles/opensuse
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										20
									
								
								Config/ProvisionTests/Dockerfiles/opensuse
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,20 @@
 | 
				
			|||||||
 | 
					# Create a VM for testing Ansible provisioning.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					FROM opensuse/tumbleweed:latest
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					ARG PACKAGES
 | 
				
			||||||
 | 
					ENV PACKAGES="$PACKAGES"
 | 
				
			||||||
 | 
					ARG EXTRA_OPENSUSE
 | 
				
			||||||
 | 
					ENV EXTRA_OPENSUSE="$EXTRA_OPENSUSE"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Use the image as it comes, do not upgrade it, so that it stays reproducible.
 | 
				
			||||||
 | 
					#RUN zypper -n refresh && zypper -n dist-upgrade -y
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					RUN zypper -n refresh && zypper -n install -y $PACKAGES $EXTRA_OPENSUSE
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					COPY bin/main.sh /root/main.sh
 | 
				
			||||||
 | 
					RUN chmod +x /root/main.sh
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					WORKDIR /root/
 | 
				
			||||||
 | 
					USER root
 | 
				
			||||||
 | 
					CMD ./main.sh
 | 
				
			||||||
							
								
								
									
										20
									
								
								Config/ProvisionTests/Dockerfiles/ubuntu
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										20
									
								
								Config/ProvisionTests/Dockerfiles/ubuntu
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,20 @@
 | 
				
			|||||||
 | 
					# Create a VM for testing Ansible provisioning.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					FROM ubuntu:rolling
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					ARG PACKAGES
 | 
				
			||||||
 | 
					ENV PACKAGES="$PACKAGES"
 | 
				
			||||||
 | 
					ARG EXTRA_UBUNTU
 | 
				
			||||||
 | 
					ENV EXTRA_UBUNTU="$EXTRA_UBUNTU"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Use the image as it comes, do not upgrade it, so that it stays reproducible.
 | 
				
			||||||
 | 
					#RUN apt update && apt dist-upgrade -y
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					RUN apt update && apt install -y $PACKAGES $EXTRA_UBUNTU
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					COPY bin/main.sh /root/main.sh
 | 
				
			||||||
 | 
					RUN chmod +x /root/main.sh
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					WORKDIR /root/
 | 
				
			||||||
 | 
					USER root
 | 
				
			||||||
 | 
					CMD ./main.sh
 | 
				
			||||||
							
								
								
									
										7
									
								
								Config/ProvisionTests/README.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										7
									
								
								Config/ProvisionTests/README.md
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,7 @@
 | 
				
			|||||||
 | 
					# Construction Area
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					This configuration is still a work in progress. :)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Provision Test Images
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Create containers of popular Linux distributions in order to test Ansible.
 | 
				
			||||||
							
								
								
									
										23
									
								
								Config/ProvisionTests/bin/main.sh
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										23
									
								
								Config/ProvisionTests/bin/main.sh
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,23 @@
 | 
				
			|||||||
 | 
					#!/usr/bin/env bash
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					sh -c "rm -rfv prov-test"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					echo "Downloading Repo '$REPO' : Branch '$BRANCH'"
 | 
				
			||||||
 | 
					git clone $REPO --branch=$BRANCH prov-test
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					cd prov-test
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					echo "Starting Executable Script '$EXEC'"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					tail -F /var/mail/mail &
 | 
				
			||||||
 | 
					tail -F /var/mail/ansible &
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					logfile="/root/test.log"
 | 
				
			||||||
 | 
					$EXEC > $logfile &
 | 
				
			||||||
 | 
					tail -F $logfile
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					echo "*** Finished $0 @ `date` ***"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					wait -n
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					exit $?
 | 
				
			||||||
							
								
								
									
										157
									
								
								Config/ProvisionTests/docker-compose.example.yml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										157
									
								
								Config/ProvisionTests/docker-compose.example.yml
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,157 @@
 | 
				
			|||||||
 | 
					# Create containers which each execute a provisioning script and exit.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					volumes:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  pt-storage:
 | 
				
			||||||
 | 
					    driver: local
 | 
				
			||||||
 | 
					    driver_opts:
 | 
				
			||||||
 | 
					      type: none
 | 
				
			||||||
 | 
					      device: $PT_STORAGE_DIR
 | 
				
			||||||
 | 
					      o: bind
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					services:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  pt-arch:
 | 
				
			||||||
 | 
					    container_name: pt-arch
 | 
				
			||||||
 | 
					    build:
 | 
				
			||||||
 | 
					      context: ./
 | 
				
			||||||
 | 
					      dockerfile: Dockerfiles/arch
 | 
				
			||||||
 | 
					      network: host
 | 
				
			||||||
 | 
					      args:
 | 
				
			||||||
 | 
					        PACKAGES: ${PACKAGES}
 | 
				
			||||||
 | 
					        EXTRA_ARCH: ${EXTRA_ARCH}
 | 
				
			||||||
 | 
					    restart: no
 | 
				
			||||||
 | 
					    environment:
 | 
				
			||||||
 | 
					      - PACKAGES=$PACKAGES
 | 
				
			||||||
 | 
					      - EXTRA_ARCH=$EXTRA_ARCH
 | 
				
			||||||
 | 
					      - REPO=$REPO
 | 
				
			||||||
 | 
					      - BRANCH=$BRANCH
 | 
				
			||||||
 | 
					      - EXEC=$EXEC
 | 
				
			||||||
 | 
					    volumes:
 | 
				
			||||||
 | 
					      - type: volume
 | 
				
			||||||
 | 
					        source: pt-storage
 | 
				
			||||||
 | 
					        target: /root
 | 
				
			||||||
 | 
					        volume:
 | 
				
			||||||
 | 
					          subpath: arch
 | 
				
			||||||
 | 
					    deploy:
 | 
				
			||||||
 | 
					      mode: global
 | 
				
			||||||
 | 
					      resources:
 | 
				
			||||||
 | 
					        limits:
 | 
				
			||||||
 | 
					          cpus: $CPU
 | 
				
			||||||
 | 
					          memory: $RAM
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  pt-debian:
 | 
				
			||||||
 | 
					    container_name: pt-debian
 | 
				
			||||||
 | 
					    build:
 | 
				
			||||||
 | 
					      context: ./
 | 
				
			||||||
 | 
					      dockerfile: Dockerfiles/debian
 | 
				
			||||||
 | 
					      network: host
 | 
				
			||||||
 | 
					      args:
 | 
				
			||||||
 | 
					        PACKAGES: ${PACKAGES}
 | 
				
			||||||
 | 
					        EXTRA_DEBIAN: ${EXTRA_DEBIAN}
 | 
				
			||||||
 | 
					    restart: no
 | 
				
			||||||
 | 
					    environment:
 | 
				
			||||||
 | 
					      - PACKAGES=$PACKAGES
 | 
				
			||||||
 | 
					      - EXTRA_DEBIAN=$EXTRA_DEBIAN
 | 
				
			||||||
 | 
					      - REPO=$REPO
 | 
				
			||||||
 | 
					      - BRANCH=$BRANCH
 | 
				
			||||||
 | 
					      - EXEC=$EXEC
 | 
				
			||||||
 | 
					    volumes:
 | 
				
			||||||
 | 
					      - type: volume
 | 
				
			||||||
 | 
					        source: pt-storage
 | 
				
			||||||
 | 
					        target: /root
 | 
				
			||||||
 | 
					        volume:
 | 
				
			||||||
 | 
					          subpath: debian
 | 
				
			||||||
 | 
					    deploy:
 | 
				
			||||||
 | 
					      mode: global
 | 
				
			||||||
 | 
					      resources:
 | 
				
			||||||
 | 
					        limits:
 | 
				
			||||||
 | 
					          cpus: $CPU
 | 
				
			||||||
 | 
					          memory: $RAM
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  pt-fedora:
 | 
				
			||||||
 | 
					    container_name: pt-fedora
 | 
				
			||||||
 | 
					    build:
 | 
				
			||||||
 | 
					      context: ./
 | 
				
			||||||
 | 
					      dockerfile: Dockerfiles/fedora
 | 
				
			||||||
 | 
					      network: host
 | 
				
			||||||
 | 
					      args:
 | 
				
			||||||
 | 
					        PACKAGES: ${PACKAGES}
 | 
				
			||||||
 | 
					        EXTRA_FEDORA: ${EXTRA_FEDORA}
 | 
				
			||||||
 | 
					    restart: no
 | 
				
			||||||
 | 
					    environment:
 | 
				
			||||||
 | 
					      - PACKAGES=$PACKAGES
 | 
				
			||||||
 | 
					      - EXTRA_FEDORA=$EXTRA_FEDORA
 | 
				
			||||||
 | 
					      - REPO=$REPO
 | 
				
			||||||
 | 
					      - BRANCH=$BRANCH
 | 
				
			||||||
 | 
					      - EXEC=$EXEC
 | 
				
			||||||
 | 
					    volumes:
 | 
				
			||||||
 | 
					      - type: volume
 | 
				
			||||||
 | 
					        source: pt-storage
 | 
				
			||||||
 | 
					        target: /root
 | 
				
			||||||
 | 
					        volume:
 | 
				
			||||||
 | 
					          subpath: fedora
 | 
				
			||||||
 | 
					    deploy:
 | 
				
			||||||
 | 
					      mode: global
 | 
				
			||||||
 | 
					      resources:
 | 
				
			||||||
 | 
					        limits:
 | 
				
			||||||
 | 
					          cpus: $CPU
 | 
				
			||||||
 | 
					          memory: $RAM
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  pt-opensuse:
 | 
				
			||||||
 | 
					    container_name: pt-opensuse
 | 
				
			||||||
 | 
					    build:
 | 
				
			||||||
 | 
					      context: ./
 | 
				
			||||||
 | 
					      dockerfile: Dockerfiles/opensuse
 | 
				
			||||||
 | 
					      network: host
 | 
				
			||||||
 | 
					      args:
 | 
				
			||||||
 | 
					        PACKAGES: ${PACKAGES}
 | 
				
			||||||
 | 
					        EXTRA_OPENSUSE: ${EXTRA_OPENSUSE}
 | 
				
			||||||
 | 
					    restart: no
 | 
				
			||||||
 | 
					    environment:
 | 
				
			||||||
 | 
					      - PACKAGES=$PACKAGES
 | 
				
			||||||
 | 
					      - EXTRA_OPENSUSE=$EXTRA_OPENSUSE
 | 
				
			||||||
 | 
					      - REPO=$REPO
 | 
				
			||||||
 | 
					      - BRANCH=$BRANCH
 | 
				
			||||||
 | 
					      - EXEC=$EXEC
 | 
				
			||||||
 | 
					    volumes:
 | 
				
			||||||
 | 
					      - type: volume
 | 
				
			||||||
 | 
					        source: pt-storage
 | 
				
			||||||
 | 
					        target: /root
 | 
				
			||||||
 | 
					        volume:
 | 
				
			||||||
 | 
					          subpath: opensuse
 | 
				
			||||||
 | 
					    deploy:
 | 
				
			||||||
 | 
					      mode: global
 | 
				
			||||||
 | 
					      resources:
 | 
				
			||||||
 | 
					        limits:
 | 
				
			||||||
 | 
					          cpus: $CPU
 | 
				
			||||||
 | 
					          memory: $RAM
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  pt-ubuntu:
 | 
				
			||||||
 | 
					    container_name: pt-ubuntu
 | 
				
			||||||
 | 
					    build:
 | 
				
			||||||
 | 
					      context: ./
 | 
				
			||||||
 | 
					      dockerfile: Dockerfiles/ubuntu
 | 
				
			||||||
 | 
					      network: host
 | 
				
			||||||
 | 
					      args:
 | 
				
			||||||
 | 
					        PACKAGES: ${PACKAGES}
 | 
				
			||||||
 | 
					        EXTRA_UBUNTU: ${EXTRA_UBUNTU}
 | 
				
			||||||
 | 
					    restart: no
 | 
				
			||||||
 | 
					    environment:
 | 
				
			||||||
 | 
					      - PACKAGES=$PACKAGES
 | 
				
			||||||
 | 
					      - EXTRA_UBUNTU=$EXTRA_UBUNTU
 | 
				
			||||||
 | 
					      - REPO=$REPO
 | 
				
			||||||
 | 
					      - BRANCH=$BRANCH
 | 
				
			||||||
 | 
					      - EXEC=$EXEC
 | 
				
			||||||
 | 
					    volumes:
 | 
				
			||||||
 | 
					      - type: volume
 | 
				
			||||||
 | 
					        source: pt-storage
 | 
				
			||||||
 | 
					        target: /root
 | 
				
			||||||
 | 
					        volume:
 | 
				
			||||||
 | 
					          subpath: ubuntu
 | 
				
			||||||
 | 
					    deploy:
 | 
				
			||||||
 | 
					      mode: global
 | 
				
			||||||
 | 
					      resources:
 | 
				
			||||||
 | 
					        limits:
 | 
				
			||||||
 | 
					          cpus: $CPU
 | 
				
			||||||
 | 
					          memory: $RAM
 | 
				
			||||||
							
								
								
									
										23
									
								
								Config/ProvisionTests/example.env
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										23
									
								
								Config/ProvisionTests/example.env
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,23 @@
 | 
				
			|||||||
 | 
					# This file will need renamed '.env' and have any private values modified.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					COMPOSE_BAKE=true
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					## Performance
 | 
				
			||||||
 | 
					CPU=0.2
 | 
				
			||||||
 | 
					RAM=0.2G
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					## Storage
 | 
				
			||||||
 | 
					PT_STORAGE_DIR=../../Volumes/IGNORED/ProvisionTests
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					## Packages
 | 
				
			||||||
 | 
					PACKAGES="git bash curl sudo which"
 | 
				
			||||||
 | 
					EXTRA_ARCH=""
 | 
				
			||||||
 | 
					EXTRA_DEBIAN=""
 | 
				
			||||||
 | 
					EXTRA_FEDORA=""
 | 
				
			||||||
 | 
					EXTRA_OPENSUSE=""
 | 
				
			||||||
 | 
					EXTRA_UBUNTU=""
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					## Script
 | 
				
			||||||
 | 
					REPO=https://git.hyperling.com/me/env-ansible
 | 
				
			||||||
 | 
					BRANCH=stage
 | 
				
			||||||
 | 
					EXEC="./setup.sh -l -g -s"
 | 
				
			||||||
							
								
								
									
										19
									
								
								Config/ProvisionTests/prep.sh
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										19
									
								
								Config/ProvisionTests/prep.sh
									
									
									
									
									
										Executable file
									
								
							@@ -0,0 +1,19 @@
 | 
				
			|||||||
 | 
					#!/usr/bin/env bash
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					## Setup ##
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					DIR="$(dirname -- "${BASH_SOURCE[0]}")"
 | 
				
			||||||
 | 
					source $DIR/.env
 | 
				
			||||||
 | 
					source ../../source.env
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					## Main ##
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Create folders.
 | 
				
			||||||
 | 
					mkdir -pv "$PT_STORAGE_DIR/arch"
 | 
				
			||||||
 | 
					mkdir -pv "$PT_STORAGE_DIR/debian"
 | 
				
			||||||
 | 
					mkdir -pv "$PT_STORAGE_DIR/fedora"
 | 
				
			||||||
 | 
					mkdir -pv "$PT_STORAGE_DIR/opensuse"
 | 
				
			||||||
 | 
					mkdir -pv "$PT_STORAGE_DIR/ubuntu"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Finish successfully.
 | 
				
			||||||
 | 
					exit 0
 | 
				
			||||||
@@ -1,5 +1,7 @@
 | 
				
			|||||||
# Initial Setup Instructions
 | 
					# Initial Setup Instructions
 | 
				
			||||||
 | 
					
 | 
				
			||||||
How to first begin using this subproject.
 | 
					How to first begin using this subproject.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
1. Move to the directory of this README.
 | 
					1. Move to the directory of this README.
 | 
				
			||||||
    ```
 | 
					    ```
 | 
				
			||||||
    $ cd $DOCKER_HOME/Config/ReverseProxy
 | 
					    $ cd $DOCKER_HOME/Config/ReverseProxy
 | 
				
			||||||
@@ -10,6 +12,7 @@ How to first begin using this subproject.
 | 
				
			|||||||
    # ./create_placeholder_certs.sh
 | 
					    # ./create_placeholder_certs.sh
 | 
				
			||||||
    ```
 | 
					    ```
 | 
				
			||||||
1. Make any personal changes to `./config/nginx.conf`.
 | 
					1. Make any personal changes to `./config/nginx.conf`.
 | 
				
			||||||
 | 
					1. Copy the example files as `docker-compose.yml` and `.env`.
 | 
				
			||||||
1. Build the project.
 | 
					1. Build the project.
 | 
				
			||||||
    ```
 | 
					    ```
 | 
				
			||||||
    # docker compose build
 | 
					    # docker compose build
 | 
				
			||||||
@@ -20,8 +23,8 @@ How to first begin using this subproject.
 | 
				
			|||||||
    ```
 | 
					    ```
 | 
				
			||||||
1. Verify it started correctly, no configuration file errors.
 | 
					1. Verify it started correctly, no configuration file errors.
 | 
				
			||||||
    ```
 | 
					    ```
 | 
				
			||||||
    # docker logs reverseproxy-app-1
 | 
					    # docker logs rp-app
 | 
				
			||||||
    # docker logs reverseproxy-certbot-1
 | 
					    # docker logs rp-certbot
 | 
				
			||||||
    ```
 | 
					    ```
 | 
				
			||||||
1. Create the real certificates.
 | 
					1. Create the real certificates.
 | 
				
			||||||
    ```
 | 
					    ```
 | 
				
			||||||
@@ -34,6 +37,7 @@ How to first begin using this subproject.
 | 
				
			|||||||
    ```
 | 
					    ```
 | 
				
			||||||
 | 
					
 | 
				
			||||||
## DO NOT
 | 
					## DO NOT
 | 
				
			||||||
 | 
					
 | 
				
			||||||
* Edit any configurations or website data inside the container. It is destroyed on each build.
 | 
					* Edit any configurations or website data inside the container. It is destroyed on each build.
 | 
				
			||||||
    * Instead, modify the files in `./config/` then use the Update Config commands below.
 | 
					    * Instead, modify the files in `./config/` then use the Update Config commands below.
 | 
				
			||||||
* Install any additional software inside of the container. It will not persist a down and up.
 | 
					* Install any additional software inside of the container. It will not persist a down and up.
 | 
				
			||||||
@@ -41,17 +45,22 @@ How to first begin using this subproject.
 | 
				
			|||||||
    * Alternatively write a script such as `../Nextcloud/fixes.ksh` which is run after every upgrade.
 | 
					    * Alternatively write a script such as `../Nextcloud/fixes.ksh` which is run after every upgrade.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# Other Commands
 | 
					# Other Commands
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Tasks which will also likely come up while using this subproject.
 | 
					Tasks which will also likely come up while using this subproject.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
## Stop
 | 
					## Stop
 | 
				
			||||||
 | 
					
 | 
				
			||||||
If the proxy needs turned off either stop or down may be used.
 | 
					If the proxy needs turned off either stop or down may be used.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
```
 | 
					```
 | 
				
			||||||
# docker compose stop
 | 
					# docker compose stop
 | 
				
			||||||
# docker compose down
 | 
					# docker compose down
 | 
				
			||||||
```
 | 
					```
 | 
				
			||||||
 | 
					
 | 
				
			||||||
## Upgrade
 | 
					## Upgrade
 | 
				
			||||||
Upgrading the containers should be as easy as this:
 | 
					
 | 
				
			||||||
 | 
					Upgrading the containers is as easy as this:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
```
 | 
					```
 | 
				
			||||||
# docker compose down
 | 
					# docker compose down
 | 
				
			||||||
# docker compose pull
 | 
					# docker compose pull
 | 
				
			||||||
@@ -60,15 +69,19 @@ Upgrading the containers should be as easy as this:
 | 
				
			|||||||
```
 | 
					```
 | 
				
			||||||
 | 
					
 | 
				
			||||||
## Update Config
 | 
					## Update Config
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Replace the configuration based on any new, updated, or removed files.
 | 
					Replace the configuration based on any new, updated, or removed files.
 | 
				
			||||||
This may be possible to do when the system is up, but the best results have come from going down and back up.
 | 
					This may be possible to do when the system is up, but the best results have come from going down and back up.
 | 
				
			||||||
This is essentially an upgrade but there is no pull.
 | 
					This is essentially an upgrade but there is no pull.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
```
 | 
					```
 | 
				
			||||||
# docker compose down
 | 
					# docker compose down
 | 
				
			||||||
# docker compose build
 | 
					# docker compose build
 | 
				
			||||||
# docker compose up -d
 | 
					# docker compose up -d
 | 
				
			||||||
```
 | 
					```
 | 
				
			||||||
 | 
					
 | 
				
			||||||
If wanted as a one-line command:
 | 
					If wanted as a one-line command:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
```
 | 
					```
 | 
				
			||||||
# docker compose down && docker compose build && docker compose up -d
 | 
					# docker compose down && docker compose build && docker compose up -d
 | 
				
			||||||
```
 | 
					```
 | 
				
			||||||
@@ -80,4 +93,4 @@ If wanted as a one-line command:
 | 
				
			|||||||
1. Restart the project based on Update Config above.
 | 
					1. Restart the project based on Update Config above.
 | 
				
			||||||
1. (Optional) Now you may run the letsencrypt script for a real certificate.
 | 
					1. (Optional) Now you may run the letsencrypt script for a real certificate.
 | 
				
			||||||
1. (Optional) Run another Update Config to make sure the certs are loaded.
 | 
					1. (Optional) Run another Update Config to make sure the certs are loaded.
 | 
				
			||||||
1. Done! If set up correctly the site should be live.
 | 
					1. Done! If set up correctly the site will be live.
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,6 +1,6 @@
 | 
				
			|||||||
# 2024-12-31 Hyperling
 | 
					# 2024-12-31 Hyperling
 | 
				
			||||||
# A dummy test file since true scripts are being kept private.
 | 
					# A dummy test file since true scripts are being kept private.
 | 
				
			||||||
# This should help anyone understand how the project is being used.
 | 
					# This will help anyone understand how the project is being used.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
## Instructions ##
 | 
					## Instructions ##
 | 
				
			||||||
# Add this without the comment to your /etc/hosts to test that it is working,
 | 
					# Add this without the comment to your /etc/hosts to test that it is working,
 | 
				
			||||||
@@ -11,9 +11,9 @@
 | 
				
			|||||||
#   cd $DOCKER_HOME/Config/ReverseProxy && docker compose build && docker compose up -d
 | 
					#   cd $DOCKER_HOME/Config/ReverseProxy && docker compose build && docker compose up -d
 | 
				
			||||||
# Then from the system with the modified /etc/hosts,
 | 
					# Then from the system with the modified /etc/hosts,
 | 
				
			||||||
#   curl --insecure git.example.com
 | 
					#   curl --insecure git.example.com
 | 
				
			||||||
# You should see activity in the container log as well as the contents of the
 | 
					# You will see activity in the container log as well as the contents of the
 | 
				
			||||||
# proxied website in the terminal, NOT git.example.com. If using a browser then you
 | 
					# proxied website in the terminal, NOT git.example.com. If using a browser then you
 | 
				
			||||||
# should notice that the URL is still git.example.com but the website is correct.
 | 
					# will notice that the URL is still git.example.com but the website is correct.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# Force HTTPS
 | 
					# Force HTTPS
 | 
				
			||||||
server {
 | 
					server {
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,6 +1,6 @@
 | 
				
			|||||||
# 2023-07-08 Hyperling
 | 
					# 2023-07-08 Hyperling
 | 
				
			||||||
# A dummy test file since true scripts are being kept private.
 | 
					# A dummy test file since true scripts are being kept private.
 | 
				
			||||||
# This should help anyone understand how the project is being used.
 | 
					# This will help anyone understand how the project is being used.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
## Instructions ##
 | 
					## Instructions ##
 | 
				
			||||||
# Add this without the comment to your /etc/hosts to test that it is working,
 | 
					# Add this without the comment to your /etc/hosts to test that it is working,
 | 
				
			||||||
@@ -11,9 +11,9 @@
 | 
				
			|||||||
#   cd $DOCKER_HOME/Config/ReverseProxy && docker compose build && docker compose up -d
 | 
					#   cd $DOCKER_HOME/Config/ReverseProxy && docker compose build && docker compose up -d
 | 
				
			||||||
# Then from the system with the modified /etc/hosts,
 | 
					# Then from the system with the modified /etc/hosts,
 | 
				
			||||||
#   curl --insecure html.example.com
 | 
					#   curl --insecure html.example.com
 | 
				
			||||||
# You should see activity in the container log as well as the contents of the
 | 
					# You will see activity in the container log as well as the contents of the
 | 
				
			||||||
# proxied website in the terminal, NOT html.example.com. If using a browser then you
 | 
					# proxied website in the terminal, NOT git.example.com. If using a browser then you
 | 
				
			||||||
# should notice that the URL is still html.example.com but the website is correct.
 | 
					# will notice that the URL is still git.example.com but the website is correct.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# Force HTTPS
 | 
					# Force HTTPS
 | 
				
			||||||
server {
 | 
					server {
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,6 +1,6 @@
 | 
				
			|||||||
# 2025-01-02 Hyperling
 | 
					# 2025-01-02 Hyperling
 | 
				
			||||||
# A dummy test file since true scripts are being kept private.
 | 
					# A dummy test file since true scripts are being kept private.
 | 
				
			||||||
# This should help others understand how to get Nextcloud working.
 | 
					# This will help others understand how to get Nextcloud working.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
## Instructions ##
 | 
					## Instructions ##
 | 
				
			||||||
# Add this without the comment to your /etc/hosts to test that it is working,
 | 
					# Add this without the comment to your /etc/hosts to test that it is working,
 | 
				
			||||||
@@ -11,9 +11,9 @@
 | 
				
			|||||||
#   cd $DOCKER_HOME/Config/ReverseProxy && docker compose build && docker compose up -d
 | 
					#   cd $DOCKER_HOME/Config/ReverseProxy && docker compose build && docker compose up -d
 | 
				
			||||||
# Then from the system with the modified /etc/hosts,
 | 
					# Then from the system with the modified /etc/hosts,
 | 
				
			||||||
#   curl --insecure cloud.example.com
 | 
					#   curl --insecure cloud.example.com
 | 
				
			||||||
# You should see activity in the container log as well as the contents of the
 | 
					# You will see activity in the container log as well as the contents of the
 | 
				
			||||||
# proxied website in the terminal, NOT cloud.example.com. If using a browser then you
 | 
					# proxied website in the terminal, NOT git.example.com. If using a browser then you
 | 
				
			||||||
# should notice that the URL is still cloud.example.com but the website is correct.
 | 
					# will notice that the URL is still git.example.com but the website is correct.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
server {
 | 
					server {
 | 
				
			||||||
    listen 80;
 | 
					    listen 80;
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,6 +1,6 @@
 | 
				
			|||||||
# 2022-10-05 Hyperling
 | 
					# 2022-10-05 Hyperling
 | 
				
			||||||
# A dummy test file since true scripts are being kept private.
 | 
					# A dummy test file since true scripts are being kept private.
 | 
				
			||||||
# This should help anyone understand how the project is being used.
 | 
					# This will help anyone understand how the project is being used.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
## Instructions ##
 | 
					## Instructions ##
 | 
				
			||||||
# Add this without the comment to your /etc/hosts to test that it is working,
 | 
					# Add this without the comment to your /etc/hosts to test that it is working,
 | 
				
			||||||
@@ -11,9 +11,9 @@
 | 
				
			|||||||
#   cd $DOCKER_HOME/Config/ReverseProxy && docker compose build && docker compose up -d
 | 
					#   cd $DOCKER_HOME/Config/ReverseProxy && docker compose build && docker compose up -d
 | 
				
			||||||
# Then from the system with the modified /etc/hosts,
 | 
					# Then from the system with the modified /etc/hosts,
 | 
				
			||||||
#   curl --insecure proxy.example.com
 | 
					#   curl --insecure proxy.example.com
 | 
				
			||||||
# You should see activity in the container log as well as the contents of the
 | 
					# You will see activity in the container log as well as the contents of the
 | 
				
			||||||
# proxied website in the terminal, NOT proxy.example.com. If using a browser then you
 | 
					# proxied website in the terminal, NOT proxy.example.com. If using a browser then you
 | 
				
			||||||
# should notice that the URL is still proxy.example.com but the website is correct.
 | 
					# will notice that the URL is still proxy.example.com but the website is correct.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# Force HTTPS
 | 
					# Force HTTPS
 | 
				
			||||||
server {
 | 
					server {
 | 
				
			||||||
@@ -67,7 +67,7 @@ server {
 | 
				
			|||||||
        # Or alternatively, do it like the force of HTTPS if not your server.
 | 
					        # Or alternatively, do it like the force of HTTPS if not your server.
 | 
				
			||||||
        #return 301 https://website.name/$request_uri;
 | 
					        #return 301 https://website.name/$request_uri;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        # This should forward you from 'proxy.example.com' to a real site:
 | 
					        # This will forward you from 'proxy.example.com' to a real site:
 | 
				
			||||||
        proxy_pass https://hyperling.com;
 | 
					        proxy_pass https://hyperling.com;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -2,5 +2,5 @@
 | 
				
			|||||||
If the reverse proxy also serves static HTML sites, the root directories of each
 | 
					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
 | 
					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
 | 
					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
 | 
					this exists called `html.example.com`. It is fairly easy to recreate for
 | 
				
			||||||
another website.
 | 
					another website.
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -24,8 +24,8 @@ services:
 | 
				
			|||||||
      mode: global
 | 
					      mode: global
 | 
				
			||||||
      resources:
 | 
					      resources:
 | 
				
			||||||
        limits:
 | 
					        limits:
 | 
				
			||||||
          cpus: '0.20'
 | 
					          cpus: $CPU
 | 
				
			||||||
          memory: 64M
 | 
					          memory: $MEM
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  certbot:
 | 
					  certbot:
 | 
				
			||||||
    container_name: rp-certbot
 | 
					    container_name: rp-certbot
 | 
				
			||||||
@@ -39,5 +39,5 @@ services:
 | 
				
			|||||||
      mode: global
 | 
					      mode: global
 | 
				
			||||||
      resources:
 | 
					      resources:
 | 
				
			||||||
        limits:
 | 
					        limits:
 | 
				
			||||||
          cpus: '0.10'
 | 
					          cpus: $CPU_LE
 | 
				
			||||||
          memory: 32M
 | 
					          memory: $MEM_LE
 | 
				
			||||||
@@ -1,49 +0,0 @@
 | 
				
			|||||||
# 2022-10-05 Hyperling
 | 
					 | 
				
			||||||
# Reverse Proxy with LetsEncrypt Certbot.
 | 
					 | 
				
			||||||
# This is a revised version of these works:
 | 
					 | 
				
			||||||
#   https://phoenixnap.com/kb/docker-nginx-reverse-proxy
 | 
					 | 
				
			||||||
#   https://www.docker.com/blog/how-to-use-the-official-nginx-docker-image/
 | 
					 | 
				
			||||||
#   https://pentacent.medium.com/nginx-and-lets-encrypt-with-docker-in-less-than-5-minutes-b4b8a60d3a71
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
services:
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  app:
 | 
					 | 
				
			||||||
    container_name: rp-app
 | 
					 | 
				
			||||||
    build:
 | 
					 | 
				
			||||||
      context: ./
 | 
					 | 
				
			||||||
      network: host
 | 
					 | 
				
			||||||
    restart: always
 | 
					 | 
				
			||||||
    ports:
 | 
					 | 
				
			||||||
      - "80:80"
 | 
					 | 
				
			||||||
      - "443:443"
 | 
					 | 
				
			||||||
    volumes:
 | 
					 | 
				
			||||||
      - ../../Volumes/ReverseProxy/letsencrypt:/etc/nginx/letsencrypt
 | 
					 | 
				
			||||||
      - ../../Volumes/ReverseProxy/letsencrypt-certs:/etc/nginx/certs
 | 
					 | 
				
			||||||
    command: "/bin/sh -c 'while :; do sleep 6h & wait $${!}; nginx -s reload; done & nginx -g \"daemon off;\"'"
 | 
					 | 
				
			||||||
    deploy:
 | 
					 | 
				
			||||||
      mode: global
 | 
					 | 
				
			||||||
      resources:
 | 
					 | 
				
			||||||
        limits:
 | 
					 | 
				
			||||||
          cpus: '1.00'
 | 
					 | 
				
			||||||
          memory: 512M
 | 
					 | 
				
			||||||
        reservations:
 | 
					 | 
				
			||||||
          cpus: '0.25'
 | 
					 | 
				
			||||||
          memory: 128M
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  certbot:
 | 
					 | 
				
			||||||
    container_name: rp-certbot
 | 
					 | 
				
			||||||
    image: certbot/certbot
 | 
					 | 
				
			||||||
    restart: always
 | 
					 | 
				
			||||||
    volumes:
 | 
					 | 
				
			||||||
      - ../../Volumes/ReverseProxy/letsencrypt:/etc/letsencrypt
 | 
					 | 
				
			||||||
      - ../../Volumes/ReverseProxy/letsencrypt-certs:/etc/letsencrypt/nginx
 | 
					 | 
				
			||||||
    entrypoint: "/bin/sh -c 'trap exit TERM; while :; do certbot renew; cp -rL /etc/letsencrypt/live/* /etc/letsencrypt/nginx/; sleep 12h & wait $${!}; done;'"
 | 
					 | 
				
			||||||
    deploy:
 | 
					 | 
				
			||||||
      mode: global
 | 
					 | 
				
			||||||
      resources:
 | 
					 | 
				
			||||||
        limits:
 | 
					 | 
				
			||||||
          cpus: '0.50'
 | 
					 | 
				
			||||||
          memory: 256M
 | 
					 | 
				
			||||||
        reservations:
 | 
					 | 
				
			||||||
          cpus: '0.25'
 | 
					 | 
				
			||||||
          memory: 128M
 | 
					 | 
				
			||||||
							
								
								
									
										19
									
								
								Config/ReverseProxy/example.env
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										19
									
								
								Config/ReverseProxy/example.env
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,19 @@
 | 
				
			|||||||
 | 
					# This file will need copied as `.env` and adjusted as necessary.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					## Docker ##
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					COMPOSE_BAKE=true
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					## Performance ##
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Micro Server
 | 
				
			||||||
 | 
					CPU=0.10
 | 
				
			||||||
 | 
					MEM=0.10G
 | 
				
			||||||
 | 
					CPU_LE=0.05
 | 
				
			||||||
 | 
					MEM_LE=0.05G
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Capable Server
 | 
				
			||||||
 | 
					#CPU=0.50
 | 
				
			||||||
 | 
					#MEM=0.50G
 | 
				
			||||||
 | 
					#CPU_LE=0.25
 | 
				
			||||||
 | 
					#MEM_LE=0.25G
 | 
				
			||||||
							
								
								
									
										3
									
								
								Config/WordpressExample/README.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										3
									
								
								Config/WordpressExample/README.md
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,3 @@
 | 
				
			|||||||
 | 
					# Construction Area
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					This configuration is still a work in progress. :)
 | 
				
			||||||
							
								
								
									
										80
									
								
								Config/WordpressExample/docker-compose.example.yml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										80
									
								
								Config/WordpressExample/docker-compose.example.yml
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,80 @@
 | 
				
			|||||||
 | 
					# 2025-10-17 Hyperling
 | 
				
			||||||
 | 
					# Copied and modified from the example here:
 | 
				
			||||||
 | 
					#   https://hub.docker.com/_/wordpress
 | 
				
			||||||
 | 
					# This file needs copied to `docker-compose.yml`.
 | 
				
			||||||
 | 
					# Most configration changes can be done in the env file rather than here.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					## TBDs ##
 | 
				
			||||||
 | 
					# - Move env variables to env.example
 | 
				
			||||||
 | 
					# - Look through other environment variables which may be useful.
 | 
				
			||||||
 | 
					# - Add CPU and MEM section
 | 
				
			||||||
 | 
					# - Change ports
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# TBD locate these at ../../Volumes and create `prep.sh` script.
 | 
				
			||||||
 | 
					#volumes:
 | 
				
			||||||
 | 
					#  wordpress:
 | 
				
			||||||
 | 
					#  db:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					services:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  wp-db:
 | 
				
			||||||
 | 
					    container_name: wp-db
 | 
				
			||||||
 | 
					    image: mariadb:lts
 | 
				
			||||||
 | 
					    restart: always
 | 
				
			||||||
 | 
					    volumes:
 | 
				
			||||||
 | 
					      - ../../Volumes/WordPress/mariadb:/var/lib/mysql
 | 
				
			||||||
 | 
					    healthcheck:
 | 
				
			||||||
 | 
					      test: ["CMD", "healthcheck.sh", "--connect", "--innodb_initialized"]
 | 
				
			||||||
 | 
					      start_period: 5s
 | 
				
			||||||
 | 
					      interval: 5s
 | 
				
			||||||
 | 
					      timeout: 5s
 | 
				
			||||||
 | 
					      retries: 10
 | 
				
			||||||
 | 
					    environment:
 | 
				
			||||||
 | 
					      # https://mariadb.com/docs/server/server-management/automated-mariadb-deployment-and-administration/docker-and-mariadb/mariadb-server-docker-official-image-environment-variables
 | 
				
			||||||
 | 
					      MARIADB_DATABASE: $MARIADB_DATABASE
 | 
				
			||||||
 | 
					      MARIADB_USER: $MARIADB_USER
 | 
				
			||||||
 | 
					      MARIADB_PASSWORD: MARIADB_PASSWORD
 | 
				
			||||||
 | 
					      MARIADB_ROOT_PASSWORD: $MARIADB_ROOT_PASSWORD
 | 
				
			||||||
 | 
					      MARIADB_AUTO_UPGRADE: $MARIADB_AUTO_UPGRADE
 | 
				
			||||||
 | 
					      WP_CPU_DB: $WP_CPU_DB
 | 
				
			||||||
 | 
					      WP_MEM_DB: $WP_MEM_DB
 | 
				
			||||||
 | 
					    deploy:
 | 
				
			||||||
 | 
					      mode: global
 | 
				
			||||||
 | 
					      resources:
 | 
				
			||||||
 | 
					        limits:
 | 
				
			||||||
 | 
					          cpus: $WP_CPU_DB
 | 
				
			||||||
 | 
					          memory: $WP_MEM_DB
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  wp-app:
 | 
				
			||||||
 | 
					    container_name: wp-app
 | 
				
			||||||
 | 
					    image: wordpress:latest
 | 
				
			||||||
 | 
					    restart: always
 | 
				
			||||||
 | 
					    ports:
 | 
				
			||||||
 | 
					      - 8080:80
 | 
				
			||||||
 | 
					    depends_on:
 | 
				
			||||||
 | 
					      wp-db:
 | 
				
			||||||
 | 
					        condition: service_healthy
 | 
				
			||||||
 | 
					    links:
 | 
				
			||||||
 | 
					      - wp-db
 | 
				
			||||||
 | 
					    volumes:
 | 
				
			||||||
 | 
					      - ../../Volumes/WordPress/wordpress:/var/www/html
 | 
				
			||||||
 | 
					    environment:
 | 
				
			||||||
 | 
					      WORDPRESS_ADMIN_USERNAME: $WORDPRESS_ADMIN_USERNAME
 | 
				
			||||||
 | 
					      WORDPRESS_ADMIN_PASSWORD: $WORDPRESS_ADMIN_PASSWORD
 | 
				
			||||||
 | 
					      WORDPRESS_DB_HOST: wp-db
 | 
				
			||||||
 | 
					      WORDPRESS_DB_NAME: $MARIADB_DATABASE
 | 
				
			||||||
 | 
					      # TBD/TODO: Does not work, but recommended. :(
 | 
				
			||||||
 | 
					      #WORDPRESS_DB_USER: $MARIADB_USER
 | 
				
			||||||
 | 
					      #WORDPRESS_DB_PASSWORD: $MARIADB_PASSWORD
 | 
				
			||||||
 | 
					      # Works, but not recommended. Lol.
 | 
				
			||||||
 | 
					      WORDPRESS_DB_USER: root
 | 
				
			||||||
 | 
					      WORDPRESS_DB_PASSWORD: $MARIADB_ROOT_PASSWORD
 | 
				
			||||||
 | 
					      WORDPRESS_DEBUG: $WORDPRESS_DEBUG
 | 
				
			||||||
 | 
					      WP_CPU: $WP_CPU
 | 
				
			||||||
 | 
					      WP_MEM: $WP_MEM
 | 
				
			||||||
 | 
					    deploy:
 | 
				
			||||||
 | 
					      mode: global
 | 
				
			||||||
 | 
					      resources:
 | 
				
			||||||
 | 
					        limits:
 | 
				
			||||||
 | 
					          cpus: $WP_CPU
 | 
				
			||||||
 | 
					          memory: $WP_MEM
 | 
				
			||||||
							
								
								
									
										63
									
								
								Config/WordpressExample/example.env
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										63
									
								
								Config/WordpressExample/example.env
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,63 @@
 | 
				
			|||||||
 | 
					# This file needs copied to `.env` and have its values changes as needed.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					## Docker ##
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					COMPOSE_BAKE=true
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					## End Docker ##
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					## WordPress ##
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# TBD/TODO: These do not actually seem to work.
 | 
				
			||||||
 | 
					WORDPRESS_ADMIN_USERNAME='wp_user'
 | 
				
			||||||
 | 
					WORDPRESS_ADMIN_PASSWORD='wordpress_password'
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Uncomment this to get debug output in the log.
 | 
				
			||||||
 | 
					WORDPRESS_DEBUG=1
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					## End WordPress ##
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					## Database ##
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					MARIADB_DATABASE='wordpress'
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					MARIADB_USER='db_user'
 | 
				
			||||||
 | 
					MARIADB_PASSWORD='database_password'
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					MARIADB_ROOT_PASSWORD='db_root_password'
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Comment this if you do not want MariaDB to run upgrade scripts on new versions.
 | 
				
			||||||
 | 
					MARIADB_AUTO_UPGRADE=1
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					## End Database ##
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					## Performance ##
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Standard Minimum
 | 
				
			||||||
 | 
					#WP_CPU=1.00
 | 
				
			||||||
 | 
					#WP_MEM=2.00G
 | 
				
			||||||
 | 
					#WP_CPU_DB=1.00
 | 
				
			||||||
 | 
					#WP_MEM_DB=1.00G
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Standard Recommended
 | 
				
			||||||
 | 
					#WP_CPU=1.00
 | 
				
			||||||
 | 
					#WP_MEM=4.00G
 | 
				
			||||||
 | 
					#WP_CPU_DB=1.00
 | 
				
			||||||
 | 
					#WP_MEM_DB=0.50G
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Tested Minimum
 | 
				
			||||||
 | 
					#WP_CPU=0.35
 | 
				
			||||||
 | 
					#WP_MEM=0.35G
 | 
				
			||||||
 | 
					#WP_CPU_DB=0.15
 | 
				
			||||||
 | 
					#WP_MEM_DB=0.15G
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Tested Recommended
 | 
				
			||||||
 | 
					WP_CPU=0.50
 | 
				
			||||||
 | 
					WP_MEM=0.50G
 | 
				
			||||||
 | 
					WP_CPU_DB=0.25
 | 
				
			||||||
 | 
					WP_MEM_DB=0.25G
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					## End Performance ##
 | 
				
			||||||
							
								
								
									
										15
									
								
								README.md
									
									
									
									
									
								
							
							
						
						
									
										15
									
								
								README.md
									
									
									
									
									
								
							@@ -1,18 +1,22 @@
 | 
				
			|||||||
# My Docker Setup
 | 
					# My Docker Setup
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Scripting my way into the Docker world. I was unable to find a good tutorial on
 | 
					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
 | 
					using and managing containers so this is what made sense to me based on practice
 | 
				
			||||||
with `docker-compose`. Also has some usages of `Dockerfile` to build some apps.
 | 
					with `docker-compose`. Also has some usages of `Dockerfile` to build some apps.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
## Disclaimer
 | 
					## Disclaimer
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Currently the project only focuses on `apt` based operating systems, and is
 | 
					Currently the project only focuses on `apt` based operating systems, and is
 | 
				
			||||||
being used in production by the latest Debian release.
 | 
					being used in production by the latest Debian release.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
## Other README's
 | 
					## Other README's
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Each `Config/PROJECT/` folder also contains its own README file with specific
 | 
					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
 | 
					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.
 | 
					Docker installation. The others then contain details on their program setup.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
## How To Use
 | 
					## How To Use
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Most of these commands benefit from being root. Something like a `sudo su -` if
 | 
					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
 | 
					you feel comfortable with it. Otherwise be aware that using sudo may cause file
 | 
				
			||||||
permission conflicts when interacting with the configuration files and folders.
 | 
					permission conflicts when interacting with the configuration files and folders.
 | 
				
			||||||
@@ -70,17 +74,20 @@ Cross your fingers and hope to succeed!
 | 
				
			|||||||
## Folders
 | 
					## Folders
 | 
				
			||||||
 | 
					
 | 
				
			||||||
### Config
 | 
					### Config
 | 
				
			||||||
Compose projects are set up here. Each folder should have a `docker-compose.yml`
 | 
					
 | 
				
			||||||
file set up unless it is for utility such as DynamicDNS, which is used in CRON.
 | 
					Compose projects are set up here. Each folder needs `docker-compose.yml` and `.env`
 | 
				
			||||||
 | 
					files set up unless it is for utility such as DynamicDNS, which is used in CRON.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
### Volumes
 | 
					### Volumes
 | 
				
			||||||
 | 
					
 | 
				
			||||||
The data of the files go here if the Config is done correctly. I think this
 | 
					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
 | 
					will 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
 | 
					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
 | 
					`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.
 | 
					directory other than `/opt/Docker`, this project is location agnostic.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
### bin
 | 
					### bin
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Scripts to help make life easier. Some are pretty basic, but others do nice
 | 
					Scripts to help make life easier. Some are pretty basic, but others do nice
 | 
				
			||||||
things like handle the container IDs.
 | 
					things like handle the container IDs.
 | 
				
			||||||
- `create.sh`
 | 
					- `create.sh`
 | 
				
			||||||
@@ -94,4 +101,4 @@ things like handle the container IDs.
 | 
				
			|||||||
    - Start, stop, update, rebuild, etc all compose containers.
 | 
					    - Start, stop, update, rebuild, etc all compose containers.
 | 
				
			||||||
- `uninstall.sh`
 | 
					- `uninstall.sh`
 | 
				
			||||||
    - If something goes wrong and you'd like to start from scratch without
 | 
					    - If something goes wrong and you'd like to start from scratch without
 | 
				
			||||||
      provisioning a new server then this should do the job.
 | 
					      provisioning a new server then this will do the job.
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										16
									
								
								Volumes/IGNORED/README.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										16
									
								
								Volumes/IGNORED/README.md
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,16 @@
 | 
				
			|||||||
 | 
					# Volumes/IGNORED/README.md
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Docker volumes which do not need included in backups and are safe to delete
 | 
				
			||||||
 | 
					during downtime without harming the integrity of the application they support
 | 
				
			||||||
 | 
					can be directed here.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Examples could be:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					- LibreTranslate's models
 | 
				
			||||||
 | 
					    - These can be downloaded at any time and do not need recovered.
 | 
				
			||||||
 | 
					- Provision Tests
 | 
				
			||||||
 | 
					    - These are test VMs which ensure privisionin scrips work proeprly.
 | 
				
			||||||
 | 
					    They are meant to be disposed of frequently and recrated from scratch.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					If working on test VMs, such as a dev or stage Nextcloud that shouldn't be
 | 
				
			||||||
 | 
					taking up backup space, this would also be a good place for them.
 | 
				
			||||||
@@ -5,37 +5,92 @@
 | 
				
			|||||||
DIR="$(dirname -- "${BASH_SOURCE[0]}")"
 | 
					DIR="$(dirname -- "${BASH_SOURCE[0]}")"
 | 
				
			||||||
PROG="$(basename -- "${BASH_SOURCE[0]}")"
 | 
					PROG="$(basename -- "${BASH_SOURCE[0]}")"
 | 
				
			||||||
echo "$DIR/$PROG"
 | 
					echo "$DIR/$PROG"
 | 
				
			||||||
source $DIR/../source.env
 | 
					source "$DIR/../source.env"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
## Variables ##
 | 
					## Variables ##
 | 
				
			||||||
 | 
					
 | 
				
			||||||
file="/tmp/Backup.zip"
 | 
					TAG="Docker"
 | 
				
			||||||
 | 
					DATE="`date "+%Y%m%d-%H%M%S"`"
 | 
				
			||||||
 | 
					BACKUP_DIR="/srv/backup"
 | 
				
			||||||
 | 
					BASENAME="Backup"
 | 
				
			||||||
 | 
					file="$BACKUP_DIR/$BASENAME.$DATE.$HOSTNAME.$TAG.zip"
 | 
				
			||||||
time="`which time`"
 | 
					time="`which time`"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					## Functions ##
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					function usage {
 | 
				
			||||||
 | 
						cat <<- EOF
 | 
				
			||||||
 | 
							Backup script for Hyperling's self-managed Docker setup.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							Usage: $PROG [-u] [-d] [-h]
 | 
				
			||||||
 | 
								-u : Bring all containers up after the backup has finished.
 | 
				
			||||||
 | 
								-d : Bring all containers down before taking the backup.
 | 
				
			||||||
 | 
								-h : Display this help text.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							Example:
 | 
				
			||||||
 | 
								$PROG -ud
 | 
				
			||||||
 | 
						EOF
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						exit $1
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					## Parameters ##
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					up=FALSE
 | 
				
			||||||
 | 
					down=FALSE
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					while getopts ':udh' opt; do
 | 
				
			||||||
 | 
						case "$opt" in
 | 
				
			||||||
 | 
							u) up=TRUE ;;
 | 
				
			||||||
 | 
							d) down=TRUE ;;
 | 
				
			||||||
 | 
							h) usage 0 ;;
 | 
				
			||||||
 | 
							*) echo "ERROR: Option $OPTARG not recognized." >&2
 | 
				
			||||||
 | 
								usage 1 ;;
 | 
				
			||||||
 | 
						esac
 | 
				
			||||||
 | 
					done
 | 
				
			||||||
 | 
					
 | 
				
			||||||
## Main ##
 | 
					## Main ##
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# Remove the last backup.
 | 
					# Ensure backup directory exists with correct permissions.
 | 
				
			||||||
if [[ -e $file ]]; then
 | 
					mkdir -pv "$BACKUP_DIR"
 | 
				
			||||||
	echo "`date` - Removing existing file."
 | 
					mkdir -pv "$BACKUP_DIR/TRASH"
 | 
				
			||||||
	rm -fv $file
 | 
					chmod -Rv 775 "$BACKUP_DIR"
 | 
				
			||||||
fi
 | 
					chown -Rv root:root "$BACKUP_DIR"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Remove the last backup.
 | 
				
			||||||
 | 
					echo "`date` - Removing existing files."
 | 
				
			||||||
 | 
					cd "$BACKUP_DIR"
 | 
				
			||||||
 | 
					mv -v "$BASENAME"*"$TAG"* TRASH/
 | 
				
			||||||
 | 
					rm -v TRASH/*
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					if [[ "$down" == "TRUE" ]]; then
 | 
				
			||||||
	echo -e "\n`date` - Take down services for a cold backup."
 | 
						echo -e "\n`date` - Take down services for a cold backup."
 | 
				
			||||||
	manage.sh -d
 | 
						manage.sh -d
 | 
				
			||||||
 | 
					else
 | 
				
			||||||
 | 
						echo -e "\n`date` - Skipping take down."
 | 
				
			||||||
 | 
					fi
 | 
				
			||||||
 | 
					
 | 
				
			||||||
echo -e "\n`date` - Create the backup for '$DOCKER_HOME'."
 | 
					echo -e "\n`date` - Create the backup for '$DOCKER_HOME'."
 | 
				
			||||||
cd $DOCKER_HOME
 | 
					$time zip -r "$file.tmp" \
 | 
				
			||||||
$time zip -r $file.tmp . 1>/dev/null
 | 
						"$DOCKER_HOME" \
 | 
				
			||||||
mv -v $file.tmp $file
 | 
						/etc/crontab /etc/cron.d \
 | 
				
			||||||
 | 
						/var/spool/cron /var/{log,mail} \
 | 
				
			||||||
 | 
						--exclude "$DOCKER_HOME/Volumes/IGNORED/*" \
 | 
				
			||||||
 | 
						1>/dev/null
 | 
				
			||||||
 | 
					mv -v "$file.tmp" "$file"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
echo -e "\n`date` - Done with zipping, check size."
 | 
					echo -e "\n`date` - Done with zipping, check size."
 | 
				
			||||||
ls -sh $file
 | 
					ls -sh "$file"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
echo -e "\n`date` - Ensure other users can access the file."
 | 
					echo -e "\n`date` - Ensure other users can access the file."
 | 
				
			||||||
chmod -v 755 $file
 | 
					chmod -v 755 "$file"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					if [[ "$up" == "TRUE" ]]; then
 | 
				
			||||||
	echo -e "\n`date` - Bring services back up."
 | 
						echo -e "\n`date` - Bring services back up."
 | 
				
			||||||
	manage.sh -u
 | 
						manage.sh -u
 | 
				
			||||||
 | 
					else
 | 
				
			||||||
 | 
						echo -e "\n`date` - Skipping restoring services."
 | 
				
			||||||
 | 
					fi
 | 
				
			||||||
 | 
					
 | 
				
			||||||
## Finish ##
 | 
					## Finish ##
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -130,7 +130,7 @@ fi
 | 
				
			|||||||
if [[ -z $up && -z $down && -z $build && -z $pull && -z $clean
 | 
					if [[ -z $up && -z $down && -z $build && -z $pull && -z $clean
 | 
				
			||||||
	&& -z $interact && -z $logs && -z $stats
 | 
						&& -z $interact && -z $logs && -z $stats
 | 
				
			||||||
]]; then
 | 
					]]; then
 | 
				
			||||||
	docker ps
 | 
						docker ps --size
 | 
				
			||||||
	exit 0
 | 
						exit 0
 | 
				
			||||||
fi
 | 
					fi
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,7 +1,7 @@
 | 
				
			|||||||
#!/usr/bin/env bash
 | 
					#!/usr/bin/env bash
 | 
				
			||||||
# 2024-01-29 Hyperling
 | 
					# 2024-01-29 Hyperling
 | 
				
			||||||
# Example of how to pull the polled Backip.zip file. This would be placed on
 | 
					# Example of how to pull the polled Backip.zip file. This would be placed on
 | 
				
			||||||
# the machine holding the backups in the directory that it should land.
 | 
					# the machine holding the backups in the directory that it needs to land.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
DIR="$(dirname -- "${BASH_SOURCE[0]}")"
 | 
					DIR="$(dirname -- "${BASH_SOURCE[0]}")"
 | 
				
			||||||
PROG="$(basename -- "${BASH_SOURCE[0]}")"
 | 
					PROG="$(basename -- "${BASH_SOURCE[0]}")"
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,4 +1,4 @@
 | 
				
			|||||||
# The entries below should be added to the root crontab, taking into account
 | 
					# The entries below need to be added to the root crontab, taking into account
 | 
				
			||||||
# where you have placed your Docker Home. This assumes `/opt/Docker`.
 | 
					# where you have placed your Docker Home. This assumes `/opt/Docker`.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
## Dynamic DNS ##
 | 
					## Dynamic DNS ##
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user