Migrate services part
This commit is contained in:
		
							parent
							
								
									7c59e4ae57
								
							
						
					
					
						commit
						73bce8f6e5
					
				
					 157 changed files with 3883 additions and 9 deletions
				
			
		
							
								
								
									
										6
									
								
								roles/lego/files/hook.sh
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										6
									
								
								roles/lego/files/hook.sh
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,6 @@ | |||
| #!/usr/bin/env sh | ||||
| 
 | ||||
| cp -f "$LEGO_CERT_PATH" /certificates | ||||
| cp -f "$LEGO_CERT_KEY_PATH" /certificates | ||||
| 
 | ||||
| exit 33 # special exit code to signal that the certificate has been updated | ||||
							
								
								
									
										19
									
								
								roles/lego/files/lego.sh
									
										
									
									
									
										Executable file
									
								
							
							
						
						
									
										19
									
								
								roles/lego/files/lego.sh
									
										
									
									
									
										Executable file
									
								
							|  | @ -0,0 +1,19 @@ | |||
| #!/usr/bin/env sh | ||||
| 
 | ||||
| set -a | ||||
| . ./service.env | ||||
| set +a | ||||
| 
 | ||||
| domain="$1" | ||||
| action="${2:-renew}" | ||||
| 
 | ||||
| docker compose run --rm app \ | ||||
| 	--domains "$domain" \ | ||||
| 	"$action" \ | ||||
| 	"--$action-hook" "/config/hook.sh" | ||||
| 
 | ||||
| if [ "$?" = "33" ] && [ -x "./lego.d/$domain" ]; | ||||
| then | ||||
| 	echo "Running hook for $domain" | ||||
| 	"./lego.d/$domain" | ||||
| fi | ||||
							
								
								
									
										10
									
								
								roles/lego/files/lego@.timer
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										10
									
								
								roles/lego/files/lego@.timer
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,10 @@ | |||
| [Unit] | ||||
| Description=Renew certificates | ||||
| 
 | ||||
| [Timer] | ||||
| Persistent=true | ||||
| OnCalendar=*-*-* 01:15:00 | ||||
| RandomizedDelaySec=2h | ||||
| 
 | ||||
| [Install] | ||||
| WantedBy=timers.target | ||||
							
								
								
									
										16
									
								
								roles/lego/files/node002/db.serguzim.me
									
										
									
									
									
										Executable file
									
								
							
							
						
						
									
										16
									
								
								roles/lego/files/node002/db.serguzim.me
									
										
									
									
									
										Executable file
									
								
							|  | @ -0,0 +1,16 @@ | |||
| #!/usr/bin/env sh | ||||
| 
 | ||||
| domain="db.serguzim.me" | ||||
| 
 | ||||
| _install() { | ||||
|   install --owner=postgres --group=postgres --mode=600 \ | ||||
| 	  "$CERTIFICATES_PATH/$domain.$1" \ | ||||
| 	  "/var/lib/postgres/data/server.$1" | ||||
| } | ||||
| 
 | ||||
| _install crt | ||||
| _install key | ||||
| 
 | ||||
| sudo -u postgres pg_ctl -D /var/lib/postgres/data/ reload | ||||
| 
 | ||||
| # vim: ft=sh | ||||
							
								
								
									
										18
									
								
								roles/lego/files/node002/msrg.cc
									
										
									
									
									
										Executable file
									
								
							
							
						
						
									
										18
									
								
								roles/lego/files/node002/msrg.cc
									
										
									
									
									
										Executable file
									
								
							|  | @ -0,0 +1,18 @@ | |||
| #!/usr/bin/env sh | ||||
| 
 | ||||
| domain="msrg.cc" | ||||
| 
 | ||||
| tmpdir=$(mktemp -d) | ||||
| trap 'rm -rf $tmpdir' EXIT | ||||
| 
 | ||||
| cp "$CERTIFICATES_PATH/$domain.crt" "$tmpdir/fullchain.pem" | ||||
| cp "$CERTIFICATES_PATH/$domain.key" "$tmpdir/privkey.pem" | ||||
| 
 | ||||
| curl \ | ||||
| 	-F submit="submit" \ | ||||
| 	-F token="$WIUWIU_TOKEN" \ | ||||
| 	-F "cert=@$tmpdir/fullchain.pem" \ | ||||
| 	-F "key=@$tmpdir/privkey.pem" \ | ||||
| 	https://cert-upload.wiuwiu.de/
 | ||||
| 
 | ||||
| # vim: ft=sh | ||||
							
								
								
									
										17
									
								
								roles/lego/files/node002/registry.serguzim.me
									
										
									
									
									
										Executable file
									
								
							
							
						
						
									
										17
									
								
								roles/lego/files/node002/registry.serguzim.me
									
										
									
									
									
										Executable file
									
								
							|  | @ -0,0 +1,17 @@ | |||
| #!/usr/bin/env sh | ||||
| 
 | ||||
| domain="registry.serguzim.me" | ||||
| 
 | ||||
| _install() { | ||||
|   install --owner=root --group=root --mode=600 \ | ||||
| 	  "$CERTIFICATES_PATH/$domain.$1" \ | ||||
| 	  "/opt/services/harbor/server.$1" | ||||
| } | ||||
| 
 | ||||
| _install crt | ||||
| _install key | ||||
| 
 | ||||
| export HARBOR_BUNDLE_DIR=/opt/services/harbor | ||||
| $HARBOR_BUNDLE_DIR/harbor/install.sh | ||||
| 
 | ||||
| # vim: ft=sh | ||||
							
								
								
									
										19
									
								
								roles/lego/tasks/config.yml
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										19
									
								
								roles/lego/tasks/config.yml
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,19 @@ | |||
| --- | ||||
| - name: Set config path | ||||
|   ansible.builtin.set_fact: | ||||
|     config_path: "{{ (service_path, 'config') | path_join }}" | ||||
| - name: Create config directory | ||||
|   ansible.builtin.file: | ||||
|     path: "{{ config_path }}" | ||||
|     state: directory | ||||
|     mode: "0755" | ||||
| - name: Copy the acme-dns-accounts | ||||
|   ansible.builtin.template: | ||||
|     src: "json.j2" | ||||
|     dest: "{{ (config_path, 'acme-dns-accounts.json') | path_join }}" | ||||
|     mode: "0644" | ||||
| - name: Copy the hook script | ||||
|   ansible.builtin.copy: | ||||
|     src: "hook.sh" | ||||
|     dest: "{{ (config_path, 'hook.sh') | path_join }}" | ||||
|     mode: "0755" | ||||
							
								
								
									
										16
									
								
								roles/lego/tasks/lego.d.yml
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										16
									
								
								roles/lego/tasks/lego.d.yml
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,16 @@ | |||
| --- | ||||
| - name: Set lego.d path | ||||
|   ansible.builtin.set_fact: | ||||
|     lego_d_path: "{{ (service_path, 'lego.d') | path_join }}" | ||||
| - name: Create lego.d directory | ||||
|   ansible.builtin.file: | ||||
|     path: "{{ lego_d_path }}" | ||||
|     state: directory | ||||
|     mode: "0755" | ||||
| - name: Copy the additional lego scripts | ||||
|   ansible.builtin.copy: | ||||
|     src: "{{ item }}" | ||||
|     dest: "{{ lego_d_path }}" | ||||
|     mode: "0755" | ||||
|   with_fileglob: | ||||
|     - "{{ ansible_facts.hostname }}/*" | ||||
							
								
								
									
										35
									
								
								roles/lego/tasks/main.yml
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										35
									
								
								roles/lego/tasks/main.yml
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,35 @@ | |||
| --- | ||||
| - name: Set common facts | ||||
|   ansible.builtin.import_tasks: tasks/set-default-facts.yml | ||||
| 
 | ||||
| - name: Deploy {{ svc.name }} | ||||
|   vars: | ||||
|     svc: "{{ lego_svc }}" | ||||
|     env: "{{ lego_env }}" | ||||
|     json: "{{ vault_acmedns_registered | acmedns_to_lego }}" | ||||
|     compose: "{{ lego_compose }}" | ||||
|   block: | ||||
|     - name: Import prepare tasks for common service | ||||
|       ansible.builtin.import_tasks: tasks/prepare-common-service.yml | ||||
| 
 | ||||
|     - name: Create _certificates directory | ||||
|       ansible.builtin.file: | ||||
|         path: "{{ certificates_path }}" | ||||
|         state: directory | ||||
|         mode: "0755" | ||||
| 
 | ||||
|     - name: Import tasks specific to the config directory | ||||
|       ansible.builtin.import_tasks: config.yml | ||||
|     - name: Import tasks specific to lego.d | ||||
|       ansible.builtin.import_tasks: lego.d.yml | ||||
|     - name: Import tasks specific to systemd | ||||
|       ansible.builtin.import_tasks: systemd.yml | ||||
| 
 | ||||
|     - name: Copy the run script | ||||
|       ansible.builtin.copy: | ||||
|         src: "lego.sh" | ||||
|         dest: "{{ (service_path, 'lego.sh') | path_join }}" | ||||
|         mode: "0755" | ||||
| 
 | ||||
|     - name: Import tasks create a service.env file | ||||
|       ansible.builtin.import_tasks: tasks/steps/template-service-env.yml | ||||
							
								
								
									
										24
									
								
								roles/lego/tasks/systemd.yml
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										24
									
								
								roles/lego/tasks/systemd.yml
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,24 @@ | |||
| --- | ||||
| - name: Copy the system service | ||||
|   ansible.builtin.template: | ||||
|     src: lego@.service.j2 | ||||
|     dest: /etc/systemd/system/lego@.service | ||||
|     mode: "0644" | ||||
|   become: true | ||||
| - name: Copy the system timer | ||||
|   ansible.builtin.copy: | ||||
|     src: lego@.timer | ||||
|     dest: /etc/systemd/system/lego@.timer | ||||
|     mode: "0644" | ||||
|   become: true | ||||
| - name: Enable the system timers | ||||
|   ansible.builtin.systemd_service: | ||||
|     name: lego@{{ item }}.timer | ||||
|     state: started | ||||
|     enabled: true | ||||
|     daemon_reload: true | ||||
|   loop: | ||||
|     - msrg.cc | ||||
|     - db.serguzim.me | ||||
|     - registry.serguzim.me | ||||
|   become: true | ||||
							
								
								
									
										4
									
								
								roles/lego/templates/lego@.service.j2
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										4
									
								
								roles/lego/templates/lego@.service.j2
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,4 @@ | |||
| [Service] | ||||
| Type=oneshot | ||||
| ExecStart={{ service_path }}/lego.sh %i | ||||
| WorkingDirectory={{ service_path }} | ||||
							
								
								
									
										34
									
								
								roles/lego/vars/main.yml
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										34
									
								
								roles/lego/vars/main.yml
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,34 @@ | |||
| --- | ||||
| lego_svc: | ||||
|   name: lego | ||||
| 
 | ||||
| lego_env: | ||||
|   ACME_DNS_API_BASE: https://{{ acme_dns.host }} | ||||
|   ACME_DNS_STORAGE_PATH: /config/acme-dns-accounts.json | ||||
| 
 | ||||
|   LEGO_EMAIL: "{{ admin_email }}" | ||||
|   LEGO_PATH: /data | ||||
| 
 | ||||
|   CERTIFICATES_PATH: "{{ certificates_path }}" | ||||
|   WIUWIU_TOKEN: "{{ vault_wiuwiu_token }}" | ||||
| 
 | ||||
| lego_compose: | ||||
|   watchtower: false | ||||
|   network: false | ||||
|   image: goacme/lego | ||||
|   volumes: | ||||
|     - ./config:/config:ro | ||||
|     - "{{ certificates_path }}:/certificates" | ||||
|     - data:/data | ||||
|   file: | ||||
|     services: | ||||
|       app: | ||||
|         restart: never | ||||
|         network_mode: "host" | ||||
|         entrypoint: | ||||
|           - /lego | ||||
|           - --accept-tos | ||||
|           - --email={{ admin_email }} | ||||
|           - --dns=acme-dns | ||||
|     volumes: | ||||
|       data: | ||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue