Add keycloak
This commit is contained in:
		
					parent
					
						
							
								91274de823
							
						
					
				
			
			
				commit
				
					
						2dc4b6f5fd
					
				
			
		
					 6 changed files with 213 additions and 0 deletions
				
			
		
							
								
								
									
										16
									
								
								inventories/z9/host_vars/keycloak.yaml
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										16
									
								
								inventories/z9/host_vars/keycloak.yaml
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,16 @@ | ||||||
|  | docker_compose__compose_file_content: "{{ lookup('ansible.builtin.file', 'configs/keycloak/compose.yaml') }}" | ||||||
|  | docker_compose__configuration_files: [ ] | ||||||
|  | 
 | ||||||
|  | cert__acme_account_email: j+letsencrypt-ccchh@jsts.xyz | ||||||
|  | cert__domains: | ||||||
|  |   - "id.ccchh.net" | ||||||
|  |   - "keycloak-admin.ccchh.net" | ||||||
|  | cert__bind_9_host: authoritative-dns | ||||||
|  | cert__bind_9_zone: ccchh.net | ||||||
|  | 
 | ||||||
|  | nginx__version_spec: "" | ||||||
|  | nginx__configurations: | ||||||
|  |   - name: id.ccchh.net | ||||||
|  |     content: "{{ lookup('ansible.builtin.file', 'configs/keycloak/nginx/id.ccchh.net.conf') }}" | ||||||
|  |   - name: keycloak-admin.ccchh.net | ||||||
|  |     content: "{{ lookup('ansible.builtin.file', 'configs/keycloak/nginx/keycloak-admin.ccchh.net.conf') }}" | ||||||
|  | @ -24,3 +24,6 @@ all: | ||||||
|         authoritative-dns: |         authoritative-dns: | ||||||
|           ansible_host: authoritative-dns.z9.ccchh.net |           ansible_host: authoritative-dns.z9.ccchh.net | ||||||
|           ansible_user: chaos |           ansible_user: chaos | ||||||
|  |         keycloak: | ||||||
|  |           ansible_host: keycloak.z9.ccchh.net | ||||||
|  |           ansible_user: chaos | ||||||
|  |  | ||||||
							
								
								
									
										8
									
								
								playbooks/deploy_keycloak.yaml
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										8
									
								
								playbooks/deploy_keycloak.yaml
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,8 @@ | ||||||
|  | --- | ||||||
|  | - name: Deploy nginx and keycloak using docker_compose on keyloak | ||||||
|  |   become: true | ||||||
|  |   hosts: keycloak | ||||||
|  |   roles: | ||||||
|  |     - cert | ||||||
|  |     - docker_compose | ||||||
|  |     - nginx | ||||||
							
								
								
									
										78
									
								
								playbooks/files/configs/keycloak/compose.yaml
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										78
									
								
								playbooks/files/configs/keycloak/compose.yaml
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,78 @@ | ||||||
|  | ## Secrets: | ||||||
|  | # | ||||||
|  | # Secrets should be provided via the relevant `x_secrets.env` files to the | ||||||
|  | # containers. Options to be set are documented by commented out environment | ||||||
|  | # variables. | ||||||
|  | # | ||||||
|  | ## Links & Resources: | ||||||
|  | # | ||||||
|  | # https://www.keycloak.org/ | ||||||
|  | # https://www.keycloak.org/documentation | ||||||
|  | # https://www.keycloak.org/getting-started/getting-started-docker | ||||||
|  | # https://www.keycloak.org/server/configuration | ||||||
|  | # https://www.keycloak.org/server/containers | ||||||
|  | # https://www.keycloak.org/server/configuration-production | ||||||
|  | # https://www.keycloak.org/server/db | ||||||
|  | # https://hub.docker.com/_/postgres | ||||||
|  | # https://github.com/docker-library/docs/blob/master/postgres/README.md | ||||||
|  | # https://www.keycloak.org/server/hostname | ||||||
|  | # https://www.keycloak.org/server/reverseproxy | ||||||
|  | # https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Forwarded | ||||||
|  | # https://www.keycloak.org/server/all-config | ||||||
|  | 
 | ||||||
|  | services: | ||||||
|  |   keycloak: | ||||||
|  |     build: | ||||||
|  |       context: . | ||||||
|  |       dockerfile_inline: | | ||||||
|  |         FROM quay.io/keycloak/keycloak:21.1 as builder | ||||||
|  | 
 | ||||||
|  |         ENV KC_DB=postgres | ||||||
|  | 
 | ||||||
|  |         WORKDIR /opt/keycloak | ||||||
|  |         RUN /opt/keycloak/bin/kc.sh build | ||||||
|  | 
 | ||||||
|  |         FROM quay.io/keycloak/keycloak:21.1 | ||||||
|  |         COPY --from=builder /opt/keycloak/ /opt/keycloak/ | ||||||
|  | 
 | ||||||
|  |         # Runtime options set in compose directly. | ||||||
|  | 
 | ||||||
|  |         ENTRYPOINT ["/opt/keycloak/bin/kc.sh"] | ||||||
|  |     command: start --optimized | ||||||
|  |     depends_on: | ||||||
|  |       - db | ||||||
|  |     networks: | ||||||
|  |       - keycloak | ||||||
|  |     environment: | ||||||
|  |       KEYCLOAK_ADMIN: admin | ||||||
|  |       # KEYCLOAK_ADMIN_PASSWORD: in secrets file | ||||||
|  |       KC_DB: postgres | ||||||
|  |       KC_DB_URL_HOST: db | ||||||
|  |       KC_DB_USERNAME: keycloak | ||||||
|  |       # KC_DB_PASSWORD: in secrets file | ||||||
|  |       KC_HOSTNAME: id.ccchh.net | ||||||
|  |       KC_HOSTNAME_STRICT_BACKCHANNEL: true | ||||||
|  |       KC_HOSTNAME_ADMIN: keycloak-admin.ccchh.net | ||||||
|  |       KC_PROXY: edge | ||||||
|  |     ports: | ||||||
|  |       - "8080:8080" | ||||||
|  |     env_file: | ||||||
|  |       - keycloak_secrets.env  # Must be managed by the admin manually. Not managed by Ansible. | ||||||
|  | 
 | ||||||
|  |   db: | ||||||
|  |     image: postgres:15.2 | ||||||
|  |     restart: always | ||||||
|  |     networks: | ||||||
|  |       - keycloak | ||||||
|  |     volumes: | ||||||
|  |       - "./database:/var/lib/postgresql/data" | ||||||
|  |     environment: | ||||||
|  |       POSTGRES_USER: keycloak | ||||||
|  |       # POSTGRES_PASSWORD: in secrets file | ||||||
|  |       POSTGRES_DB: keycloak | ||||||
|  |     env_file: | ||||||
|  |       - db_secrets.env  # Must be managed by the admin manually. Not managed by Ansible. | ||||||
|  | 
 | ||||||
