mirror of
https://github.com/2martens/cloud-configuration.git
synced 2026-10-17 08:37:56 +02:00
feat: Add keycloak role that creates the initial setup
This commit is contained in:
+10
@@ -0,0 +1,10 @@
|
|||||||
|
{
|
||||||
|
"folders": [
|
||||||
|
{
|
||||||
|
"path": ".."
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"settings": {
|
||||||
|
"ansible.python.interpreterPath": "/opt/homebrew/bin/python3"
|
||||||
|
}
|
||||||
|
}
|
||||||
Vendored
+3
@@ -0,0 +1,3 @@
|
|||||||
|
{
|
||||||
|
"ansible.python.interpreterPath": "/opt/homebrew/bin/python3"
|
||||||
|
}
|
||||||
@@ -0,0 +1,2 @@
|
|||||||
|
[defaults]
|
||||||
|
roles_path = roles:playbooks/roles
|
||||||
@@ -0,0 +1,10 @@
|
|||||||
|
$ANSIBLE_VAULT;1.1;AES256
|
||||||
|
37626238663938613666353334626433623434656638633063373634303135323834616436333434
|
||||||
|
3563376532353538336637326138666362393530386165310a373033373666393962393339386666
|
||||||
|
61323339623039383531613261656139326434393433356530393231386165366235633032353831
|
||||||
|
6662626130353736340a323963393235383461643137633739643065333536333131366634616233
|
||||||
|
39653037636536323834313164623631653831366334303235366239333262336237396466353532
|
||||||
|
38323461393261356337663461363732353631653164363131613032643539346665663637656365
|
||||||
|
66353139333432363335343632373731333138343735316336336531373431623534373338363366
|
||||||
|
66633731353331626166373265393963393936373863363538613831353636303631656564666566
|
||||||
|
6435
|
||||||
@@ -0,0 +1,3 @@
|
|||||||
|
---
|
||||||
|
ssh_user: keywolke
|
||||||
|
domain: id.2martens.de
|
||||||
@@ -14,3 +14,6 @@ repo ansible_host=shaula.uberspace.de ansible_python_interpreter=/usr/bin/python
|
|||||||
|
|
||||||
[applications]
|
[applications]
|
||||||
api-server ansible_host=49.13.77.70 ansible_python_interpreter=/usr/bin/python3
|
api-server ansible_host=49.13.77.70 ansible_python_interpreter=/usr/bin/python3
|
||||||
|
|
||||||
|
[keycloak]
|
||||||
|
keycloak-server ansible_host=monoceres.uberspace.de ansible_python_interpreter=/usr/bin/python
|
||||||
@@ -52,3 +52,10 @@
|
|||||||
tags: springBoot
|
tags: springBoot
|
||||||
roles:
|
roles:
|
||||||
- spring_boot
|
- spring_boot
|
||||||
|
- name: Set up Keycloak
|
||||||
|
hosts: keycloak
|
||||||
|
gather_facts: false
|
||||||
|
remote_user: "{{ ssh_user }}"
|
||||||
|
tags: keycloak
|
||||||
|
roles:
|
||||||
|
- keycloak
|
||||||
@@ -1,4 +1,8 @@
|
|||||||
---
|
---
|
||||||
collections:
|
collections:
|
||||||
- community.docker
|
- community.docker
|
||||||
- community.general
|
- community.general
|
||||||
|
- community.mysql
|
||||||
|
- ansible.posix
|
||||||
|
- hetzner.hcloud
|
||||||
|
- middleware_automation.keycloak
|
||||||
|
|||||||
@@ -19,5 +19,5 @@
|
|||||||
group: root
|
group: root
|
||||||
mode: "644"
|
mode: "644"
|
||||||
- name: Start drone docker container
|
- name: Start drone docker container
|
||||||
community.docker.docker_compose:
|
community.docker.docker_compose_v2:
|
||||||
project_src: /etc/drone
|
project_src: /etc/drone
|
||||||
|
|||||||
@@ -20,5 +20,5 @@
|
|||||||
state: present
|
state: present
|
||||||
appends: true
|
appends: true
|
||||||
- name: Start kafka docker container
|
- name: Start kafka docker container
|
||||||
community.docker.docker_compose:
|
community.docker.docker_compose_v2:
|
||||||
project_src: /opt/kafka
|
project_src: /opt/kafka
|
||||||
|
|||||||
@@ -0,0 +1,7 @@
|
|||||||
|
---
|
||||||
|
keycloak_version: 26.1.0
|
||||||
|
|
||||||
|
# Database Configuration Defaults
|
||||||
|
keycloak_db_host: localhost
|
||||||
|
keycloak_db_port: 3306
|
||||||
|
keycloak_db_type: mariadb
|
||||||
@@ -0,0 +1,6 @@
|
|||||||
|
---
|
||||||
|
- name: Print next steps
|
||||||
|
ansible.builtin.debug:
|
||||||
|
msg: "Login with the temp admin ({{ keycloak_temp_admin_user }}:{{ keycloak_temp_admin_password }}) and
|
||||||
|
create a proper admin user: https://{{ domain }}/admin/master/console"
|
||||||
|
when: bootstrap.changed
|
||||||
@@ -0,0 +1,20 @@
|
|||||||
|
---
|
||||||
|
- name: Check if Keycloak is already downloaded
|
||||||
|
ansible.builtin.stat:
|
||||||
|
path: ~/keycloak-{{ keycloak_version }}
|
||||||
|
register: keycloak_dir
|
||||||
|
|
||||||
|
- name: Download Keycloak
|
||||||
|
ansible.builtin.unarchive:
|
||||||
|
src: https://github.com/keycloak/keycloak/releases/download/{{ keycloak_version }}/keycloak-{{ keycloak_version }}.tar.gz
|
||||||
|
dest: ~
|
||||||
|
remote_src: true
|
||||||
|
creates: ~/keycloak-{{ keycloak_version }}
|
||||||
|
when: not keycloak_dir.stat.exists
|
||||||
|
|
||||||
|
- name: Create symlink to current Keycloak version
|
||||||
|
ansible.builtin.file:
|
||||||
|
src: ~/keycloak-{{ keycloak_version }}
|
||||||
|
dest: ~/keycloak-current
|
||||||
|
state: link
|
||||||
|
when: not keycloak_dir.stat.exists
|
||||||
@@ -0,0 +1,11 @@
|
|||||||
|
---
|
||||||
|
- name: Set up database
|
||||||
|
ansible.builtin.import_tasks: mysql.yaml
|
||||||
|
- name: Download archive
|
||||||
|
ansible.builtin.import_tasks: download.yaml
|
||||||
|
- name: Set up Keycloak
|
||||||
|
ansible.builtin.import_tasks: setup.yaml
|
||||||
|
- name: Set up service
|
||||||
|
ansible.builtin.import_tasks: service.yaml
|
||||||
|
- name: Print next steps
|
||||||
|
ansible.builtin.import_tasks: debug.yaml
|
||||||
@@ -0,0 +1,6 @@
|
|||||||
|
---
|
||||||
|
- name: Create MySQL database
|
||||||
|
community.mysql.mysql_db:
|
||||||
|
name: "{{ ssh_user }}_keycloak"
|
||||||
|
state: present
|
||||||
|
register: database
|
||||||
@@ -0,0 +1,19 @@
|
|||||||
|
---
|
||||||
|
- name: Create service directory
|
||||||
|
ansible.builtin.file:
|
||||||
|
state: directory
|
||||||
|
path: /home/{{ ssh_user }}/etc/services.d
|
||||||
|
owner: "{{ ssh_user }}"
|
||||||
|
group: "{{ ssh_user }}"
|
||||||
|
mode: "755"
|
||||||
|
- name: Create Keycloak service
|
||||||
|
ansible.builtin.template:
|
||||||
|
src: etc/services.d/keycloak.ini.j2
|
||||||
|
dest: /home/{{ ssh_user }}/etc/services.d/keycloak.ini
|
||||||
|
owner: "{{ ssh_user }}"
|
||||||
|
group: "{{ ssh_user }}"
|
||||||
|
mode: "644"
|
||||||
|
- name: Start Keycloak
|
||||||
|
community.general.supervisorctl:
|
||||||
|
state: started
|
||||||
|
name: keycloak
|
||||||
@@ -0,0 +1,88 @@
|
|||||||
|
---
|
||||||
|
- name: Check if service exists
|
||||||
|
ansible.builtin.stat:
|
||||||
|
path: /home/{{ ssh_user }}/etc/services.d/keycloak.ini.j2
|
||||||
|
register: service
|
||||||
|
- name: Shutdown Keycloak
|
||||||
|
community.general.supervisorctl:
|
||||||
|
name: keycloak
|
||||||
|
state: stopped
|
||||||
|
when: service.stat.exists
|
||||||
|
- name: Update configuration
|
||||||
|
block:
|
||||||
|
- name: Set db type
|
||||||
|
ansible.builtin.lineinfile:
|
||||||
|
path: ~/keycloak-current/conf/keycloak.conf
|
||||||
|
regex: '#?db='
|
||||||
|
line: "db={{ keycloak_db_type }}"
|
||||||
|
- name: Set db username
|
||||||
|
ansible.builtin.lineinfile:
|
||||||
|
path: ~/keycloak-current/conf/keycloak.conf
|
||||||
|
regex: '#?db-username='
|
||||||
|
line: "db-username={{ ssh_user }}"
|
||||||
|
- name: Set db password
|
||||||
|
ansible.builtin.lineinfile:
|
||||||
|
path: ~/keycloak-current/conf/keycloak.conf
|
||||||
|
regex: '#?db-password='
|
||||||
|
line: "db-password={{ keycloak_db_password }}"
|
||||||
|
- name: Set db host
|
||||||
|
ansible.builtin.lineinfile:
|
||||||
|
path: ~/keycloak-current/conf/keycloak.conf
|
||||||
|
regex: '#?db-url-host='
|
||||||
|
line: "db-url-host={{ keycloak_db_host }}"
|
||||||
|
- name: Set db port
|
||||||
|
ansible.builtin.lineinfile:
|
||||||
|
path: ~/keycloak-current/conf/keycloak.conf
|
||||||
|
regex: '#?db-url-port='
|
||||||
|
line: "db-url-port={{ keycloak_db_port }}"
|
||||||
|
- name: Set db name
|
||||||
|
ansible.builtin.lineinfile:
|
||||||
|
path: ~/keycloak-current/conf/keycloak.conf
|
||||||
|
regex: '#?db-url-database='
|
||||||
|
line: "db-url-database={{ ssh_user }}_keycloak"
|
||||||
|
- name: Enable http
|
||||||
|
ansible.builtin.lineinfile:
|
||||||
|
path: ~/keycloak-current/conf/keycloak.conf
|
||||||
|
regex: '#?http-enabled='
|
||||||
|
line: "http-enabled=true"
|
||||||
|
- name: Set ssl certificate
|
||||||
|
ansible.builtin.lineinfile:
|
||||||
|
path: ~/keycloak-current/conf/keycloak.conf
|
||||||
|
regex: '#?https-certificate-file='
|
||||||
|
line: "https-certificate-file=/home/{{ ssh_user }}/etc/certificates/{{ domain }}.crt"
|
||||||
|
- name: Set ssl certificate key
|
||||||
|
ansible.builtin.lineinfile:
|
||||||
|
path: ~/keycloak-current/conf/keycloak.conf
|
||||||
|
regex: '#?https-certificate-key-file='
|
||||||
|
line: "https-certificate-key-file=/home/{{ ssh_user }}/etc/certificates/{{ domain }}.key"
|
||||||
|
- name: Set proxy mode to edge
|
||||||
|
ansible.builtin.lineinfile:
|
||||||
|
path: ~/keycloak-current/conf/keycloak.conf
|
||||||
|
regex: '#?proxy='
|
||||||
|
line: "proxy=edge"
|
||||||
|
- name: Set proxy headers to xforwarded
|
||||||
|
ansible.builtin.lineinfile:
|
||||||
|
path: ~/keycloak-current/conf/keycloak.conf
|
||||||
|
regex: '#?proxy-headers='
|
||||||
|
line: "proxy-headers=xforwarded"
|
||||||
|
- name: Set hostname
|
||||||
|
ansible.builtin.lineinfile:
|
||||||
|
path: ~/keycloak-current/conf/keycloak.conf
|
||||||
|
regex: '#?hostname='
|
||||||
|
line: "hostname={{ domain }}"
|
||||||
|
- name: Build application
|
||||||
|
ansible.builtin.command:
|
||||||
|
chdir: ~/keycloak-current/bin
|
||||||
|
cmd: ./kc.sh build
|
||||||
|
register: build
|
||||||
|
changed_when: true
|
||||||
|
- name: Create temp admin
|
||||||
|
ansible.builtin.command:
|
||||||
|
chdir: ~/keycloak-current/bin
|
||||||
|
cmd: ./kc.sh bootstrap-admin user --username:env KEYCLOAK_ADMIN_USER --password:env KEYCLOAK_ADMIN_USER_PASSWORD --optimized
|
||||||
|
environment:
|
||||||
|
KEYCLOAK_ADMIN_USER: keycloakbootstrap
|
||||||
|
KEYCLOAK_ADMIN_USER_PASSWORD: "{{ keycloak_temp_admin_password }}"
|
||||||
|
when: database.changed
|
||||||
|
register: bootstrap
|
||||||
|
changed_when: true
|
||||||
@@ -0,0 +1,8 @@
|
|||||||
|
[program:keycloak]
|
||||||
|
command=%(ENV_HOME)s/keycloak-current/bin/kc.sh start --optimized
|
||||||
|
autostart=yes
|
||||||
|
autorestart=yes
|
||||||
|
|
||||||
|
[program:keycloak]
|
||||||
|
# `startsecs` is set by Uberspace monitoring team, to prevent a broken service from looping
|
||||||
|
startsecs=30
|
||||||
@@ -1,6 +1,6 @@
|
|||||||
---
|
---
|
||||||
basic_firewall: basic-firewall
|
server_setup_basic_firewall: basic-firewall
|
||||||
server_image: ubuntu-22.04
|
server_setup_server_image: ubuntu-22.04
|
||||||
server_location: fsn1
|
server_setup_server_location: fsn1
|
||||||
server_placement_group: default
|
server_setup_server_placement_group: default
|
||||||
server_type: cax11
|
server_setup_server_type: cax11
|
||||||
|
|||||||
@@ -1,22 +1,22 @@
|
|||||||
---
|
---
|
||||||
- name: Create SSH key
|
- name: Create SSH key
|
||||||
hetzner.hcloud.hcloud_ssh_key:
|
hetzner.hcloud.ssh_key:
|
||||||
api_token: "{{ hcloud_api_token }}"
|
api_token: "{{ server_setup_hcloud_api_token }}"
|
||||||
public_key: "{{ ssh_key_admin_user }}"
|
public_key: "{{ server_setup_ssh_key_admin_user }}"
|
||||||
name: "{{ ssh_key_admin_user_name }}"
|
name: "{{ server_setup_ssh_key_admin_user_name }}"
|
||||||
state: present
|
state: present
|
||||||
- name: Create server via HCloud
|
- name: Create server via HCloud
|
||||||
hetzner.hcloud.hcloud_server:
|
hetzner.hcloud.server:
|
||||||
api_token: "{{ hcloud_api_token }}"
|
api_token: "{{ server_setup_hcloud_api_token }}"
|
||||||
firewalls:
|
firewalls:
|
||||||
- "{{ basic_firewall }}"
|
- "{{ server_setup_basic_firewall }}"
|
||||||
image: "{{ server_image }}"
|
image: "{{ server_setup_server_image }}"
|
||||||
location: "{{ server_location }}"
|
location: "{{ server_setup_server_location }}"
|
||||||
name: "{{ server_name }}"
|
name: "{{ server_setup_server_name }}"
|
||||||
placement_group: "{{ server_placement_group }}"
|
placement_group: "{{ server_setup_server_placement_group }}"
|
||||||
server_type: "{{ server_type }}"
|
server_type: "{{ server_setup_server_type }}"
|
||||||
ssh_keys:
|
ssh_keys:
|
||||||
- "{{ ssh_key_admin_user_name }}"
|
- "{{ server_setup_ssh_key_admin_user_name }}"
|
||||||
user_data: "{{ lookup('ansible.builtin.template', 'basic-ssh-hardening.yaml.j2', convert_data=false) }}"
|
user_data: "{{ lookup('ansible.builtin.template', 'basic-ssh-hardening.yaml.j2', convert_data=false) }}"
|
||||||
state: present
|
state: present
|
||||||
register: server
|
register: server
|
||||||
|
|||||||
@@ -15,5 +15,5 @@
|
|||||||
mode: "644"
|
mode: "644"
|
||||||
lstrip_blocks: true
|
lstrip_blocks: true
|
||||||
- name: Start application docker container
|
- name: Start application docker container
|
||||||
community.docker.docker_compose:
|
community.docker.docker_compose_v2:
|
||||||
project_src: /opt/{{ spring_docker_path }}
|
project_src: /opt/{{ spring_docker_path }}
|
||||||
|
|||||||
@@ -1,2 +0,0 @@
|
|||||||
---
|
|
||||||
- include: setup.yaml
|
|
||||||
BIN
Binary file not shown.
@@ -6,13 +6,13 @@ vault:
|
|||||||
# creates each of the namespaces
|
# creates each of the namespaces
|
||||||
applicationNamespaces: []
|
applicationNamespaces: []
|
||||||
ecr:
|
ecr:
|
||||||
enabled: false
|
|
||||||
account: ""
|
|
||||||
accessKey:
|
accessKey:
|
||||||
id: ""
|
id: ""
|
||||||
secret: ""
|
secret: ""
|
||||||
repository: ""
|
account: ""
|
||||||
applicationNamespaces: []
|
applicationNamespaces: []
|
||||||
|
enabled: false
|
||||||
|
repository: ""
|
||||||
hcloud:
|
hcloud:
|
||||||
enabled: false
|
enabled: false
|
||||||
token: ""
|
token: ""
|
||||||
|
|||||||
Reference in New Issue
Block a user