iJUG Self-Service Portal
DukeOps is a self-service portal for iJUG members.
DukeOps follows Semantic Versioning 2.0.0. Version numbers are structured as MAJOR.MINOR.PATCH:
- MAJOR versions introduce incompatible API or data changes,
- MINOR versions add functionality in a backwards-compatible manner,
- PATCH versions include backwards-compatible bug fixes.
This versioning scheme applies to the public API, database schema, and plugin interfaces. We aim to keep upgrades predictable and manageable. Breaking changes, new features, and fixes are documented in the CHANGELOG.md and in the release notes.
You can find a lot of information on how you can contribute to DukeOps in the separate file CONTRIBUTING.md. A curated list of contributors is available in the file CONTRIBUTORS.md.
There is a channel at Matrix for quick and easy communication. This is publicly accessible for everyone. For developers as well as users. The communication in this chat is to be regarded as short-lived and has no documentary character.
You can find our Matrix channel here: @dukeops:ijug.eu
We use the corresponding GitHub function for discussions. The discussions held here are long-lived and divided into categories for the sake of clarity. One important category, for example, is that for questions and answers.
Discussions on GitHub: https://github.com/ijug-ev/dukeops/discussions
Questions and Answers: https://github.com/ijug-ev/dukeops/discussions/categories/q-a
The file application.properties contains only some default values. To override the default values and to specify other configuration options, just set them as environment variables. The following sections describe all available configuration options. You only need to specify these options if your configuration settings differ from the defaults.
The server runs on port 8080 by default. If you don't like it, change it using an environment variable:
DUKEOPS_PORT=8080
When starting DukeOps, the system can automatically create instance admins. To enable this, set the following environment variable to a comma separated list of the email addresses of the admins:
DUKEOPS_INSTANCE_ADMINS=admin@example.com
If no user with the admin role is found in the database, a new instance admin will be created with the email address given.
Warning
This mechanism runs once on each start! It will nominate existing users with the same email address as admin. If there is no user with the specified email address, it will crate a new one. Existing admins are skipped.
DukeOps supports sending email notifications. Configuration is done via environment variables using the DUKEOPS_MAIL_* naming scheme.
| Variable | Default | Description |
|---|---|---|
DUKEOPS_MAIL_FROM |
noreply@localhost |
Sender address shown in outgoing emails (e.g. noreply@example.com). |
DUKEOPS_MAIL_REPLY_TO |
(empty) | Optional reply-to address (e.g. support@example.com). |
DUKEOPS_MAIL_HOST |
localhost |
Mail server address. Use a local MTA or external SMTP provider. |
DUKEOPS_MAIL_PORT |
25 |
Port for the SMTP server (e.g., 587 for STARTTLS or 465 for SSL). |
DUKEOPS_MAIL_PROTOCOL |
smtp |
Protocol used for sending email. Usually smtp. |
DUKEOPS_MAIL_USERNAME |
(empty) | Username for SMTP authentication, if required. |
DUKEOPS_MAIL_PASSWORD |
(empty) | Password for SMTP authentication, if required. |
DUKEOPS_MAIL_SMTP_AUTH |
false |
Whether SMTP authentication is enabled. |
DUKEOPS_MAIL_STARTTLS_ENABLE |
false |
Enable STARTTLS encryption (recommended for port 587). |
DUKEOPS_MAIL_STARTTLS_REQUIRED |
false |
Require STARTTLS (connection will fail if not supported). |
DUKEOPS_MAIL_SSL_ENABLE |
false |
Enable SSL encryption (typically for port 465). |
DUKEOPS_MAIL_CONNECTION_TIMEOUT |
5000 |
Timeout in milliseconds for establishing the SMTP connection. |
DUKEOPS_MAIL_TIMEOUT |
5000 |
Timeout in milliseconds for waiting on SMTP server responses. |
DUKEOPS_MAIL_WRITE_TIMEOUT |
5000 |
Timeout in milliseconds for writing data to the SMTP server. |
DUKEOPS_MAIL_ENCODING |
UTF-8 |
Default encoding for email subject and content. |
In a .env file, CI system, or Docker environment:
DUKEOPS_INSTANCE_ADMINS=admin@example.com
DUKEOPS_MAIL_FROM=noreply@example.com
DUKEOPS_MAIL_REPLY_TO=support@example.com
DUKEOPS_MAIL_HOST=smtp.example.com
DUKEOPS_MAIL_PORT=587
DUKEOPS_MAIL_USERNAME=myuser
DUKEOPS_MAIL_PASSWORD=secret
DUKEOPS_MAIL_SMTP_AUTH=true
DUKEOPS_MAIL_STARTTLS_ENABLE=trueTip
If you are using a local mail relay (e.g., Nullmailer or Postfix), you can often omit authentication and encryption settings.
DukeOps needs a database to store the business data. By default, DukeOps comes with MariaDB drivers. MariaDB is recommended because we are using it during development, and it is highly tested with DukeOps. All free and open source JDBC compatible databases are supported, but you need to configure the JDBC driver dependencies accordingly. Please make sure that your database is using a Unicode character set to avoid problems storing data containing Unicode characters. The database user to access the DukeOps database executes automatic schema migrations and needs ALL PRIVILEGES.
Please configure the database connection using the following environment variables:
DUKEOPS_DB_URL=jdbc:mariadb://localhost:3306/dukeops?serverTimezone\=Europe/Zurich&allowMultiQueries=true
DUKEOPS_DB_USER=johndoe
DUKEOPS_DB_PASS=verysecret
The database schema will be migrated automatically by DukeOps.
MySQL and MariaDB have a possible silent truncation problem with the GROUP_CONCAT command. To avoid this it is necessary, to configure these two databases to allow multi queries. Just add allowMultiQueries=true to the JDBC database URL like in this example (you may need to scroll the example code to the right):
DUKEOPS_DB_URL=jdbc:mariadb://localhost:3306/dukeops?serverTimezone\=Europe/Zurich&allowMultiQueries=true
Copyright (C) Marcus Fihlon and the individual contributors to DukeOps.
This program is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.
This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more details.
You should have received a copy of the GNU Affero General Public License along with this program. If not, see http://www.gnu.org/licenses/.