|  | networks: | ||||||
|  |   keycloak: | ||||||
|  |     external: false | ||||||
							
								
								
									
										57
									
								
								playbooks/files/configs/keycloak/nginx/id.ccchh.net.conf
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										57
									
								
								playbooks/files/configs/keycloak/nginx/id.ccchh.net.conf
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,57 @@ | ||||||
|  | # partly generated 2022-01-08, Mozilla Guideline v5.6, nginx 1.17.7, OpenSSL 1.1.1k, intermediate configuration | ||||||
|  | # https://ssl-config.mozilla.org/#server=nginx&version=1.17.7&config=intermediate&openssl=1.1.1k&guideline=5.6 | ||||||
|  | # Also see: https://www.keycloak.org/server/reverseproxy | ||||||
|  | server { | ||||||
|  |     # # Listen on a custom port for the proxy protocol. | ||||||
|  |     # listen 8443 ssl http2 proxy_protocol; | ||||||
|  |     # # Make use of the ngx_http_realip_module to set the $remote_addr and | ||||||
|  |     # # $remote_port to the client address and client port, when using proxy | ||||||
|  |     # # protocol. | ||||||
|  |     # # First set our proxy protocol proxy as trusted. | ||||||
|  |     # set_real_ip_from 10.31.206.11; | ||||||
|  |     # # Then tell the realip_module to get the addreses from the proxy protocol | ||||||
|  |     # # header. | ||||||
|  |     # real_ip_header proxy_protocol; | ||||||
|  |     # Temporarily internal-only. | ||||||
|  |     listen 443 ssl http2; | ||||||
|  | 
 | ||||||
|  |     server_name id.ccchh.net; | ||||||
|  | 
 | ||||||
|  |     ssl_certificate /etc/ansible_certs/certs/id.ccchh.net/fullchain.pem; | ||||||
|  |     ssl_certificate_key /etc/ansible_certs/certs/id.ccchh.net/privkey.pem; | ||||||
|  |     # verify chain of trust of OCSP response using Root CA and Intermediate certs | ||||||
|  |     ssl_trusted_certificate /etc/ansible_certs/certs/id.ccchh.net/chain.pem; | ||||||
|  | 
 | ||||||
|  |     # HSTS (ngx_http_headers_module is required) (63072000 seconds) | ||||||
|  |     add_header Strict-Transport-Security "max-age=63072000" always; | ||||||
|  | 
 | ||||||
|  |     proxy_set_header Host $host; | ||||||
|  |     proxy_set_header X-Forwarded-Host $host; | ||||||
|  |     proxy_set_header X-Real-IP $remote_addr; | ||||||
|  |     proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; | ||||||
|  |     proxy_set_header X-Forwarded-Port 443; | ||||||
|  |     # This is https in any case. | ||||||
|  |     proxy_set_header X-Forwarded-Proto https; | ||||||
|  |     # Hide the X-Forwarded header. | ||||||
|  |     proxy_hide_header X-Forwarded; | ||||||
|  |     # Assume we are the only Reverse Proxy (well using Proxy Protocol, but that | ||||||
|  |     # is transparent). | ||||||
|  |     # Also provide "_hidden" for by, since it's not relevant. | ||||||
|  |     proxy_set_header Forwarded "for=$remote_addr;proto=https;host=$host;by=_hidden"; | ||||||
|  | 
 | ||||||
|  |     location /js/ { | ||||||
|  |         proxy_pass http://127.0.0.1:8080/js/; | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     location /realms/ { | ||||||
|  |         proxy_pass http://127.0.0.1:8080/realms/; | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     location /resources/ { | ||||||
|  |         proxy_pass http://127.0.0.1:8080/resources/; | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     location /robots.txt { | ||||||
|  |         proxy_pass http://127.0.0.1:8080/robots.txt; | ||||||
|  |     } | ||||||
|  | } | ||||||
|  | @ -0,0 +1,51 @@ | ||||||
|  | # partly generated 2022-01-08, Mozilla Guideline v5.6, nginx 1.17.7, OpenSSL 1.1.1k, intermediate configuration | ||||||
|  | # https://ssl-config.mozilla.org/#server=nginx&version=1.17.7&config=intermediate&openssl=1.1.1k&guideline=5.6 | ||||||
|  | # Also see: https://www.keycloak.org/server/reverseproxy | ||||||
|  | server { | ||||||
|  |     listen 443 ssl http2; | ||||||
|  |     #listen [::]:443 ssl http2; | ||||||
|  | 
 | ||||||
|  |     server_name keycloak-admin.ccchh.net; | ||||||
|  | 
 | ||||||
|  |     ssl_certificate /etc/ansible_certs/certs/keycloak-admin.ccchh.net/fullchain.pem; | ||||||
|  |     ssl_certificate_key /etc/ansible_certs/certs/keycloak-admin.ccchh.net/privkey.pem; | ||||||
|  |     # verify chain of trust of OCSP response using Root CA and Intermediate certs | ||||||
|  |     ssl_trusted_certificate /etc/ansible_certs/certs/keycloak-admin.ccchh.net/chain.pem; | ||||||
|  | 
 | ||||||
|  |     # HSTS (ngx_http_headers_module is required) (63072000 seconds) | ||||||
|  |     add_header Strict-Transport-Security "max-age=63072000" always; | ||||||
|  | 
 | ||||||
|  |     proxy_set_header Host $host; | ||||||
|  |     proxy_set_header X-Forwarded-Host $host; | ||||||
|  |     proxy_set_header X-Real-IP $remote_addr; | ||||||
|  |     proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; | ||||||
|  |     proxy_set_header X-Forwarded-Port 443; | ||||||
|  |     # This is https in any case. | ||||||
|  |     proxy_set_header X-Forwarded-Proto https; | ||||||
|  |     # Hide the X-Forwarded header. | ||||||
|  |     proxy_hide_header X-Forwarded; | ||||||
|  |     # Assume we are the only Reverse Proxy (well using Proxy Protocol, but that | ||||||
|  |     # is transparent). | ||||||
|  |     # Also provide "_hidden" for by, since it's not relevant. | ||||||
|  |     proxy_set_header Forwarded "for=$remote_addr;proto=https;host=$host;by=_hidden"; | ||||||
|  | 
 | ||||||
|  |     location /js/ { | ||||||
|  |         proxy_pass http://127.0.0.1:8080/js/; | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     location /realms/ { | ||||||
|  |         proxy_pass http://127.0.0.1:8080/realms/; | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     location /resources/ { | ||||||
|  |         proxy_pass http://127.0.0.1:8080/resources/; | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     location /robots.txt { | ||||||
|  |         proxy_pass http://127.0.0.1:8080/robots.txt; | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     location /admin/ { | ||||||
|  |         proxy_pass http://127.0.0.1:8080/admin/; | ||||||
|  |     } | ||||||
|  | } | ||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 julian
				julian