6.8 KiB
*Guide to Create a New Docker Role for CyMaIS
This guide will walk you through the steps to add a new Docker role for a service (in this case, my_service
) in CyMaIS. We will cover where to add the application settings, domain, and other required configuration to ensure that your new service is correctly integrated into the CyMaIS environment.
1. Define the Application Configuration in group_vars/all/07_applications.yml
First, you'll need to add the default configuration for your new service under the defaults_applications
section in group_vars/all/07_applications.yml
.
Steps:
- Open
group_vars/all/07_applications.yml
- Add the configuration for
my_service
under thedefaults_applications
section.
defaults_applications:
## My Service Configuration
my_service:
version: "latest"
features: # Version of the service
matomo: true # Enable Matomo tracking for analytics
css: true # Enable or disable global CSS styling
iframe: false # Allow embedding the landing page in an iframe (if true)
database: true # Enable central database integration
ldap: true # Enable ldap integration
oauth2: true # Enable oauth2 proxy
oidc: true # Enable oidc
2. Add the Domain for my_service
in group_vars/all/03_domains.yml
Next, define the domain for your service in the group_vars/all/03_domains.yml
file. The domain should be dynamic, using the {{ primary_domain }}
placeholder, which will automatically resolve to the correct domain based on the primary domain used for your environment.
Steps:
- Open
group_vars/all/03_domains.yml
- Add the domain for
my_service
.
defaults_domains:
# Other services...
my_service: "slides.{{ primary_domain }}" # Domain for the new service
3. Set the Application ID in vars/main.yml
In the vars/main.yml
file, set the application_id
to my_service
. This step is essential as it allows CyMaIS to correctly reference and configure the new service when deploying it via Docker.
Steps:
- Open
vars/main.yml
- Add the
application_id
for the new service.
application_id: "my_service" # Set the application ID for the service
4. Create the Docker Role for the New Service
Now that you have defined the application settings, domain, and application ID, you need to create a Docker role that will build and run the containerized version of my_service
.
Steps:
- Create a new directory under the
roles
directory, e.g.,roles/docker-my_service
. - Inside the
docker-my_service
role, create the following files:
-
README.md
:- Provide documentation on the new service and how it works within CyMaIS.
-
tasks/main.yml
:- Define the tasks for building and running the Docker container for
my_service
.
Example
tasks/main.yml
:--- # Docker Routines for my_service - name: "include docker-compose role" include_role: name: docker-compose - name: install cymais-my_service command: cmd: "pkgmgr install cymais-my_service --clone-mode https" notify: docker compose project build and setup - name: Get path of cymais-my_service using pkgmgr command: pkgmgr path cymais-my_service register: path_cymais_my_service_output - name: "include role nginx-domain-setup for {{ application_id }}" include_role: name: nginx-domain-setup vars: domain: "{{ domains[application_id] }}" http_port: "{{ ports.localhost.http[application_id] }}" - name: "copy docker-compose.yml and env file" include_tasks: copy-docker-compose-and-env.yml
- Define the tasks for building and running the Docker container for
-
docker-compose.yml.j2
:- Define the
docker-compose.yml
template for building and running the Docker container for the new service.
Example
docker-compose.yml.j2
:services: my_service: build: context: {{ path_cymais_my_service_output.stdout }} dockerfile: {{ path_cymais_my_service_output.stdout }}/Dockerfile ports: - "127.0.0.1:{{ ports.localhost.http[application_id] }}:5000" healthcheck: test: ["CMD", "curl", "-f", "http://127.0.0.1:5000"] interval: 1m timeout: 10s retries: 3 volumes: - {{ path_cymais_my_service_output.stdout }}:/app - {{ path_cymais_output.stdout }}:/source
- Define the
-
vars/main.yml
:- Define any specific variables for
my_service
.
Example
vars/main.yml
:application_id: "my_service"
- Define any specific variables for
-
meta/main.yml
:- Add metadata for your new role.
Example
meta/main.yml
:galaxy_info: author: "Your Name" description: "Docker role to deploy and manage my_service within CyMaIS." license: "CyMaIS NonCommercial License (CNCL)" company: "Your Company" min_ansible_version: "2.9" platforms: - name: Docker versions: - all - name: Linux versions: - all repository: "https://github.com/yourrepo/my_service" documentation: "https://yourdocumentationlink"
5. Test the Configuration
Once you have defined the Docker role, configuration settings, and other necessary files, it is essential to test your changes:
Steps:
- Run the Ansible playbook for deploying your new service.
- Check if
my_service
is correctly deployed and if the domain is resolving as expected. - Verify that the application is accessible via the assigned port (e.g.,
http://slides.{{ primary_domain }}:5000
).
6. Additional Steps for Integration
- You can add additional configurations or adjust existing settings based on the requirements for
my_service
. For instance:- Modify the health check settings in the
docker-compose.yml
template. - Update Nginx or other web servers to properly route traffic to your new service.
- Modify the health check settings in the
Conclusion
By following this guide, you have successfully added a new Dockerized service (my_service
) to the CyMaIS platform. You have:
- Configured the service settings in
group_vars/all/07_applications.yml
- Added the domain for the service in
group_vars/all/03_domains.yml
- Set the
application_id
invars/main.yml
- Created the necessary Docker role for managing
my_service
.
This process allows you to extend the functionality of CyMaIS with new services while maintaining a consistent and reproducible deployment workflow.
For any further details or troubleshooting, please consult the official CyMaIS documentation or reach out to the CyMaIS community for assistance.