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: | ||||
|           ansible_host: authoritative-dns.z9.ccchh.net | ||||
|           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