roles: refactor roles to start a docker container with directus and psotgresql database, add text-editor tool
This commit is contained in:
parent
e17f194745
commit
7bdbf243f2
16 changed files with 249 additions and 157 deletions
2
.gitignore
vendored
2
.gitignore
vendored
|
|
@ -1,3 +1,3 @@
|
||||||
# ---> Ansible
|
# ---> Ansible
|
||||||
*.retry
|
*.retry
|
||||||
|
.env
|
||||||
|
|
@ -1,5 +1,11 @@
|
||||||
[almalinux]
|
[almalinux-root]
|
||||||
vps-root
|
vps-root
|
||||||
|
|
||||||
[almalinux-user]
|
[almalinux-user]
|
||||||
vps
|
vps
|
||||||
|
|
||||||
|
[all:vars]
|
||||||
|
user_name="jan"
|
||||||
|
domain="janvoelkel-de"
|
||||||
|
op_password_path="SSH/MyVPS jan/password"
|
||||||
|
dnf_text_editor="nano"
|
||||||
|
|
@ -3,8 +3,8 @@
|
||||||
hosts: almalinux-user
|
hosts: almalinux-user
|
||||||
become: yes
|
become: yes
|
||||||
vars_prompt:
|
vars_prompt:
|
||||||
- name: "username"
|
- name: "user_name"
|
||||||
prompt: "Please enter the username to be created"
|
prompt: "Please enter the user_name to be created"
|
||||||
private: no # Der Benutzername wird sichtbar eingegeben
|
private: no # Der Benutzername wird sichtbar eingegeben
|
||||||
- name: "user_password"
|
- name: "user_password"
|
||||||
prompt: "Please enter the password for the new user"
|
prompt: "Please enter the password for the new user"
|
||||||
|
|
|
||||||
|
|
@ -1,18 +1,15 @@
|
||||||
---
|
# ---
|
||||||
- name: Server setup with roles
|
# - name: Server setup with roles
|
||||||
hosts: almalinux # Hier verwenden wir die Gruppe 'almalinux' aus der hosts.ini
|
# hosts: almalinux-root
|
||||||
|
# become: yes
|
||||||
|
# roles:
|
||||||
|
# - firewalld
|
||||||
|
# - dnf_tools
|
||||||
|
# - docker
|
||||||
|
# - create_user_with_root
|
||||||
|
|
||||||
|
- name: Create directus with database
|
||||||
|
hosts: vps
|
||||||
become: yes
|
become: yes
|
||||||
vars_prompt:
|
|
||||||
- name: "username"
|
|
||||||
prompt: "Please enter the username to be created"
|
|
||||||
private: no # Der Benutzername wird sichtbar eingegeben
|
|
||||||
- name: "user_password"
|
|
||||||
prompt: "Please enter the password for the new user"
|
|
||||||
private: yes # Das Passwort wird versteckt eingegeben
|
|
||||||
- name: "ssh_public_key"
|
|
||||||
prompt: "Please enter the public key for ssh of your pc"
|
|
||||||
private: no
|
|
||||||
roles:
|
roles:
|
||||||
# firewall
|
- directus
|
||||||
- create_user_with_root
|
|
||||||
# firewall
|
|
||||||
|
|
|
||||||
2
roles/create_user_with_root/files/authorized_keys
Normal file
2
roles/create_user_with_root/files/authorized_keys
Normal file
|
|
@ -0,0 +1,2 @@
|
||||||
|
ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIBRnv0VogdTwQWhfYqKaIMzSll2JG4hvO9jryP8aJl4u MacBook Pro von Jan
|
||||||
|
ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIHkNsib7eOmVt7EPp7R1QJ4iZRBu8MqsvGUaF9JdcbyU iPhone 16 Pro Max von Jan
|
||||||
|
|
@ -1,42 +1,58 @@
|
||||||
|
|
||||||
- name: Erstelle einen neuen User mit Sudo-Rechten
|
- name: Erstelle einen neuen User mit Sudo-Rechten
|
||||||
user:
|
user:
|
||||||
name: "{{ username }}"
|
name: "{{ user_name }}"
|
||||||
password: "{{ user_password | password_hash('sha512') }}" # Das Passwort wird mit SHA-512 gehasht
|
password: "{{ lookup('pipe', 'op read \"op://' + op_password_path + '\"') | password_hash('sha512') }}"
|
||||||
state: present
|
state: present
|
||||||
shell: /bin/bash
|
shell: /bin/bash
|
||||||
groups: wheel # Gibt Sudo-Rechte
|
groups: wheel
|
||||||
append: yes
|
append: yes
|
||||||
|
|
||||||
- name: Erstelle den SSH-Ordner für den neuen User
|
- name: Erstelle den SSH-Ordner für den neuen User
|
||||||
file:
|
file:
|
||||||
path: "/home/{{ username }}/.ssh"
|
path: "/home/{{ user_name }}/.ssh"
|
||||||
state: directory
|
state: directory
|
||||||
mode: '0700'
|
mode: '0700'
|
||||||
owner: "{{ username }}"
|
owner: "{{ user_name }}"
|
||||||
group: "{{ username }}"
|
group: "{{ user_name }}"
|
||||||
|
|
||||||
- name: Setze die Berechtigungen für die authorized_keys-Datei
|
- name: Setze die Berechtigungen für die authorized_keys-Datei
|
||||||
file:
|
file:
|
||||||
path: "/home/{{ username }}/.ssh/authorized_keys"
|
path: "/home/{{ user_name }}/.ssh/authorized_keys"
|
||||||
state: touch
|
state: touch
|
||||||
mode: '0600'
|
mode: '0600'
|
||||||
owner: "{{ username }}"
|
owner: "{{ user_name }}"
|
||||||
group: "{{ username }}"
|
group: "{{ user_name }}"
|
||||||
|
|
||||||
- name: Add public key to enable user ssh
|
- name: Add public keys as authorized_keys
|
||||||
lineinfile:
|
copy:
|
||||||
path: "/home/{{ username }}/.ssh/authorized_keys"
|
src: files/authorized_keys
|
||||||
line: '{{ ssh_public_key }}'
|
dest: "/home/{{ user_name }}/.ssh/authorized_keys"
|
||||||
state: present
|
|
||||||
|
|
||||||
- name: Grant sudo privileges to the user
|
- name: Grant passwordless sudo privileges to the user
|
||||||
lineinfile:
|
lineinfile:
|
||||||
path: /etc/sudoers
|
path: /etc/sudoers
|
||||||
regexp: "^{{ username }} "
|
regexp: "^{{ user_name }} "
|
||||||
line: "{{ username }} ALL=(ALL) ALL"
|
line: "{{ user_name }} ALL=(ALL) NOPASSWD: ALL"
|
||||||
validate: visudo -cf %s
|
validate: visudo -cf %s
|
||||||
|
|
||||||
|
- name: Ensure Docker group exists
|
||||||
|
ansible.builtin.group:
|
||||||
|
name: docker
|
||||||
|
state: present
|
||||||
|
|
||||||
|
- name: Add user to Docker group
|
||||||
|
ansible.builtin.user:
|
||||||
|
name: "{{ user_name }}"
|
||||||
|
groups: docker
|
||||||
|
append: yes
|
||||||
|
|
||||||
|
- name: Enable and start Docker service
|
||||||
|
ansible.builtin.service:
|
||||||
|
name: docker
|
||||||
|
state: started
|
||||||
|
enabled: yes
|
||||||
|
|
||||||
- name: Entferne den Root-SSH-Zugang
|
- name: Entferne den Root-SSH-Zugang
|
||||||
lineinfile:
|
lineinfile:
|
||||||
path: /etc/ssh/sshd_config
|
path: /etc/ssh/sshd_config
|
||||||
|
|
|
||||||
24
roles/directus/files/.env.example
Normal file
24
roles/directus/files/.env.example
Normal file
|
|
@ -0,0 +1,24 @@
|
||||||
|
|
||||||
|
# database
|
||||||
|
POSTGRES_USER="database_user" # This variable needs to be specified here.
|
||||||
|
POSTGRES_PASSWORD="database_password"
|
||||||
|
POSTGRES_DB="database_name"
|
||||||
|
|
||||||
|
# directus
|
||||||
|
SECRET="<create with 'openssl rand -hex 32'>"
|
||||||
|
DB_CLIENT="pg"
|
||||||
|
DB_HOST="database"
|
||||||
|
DB_PORT="5432"
|
||||||
|
DB_DATABASE="database_name"
|
||||||
|
DB_USER="database_user"
|
||||||
|
DB_PASSWORD="database_password"
|
||||||
|
ADMIN_EMAIL="directus_login_mail"
|
||||||
|
ADMIN_PASSWORD="directus_login_password"
|
||||||
|
CACHE_ENABLED="true"
|
||||||
|
CACHE_AUTO_PURGE="true"
|
||||||
|
CACHE_STORE="redis"
|
||||||
|
REDIS="redis://cache:6379"
|
||||||
|
|
||||||
|
# pgadmin4
|
||||||
|
# PGADMIN_DEFAULT_EMAIL="pgadmin4_login_mail"
|
||||||
|
# PGADMIN_DEFAULT_PASSWORD="pgadmin4_login_password"
|
||||||
52
roles/directus/files/docker-compose.yml
Normal file
52
roles/directus/files/docker-compose.yml
Normal file
|
|
@ -0,0 +1,52 @@
|
||||||
|
|
||||||
|
services:
|
||||||
|
database:
|
||||||
|
env_file: .env
|
||||||
|
healthcheck:
|
||||||
|
test: ["CMD", "pg_isready", "--host=localhost", "--username=${POSTGRES_USER}", "--dbname=${POSTGRES_DB}"]
|
||||||
|
interval: 10s
|
||||||
|
timeout: 5s
|
||||||
|
retries: 5
|
||||||
|
start_interval: 5s
|
||||||
|
start_period: 30s
|
||||||
|
image: postgis/postgis:13-master
|
||||||
|
# platform: linux/amd64 # Required when running on platform other than amd64, like Apple M1/M2:
|
||||||
|
volumes:
|
||||||
|
- db:/var/lib/postgresql/data
|
||||||
|
|
||||||
|
# pgadmin4:
|
||||||
|
# container_name: pgadmin4
|
||||||
|
# depends_on:
|
||||||
|
# - database
|
||||||
|
# env_file: .env
|
||||||
|
# image: docker.io/dpage/pgadmin4:8.14
|
||||||
|
# ports:
|
||||||
|
# - 5050:80
|
||||||
|
# restart: unless-stopped
|
||||||
|
|
||||||
|
cache:
|
||||||
|
healthcheck:
|
||||||
|
test: ["CMD-SHELL", "[ $$(redis-cli ping) = 'PONG' ]"]
|
||||||
|
interval: 10s
|
||||||
|
timeout: 5s
|
||||||
|
retries: 5
|
||||||
|
start_interval: 5s
|
||||||
|
start_period: 30s
|
||||||
|
image: redis:6
|
||||||
|
|
||||||
|
directus:
|
||||||
|
depends_on:
|
||||||
|
database:
|
||||||
|
condition: service_healthy
|
||||||
|
cache:
|
||||||
|
condition: service_healthy
|
||||||
|
env_file: .env
|
||||||
|
image: directus/directus:11.5.1
|
||||||
|
ports:
|
||||||
|
- 8055:8055
|
||||||
|
volumes:
|
||||||
|
- ./uploads:/directus/uploads
|
||||||
|
- ./extensions:/directus/extensions
|
||||||
|
|
||||||
|
volumes:
|
||||||
|
db:
|
||||||
32
roles/directus/tasks/main.yml
Normal file
32
roles/directus/tasks/main.yml
Normal file
|
|
@ -0,0 +1,32 @@
|
||||||
|
---
|
||||||
|
- name: Ensure project base directory exists
|
||||||
|
file:
|
||||||
|
path: "/opt/{{ domain }}"
|
||||||
|
state: directory
|
||||||
|
owner: "{{ user_name }}"
|
||||||
|
group: "{{ user_name }}"
|
||||||
|
mode: '0755'
|
||||||
|
|
||||||
|
- name: Ensure Directus project directory exists
|
||||||
|
file:
|
||||||
|
path: "/opt/{{ domain }}/directus"
|
||||||
|
state: directory
|
||||||
|
owner: "{{ user_name }}"
|
||||||
|
group: "{{ user_name }}"
|
||||||
|
mode: '0755'
|
||||||
|
|
||||||
|
- name: Copy docker compose file (directus)
|
||||||
|
copy:
|
||||||
|
src: "files/docker-compose.yml"
|
||||||
|
dest: "/opt/{{ domain }}/directus"
|
||||||
|
|
||||||
|
- name: Copy env file (directus)
|
||||||
|
copy:
|
||||||
|
src: "files/.env"
|
||||||
|
dest: "/opt/{{ domain }}/directus"
|
||||||
|
|
||||||
|
- name: Start docker container with compose file
|
||||||
|
community.docker.docker_compose_v2:
|
||||||
|
project_src: "/opt/{{ domain }}/directus"
|
||||||
|
files:
|
||||||
|
- "docker-compose.yml"
|
||||||
5
roles/dnf_tools/tasks/main.yml
Normal file
5
roles/dnf_tools/tasks/main.yml
Normal file
|
|
@ -0,0 +1,5 @@
|
||||||
|
---
|
||||||
|
- name: Install DNF tools
|
||||||
|
dnf:
|
||||||
|
name: "{{ dnf_text_editor }}"
|
||||||
|
state: present
|
||||||
3
roles/docker/files/daemon.json
Normal file
3
roles/docker/files/daemon.json
Normal file
|
|
@ -0,0 +1,3 @@
|
||||||
|
{
|
||||||
|
"iptables": false
|
||||||
|
}
|
||||||
57
roles/docker/tasks/main.yml
Normal file
57
roles/docker/tasks/main.yml
Normal file
|
|
@ -0,0 +1,57 @@
|
||||||
|
---
|
||||||
|
- name: Remove old versions of Docker and conflicting packages
|
||||||
|
dnf:
|
||||||
|
name:
|
||||||
|
- docker
|
||||||
|
- docker-client
|
||||||
|
- docker-client-latest
|
||||||
|
- docker-common
|
||||||
|
- docker-latest
|
||||||
|
- docker-latest-logrotate
|
||||||
|
- docker-logrotate
|
||||||
|
- docker-engine
|
||||||
|
- podman
|
||||||
|
- runc
|
||||||
|
state: absent
|
||||||
|
|
||||||
|
- name: Install DNF plugins
|
||||||
|
dnf:
|
||||||
|
name: dnf-plugins-core
|
||||||
|
state: present
|
||||||
|
|
||||||
|
- name: Add Docker repository (RHEL official repo)
|
||||||
|
command: dnf config-manager --add-repo https://download.docker.com/linux/rhel/docker-ce.repo
|
||||||
|
args:
|
||||||
|
creates: /etc/yum.repos.d/docker-ce.repo
|
||||||
|
|
||||||
|
- name: Update package cache
|
||||||
|
command: dnf makecache
|
||||||
|
|
||||||
|
- name: Install Docker CE, CLI and other components
|
||||||
|
dnf:
|
||||||
|
name:
|
||||||
|
- docker-ce
|
||||||
|
- docker-ce-cli
|
||||||
|
- containerd.io
|
||||||
|
- docker-buildx-plugin
|
||||||
|
- docker-compose-plugin
|
||||||
|
state: present
|
||||||
|
|
||||||
|
- name: Enable and start Docker service
|
||||||
|
systemd:
|
||||||
|
name: docker
|
||||||
|
state: started
|
||||||
|
enabled: yes
|
||||||
|
|
||||||
|
- name: Disable iptables
|
||||||
|
copy:
|
||||||
|
src: files/daemon.json
|
||||||
|
dest: /etc/docker/daemon.json
|
||||||
|
|
||||||
|
- name: Restart firewalld
|
||||||
|
command: firewall-cmd --reload
|
||||||
|
|
||||||
|
- name: Restart Docker service
|
||||||
|
systemd:
|
||||||
|
name: docker
|
||||||
|
state: restarted
|
||||||
18
roles/firewalld/tasks/main.yml
Normal file
18
roles/firewalld/tasks/main.yml
Normal file
|
|
@ -0,0 +1,18 @@
|
||||||
|
---
|
||||||
|
- name: Install
|
||||||
|
package:
|
||||||
|
name: firewalld
|
||||||
|
state: present
|
||||||
|
|
||||||
|
- name: Start and activate
|
||||||
|
service:
|
||||||
|
name: firewalld
|
||||||
|
state: started
|
||||||
|
enabled: yes
|
||||||
|
|
||||||
|
- name: Block all ports
|
||||||
|
firewalld:
|
||||||
|
zone: public
|
||||||
|
service: ssh
|
||||||
|
permanent: yes
|
||||||
|
state: enabled
|
||||||
|
|
@ -1,4 +0,0 @@
|
||||||
---
|
|
||||||
# roles/setup_server/defaults/main.yml
|
|
||||||
|
|
||||||
username: jan
|
|
||||||
|
|
@ -1,7 +0,0 @@
|
||||||
---
|
|
||||||
# roles/setup_server/handlers/main.yml
|
|
||||||
|
|
||||||
- name: restart sshd
|
|
||||||
service:
|
|
||||||
name: sshd
|
|
||||||
state: restarted
|
|
||||||
|
|
@ -1,109 +0,0 @@
|
||||||
---
|
|
||||||
# roles/setup_server/tasks/main.yml
|
|
||||||
|
|
||||||
- name: Erstelle einen neuen User mit Sudo-Rechten
|
|
||||||
user:
|
|
||||||
name: "{{ username }}"
|
|
||||||
password: "{{ user_password | password_hash('sha512') }}" # Das Passwort wird mit SHA-512 gehasht
|
|
||||||
state: present
|
|
||||||
shell: /bin/bash
|
|
||||||
groups: wheel # Gibt Sudo-Rechte
|
|
||||||
append: yes
|
|
||||||
|
|
||||||
- name: Erstelle den SSH-Ordner für den neuen User
|
|
||||||
file:
|
|
||||||
path: "/home/{{ username }}/.ssh"
|
|
||||||
state: directory
|
|
||||||
mode: '0700'
|
|
||||||
owner: "{{ username }}"
|
|
||||||
group: "{{ username }}"
|
|
||||||
|
|
||||||
- name: Setze die Berechtigungen für die authorized_keys-Datei
|
|
||||||
file:
|
|
||||||
path: "/home/{{ username }}/.ssh/authorized_keys"
|
|
||||||
state: touch
|
|
||||||
mode: '0600'
|
|
||||||
owner: "{{ username }}"
|
|
||||||
group: "{{ username }}"
|
|
||||||
|
|
||||||
- name: Entferne den Root-SSH-Zugang
|
|
||||||
lineinfile:
|
|
||||||
path: /etc/ssh/sshd_config
|
|
||||||
regexp: '^PermitRootLogin'
|
|
||||||
line: 'PermitRootLogin no'
|
|
||||||
state: present
|
|
||||||
notify:
|
|
||||||
- restart sshd
|
|
||||||
|
|
||||||
- name: Installiere firewalld
|
|
||||||
package:
|
|
||||||
name: firewalld
|
|
||||||
state: present
|
|
||||||
|
|
||||||
- name: Starte und aktiviere firewalld
|
|
||||||
service:
|
|
||||||
name: firewalld
|
|
||||||
state: started
|
|
||||||
enabled: yes
|
|
||||||
|
|
||||||
- name: Sperre alle Ports in firewalld
|
|
||||||
firewalld:
|
|
||||||
zone: public
|
|
||||||
service: ssh
|
|
||||||
permanent: yes
|
|
||||||
state: enabled
|
|
||||||
|
|
||||||
# roles/setup_server/tasks/main.yml
|
|
||||||
|
|
||||||
- name: Entferne alte Docker-Versionen, falls vorhanden
|
|
||||||
dnf:
|
|
||||||
name:
|
|
||||||
- docker
|
|
||||||
- docker-client
|
|
||||||
- docker-client-latest
|
|
||||||
- docker-common
|
|
||||||
- docker-latest
|
|
||||||
- docker-latest-logrotate
|
|
||||||
- docker-logrotate
|
|
||||||
- docker-engine
|
|
||||||
- podman
|
|
||||||
- runc
|
|
||||||
state: absent
|
|
||||||
|
|
||||||
- name: Installiere DNF-Plugins und Docker-Repository
|
|
||||||
dnf:
|
|
||||||
name: dnf-plugins-core
|
|
||||||
state: present
|
|
||||||
|
|
||||||
- name: Installiere Docker CE, CLI und andere Docker-Komponenten
|
|
||||||
dnf:
|
|
||||||
name:
|
|
||||||
- docker-ce
|
|
||||||
- docker-ce-cli
|
|
||||||
- containerd.io
|
|
||||||
- docker-buildx-plugin
|
|
||||||
- docker-compose-plugin
|
|
||||||
state: present
|
|
||||||
|
|
||||||
- name: Aktiviere und starte Docker
|
|
||||||
service:
|
|
||||||
name: docker
|
|
||||||
state: started
|
|
||||||
enabled: yes
|
|
||||||
|
|
||||||
- name: Füge den neuen User zur Docker-Gruppe hinzu
|
|
||||||
user:
|
|
||||||
name: "{{ username }}"
|
|
||||||
groups: docker
|
|
||||||
append: yes
|
|
||||||
|
|
||||||
- name: Starte den Docker-Dienst neu, um Änderungen zu übernehmen
|
|
||||||
systemd:
|
|
||||||
name: docker
|
|
||||||
state: restarted
|
|
||||||
|
|
||||||
- name: Deaktiviere Docker-Zone in firewalld
|
|
||||||
firewalld:
|
|
||||||
zone: docker
|
|
||||||
state: disabled
|
|
||||||
permanent: yes
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue