feat: add SMTP vars, upgrade PHP and MySQL

This commit is contained in:
Oleg Kainov 2025-05-22 20:15:54 +02:00
parent d6c8ab41b6
commit adf6cdb3c1
4 changed files with 73 additions and 13 deletions

View File

@ -1,4 +1,4 @@
FROM php:7.4-apache FROM php:8.4-apache
SHELL ["/bin/bash", "-o", "pipefail", "-c"] SHELL ["/bin/bash", "-o", "pipefail", "-c"]
@ -43,7 +43,7 @@ RUN set -xe \
COPY config_inc.php /var/www/html/config/config_inc.php COPY config_inc.php /var/www/html/config/config_inc.php
# Install additional plugins # Install additional plugins
ENV SOURCE_TAG v2.5.2 ENV SOURCE_TAG v2.9.0
RUN set -xe && \ RUN set -xe && \
curl -fSL https://github.com/mantisbt-plugins/source-integration/tarball/${SOURCE_TAG} -o /tmp/source.tar.gz && \ curl -fSL https://github.com/mantisbt-plugins/source-integration/tarball/${SOURCE_TAG} -o /tmp/source.tar.gz && \
mkdir /tmp/source && \ mkdir /tmp/source && \

View File

@ -12,7 +12,7 @@ There are some other alternative images exist already such as [vimagick/mantisbt
The reason is to combine all the useful features they have and add some missing ones. To list some: The reason is to combine all the useful features they have and add some missing ones. To list some:
- Always latest MantisBT version. - Always latest MantisBT version.
- Comes with the latest PHP version (7.4 as for today) - Comes with the latest PHP version (8.4 as for today)
- Allows to easily configure presence of `admin` service folder - Allows to easily configure presence of `admin` service folder
- Comes with built-in integration with Gitlab and Github [source plugins](https://github.com/mantisbt-plugins/source-integration) - Comes with built-in integration with Gitlab and Github [source plugins](https://github.com/mantisbt-plugins/source-integration)
- Example `docker-compose.yml` file provided for getting started in one click! - Example `docker-compose.yml` file provided for getting started in one click!
@ -34,7 +34,7 @@ https://www.mantisbt.org/docs/master/en-US/Admin_Guide/html-desktop/#admin.confi
For further details refer to [official documentation](https://www.mantisbt.org/docs/master/en-US/Admin_Guide/html-desktop/#admin.install.new) For further details refer to [official documentation](https://www.mantisbt.org/docs/master/en-US/Admin_Guide/html-desktop/#admin.install.new)
# Example docker-compose.yml ## Example docker-compose.yml
```YAML ```YAML
version: "3" version: "3"
@ -54,6 +54,12 @@ services:
- EMAIL_WEBMASTER=webmaster@localhost - EMAIL_WEBMASTER=webmaster@localhost
- EMAIL_FROM=webmaster@localhost - EMAIL_FROM=webmaster@localhost
- EMAIL_RETURN_PATH=webmaster@localhost - EMAIL_RETURN_PATH=webmaster@localhost
# SMTP Settings, below are default values
#- SMTP_HOST=smtp.yourmail.com
#- SMTP_USER=username
#- SMTP_PASSWORD=superstrongpassword
#- SMTP_PORT=587
#- SMTP_MODE=tls # Maps to $g_smtp_connection_mode, defaults to tls, can be ssl or empty
# Uncomment only if modified from default values # Uncomment only if modified from default values
#- MYSQL_HOST=db #- MYSQL_HOST=db
#- MYSQL_DATABASE=bugtracker #- MYSQL_DATABASE=bugtracker
@ -64,10 +70,10 @@ services:
restart: always restart: always
db: db:
image: mysql:5.7 image: mysql:8.4
container_name: mantis_db container_name: mantis_db
volumes: volumes:
- ./db_data:/var/lib/mysql - ./db_data_v8:/var/lib/mysql
environment: environment:
- MYSQL_ROOT_PASSWORD=root - MYSQL_ROOT_PASSWORD=root
- MYSQL_DATABASE=bugtracker - MYSQL_DATABASE=bugtracker
@ -77,6 +83,30 @@ services:
``` ```
## Upgrading
Normally, you should be able to upgrade freely without any restrictions, just make sure to run the compose with `MANTIS_ENABLE_ADMIN=1` after updating the versions and go to `your-mantis-instance/admin` to perform database upgrades when needed. That's all :)
### MySQL 5.7 EOL
`docker-compose.yaml` file before May 2025 in this repo was using `mysql:5.7` as database container. This has became EOL in 2023, so it was updated to current LTS version 8.4. Unfortunately [MySQL does NOT support direct upgrade](https://dev.mysql.com/doc/refman/8.4/en/upgrade-paths.html), so the recommended way is to just backup the database, upgrade the version and set new path for `db_data`, then recreate the database from dump.
```
# Backup first anyway
docker exec mantis_db /usr/bin/mysqldump -u root -proot bugtracker > backup.sql
docker compose down
# Change 5.7->8.4 and either update db_data mount path e.g. to db_data_v8 or rename db_data->db_data.old
docker compose up -d
docker cp backup.sql mantis_db:/backup.sql
docker exec -it mantis_db bash
# Inside container
mysql -u root -p bugtracker < /backup.sql
# Test the instance, check /admin, if all good - set MANTIS_ENABLE_ADMIN=0 and enjoy
```
# Extensions # Extensions
## Custom config settings ## Custom config settings
@ -105,11 +135,21 @@ $g_anonymous_account = 'anonymous';
There are following env variables supported: There are following env variables supported:
- EMAIL_WEBMASTER - maps to `g_webmaster_email` - `EMAIL_WEBMASTER` - maps to `g_webmaster_email`
- EMAIL_FROM - maps to `g_from_email` - `EMAIL_FROM` - maps to `g_from_email`
- EMAIL_RETURN_PATH - maps to `g_return_path_email` - `EMAIL_RETURN_PATH` - maps to `g_return_path_email`
- `EMAIL_FROM_NAME` - maps to `$g_from_name`
Those are good enough to start with. Going further, to configure SMTP you might need to create custom config (as described above) with the values like: Also SMTP env variables are supported as well:
- `SMTP_HOST=smtp.yourmail.com`
- `SMTP_USER=username`
- `SMTP_PASSWORD=superstrongpassword`
- `SMTP_PORT=587`
- `SMTP_MODE=tls` - Maps to $g_smtp_connection_mode, defaults to tls, can be ssl or empty
```
Those are good enough to start with. Going further, to configure more details you might need to create custom config (as described above) with the values like those:
``` ```
$g_phpMailer_method = PHPMAILER_METHOD_SMTP; $g_phpMailer_method = PHPMAILER_METHOD_SMTP;
$g_smtp_host = 'mail.domain.com'; $g_smtp_host = 'mail.domain.com';

View File

@ -14,6 +14,19 @@ $g_crypto_master_salt = getenv('MASTER_SALT');
# Configure email # Configure email
$g_webmaster_email = getenv('EMAIL_WEBMASTER') !== false ? getenv('EMAIL_WEBMASTER') : null; $g_webmaster_email = getenv('EMAIL_WEBMASTER') !== false ? getenv('EMAIL_WEBMASTER') : null;
$g_from_email = getenv('EMAIL_FROM') !== false ? getenv('EMAIL_FROM') : null; $g_from_email = getenv('EMAIL_FROM') !== false ? getenv('EMAIL_FROM') : null;
if (getenv('EMAIL_FROM_NAME') !== false) {
$g_from_name = getenv('EMAIL_FROM_NAME');
}
$g_return_path_email = getenv('EMAIL_RETURN_PATH') !== false ? getenv('EMAIL_RETURN_PATH') : null; $g_return_path_email = getenv('EMAIL_RETURN_PATH') !== false ? getenv('EMAIL_RETURN_PATH') : null;
# SMTP
if (getenv('SMTP_HOST') !== false) {
$g_phpMailer_method = PHPMAILER_METHOD_SMTP;
$g_smtp_host = getenv('SMTP_HOST');
$g_smtp_port = getenv('SMTP_PORT') !== false ? getenv('SMTP_PORT') : 587;
$g_smtp_connection_mode = getenv('SMTP_MODE') !== false ? getenv('SMTP_MODE') : "tls";
$g_smtp_username = getenv('SMTP_USER') !== false ? getenv('SMTP_USER') : null;
$g_smtp_password = getenv('SMTP_PASSWORD') !== false ? getenv('SMTP_PASSWORD') : null;
}
include 'config_inc_addon.php'; include 'config_inc_addon.php';

View File

@ -12,10 +12,17 @@ services:
- MANTIS_ENABLE_ADMIN=1 - MANTIS_ENABLE_ADMIN=1
# Set master salt, typically can be generated by `cat /dev/urandom | head -c 64 | base64` # Set master salt, typically can be generated by `cat /dev/urandom | head -c 64 | base64`
#- MASTER_SALT= #- MASTER_SALT=
# Set base email settings. For more detailed configuration (i.e. SMTP) you'll need to add own config file # Set base email settings. For more detailed configuration you'll need to add own config file
- EMAIL_WEBMASTER=webmaster@localhost - EMAIL_WEBMASTER=webmaster@localhost
- EMAIL_FROM=webmaster@localhost - EMAIL_FROM=webmaster@localhost
- EMAIL_FROM_NAME=Mantis BT
- EMAIL_RETURN_PATH=webmaster@localhost - EMAIL_RETURN_PATH=webmaster@localhost
# SMTP Settings, below are default values
#- SMTP_HOST=smtp.yourmail.com
#- SMTP_USER=username
#- SMTP_PASSWORD=superstrongpassword
#- SMTP_PORT=587
#- SMTP_MODE=tls # Maps to $g_smtp_connection_mode, defaults to tls, can be ssl or empty
# Uncomment only if modified from default values # Uncomment only if modified from default values
#- MYSQL_HOST=db #- MYSQL_HOST=db
#- MYSQL_DATABASE=bugtracker #- MYSQL_DATABASE=bugtracker
@ -30,10 +37,10 @@ services:
restart: always restart: always
db: db:
image: mysql:5.7 image: mysql:8.4
container_name: mantis_db container_name: mantis_db
volumes: volumes:
- ./db_data:/var/lib/mysql - ./db_data_v8:/var/lib/mysql
environment: environment:
# You might want to change root password before first run # You might want to change root password before first run
- MYSQL_ROOT_PASSWORD=root - MYSQL_ROOT_PASSWORD=root