Compare commits

..

No commits in common. "8e18a5c1e35be8dd54106df096cd3d7ffa267efe" and "150e15625dc749e2a7a57339146a8cb7fbff194b" have entirely different histories.

71 changed files with 431 additions and 733 deletions

View File

@ -1,12 +1,12 @@
# License Agreement
## CyMaIS NonCommercial License (CNCL)
**CyMaIS NonCommercial License (CNCL)**
### Definitions
## Definitions
- **"Software":** Refers to *"[CyMaIS - Cyber Master Infrastructure Solution](https://cymais.cloud/)"* and its associated source code.
- **"Commercial Use":** Any use of the Software intended for direct or indirect financial gain, including but not limited to sales, rentals, or provision of services.
### Provisions
## Provisions
1. **Attribution of the Original Licensor:** In any distribution or publication of the Software or derivative works, the original licensor, *Kevin Veen-Birkenbach, Email: [license@veen.world](mailto:license@veen.world), Website: [https://www.veen.world/](https://www.veen.world/)* must be explicitly named.
@ -25,5 +25,5 @@
7. **Ownership of Rights:** All rights, including copyright, trademark, and other forms of intellectual property related to the Software, belong exclusively to Kevin Veen-Birkenbach.
### Consent
## Consent
By using, modifying, or distributing the Software, you agree to these terms.

View File

@ -706,7 +706,7 @@ defaults_applications:
## Presentation
presentation:
matomo_tracking_enabled: "{{matomo_tracking_enabled_default}}" # Enables\Disables Matomo Tracking
css_enabled: False # Would mess with the presentation layout
css_enabled: "{{css_enabled_default}}" # Enables\Disables Global CSS Style
landingpage_iframe_enabled: False # Makes sense to make the documentary allways in iframe available
# Snipe-IT

View File

@ -22,3 +22,6 @@ galaxy_info:
repository: "https://s.veen.world/cymais"
issue_tracker_url: "https://s.veen.world/cymaisissues"
documentation: "https://s.veen.world/cymais"
dependencies:
- package-manager

View File

@ -1,8 +1,6 @@
- name: "{{ role_name }} | pkgmgr install"
include_role:
name: pkgmgr-install
vars:
package_name: directory-validator
- name: install directory-validator
command:
cmd: "pkgmgr install directory-validator --clone-mode https"
when: run_once_backup_directory_validator is not defined
- name: run the backup_directory_validator tasks once

View File

@ -27,4 +27,5 @@ dependencies:
- systemd-notifier
- cleanup-failed-docker-backups
- system-maintenance-lock
- backup-directory-validator
- backup-directory-validator
- package-manager

View File

@ -1,8 +1,6 @@
- name: "{{ role_name }} | pkgmgr install"
include_role:
name: pkgmgr-install
vars:
package_name: backup-docker-to-local
- name: install backup-docker-to-local
command:
cmd: "pkgmgr install backup-docker-to-local --clone-mode https"
when: run_once_backup_docker_to_local is not defined
- name: Retrieve backup-docker-to-local path from pkgmgr

View File

@ -23,3 +23,6 @@ galaxy_info:
repository: "https://github.com/kevinveenbirkenbach/docker-volume-cleaner"
issue_tracker_url: "https://github.com/kevinveenbirkenbach/docker-volume-cleaner/issues"
documentation: "https://github.com/kevinveenbirkenbach/docker-volume-cleaner#readme"
dependencies:
- package-manager

View File

@ -1,8 +1,6 @@
- name: "{{ role_name }} | pkgmgr install"
include_role:
name: pkgmgr-install
vars:
package_name: dockreap
- name: install dockreap
command:
cmd: "pkgmgr install dockreap"
when: run_once_cleanup_docker_anonymous_volumes is not defined
- name: run dockreap with --no-confirmation

View File

@ -25,3 +25,4 @@ dependencies:
- systemd-notifier
- system-maintenance-lock
- backup-directory-validator
- package-manager

View File

@ -1,8 +1,6 @@
- name: "{{ role_name }} | pkgmgr install"
include_role:
name: pkgmgr-install
vars:
package_name: cleanup-failed-docker-backups
- name: install cleanup-failed-docker-backups
command:
cmd: "pkgmgr install cleanup-failed-docker-backups --clone-mode https"
when: run_once_cleanup_failed_docker_backups is not defined
- name: Retrieve backup-docker-to-local path from pkgmgr

View File

@ -13,7 +13,7 @@ The purpose of this role is to automate the installation and configuration of Gi
- **Automated Git Installation:** Installs Git using Pacman.
- **Custom Git Configuration:** Invokes the git-configurator tool to merge user-specific configuration options.
- **Idempotent Task Execution:** Uses host-level run-once artifacts to ensure that configuration tasks are executed only once per host.
- **Integration:** Works alongside the pkgmgr role to streamline overall system setup.
- **Integration:** Works alongside the package-manager role to streamline overall system setup.
## Credits

View File

@ -17,4 +17,6 @@ galaxy_info:
- git
- configuration
- pacman
- personal-computer
- personal-computer
dependencies:
- package-manager

View File

@ -4,11 +4,11 @@
state: present
become: true
- name: "{{ role_name }} | pkgmgr install"
include_role:
name: pkgmgr-install
vars:
package_name: gitconfig
- name: install gitconfig
command:
cmd: "pkgmgr install gitconfig --clone-mode https"
when: run_once_gitconfig is not defined
become: true
- name: setup git
command: gitconfig --merge-option rebase --name "{{users.client.full_name}}" --email "{{users.client.email}}" --website "{{users.client.website}}" --signing gpg --gpg-key "{{users.client.gpg}}"

View File

@ -16,4 +16,6 @@ galaxy_info:
galaxy_tags:
- gnome
- extensions
- automation
- automation
dependencies:
- package-manager

View File

@ -2,11 +2,10 @@
ansible.builtin.shell: gsettings set org.gnome.shell disable-user-extensions false
become: false
- name: "{{ role_name }} | pkgmgr install"
include_role:
name: pkgmgr-install
vars:
package_name: cli-gnome-extension-manager
- name: install cli-gnome-extension-manager
command:
cmd: "pkgmgr install cli-gnome-extension-manager --clone-mode https"
become: false
- name: Execute CLI GNOME Extension manager script
ansible.builtin.shell: cli-gnome-extension-manager "{{ item[0] }}" "{{ item[1] }}" "{{ item[2] }}"

View File

@ -1,6 +1,4 @@
# Attendize
## Warning
# Docker Attendize (WIP)
> **Note:** This role is a work in progress. Use with caution and check for updates.

View File

@ -1 +0,0 @@
- Implement this role

View File

@ -22,8 +22,7 @@ galaxy_info:
- sso
- oidc
- ldap
- video
- conference
- archlinux
repository: https://s.veen.world/cymais
issue_tracker_url: https://s.veen.world/cymaisissues
documentation: https://s.veen.world/cymais

View File

@ -11,7 +11,7 @@ galaxy_info:
galaxy_tags:
- bluesky
- docker
- social network
- social networking
- decentralized
repository: https://s.veen.world/cymais
issue_tracker_url: https://s.veen.world/cymaisissues

View File

@ -1,4 +1,4 @@
# Central Database
# Docker Central Database 🐳
## Description

View File

@ -1,4 +1,4 @@
# Docker Compose
# Docker Compose 🧱
## Description

View File

@ -1,34 +1,8 @@
# ELK Stack
# DRAFT docker-elk
## Warning
For security reasons, this role is not recommended. If you prefer to keep your logs safe without relying on external servers, consider using an alternative tool.
I decided against using this role for security reasons. I recommend to use another tool if you don't want to pay for keeping your logs save and if you don't want to depend on external servers.
## Overview
This Ansible role deploys and configures an [ELK Stack](https://en.wikipedia.org/wiki/Elastic_stack) (comprising [Elasticsearch](https://en.wikipedia.org/wiki/Elasticsearch), [Logstash](https://en.wikipedia.org/wiki/Elastic_stack), and [Kibana](https://en.wikipedia.org/wiki/Kibana)) using [Docker Compose](https://en.wikipedia.org/wiki/Docker_Compose). The ELK Stack is widely used for centralized log collection, analysis, and visualization of log and machine-generated data.
## Description
This role performs the following tasks:
- **Setup & Configuration:** Installs and configures the three main components—Elasticsearch, Logstash, and Kibana.
- **Template-Driven Adjustments:** Adapts configuration files through templates and variables.
- **Docker Integration:** Deploys the stack using Docker Compose, integrating it into your containerized environment.
- **Service Management:** Handles service restarts and updates through Ansible handlers.
## Purpose
The ELK Stack is primarily used for:
- **Centralized Log Management:** Consolidating logs from various systems into one location.
- **Real-Time Troubleshooting:** Quickly diagnosing issues through live log analysis.
- **Performance Monitoring:** Tracking system performance and identifying anomalies.
- **Security Analysis:** Detecting and investigating security incidents based on log data.
## Features
- **Centralized Log Management:** Collects and aggregates logs from disparate systems.
- **Real-Time Analysis:** Leverages Elasticsearch for fast data search and analytics.
- **Flexible Data Pipelines:** Processes and transforms log data with Logstash.
- **Interactive Visualization:** Creates dashboards and visual reports with Kibana.
- **Scalable & Extensible:** Easily integrates additional tools and custom configurations via templates.
## Credits 📝
Developed and maintained by **Kevin Veen-Birkenbach**.
For more information, visit [www.veen.world](https://www.veen.world).
Part of the [CyMaIS Project](https://github.com/kevinveenbirkenbach/cymais).
License: [CyMaIS NonCommercial License (CNCL)](https://s.veen.world/cncl)
## see
- https://logz.io/blog/elk-stack-on-docker/
- https://github.com/kevinveenbirkenbach/docker-elk
- https://logz.io/blog/docker-logging/

View File

@ -1 +0,0 @@
- implement

View File

@ -1,23 +1,2 @@
---
galaxy_info:
author: "Kevin Veen-Birkenbach"
description: "Transform online learning and collaboration with BigBlueButton, an interactive web conferencing solution designed to energize virtual classrooms and meetings. Enjoy dynamic tools and an engaging environment that makes every session a powerful learning experience."
license: "CyMaIS NonCommercial License (CNCL)"
license_url: "https://s.veen.world/cncl"
company: |
Kevin Veen-Birkenbach
Consulting & Coaching Solutions
https://www.veen.world
min_ansible_version: "2.9"
platforms:
- name: Docker
versions:
- "latest"
galaxy_tags:
- elk
- docker
- log-management
- administration
repository: "https://s.veen.world/cymais"
issue_tracker_url: "https://s.veen.world/cymaisissues"
documentation: "https://s.veen.world/cymais"
dependencies:
- nginx-docker-reverse-proxy

View File

@ -11,7 +11,7 @@ galaxy_info:
galaxy_tags:
- friendica
- docker
- social network
- social networking
- decentralized
repository: https://s.veen.world/cymais
issue_tracker_url: https://s.veen.world/cymaisissues

View File

@ -1,7 +1,7 @@
# FusionDirectory
# DRAFT FusionDirectory DRAFT🐳
# Warning
This application isn't implemented yet
# TODO
This needs to be implemented
## Description

View File

@ -1 +0,0 @@
- Implement this role

View File

@ -11,11 +11,9 @@ galaxy_info:
galaxy_tags:
- mastodon
- docker
- social networking
- federated
- decentralized
- microblog
- social network
repository: "https://s.veen.world/cymais"
issue_tracker_url: "https://s.veen.world/cymaisissues"
documentation: "https://s.veen.world/cymais"

View File

@ -1,36 +1,12 @@
# Matrix (Ansible)
## Warning
This role is experimental and may not be actively maintained. Use it with caution in production environments. For a more stable deployment, please consider using the Matrix Compose role or another alternative solution.
## Description
Step into the future of communication with Matrix, a dynamic and decentralized platform that delivers secure, real-time messaging and collaboration. This role deploys a Matrix homeserver using Ansible automation. Benefit from a federated architecture, end-to-end encryption, and versatile bridging support that connects you globally—all while safeguarding your data.
# Docker Setup Matrix via Ansible
## Overview
This role automates the deployment and configuration of a Matrix homeserver with Ansible. It sets up the Synapse server along with essential components such as bridges and the Element web client. Designed for high performance, scalability, and secure communication, this role streamlines the installation of Matrix in your environment.
This document serves as the README for the `docker-ansible-matrix` role, a part of the `CyMaIS` project. This role automates the deployment of a Matrix server using Ansible.
For detailed configuration and operational instructions, please refer to the included documentation:
- [Administration.md](./Administration.md)
Matrix is an open-source project that provides a protocol for secure, decentralized, real-time communication. It offers features like end-to-end encrypted chat, VoIP, and file sharing, catering to both individual and enterprise users. With a focus on interoperability, Matrix can bridge with other communication systems, offering a unified platform for messaging and collaboration.
## Features
This software uses https://github.com/spantaleev/matrix-docker-ansible-deploy as a base.
- **Decentralized and Federated:** Connect with a global network of Matrix homeservers, ensuring there is no single point of failure.
- **End-to-End Encryption:** Protect your communications with robust encryption methods.
- **Interoperability:** Bridge communications with external platforms, enabling seamless messaging across diverse systems.
- **Scalable Architecture:** Handle increasing user loads and message volumes with high performance.
- **Ansible Automation:** Enjoy a fully automated, reproducible deployment using Ansible.
## Additional Resources
- [Matrix Official Website](https://matrix.org/)
- [Matrix Documentation](https://matrix.org/docs/)
## Credits
Developed and maintained by **Kevin Veen-Birkenbach**.
Learn more at [veen.world](https://www.veen.world).
Part of the [CyMaIS Project](https://github.com/kevinveenbirkenbach/cymais)
Licensed under [CyMaIS NonCommercial License (CNCL)](https://s.veen.world/cncl)
## Alternativ Matrix Setup Role
An alternativ role to deploy Matrix you will find [here](../docker-matrix-compose/)

View File

@ -1,27 +1,2 @@
---
galaxy_info:
author: "Kevin Veen-Birkenbach"
description: >
This role deploys and configures a Matrix homeserver using Ansible automation.
Benefit from a secure, federated, and scalable communication platform with integrated support
for bridges and modern web clients.
license: "CyMaIS NonCommercial License (CNCL)"
license_url: "https://s.veen.world/cncl"
company: |
Kevin Veen-Birkenbach
Consulting & Coaching Solutions
https://www.veen.world
galaxy_tags:
- matrix
- ansible
- federated
- decentralized
- real-time
- encrypted
repository: "https://s.veen.world/cymais"
issue_tracker_url: "https://s.veen.world/cymaisissues"
documentation: "https://s.veen.world/cymais"
logo:
class: "fa-solid fa-satellite-dish"
dependencies:
dependencies:
- nginx-docker-reverse-proxy

View File

@ -1,4 +1,4 @@
# MyBB
# MyBB Forum
## Description

View File

@ -46,17 +46,14 @@
);
when: ldap_check.query_result | length == 0
- name: Check if LDAP source exists
- name: "Check existing LDAP sources"
community.postgresql.postgresql_query:
db: "{{ database_name }}"
login_user: "{{ database_username }}"
login_password: "{{ database_password }}"
login_host: "127.0.0.1"
login_port: "{{ database_port }}"
db: openproject
login_user: postgres
query: "SELECT id, name FROM ldap_auth_sources"
register: ldap_entries
when: enable_debug | bool
- name: "Debug LDAP entries"
debug:
var: ldap_entries

View File

@ -22,7 +22,6 @@ galaxy_info:
- compose
- decentralized
- open-source
- video platform
repository: "https://s.veen.world/cymais"
issue_tracker_url: "https://s.veen.world/cymaisissues"
documentation: "https://s.veen.world/cymais"

View File

@ -1,4 +1,4 @@
# Portfolio
# Portfolio 🚀
## Description

View File

@ -73,11 +73,6 @@ class LookupModule(LookupBase):
meta_data = yaml.safe_load(f)
galaxy_info = meta_data.get("galaxy_info", {})
# If display is set to False ignore it
if not galaxy_info.get("display", True):
continue
description = galaxy_info.get("description", "")
logo = galaxy_info.get("logo", {})
icon_class = logo.get("class", "fa-solid fa-cube")

View File

@ -1,38 +0,0 @@
from __future__ import (absolute_import, division, print_function)
__metaclass__ = type
from ansible.plugins.lookup import LookupBase
from ansible.errors import AnsibleError
class LookupModule(LookupBase):
def run(self, terms, variables=None, **kwargs):
"""
Group the given cards into categorized and uncategorized lists
based on the tags from menu_categories.
"""
if len(terms) < 2:
raise AnsibleError("Missing required arguments")
cards = terms[0]
menu_categories = terms[1]
categorized = {}
uncategorized = []
for card in cards:
found = False
for category, data in menu_categories.items():
if any(tag in data.get('tags', []) for tag in card.get('tags', [])):
categorized.setdefault(category, []).append(card)
found = True
break
if not found:
uncategorized.append(card)
return [
{
'categorized': categorized,
'uncategorized': uncategorized,
}
]

View File

@ -21,26 +21,6 @@
become: false
register: config_file
- name: Load menu categories
include_vars:
file: "menu_categories.yml"
- name: Load docker cards
set_fact:
portfolio_cards: "{{ lookup('docker_cards', 'roles') }}"
- name: Group docker cards
set_fact:
portfolio_menu_data: "{{ lookup('docker_cards_grouped', portfolio_cards, portfolio_menu_categories) }}"
- name: Debug portfolio data
debug:
msg:
portfolio_cards: "{{ portfolio_cards }}"
portfolio_menu_categories: "{{ portfolio_menu_categories}}"
portfolio_menu_data: "{{ portfolio_menu_data }}"
when: enable_debug | bool
- name: Copy host-specific config.yaml if it exists
template:
src: "{{ config_inventory_path }}"

View File

@ -105,7 +105,7 @@ accounts:
- link: navigation.header.contact
cards:
{{ portfolio_cards | to_nice_yaml(indent=2) }}
{{ lookup('docker_cards', 'roles') | to_nice_yaml(indent=2) }}
platform:
titel: {{service_provider.platform.titel}}
@ -163,4 +163,292 @@ navigation:
{% endif %}
{% include 'footer_menu.yaml.j2' %}
footer:
children:
- link: accounts
{% if ["discourse","moodle","listmonk","openproject","taiga","snipe_it","matrix","bigbluebutton","mailu", "matomo","phpmyadmin","keycloak", "ldap", "baserow","yourls","nextcloud"] | any_in(group_names) %}
- name: Solution Hub
description: Curated collection of self hosted tools
icon:
class: fa-solid fa-network-wired
children:
{% if ["discourse","moodle","listmonk"] | any_in(group_names) %}
- name: Community
description: Tools to manage the community
icon:
class: fa-solid fa-users
children:
{% if "discourse" in group_names %}
- name: Forum
description: Join the discussion
icon:
class: fa-brands fa-discourse
url: https://{{domains.discourse}}/
iframe: {{ applications | get_landingpage_iframe_enabled('discourse') }}
{% endif %}
{% if "moodle" in group_names %}
- name: Learning Platform
description: Learn with {{ 'our' if service_provider.type == 'legal' else 'my' }} academy
icon:
class: fa-solid fa-graduation-cap
url: https://{{domains.moodle}}/
iframe: {{ applications | get_landingpage_iframe_enabled('moodle') }}
{% endif %}
{% if "listmonk" in group_names %}
- name: Newsletter
description: Subscribe to {{ 'our' if service_provider.type == 'legal' else 'my' }} newsletter
icon:
class: fa-solid fa-envelope-open-text
url: https://{{domains.listmonk}}/subscription/form
iframe: {{ applications | get_landingpage_iframe_enabled('listmonk') }}
{% endif %}
{% endif %}
{% if ["openproject","taiga","snipe_it"] | any_in(group_names) %}
- name: Project Management
description: Project Management Tools
icon:
class: fa-solid fa-chart-line
children:
{% if "openproject" in group_names %}
- name: Open Project
description: Explore {{ 'our' if service_provider.type == 'legal' else 'my' }} projects
icon:
class: fa-solid fa-tasks
url: https://{{domains.openproject}}/
iframe: {{ applications | get_landingpage_iframe_enabled('openproject') }}
{% endif %}
{% if "taiga" in group_names %}
- name: Taiga
description: View {{ 'our' if service_provider.type == 'legal' else 'my' }} Kanban board
icon:
class: bi bi-clipboard2-check-fill
url: https://{{domains.taiga}}/
iframe: {{ applications | get_landingpage_iframe_enabled('taiga') }}
{% endif %}
{% if "snipe_it" in group_names %}
- name: Snipe IT
description: Manage {{ 'our' if service_provider.type == 'legal' else 'my' }} inventory
icon:
class: fas fa-box-open
url: https://{{domains.snipe_it}}/
iframe: {{ applications | get_landingpage_iframe_enabled('snipe_it') }}
{% endif %}
{% endif %}
{% if ["matrix","bigbluebutton","mailu"] | any_in(group_names) %}
- name: Communication
icon:
class: fa-solid fa-comments
children:
{% if "matrix" in group_names %}
- name: Elements
description: Chat with the world
icon:
class: fa-solid fa-comment
url: https://{{domains.matrix_element}}/
iframe: {{ applications | get_landingpage_iframe_enabled('matrix') }}
{% endif %}
{% if "bigbluebutton" in group_names %}
- name: Big Blue Button
description: Join live events
icon:
class: fa-solid fa-video
url: https://{{domains.bigbluebutton}}/
iframe: {{ applications | get_landingpage_iframe_enabled('bigbluebutton') }}
{% endif %}
{% if "mailu" in group_names %}
- name: Mailu
description: Send{{ 'our' if service_provider.type == 'legal' else 'my' }}a mail
icon:
class: fa-solid fa-envelope
url: https://{{domains.mailu}}/
iframe: {{ applications | get_landingpage_iframe_enabled('mailu') }}
{% endif %}
{% endif %}
{% if ["matomo","phpmyadmin","keycloak", "ldap"] | any_in(group_names) %}
- name: Administration
icon:
class: fas fa-building
children:
{% if "matomo" in group_names %}
- name: Matomo
description: Analyze with Matomo
icon:
class: fa-solid fa-chart-simple
url: https://{{domains.matomo}}/
iframe: {{ applications | get_landingpage_iframe_enabled('matomo') }}
{% endif %}
{% if "phpmyadmin" in group_names %}
- name: phpMyAdmin
description: Administrate MySQL and MariaDB databases
icon:
class: fas fa-database
url: https://{{domains.phpmyadmin}}/
iframe: {{ applications | get_landingpage_iframe_enabled('phpmyadmin') }}
{% endif %}
{% if "pgadmin" in group_names %}
- name: pgAdmin
description: Administrate PostgreSQL databases with ease and precision
icon:
class: fas fa-database
url: https://{{domains.pgadmin}}/
iframe: {{ applications | get_landingpage_iframe_enabled('pgadmin') }}
{% endif %}
{% if "keycloak" in group_names %}
- name: Keycloak
description: Manage User via Keycloak
icon:
class: fas fa-user-shield
iframe: {{ applications | get_landingpage_iframe_enabled('keycloak') }}
children:
- name: Administration
description: Access the central admin console
icon:
class: fa-solid fa-shield-halved
url: https://{{domains.keycloak}}/admin
iframe: {{ applications | get_landingpage_iframe_enabled('keycloak') }}
- name: Profile
description: Update your personal admin settings
icon:
class: fa-solid fa-user-gear
url: https://{{ domains.keycloak }}/realms/{{oidc.client.id}}/account
iframe: {{ applications | get_landingpage_iframe_enabled('keycloak') }}
- name: Logout
description: End your admin session securely
icon:
class: fa-solid fa-right-from-bracket
url: https://{{ domains.keycloak }}/realms/{{oidc.client.id}}/protocol/openid-connect/logout
iframe: false
{% endif %}
{% if "ldap" in group_names %}
- name: LDAP
description: Manage LDAP
icon:
class: fas fa-key
url: https://{{domains.ldap}}/
iframe: {{ applications | get_landingpage_iframe_enabled('ldap') }}
{% endif %}
{% endif %}
{% if ["baserow","yourls","nextcloud"] | any_in(group_names) %}
- name: Tools
icon:
class: fas fa-tools
children:
{% if "baserow" in group_names %}
- name: Baserow
description: Organize with Baserow
icon:
class: fa-solid fa-table
url: https://{{domains.baserow}}/
iframe: {{ applications | get_landingpage_iframe_enabled('baserow') }}
{% endif %}
{% if "yourls" in group_names %}
- name: Yourls
description: Create Shortlinks
icon:
class: bi bi-link
url: https://{{domains.yourls}}/admin/
iframe: {{ applications | get_landingpage_iframe_enabled('yourls') }}
{% endif %}
{% if "nextcloud" in group_names %}
- name: Nextcloud
description: Access your cloud storage
icon:
class: fa-solid fa-cloud
url: https://{{domains.nextcloud}}/
iframe: {{ applications | get_landingpage_iframe_enabled('nextcloud') }}
{% endif %}
{% endif %}
{% endif %}
- name: Support Us
description: "Discover all the ways you can support our work."
icon:
class: fa-solid fa-hands-helping
children:
- name: Buy me a Coffee
description: "Support our work with a coffee every cup helps!"
icon:
class: fa-solid fa-mug-hot
url: https://s.veen.world/buymeacoffee
- name: Patreon
description: "Become a member and support me monthly with exclusive content."
icon:
class: fa-brands fa-patreon
url: https://s.veen.world/patreon
- name: PayPal
description: "Donate to our open source projects with a one-time or monthly PayPal contribution."
icon:
class: fa-brands fa-paypal
url: https://s.veen.world/paypaldonate
- name: GitHub Sponsors
description: "Directly support our projects through GitHub Sponsors."
icon:
class: fa-brands fa-github
url: https://s.veen.world/githubsponsors
{% if "sphinx" in group_names %}
- name: Documentation
description: Access our comprehensive documentation and support resources to help you get the most out of the software.
icon:
class: fas fa-book
url: https://{{domains.sphinx}}
iframe: {{ applications | get_landingpage_iframe_enabled('sphinx') }}
{% endif %}
- name: Imprint
description: Check out the imprint information
icon:
class: fa-solid fa-scale-balanced
url: "{{service_provider.legal.imprint}}"
iframe: true

View File

@ -1,136 +0,0 @@
footer:
children:
- link: accounts
{% if (portfolio_menu_data.categorized is mapping and portfolio_menu_data.categorized | length > 0)
or (portfolio_menu_data.uncategorized is sequence and portfolio_menu_data.uncategorized | length > 0) %}
- name: Solution Hub
description: Curated collection of self hosted tools
icon:
class: fa-solid fa-network-wired
children:
{# Render all categories #}
{% for category, apps in portfolio_menu_data.categorized.items() %}
- name: {{ category }}
description: {{ portfolio_menu_categories[category].description }}
icon:
class: {{ portfolio_menu_categories[category].icon }}
children:
{% for app in apps %}
- name: {{ app.title }}
description: {{ app.text }}
icon: {{ app.icon }}
url: {{ app.url }}
iframe: {{ app.iframe }}
{% if app.title == 'Keycloak' %}
children:
- name: Administration
description: Access the central admin console
icon:
class: fa-solid fa-shield-halved
url: https://{{domains.keycloak}}/admin
iframe: {{ applications | get_landingpage_iframe_enabled('keycloak') }}
- name: Profile
description: Update your personal admin settings
icon:
class: fa-solid fa-user-gear
url: https://{{ domains.keycloak }}/realms/{{oidc.client.id}}/account
iframe: {{ applications | get_landingpage_iframe_enabled('keycloak') }}
- name: Logout
description: End your admin session securely
icon:
class: fa-solid fa-right-from-bracket
url: https://{{ domains.keycloak }}/realms/{{oidc.client.id}}/protocol/openid-connect/logout
iframe: false
{% endif %}
{% endfor %}
{% endfor %}
{# Render Uncategorized #}
{% if portfolio_menu_data.uncategorized %}
- name: Uncategorized
description: Tools without a defined category
icon:
class: fa-solid fa-question
children:
{% for app in portfolio_menu_data.uncategorized %}
- name: {{ app.title }}
description: {{ app.text }}
icon: {{ app.icon }}
url: {{ app.url }}
iframe: {{ app.iframe }}
{% endfor %}
{% endif %}
{% endif %}
- name: Support Us
description: "Discover all the ways you can support our work."
icon:
class: fa-solid fa-hands-helping
children:
- name: Buy me a Coffee
description: "Support our work with a coffee every cup helps!"
icon:
class: fa-solid fa-mug-hot
url: https://s.veen.world/buymeacoffee
- name: Patreon
description: "Become a member and support me monthly with exclusive content."
icon:
class: fa-brands fa-patreon
url: https://s.veen.world/patreon
- name: PayPal
description: "Donate to our open source projects with a one-time or monthly PayPal contribution."
icon:
class: fa-brands fa-paypal
url: https://s.veen.world/paypaldonate
- name: GitHub Sponsors
description: "Directly support our projects through GitHub Sponsors."
icon:
class: fa-brands fa-github
url: https://s.veen.world/githubsponsors
{% if "sphinx" in group_names %}
- name: Documentation
description: Access our comprehensive documentation and support resources to help you get the most out of the software.
icon:
class: fas fa-book
url: https://{{domains.sphinx}}
iframe: {{ applications | get_landingpage_iframe_enabled('sphinx') }}
{% endif %}
{% if "presentation" in group_names %}
- name: Slides
description: Checkout the presentation
icon:
class: fas fa-book
url: https://{{domains.presentation}}
iframe: {{ applications | get_landingpage_iframe_enabled('sphinx') }}
{% endif %}
- name: Imprint
description: Check out the imprint information
icon:
class: fa-solid fa-scale-balanced
url: "{{service_provider.legal.imprint}}"
iframe: true

View File

@ -1,164 +0,0 @@
portfolio_menu_categories:
Community:
description: "Tools to manage the community"
icon: "fa-solid fa-users"
tags:
- community
- forum
- learning
- newsletter
- discourse
- listmonk
- moodle
- mybb
Project Management:
description: "Project Management Tools"
icon: "fa-solid fa-chart-line"
tags:
- project
- kanban
- management
- openproject
- taiga
Social Media:
description: "Social Media Tools"
icon: "fa-solid fa-share-nodes"
tags:
- microblog
- blog
- video platform
- streaming platform
- music platform
- social network
- bluesky
- friendica
- funkwhale
- mastodon
- peertube
- pixelfed
Communication:
description: "Tools for communication"
icon: "fa-solid fa-comments"
tags:
- chat
- communication
- video
- mail
- email
- bigbluebutton
- etherpad
- mailu
- matrix
- xmpp
Cloud:
description: "Self-hosted cloud solutions for file synchronization, collaboration, and data sharing."
icon: "fa-solid fa-cloud"
tags:
- nextcloud
- owncloud
- cloud
IAM:
description: "Tools for Identity and Access Management, including authentication, user provisioning, and secure access control."
icon: "fa-solid fa-user-shield"
tags:
- iam
- identity-management
- authentication
- access-control
- sso
- keycloak
- lam
- ldap
- fusiondirectory
- user-management
Server Administration:
description: "Administration Tools für servers"
icon: "fas fa-building"
tags:
- administration
- database
- central-database
- elk
- mariadb
- matomo
- pgadmin
- phpldapadmin
- phpmyadmin
- postgres
Tools:
description: "Helpful Tools"
icon: "fas fa-tools"
tags:
- tools
- utility
- baserow
- compose
- presentation
- repository-setup
- roulette-wheel
- sphinx
- yourls
Finance & Accounting:
description: "Financial and accounting software"
icon: "fa-solid fa-dollar-sign"
tags:
- finance
- accounting
- invoices
- akaunting
- snipe_it
Events:
description: "Event and ticket management tools"
icon: "fa-solid fa-ticket-alt"
tags:
- events
- ticketing
- attendize
Infrastructure:
description: "Infrastructure and networking tools"
icon: "fa-solid fa-network-wired"
tags:
- infrastructure
- networking
- proxy
- turn
- stun
- coturn
- oauth2-proxy
- registry
Development:
description: "Development and CI/CD tools"
icon: "fa-solid fa-code-branch"
tags:
- development
- version control
- ci/cd
- git
- gitea
- gitlab
- jenkins
Content Management:
description: "CMS and web publishing platforms"
icon: "fa-solid fa-file-alt"
tags:
- cms
- blogging
- publishing
- website
- joomla
- mediawiki
- wordpress

View File

@ -1,4 +1,4 @@
# PostgreSQL
# PostgreSQL 🐳
## Description

View File

@ -25,4 +25,6 @@ galaxy_info:
issue_tracker_url: "https://s.veen.world/cymaisissues"
documentation: "https://s.veen.world/cymais"
logo:
class: "fas fa-chalkboard-teacher"
class: "fas fa-chalkboard-teacher"
dependencies:
- package-manager

View File

@ -4,12 +4,10 @@
include_role:
name: docker-compose
- name: "{{ role_name }} | pkgmgr install"
include_role:
name: pkgmgr-install
vars:
package_name: cymais-presentation
package_notify: docker compose project build and setup
- name: install cymais-presentation
command:
cmd: "pkgmgr install cymais-presentation --clone-mode https"
notify: docker compose project build and setup
- name: Get path of cymais-presentation using pkgmgr
command: pkgmgr path cymais-presentation

View File

@ -1,4 +1,4 @@
# Docker Repository Setup
# Docker Repository Setup 🚀
This Ansible role sets up and manages your Docker repository. It ensures that the repository is pulled from your remote Git source, and it automatically triggers a rebuild of your Docker images using Docker Compose.

View File

@ -1,30 +1,7 @@
# Roulette Wheel
## Warning
This role isn't actively maintained. Use it with caution in production environments.
## Overview
This role deploys and configures the Roulette Wheel application using Docker Compose. It pulls the latest source code from a Git repository, builds a Docker image from a Node.js base, and starts the application on a user-defined local HTTP port.
## Description
Roulette Wheel is a Node.js-based front-end application that is containerized using Docker. The role accomplishes the following:
- **Repository Integration:** Automatically clones or updates the application repository from GitHub.
- **Dockerfile Management:** Uses a custom Dockerfile (built on a Node.js image) to install dependencies, build the application, and define the startup command.
- **Container Deployment:** Integrates with Docker Compose for container orchestration, making it easy to manage the application's lifecycle.
## Features
- **Dockerized Deployment:** Packages the application in a Docker container for consistent and isolated runtime.
- **Automated Builds:** Uses an automated Docker build process with a dedicated Dockerfile.
- **Configurable Ports:** Exposes the application through a customizable host port.
- **Git Integration:** Ensures that the application source code is up-to-date by pulling from the specified Git repository.
# docker roulette-wheel
## Other Resources
- [Roulette Wheel on GitHub](https://github.com/p-wojt/roulette-wheel)
- [Packaging Front-End Projects into Docker Images (Dev.to)](https://dev.to/ms314006/how-to-package-front-end-projects-into-docker-images-and-use-it-with-webpack-go3)
- [Stack Overflow: Dockerfile to Run NodeJS Static Content](https://stackoverflow.com/questions/53178820/dockerfile-to-run-nodejs-static-content-in-docker-container)
- [Stack Overflow: Invalid Host Header Message with Webpack Dev Server](https://stackoverflow.com/questions/43619644/i-am-getting-an-invalid-host-header-message-when-connecting-to-webpack-dev-ser)
## Credits
Developed and maintained by **Kevin Veen-Birkenbach**.
Learn more at [veen.world](https://www.veen.world).
Licensed under the [CyMaIS NonCommercial License (CNCL)](https://s.veen.world/cncl).
- https://github.com/p-wojt/roulette-wheel
- https://dev.to/ms314006/how-to-package-front-end-projects-into-docker-images-and-use-it-with-webpack-go3
- https://stackoverflow.com/questions/53178820/dockerfile-to-run-nodejs-static-content-in-docker-container
- https://stackoverflow.com/questions/43619644/i-am-getting-an-invalid-host-header-message-when-connecting-to-webpack-dev-ser

View File

@ -1 +0,0 @@
- Optimize or implement alternative

View File

@ -1,25 +1,2 @@
---
galaxy_info:
author: "Kevin Veen-Birkenbach"
description: >
This role deploys and configures the Roulette Wheel application using Docker Compose.
It automates the process of pulling the latest source code from GitHub,
building a Docker image, and deploying the application.
license: "CyMaIS NonCommercial License (CNCL)"
license_url: "https://s.veen.world/cncl"
company: |
Kevin Veen-Birkenbach
Consulting & Coaching Solutions
https://www.veen.world
galaxy_tags:
- docker
- nodejs
- roulette
- application
repository: "https://s.veen.world/cymais"
issue_tracker_url: "https://s.veen.world/cymaisissues"
documentation: "https://s.veen.world/cymais"
logo:
class: "fa-solid fa-dice"
dependencies:
- docker-compose
- docker-compose

View File

@ -26,4 +26,6 @@ galaxy_info:
issue_tracker_url: "https://s.veen.world/cymaisissues"
documentation: "https://s.veen.world/cymais"
logo:
class: "fa-solid fa-book"
class: "fa-solid fa-book"
dependencies:
- package-manager

View File

@ -4,12 +4,10 @@
include_role:
name: docker-compose
- name: "{{ role_name }} | pkgmgr install"
include_role:
name: pkgmgr-install
vars:
package_name: cymais-sphinx
package_notify: docker compose project build and setup
- name: install cymais-sphinx
command:
cmd: "pkgmgr install cymais-sphinx --clone-mode https"
notify: docker compose project build and setup
- name: Get path of cymais-sphinx using pkgmgr
command: pkgmgr path cymais-sphinx

View File

@ -1,4 +1,4 @@
# Taiga
# Docker Taiga 🐳📋
## Description

View File

@ -21,7 +21,6 @@ galaxy_info:
- multisite
- msmtp
- automation
- blog
repository: "https://s.veen.world/cymais"
issue_tracker_url: "https://s.veen.world/cymaisissues"
documentation: "https://s.veen.world/cymais"

View File

@ -1,4 +1,4 @@
# YOURLS
# YOURLS URL Shortener
## Description

View File

@ -23,3 +23,5 @@ galaxy_info:
repository: https://s.veen.world/cymais
issue_tracker_url: https://s.veen.world/cymaisissues
documentation: https://s.veen.world/cymais
dependencies:
- role: package-manager

View File

@ -1,9 +1,8 @@
---
- name: "{{ role_name }} | pkgmgr install"
include_role:
name: pkgmgr-install
vars:
package_name: setup-hibernate
- name: install setup-hibernate
command:
cmd: "pkgmgr install setup-hibernate --clone-mode https"
become: true
- name: Setup hibernate
command: setup-hibernate --non-interactive

View File

@ -24,7 +24,7 @@ galaxy_info:
versions:
- rolling
galaxy_tags:
- pkgmgr
- package-manager
- automation
- git
- repositories

View File

@ -25,4 +25,4 @@ galaxy_info:
documentation: https://s.veen.world/cymais
dependencies:
- persona-administrator
- pkgmgr
- package-manager

View File

@ -1,47 +0,0 @@
# Package Manager Installation 📦
## Description
This Ansible role installs and updates packages using `pkgmgr` on Arch Linux systems. It provides a unified interface for package installation and update management, ensuring consistent deployment across environments.
## Overview
The role abstracts package management operations using `pkgmgr`. It ensures the package manager itself is updated once per run and provides idempotent installation and update routines for specified packages.
## Purpose
The purpose of this role is to automate the installation and update process for CyMaIS-related applications or other managed packages using `pkgmgr`. It simplifies package handling and enforces best practices for package deployment in automated environments.
## Features
- **Automatic pkgmgr Update:** Ensures the package manager is always up-to-date.
- **Idempotent Package Installation:** Only installs packages when necessary.
- **Flexible Notification:** Supports handler notification for post-install actions (e.g., Docker Compose builds).
- **Optional Privilege Escalation:** Controlled via the `pkgmgr_become` variable (default: `true`).
## Role Variables
| Name | Description | Default |
|-----------------|-----------------------------------------------------------------|---------|
| `package_name` | Name of the package to install/update | (required) |
| `package_notify` | Handler to notify on package installation/update | "" |
| `pkgmgr_become` | Execute all tasks with elevated privileges (become: true/false) | true |
## Example Usage
```yaml
- name: Install cymais-presentation
include_role:
name: pkgmgr-install
vars:
package_name: cymais-presentation
package_notify: docker compose project build and setup
```
## Credits 📝
Developed and maintained by **Kevin Veen-Birkenbach**.
Learn more at [www.veen.world](https://www.veen.world)
Part of the [CyMaIS Project](https://github.com/kevinveenbirkenbach/cymais)
License: [CyMaIS NonCommercial License (CNCL)](https://s.veen.world/cncl)

View File

@ -1,2 +0,0 @@
---
pkgmgr_become: true

View File

@ -1,25 +0,0 @@
galaxy_info:
author: "Kevin Veen-Birkenbach"
description: "Installs and updates packages using pkgmgr."
license: "CyMaIS NonCommercial License (CNCL)"
license_url: "https://s.veen.world/cncl"
company: |
Kevin Veen-Birkenbach
Consulting & Coaching Solutions
https://www.veen.world
min_ansible_version: "2.9"
platforms:
- name: Archlinux
versions:
- rolling
galaxy_tags:
- pkgmgr
- package
- update
- archlinux
- cymais
repository: https://s.veen.world/cymais
issue_tracker_url: https://s.veen.world/cymaisissues
documentation: https://s.veen.world/cymais
dependencies:
- pkgmgr

View File

@ -1,22 +0,0 @@
- name: "{{ role_name }} | pkgmgr installation tasks"
become: "{{ pkgmgr_become }}"
block:
- name: update pkgmgr
command:
cmd: "pkgmgr update pkgmgr"
when: run_once_pkgmgr_update is not defined
- name: install {{ package_name }}
command:
cmd: "pkgmgr install {{ package_name }} --clone-mode https"
notify: "{{ package_notify | default(omit) }}"
- name: update {{ package_name }}
command:
cmd: "pkgmgr update {{ package_name }}"
notify: "{{ package_notify | default(omit) }}"
- name: mark pkgmgr update as done
set_fact:
run_once_pkgmgr_update: true
when: run_once_pkgmgr_update is not defined

View File

@ -22,4 +22,5 @@ galaxy_info:
issue_tracker_url: "https://s.veen.world/cymaisissues"
documentation: "https://s.veen.world/cymais"
dependencies:
- package-manager
- systemd-notifier

View File

@ -1,8 +1,6 @@
- name: "{{ role_name }} | pkgmgr install"
include_role:
name: pkgmgr-install
vars:
package_name: btrfs-auto-balancer
- name: install btrfs-auto-balancer
command:
cmd: "pkgmgr install btrfs-auto-balancer --clone-mode https"
when: run_once_system_btrfs_auto_balancer is not defined
- name: configure system-btrfs-auto-balancer.cymais.service

View File

@ -0,0 +1,25 @@
---
galaxy_info:
author: "Kevin Veen-Birkenbach"
description: "Automates the creation of a swapfile on the target system by cloning and executing a swapfile creation script, ensuring adequate swap space for improved system performance."
license: "CyMaIS NonCommercial License (CNCL)"
license_url: "https://s.veen.world/cncl"
company: |
Kevin Veen-Birkenbach
Consulting & Coaching Solutions
https://www.veen.world
min_ansible_version: "2.9"
platforms:
- name: Linux
versions:
- all
galaxy_tags:
- swapfile
- system
- performance
- automation
repository: "https://s.veen.world/cymais"
issue_tracker_url: "https://s.veen.world/cymaisissues"
documentation: "https://s.veen.world/cymais"
dependencies:
- package-manager

View File

@ -1,8 +1,7 @@
- name: "{{ role_name }} | pkgmgr install"
include_role:
name: pkgmgr-install
vars:
package_name: swap-forge
- name: install swap-forge
command:
cmd: "pkgmgr install swap-forge --clone-mode https"
become: true
- name: Execute create swapfile script
ansible.builtin.shell: swap-forge "{{swapfile_size}}"

View File

@ -1,2 +0,0 @@
# Todos
- Activate update again. Atm not possible, because it pulls all repos

View File

@ -15,7 +15,7 @@ galaxy_info:
- all
galaxy_tags:
- update
- pkgmgr
- package-manager
- pkgmgr
- system
repository: "https://s.veen.world/cymais"

View File

@ -1,2 +1,2 @@
#- name: "Update all repositories with pkgmgr"
# command: "pkgmgr update --all"
- name: "Update all repositories with pkgmgr"
command: "pkgmgr update --all"