Compare commits
	
		
			80 Commits
		
	
	
		
			f0679bd05f
			...
			dev
		
	
	| 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 | 
							
								
								
									
										24
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										24
									
								
								.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,10 +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". | # Ignore copies of the Hugo configuration, such as "Config/Hugo-MyWebsite". | ||||||
| Hugo-* | Hugo-* | ||||||
| *-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. | ||||||
|  | ## | ||||||
| @@ -1,7 +1,7 @@ | |||||||
| # 2025-08-13 Hyperling | # 2025-08-13 Hyperling | ||||||
|  |  | ||||||
| ## Image ## | ## Image ## | ||||||
| FROM debian:bookworm-slim | FROM debian:trixie-slim | ||||||
|  |  | ||||||
| ## Setup ## | ## Setup ## | ||||||
| # System Dependencies | # System Dependencies | ||||||
|   | |||||||
| @@ -26,5 +26,5 @@ services: | |||||||
|       mode: global |       mode: global | ||||||
|       resources: |       resources: | ||||||
|         limits: |         limits: | ||||||
|           cpus: '0.10' |           cpus: $CPU | ||||||
|           memory: 64M |           memory: $MEM | ||||||
|   | |||||||
| @@ -6,13 +6,13 @@ | |||||||
| COMPOSE_BAKE=true | COMPOSE_BAKE=true | ||||||
| 
 | 
 | ||||||
| # | # | ||||||
| ## Git Website Repository | ## Git Website Repository ## | ||||||
| # | # | ||||||
| REPO=https://git.hyperling.com/me/hugo-jackanope | REPO=https://git.hyperling.com/me/hugo-jackanope | ||||||
| BRANCH=main | BRANCH=prod | ||||||
| 
 | 
 | ||||||
| # | # | ||||||
| ## Web Environments | ## Web Environments ## | ||||||
| # Please use values YES/TRUE and NO/FALSE. | # Please use values YES/TRUE and NO/FALSE. | ||||||
| 
 | 
 | ||||||
| # Whether to start NGINX | # Whether to start NGINX | ||||||
| @@ -20,3 +20,9 @@ PROD=YES | |||||||
| 
 | 
 | ||||||
| # Whether to start Hugo Server | # Whether to start Hugo Server | ||||||
| DEV=NO | DEV=NO | ||||||
|  | 
 | ||||||
|  | # | ||||||
|  | ## Resources ## | ||||||
|  | # | ||||||
|  | CPU=0.10 | ||||||
|  | MEM=0.10G | ||||||
| @@ -17,12 +17,17 @@ DEV="$4" | |||||||
| typeset -u DEV | typeset -u DEV | ||||||
| echo "DEV='$DEV'" | echo "DEV='$DEV'" | ||||||
|  |  | ||||||
|  | SITE="/var/www/hugo/site" | ||||||
|  |  | ||||||
| echo "*** Creating Git Repo ***" | echo "*** Creating Git Repo ***" | ||||||
| sudo -u www-data git clone --recurse-submodules $BRANCH $REPO /var/www/hugo/site | if [[ -d $SITE ]]; then | ||||||
|  | 	rm -rfv $SITE | ||||||
|  | fi | ||||||
|  | sudo -u www-data git clone --recurse-submodules $BRANCH $REPO $SITE | ||||||
| status="$?" | status="$?" | ||||||
|  |  | ||||||
| echo "*** Validating Git Repo ***" | echo "*** Validating Git Repo ***" | ||||||
| if [[ $status != 0 || ! -d /var/www/hugo/site/.git ]]; then | if [[ $status != 0 || ! -d $SITE/.git ]]; then | ||||||
| 	echo "ERROR: Hugo project may not have cloned correctly. status='$status'" | 	echo "ERROR: Hugo project may not have cloned correctly. status='$status'" | ||||||
| 	echo "Aborting." | 	echo "Aborting." | ||||||
| 	exit 1 | 	exit 1 | ||||||
| @@ -62,7 +67,7 @@ if [[ "$DEV" == "Y"* || "$DEV" == "T"* ]]; then | |||||||
| 		http_code="`curl -sS http://localhost:1380 -o /dev/null -w "%{http_code}"`" | 		http_code="`curl -sS http://localhost:1380 -o /dev/null -w "%{http_code}"`" | ||||||
| 		if [[ $http_code != 200 ]]; then | 		if [[ $http_code != 200 ]]; then | ||||||
| 			echo "* Dev server not detected, starting..." | 			echo "* Dev server not detected, starting..." | ||||||
| 			cd /var/www/hugo/site | 			cd $SITE | ||||||
| 			killall hugo 2>/dev/null | 			killall hugo 2>/dev/null | ||||||
| 			sudo -u www-data hugo server -D --noBuildLock --bind 0.0.0.0 -p 1380 & | 			sudo -u www-data hugo server -D --noBuildLock --bind 0.0.0.0 -p 1380 & | ||||||
| 		fi | 		fi | ||||||
|   | |||||||
| @@ -6,7 +6,7 @@ | |||||||
| 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 sudo curl | 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 | ||||||
| @@ -16,10 +16,18 @@ 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's Run Script" && \ |     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 |  | ||||||
| @@ -1,9 +0,0 @@ | |||||||
| # This file should be 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 |  | ||||||
							
								
								
									
										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 | ||||||
| @@ -1,4 +1,4 @@ | |||||||
| # This file should be renamed '.env' and have any private values modified. | # This file will need renamed '.env' and have any private values modified. | ||||||
| 
 | 
 | ||||||
| COMPOSE_BAKE=true | COMPOSE_BAKE=true | ||||||
| 
 | 
 | ||||||
| @@ -47,3 +47,7 @@ MODELS_DIR=../../Volumes/LibreTranslate/models | |||||||
| ## them from backup type locations such as Volumes/LibreTranslate/ and /var/. | ## them from backup type locations such as Volumes/LibreTranslate/ and /var/. | ||||||
| ## Please see the README for the CRON command related to this setting. | ## Please see the README for the CRON command related to this setting. | ||||||
| # MODELS_DIR=/tmp/LibreTranslate/models | # 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 | ||||||
| @@ -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]}")" | ||||||
|   | |||||||
| @@ -1,4 +1,4 @@ | |||||||
| # Example environment file for Nextcloud stack, should be copied as `.env`. | # Example environment file for Nextcloud stack, needs copied as `.env`. | ||||||
|  |  | ||||||
| # The 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. | ||||||
| @@ -32,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. | ||||||
|  |  | ||||||
| @@ -53,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,4 +1,4 @@ | |||||||
| # Example environment file for Nextcloud stack, should be copied as `.env`. | # Example environment file for Nextcloud stack, needs copied as `.env`. | ||||||
|  |  | ||||||
| # The 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. | ||||||
| @@ -32,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. | ||||||
|  |  | ||||||
| @@ -53,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: | ||||||
|   | |||||||
| @@ -35,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,39 +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-Docker.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 ## | ||||||
|  |  | ||||||
|  | # Ensure backup directory exists with correct permissions. | ||||||
|  | mkdir -pv "$BACKUP_DIR" | ||||||
|  | mkdir -pv "$BACKUP_DIR/TRASH" | ||||||
|  | chmod -Rv 775 "$BACKUP_DIR" | ||||||
|  | chown -Rv root:root "$BACKUP_DIR" | ||||||
|  |  | ||||||
| # Remove the last backup. | # Remove the last backup. | ||||||
| if [[ -e $file ]]; then | echo "`date` - Removing existing files." | ||||||
| 	echo "`date` - Removing existing file." | cd "$BACKUP_DIR" | ||||||
| 	rm -fv $file | mv -v "$BASENAME"*"$TAG"* TRASH/ | ||||||
|  | rm -v TRASH/* | ||||||
|  |  | ||||||
|  | if [[ "$down" == "TRUE" ]]; then | ||||||
|  | 	echo -e "\n`date` - Take down services for a cold backup." | ||||||
|  | 	manage.sh -d | ||||||
|  | else | ||||||
|  | 	echo -e "\n`date` - Skipping take down." | ||||||
| fi | fi | ||||||
|  |  | ||||||
| echo -e "\n`date` - Take down services for a cold backup." |  | ||||||
| manage.sh -d |  | ||||||
|  |  | ||||||
| echo -e "\n`date` - Create the backup for '$DOCKER_HOME'." | echo -e "\n`date` - Create the backup for '$DOCKER_HOME'." | ||||||
| $time zip -r $file.tmp \ | $time zip -r "$file.tmp" \ | ||||||
| 	$DOCKER_HOME \ | 	"$DOCKER_HOME" \ | ||||||
| 	/etc/crontab /etc/cron.d /var/spool/cron \ | 	/etc/crontab /etc/cron.d \ | ||||||
| 	/var/{log,mail} 1>/dev/null | 	/var/spool/cron /var/{log,mail} \ | ||||||
| mv -v $file.tmp $file | 	--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" | ||||||
|  |  | ||||||
| echo -e "\n`date` - Bring services back up." | if [[ "$up" == "TRUE" ]]; then | ||||||
| manage.sh -u | 	echo -e "\n`date` - Bring services back up." | ||||||
|  | 	manage.sh -u | ||||||
|  | else | ||||||
|  | 	echo -e "\n`date` - Skipping restoring services." | ||||||
|  | fi | ||||||
|  |  | ||||||
| ## Finish ## | ## Finish ## | ||||||
|  |  | ||||||
|   | |||||||
| @@ -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