commit 1d5a1b5ad8c2522aeebf623b9e2d877404dca036 Author: Markus Pesch Date: Mon Aug 30 18:09:14 2021 +0200 Initial Commit diff --git a/.drone.yml b/.drone.yml new file mode 100644 index 0000000..b03bb28 --- /dev/null +++ b/.drone.yml @@ -0,0 +1,228 @@ +--- +kind: pipeline +type: kubernetes +name: linter + +platform: + os: linux + arch: amd64 + +steps: +- name: markdown lint + commands: + - markdownlint *.md + image: docker.io/tmknom/markdownlint:0.23.1 + resources: + limits: + cpu: 50 + memory: 50M + +- name: email-notification + environment: + PLUGIN_HOST: + from_secret: smtp_host + PLUGIN_USERNAME: + from_secret: smtp_username + PLUGIN_PASSWORD: + from_secret: smtp_password + PLUGIN_FROM: + from_secret: smtp_mail_address + image: docker.io/drillster/drone-email:latest + resources: + limits: + cpu: 50 + memory: 25M + when: + status: + - changed + - failure + +trigger: + event: + exclude: + - tag +--- +kind: pipeline +type: docker +name: build-latest + +platform: + os: linux + arch: amd64 + +steps: +- name: build + image: docker.io/volkerraschek/build-image:latest + commands: + - make container-image/build + volumes: + - name: docker_socket + path: /var/run/docker.sock + when: + branch: + - master + +- name: push + image: docker.io/volkerraschek/build-image:latest + commands: + - make container-image/push + environment: + POSTFIXADMIN_IMAGE_REGISTRY_PASSWORD: + from_secret: container_image_registry_password + volumes: + - name: docker_socket + path: /var/run/docker.sock + when: + branch: + - master + repo: + - volker.raschek/postfixadmin-docker + +- name: delete + image: docker.io/volkerraschek/build-image:latest + commands: + - make container-image/delete + volumes: + - name: docker_socket + path: /var/run/docker.sock + when: + branch: + - master + +- name: notify + image: drillster/drone-email + environment: + PLUGIN_HOST: + from_secret: smtp_host + PLUGIN_USERNAME: + from_secret: smtp_username + PLUGIN_PASSWORD: + from_secret: smtp_password + PLUGIN_FROM: + from_secret: smtp_mail_address + when: + status: + - changed + - failure + +volumes: +- name: docker_socket + host: + path: /var/run/docker.sock + +trigger: + event: + exclude: + - tag + +--- +kind: pipeline +type: docker +name: build-tagged + +platform: + os: linux + arch: amd64 + +steps: +- name: build + image: docker.io/volkerraschek/build-image:latest + commands: + - make container-image/build POSTFIXADMIN_IMAGE_VERSION=${DRONE_TAG} + volumes: + - name: docker_socket + path: /var/run/docker.sock + +- name: push + image: docker.io/volkerraschek/build-image:latest + commands: + - make container-image/push POSTFIXADMIN_IMAGE_VERSION=${DRONE_TAG} + environment: + POSTFIXADMIN_IMAGE_REGISTRY_PASSWORD: + from_secret: container_image_registry_password + volumes: + - name: docker_socket + path: /var/run/docker.sock + +- name: delete + image: docker.io/volkerraschek/build-image:latest + commands: + - make container-image/delete POSTFIXADMIN_IMAGE_VERSION=${DRONE_TAG} + volumes: + - name: docker_socket + path: /var/run/docker.sock + +- name: notify + image: drillster/drone-email + environment: + PLUGIN_HOST: + from_secret: smtp_host + PLUGIN_USERNAME: + from_secret: smtp_username + PLUGIN_PASSWORD: + from_secret: smtp_password + PLUGIN_FROM: + from_secret: smtp_mail_address + when: + status: + - changed + - failure + +volumes: +- name: docker_socket + host: + path: /var/run/docker.sock + +trigger: + event: + - tag + repo: + - volker.raschek/postfixadmin-docker +--- +kind: pipeline +type: kubernetes +name: sync + +platform: + os: linux + arch: amd64 + +steps: +- name: github + image: docker.io/appleboy/drone-git-push:latest + resources: + limits: + cpu: 50 + memory: 25M + settings: + branch: master + remote: ssh://git@github.com/volker-raschek/postfixadmin-docker.git + force: true + ssh_key: + from_secret: ssh_key + +- name: email-notification + environment: + PLUGIN_HOST: + from_secret: smtp_host + PLUGIN_USERNAME: + from_secret: smtp_username + PLUGIN_PASSWORD: + from_secret: smtp_password + PLUGIN_FROM: + from_secret: smtp_mail_address + image: docker.io/drillster/drone-email:latest + resources: + limits: + cpu: 50 + memory: 25M + when: + status: + - changed + - failure + +trigger: + event: + - push + repo: + - volker.raschek/postfixadmin-docker diff --git a/.editorconfig b/.editorconfig new file mode 100644 index 0000000..dd69de0 --- /dev/null +++ b/.editorconfig @@ -0,0 +1,15 @@ +# EditorConfig is awesome: https://EditorConfig.org + +# top-most EditorConfig file +root = true + +[*] +indent_style = space +indent_size = 2 +end_of_line = lf +charset = utf-8 +trim_trailing_whitespace = true +insert_final_newline = false + +[Makefile] +indent_style = tab \ No newline at end of file diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 0000000..dcd9d00 --- /dev/null +++ b/.gitattributes @@ -0,0 +1 @@ +Makefile eol=lf \ No newline at end of file diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..2eea525 --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +.env \ No newline at end of file diff --git a/.markdownlint.yaml b/.markdownlint.yaml new file mode 100644 index 0000000..855c24c --- /dev/null +++ b/.markdownlint.yaml @@ -0,0 +1,144 @@ +# markdownlint YAML configuration +# https://github.com/DavidAnson/markdownlint/blob/main/schema/.markdownlint.yaml + +# Default state for all rules +default: true + +# Path to configuration file to extend +extends: null + +# MD003/heading-style/header-style - Heading style +MD003: + # Heading style + style: "atx" + +# MD004/ul-style - Unordered list style +MD004: + style: "dash" + +# MD007/ul-indent - Unordered list indentation +MD007: + # Spaces for indent + indent: 2 + # Whether to indent the first level of the list + start_indented: false + +# MD009/no-trailing-spaces - Trailing spaces +MD009: + # Spaces for line break + br_spaces: 2 + # Allow spaces for empty lines in list items + list_item_empty_lines: false + # Include unnecessary breaks + strict: false + +# MD010/no-hard-tabs - Hard tabs +MD010: + # Include code blocks + code_blocks: true + +# MD012/no-multiple-blanks - Multiple consecutive blank lines +MD012: + # Consecutive blank lines + maximum: 1 + +# MD013/line-length - Line length +MD013: + # Number of characters + line_length: 80 + # Number of characters for headings + heading_line_length: 80 + # Number of characters for code blocks + code_block_line_length: 80 + # Include code blocks + code_blocks: false + # Include tables + tables: false + # Include headings + headings: true + # Include headings + headers: true + # Strict length checking + strict: false + # Stern length checking + stern: false + +# MD022/blanks-around-headings/blanks-around-headers - Headings should be surrounded by blank lines +MD022: + # Blank lines above heading + lines_above: 1 + # Blank lines below heading + lines_below: 1 + +# MD024/no-duplicate-heading/no-duplicate-header - Multiple headings with the same content +MD024: + # Only check sibling headings + allow_different_nesting: true + +# MD025/single-title/single-h1 - Multiple top-level headings in the same document +MD025: + # Heading level + level: 1 + # RegExp for matching title in front matter + front_matter_title: "^\\s*title\\s*[:=]" + +# MD026/no-trailing-punctuation - Trailing punctuation in heading +MD026: + # Punctuation characters + punctuation: ".,;:!。,;:!" + +# MD029/ol-prefix - Ordered list item prefix +MD029: + # List style + style: "one_or_ordered" + +# MD030/list-marker-space - Spaces after list markers +MD030: + # Spaces for single-line unordered list items + ul_single: 1 + # Spaces for single-line ordered list items + ol_single: 1 + # Spaces for multi-line unordered list items + ul_multi: 1 + # Spaces for multi-line ordered list items + ol_multi: 1 + +# MD033/no-inline-html - Inline HTML +MD033: + # Allowed elements + allowed_elements: [] + +# MD035/hr-style - Horizontal rule style +MD035: + # Horizontal rule style + style: "---" + +# MD036/no-emphasis-as-heading/no-emphasis-as-header - Emphasis used instead of a heading +MD036: + # Punctuation characters + punctuation: ".,;:!?。,;:!?" + +# MD041/first-line-heading/first-line-h1 - First line in a file should be a top-level heading +MD041: + # Heading level + level: 1 + # RegExp for matching title in front matter + front_matter_title: "^\\s*title\\s*[:=]" + +# MD044/proper-names - Proper names should have the correct capitalization +MD044: + # List of proper names + names: + - PostfixAdmin + # Include code blocks + code_blocks: false + +# MD046/code-block-style - Code block style +MD046: + # Block style + style: "fenced" + +# MD048/code-fence-style - Code fence style +MD048: + # Code fence syle + style: "backtick" \ No newline at end of file diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..3b25114 --- /dev/null +++ b/Dockerfile @@ -0,0 +1,70 @@ +FROM docker.io/library/php:7.4-apache + +# POSTFIXADMIN VERSION +ARG POSTFIXADMIN_VERSION \ + POSTFIXADMIN_SHA512 + +# APACHE +ENV APACHE_DOCUMENT_ROOT /var/www/html/public + +RUN set -eu; \ + sed --in-place --regexp-extended 's#/var/www/html#${APACHE_DOCUMENT_ROOT}#g' /etc/apache2/sites-available/*.conf; \ + sed --in-place --regexp-extended 's#/var/www/#${APACHE_DOCUMENT_ROOT}#g' /etc/apache2/apache2.conf /etc/apache2/conf-available/*.conf + +# DEFAULT DATABASE SETTINGS +ENV POSTFIXADMIN_DATABASE_TYPE=sqlite \ + POSTFIXADMIN_DATABASE_HOST="" \ + POSTFIXADMIN_DATABASE_PORT="" \ + POSTFIXADMIN_DATABASE_USER="" \ + POSTFIXADMIN_DATABASE_PASSWORD="" \ + POSTFIXADMIN_SMTP_SERVER="localhost" \ + POSTFIXADMIN_SMTP_PORT="25" \ + POSTFIXADMIN_ENCRYPT="md5crypt" + +# docker-entrypoint.sh dependencies +RUN set -eux; \ + apt-get update; \ + apt-get install --yes --no-install-recommends gosu; \ + rm --recursive --force /var/lib/apt/lists/* + +# Install required PHP extensions +RUN set -ex; \ + savedAptMark="$(apt-mark showmanual)"; \ + apt-get update; \ + apt-get install --yes --no-install-recommends \ + libc-client2007e-dev \ + libkrb5-dev \ + libpq-dev \ + libsqlite3-dev; \ + docker-php-ext-configure imap --with-imap-ssl --with-kerberos; \ + docker-php-ext-install -j "$(nproc)" \ + imap \ + pdo_mysql \ + pdo_pgsql \ + pdo_sqlite \ + pgsql; \ + apt-mark auto '.*' > /dev/null; \ + apt-mark manual $savedAptMark; \ + ldd "$(php -r 'echo ini_get("extension_dir");')"/*.so \ + | awk '/=>/ { print $3 }' \ + | sort -u \ + | xargs -r dpkg-query -S \ + | cut -d: -f1 \ + | sort -u \ + | xargs -rt apt-mark manual; \ + apt-get purge --yes --auto-remove -o APT::AutoRemove::RecommendsImportant=false; \ + rm --recursive --force /var/lib/apt/lists/* + +RUN set -eu; \ + curl --fail --silent --show-error --location "https://github.com/postfixadmin/postfixadmin/archive/postfixadmin-${POSTFIXADMIN_VERSION}.tar.gz" --output postfixadmin.tar.gz ; \ + echo "${POSTFIXADMIN_SHA512} *postfixadmin.tar.gz" | sha512sum -c -; \ + tar --extract --file postfixadmin.tar.gz --directory /var/www/html --strip-components=1; \ + rm postfixadmin.tar.gz; \ + # Does not exist in tarball but is required + mkdir --parents /var/www/html/templates_c; \ + chown --recursive www-data:www-data /var/www/html + +COPY entrypoint.sh /usr/local/bin/ + +ENTRYPOINT ["/usr/local/bin/entrypoint.sh"] +CMD ["apache2-foreground"] diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..5a82408 --- /dev/null +++ b/LICENSE @@ -0,0 +1,13 @@ +Copyright 2019 Markus Pesch + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. \ No newline at end of file diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..6126047 --- /dev/null +++ b/Makefile @@ -0,0 +1,52 @@ +POSTFIXADMIN_VERSION:=3.3.10 +POSTFIXADMIN_SHA512:=e00fc9ea343a928976d191adfa01020ee0c6ddbe80a39e01ca2ee414a18247958f033970f378fe4a9974636172a5e094e57117ee9ac7b930c592f433097a7aca + +# CONTAINER_RUNTIME +# The CONTAINER_RUNTIME variable will be used to specified the path to a +# container runtime. This is needed to start and run a container image. +CONTAINER_RUNTIME?=$(shell which docker) + +# POSTFIXADMIN_IMAGE_REGISTRY_NAME +# Defines the name of the new container to be built using several variables. +POSTFIXADMIN_IMAGE_REGISTRY_NAME:=docker.io +POSTFIXADMIN_IMAGE_REGISTRY_USER:=volkerraschek + +POSTFIXADMIN_IMAGE_NAMESPACE?=${POSTFIXADMIN_IMAGE_REGISTRY_USER} +POSTFIXADMIN_IMAGE_NAME:=postfixadmin +POSTFIXADMIN_IMAGE_VERSION?=latest +POSTFIXADMIN_IMAGE_FULLY_QUALIFIED=${POSTFIXADMIN_IMAGE_REGISTRY_NAME}/${POSTFIXADMIN_IMAGE_NAMESPACE}/${POSTFIXADMIN_IMAGE_NAME}:${POSTFIXADMIN_IMAGE_VERSION} +POSTFIXADMIN_IMAGE_UNQUALIFIED=${POSTFIXADMIN_IMAGE_NAMESPACE}/${POSTFIXADMIN_IMAGE_NAME}:${POSTFIXADMIN_IMAGE_VERSION} + +# BUILD CONTAINER IMAGE +# ============================================================================== +PHONY:=container-image/build +container-image/build: + ${CONTAINER_RUNTIME} build \ + --build-arg POSTFIXADMIN_VERSION=${POSTFIXADMIN_VERSION} \ + --build-arg POSTFIXADMIN_SHA512=${POSTFIXADMIN_SHA512} \ + --file Dockerfile \ + --no-cache \ + --pull \ + --tag ${POSTFIXADMIN_IMAGE_FULLY_QUALIFIED} \ + --tag ${POSTFIXADMIN_IMAGE_UNQUALIFIED} \ + . + +# DELETE CONTAINER IMAGE +# ============================================================================== +PHONY:=container-image/delete +container-image/delete: + - ${CONTAINER_RUNTIME} image rm ${POSTFIXADMIN_IMAGE_FULLY_QUALIFIED} ${POSTFIXADMIN_IMAGE_UNQUALIFIED} + - ${CONTAINER_RUNTIME} image rm ${PHP_IMAGE_FULL} + +# PUSH CONTAINER IMAGE +# ============================================================================== +PHONY+=container-image/push +container-image/push: + echo ${POSTFIXADMIN_IMAGE_REGISTRY_PASSWORD} | ${CONTAINER_RUNTIME} login ${POSTFIXADMIN_IMAGE_REGISTRY_NAME} --username ${POSTFIXADMIN_IMAGE_REGISTRY_USER} --password-stdin + ${CONTAINER_RUNTIME} push ${POSTFIXADMIN_IMAGE_FULLY_QUALIFIED} + +# PHONY +# ============================================================================== +# Declare the contents of the PHONY variable as phony. We keep that information +# in a variable so we can use it in if_changed. +.PHONY: ${PHONY} \ No newline at end of file diff --git a/README.md b/README.md new file mode 100644 index 0000000..20a8ae6 --- /dev/null +++ b/README.md @@ -0,0 +1,177 @@ +# PostfixAdmin + +[![Build Status](https://drone.cryptic.systems/api/badges/volker.raschek/postfixadmin-docker/status.svg)](https://drone.cryptic.systems/volker.raschek/postfixadmin-docker) +[![Docker Pulls](https://img.shields.io/docker/pulls/volkerraschek/postfixadmin)](https://hub.docker.com/r/volkerraschek/postfixadmin) +[![Artifact Hub](https://img.shields.io/endpoint?url=https://artifacthub.io/badge/repository/volker-raschek)](https://artifacthub.io/packages/search?repo=volker-raschek) + +This is an alternative project to build a container image for +[PostfixAdmin](https://github.com/postfixadmin/postfixadmin). + +The main goal of this alternative image is to support a kubernetes deployment +via helm. Furthermore, the container image support configuring via environment +variables. + +Checkout the helm repository of +[volker-raschek](https://artifacthub.io/packages/helm/volker-raschek/postfixadmin) +on [artifacthub.io](https://artifacthub.io) for more details. + +## Supported environment variables + +This list is an overview over some important environment variables. The +environment variables are composed on the key of the PHP configuration with the +prefix `POSTFIXADMIN_`. You can take an example +[configuration](https://github.com/postfixadmin/postfixadmin/blob/master/config.inc.php) +from the upstream project. + +| name | default | +| ----------------------------------- | --------------------------- | +| `POSTFIXADMIN_ADMIN_EMAIL` | | +| `POSTFIXADMIN_ADMIN_SMTP_PASSWORD` | | +| `POSTFIXADMIN_ADMIN_NAME` | | +| `POSTFIXADMIN_DATABASE_TYPE` | `sqlite` | +| `POSTFIXADMIN_DATABASE_USER` | | +| `POSTFIXADMIN_DATABASE_PASSWORD` | | +| `POSTFIXADMIN_DATABASE_HOST` | | +| `POSTFIXADMIN_DATABASE_PORT` | | +| `POSTFIXADMIN_DATABASE_NAME` | `/var/tmp/postfixadmin.db` | +| `POSTFIXADMIN_DEFAULT_LANGUAGE` | `en` | +| `POSTFIXADMIN_DATABASE_USE_SSL` | | +| `POSTFIXADMIN_DATABASE_KEY` | | +| `POSTFIXADMIN_DATABASE_CERT` | | +| `POSTFIXADMIN_DATABASE_CA` | | +| `POSTFIXADMIN_DATABASE_PREFIX` | | +| `POSTFIXADMIN_ENCRYPT` | `md5crypt` | +| `POSTFIXADMIN_SMTP_SERVER` | `localhost` | +| `POSTFIXADMIN_SMTP_PORT` | `25` | + +### POSTFIXADMIN_ADMIN_EMAIL + +Define the email address of an admin via `POSTFIXADMIN_ADMIN_EMAIL` to send +emails or broadcast messages in his name instead of the email address of the +logged in admin, which wants to send an email or broadcast message about the +PostfixAdmin interface. By default is the environment variable not defined. The +value of the environment will be configured as the following config setting: +`$CONF['admin_email']`. + +### POSTFIXADMIN_ADMIN_SMTP_PASSWORD + +Define the smtp password via `POSTFIXADMIN_ADMIN_SMTP_PASSWORD` of the admin +which should be used to send emails or broadcast messages about the PostfixAdmin +interface. By default is the environment variable not defined. The value of the +environment will be configured as the following config setting: +`$CONF['admin_smtp_password']`. + +### POSTFIXADMIN_ADMIN_NAME + +Define the name of the admin via `POSTFIXADMIN_ADMIN_NAME` which should be used +to send emails or broadcast messages about the PostfixAdmin interface. By +default is the environment variable not defined. The value of the environment +will be configured as the following config setting: `$CONF['admin_name']`. + +### POSTFIXADMIN_DATABASE_TYPE + +PostfixAdmin support currently sqlite, postgres and mysql/mariadb. About the +envrionment variable `POSTFIXADMIN_DATABASE_TYPE` can the backend type defined. +The default value is `sqlite`. + +| database type | value | +| ------------- | --------- | +| mysql/mariadb | `mysqli` | +| postgres | `pgsql` | +| sqlite | `sqlite` | + +### POSTFIXADMIN_DATABASE_USER + +The environment variable `POSTFIXADMIN_DATABASE_USER` is undefined and only +required if the database backend is not `sqlite`. The value of the environment +will be configured as the following config setting: `$CONF['database_user']`. + +### POSTFIXADMIN_DATABASE_PASSWORD + +The environment variable `POSTFIXADMIN_DATABASE_PASSWORD` is undefined and only +required if the database backend is not `sqlite`. The value of the environment +will be configured as the following config setting: `$CONF['database_password']`. + +### POSTFIXADMIN_DATABASE_HOST + +The environment variable `POSTFIXADMIN_DATABASE_HOST` is undefined and only +required if the database backend is not `sqlite`. The value of the environment +will be configured as the following config setting: `$CONF['database_host']`. + +### POSTFIXADMIN_DATABASE_PORT + +The environment variable `POSTFIXADMIN_DATABASE_PORT` will automatically defined +with default values when instead of `sqlite` an other database backend has been +selected. The value of the environment will be configured as the following +config setting: `$CONF['database_port']`. + +| database type | default port | +| --------------- | ------------- | +| mysqli/mariadb | `3306` | +| postgres | `5432` | + +### POSTFIXADMIN_DATABASE_NAME + +The environment variable `POSTFIXADMIN_DATABASE_NAME` is defined by default with +the value `/var/tmp/postfixadmin.db`. This is the path where the `sqlite` +database is stored. If `pgsql` or `mysqli` is defined instead of `sqlite` as +database backend type, can the environment variable used to define the database +name. The value of the environment will be configured as the following config +setting: `$CONF['database_name']`. + +### POSTFIXADMIN_DATABASE_USE_SSL + +Encrypt a database connection to an external database like postgres, mariadb or +mysqli via SSL when `POSTFIXADMIN_DATABASE_USE_SSL=true`. Additionally should be +the other SSL environment variables defined to establish successfully a SSL +encrypted connection. The value of the environment will be configured as the +following config setting: `$CONF['database_use_ssl']`. + +### POSTFIXADMIN_DATABASE_SSL_KEY + +Via `POSTFIXADMIN_DATABASE_SSL_KEY` can be the path to the private key defined +which should be used to encrypt the database connection via SSL. By default is +this environment variable undefined. The value of the environment will be +configured as the following config setting: `$CONF['database_ssl_key']`. + +### POSTFIXADMIN_DATABASE_SSL_CERT + +Via `POSTFIXADMIN_DATABASE_SSL_CERT` can be the path to the certificate defined +which should be used to encrypt the database connection via SSL. By default is +this environment variable undefined. The value of the environment will be +configured as the following config setting: `$CONF['database_ssl_cert']`. + +### POSTFIXADMIN_DATABASE_SSL_CA + +Via `POSTFIXADMIN_DATABASE_SSL_CA` can be the path to the root certificate of +the certificate authority defined which should be trusted to encrypt the database +connection via SSL. By default is this environment variable undefined. The value +of the environment will be configured as the following config setting: +`$CONF['database_ssl_ca']`. + +### POSTFIXADMIN_DATABASE_PREFIX + +It make much sense to use a prefix name for all PostfixAdmin related tables, +when the tables, views and so on should be stored into a shared schema like +`public`. About the environment variable `POSTFIXADMIN_DATABASE_PREFIX` can such +a prefix defined. By default is this variable undefined, but when not it results +in the config setting `$CONF['database_prefix']`. + +### POSTFIXADMIN_DEFAULT_LANGUAGE + +Default language of PostfixAdmin. Checkout the [official +repository](https://github.com/postfixadmin/postfixadmin/tree/master/languages) +under `./languages` to get a list of all supported languages. + +### POSTFIXADMIN_ENCRYPT + +Via `POSTFIXADMIN_ENCRYPT` can be the algorithm specified to encrypt passwords +of users. The algorithm `md5crypt` is defined as default. Other possible values +are documented +[here](https://github.com/postfixadmin/postfixadmin/blob/master/DOCUMENTS/HASHING.md). + +### POSTFIXADMIN_SETUP_PASSWORD + +To login into the `setup.php` page is the setup password required. This can be +defined via the variable `POSTFIXADMIN_SETUP_PASSWORD`. The password will not be +configured in the `config.local.php` as plain text. It will be encrypted. diff --git a/docker-compose.yml b/docker-compose.yml new file mode 100644 index 0000000..b070468 --- /dev/null +++ b/docker-compose.yml @@ -0,0 +1,6 @@ +version: "3" +services: + postfixadmin: + image: localhost/volkerraschek/postfixadmin:latest + ports: + - 0.0.0.0:8080:80/tcp \ No newline at end of file diff --git a/entrypoint.sh b/entrypoint.sh new file mode 100755 index 0000000..cc4bedd --- /dev/null +++ b/entrypoint.sh @@ -0,0 +1,72 @@ +#!/bin/bash + +DOCUMENT_ROOT=$(dirname ${APACHE_DOCUMENT_ROOT}) + +# set default database port if undefined +case "${POSTFIXADMIN_DATABASE_TYPE}" in + sqlite) + ;; + mysqli) + : "${POSTFIXADMIN_DATABASE_PORT:=3306}" + ;; + pgsql) + : "${POSTFIXADMIN_DATABASE_PORT:=5432}" + : "${POSTFIXADMIN_DATABASE_NAME:=postgres}" + ;; + *) + echo >&2 "${POSTFIXADMIN_DATABASE_TYPE} is not a supported value." + exit 1 + ;; +esac + +# check if database user and password is defined and if database answer of an icmp ping +if [ "${POSTFIXADMIN_DATABASE_TYPE}" != "sqlite" ]; then + if [ -z "${POSTFIXADMIN_DATABASE_USER}" -o -z "${POSTFIXADMIN_DATABASE_PASSWORD}" ]; then + echo >&2 'Error: POSTFIXADMIN_DATABASE_USER and POSTFIXADMIN_DATABASE_PASSWORD must be specified. ' + exit 1 + fi + timeout 15 bash -c "until echo > /dev/tcp/${POSTFIXADMIN_DATABASE_HOST}/${POSTFIXADMIN_DATABASE_PORT}; do sleep 0.5; done" +fi + +# create sqlite.db if sqlite is specified as backend +if [ "${POSTFIXADMIN_DATABASE_TYPE}" = 'sqlite' ]; then + export POSTFIXADMIN_DATABASE_NAME=${POSTFIXADMIN_DATABASE_NAME:=/var/tmp/postfixadmin.db} + + if [ ! -f "${POSTFIXADMIN_DATABASE_NAME}" ]; then + echo "Create sqlite database: ${POSTFIXADMIN_DATABASE_NAME}" + touch ${POSTFIXADMIN_DATABASE_NAME} + chown www-data:www-data ${POSTFIXADMIN_DATABASE_NAME} + chmod 0700 ${POSTFIXADMIN_DATABASE_NAME} + fi +fi + + +# create config.local.pgp with vaules from env with POSTFIXADMIN_ prefix +POSTFIXADMIN_ENV_VARS=($(env | sort | grep --perl-regexp '^POSTFIXADMIN_.*')) + +cat > ${DOCUMENT_ROOT}/config.local.php <> ${DOCUMENT_ROOT}/config.local.php +done + +cat >> ${DOCUMENT_ROOT}/config.local.php < +EOF + +chown www-data: ${DOCUMENT_ROOT}/config.local.php + +# start database migration + +if [ -f public/upgrade.php ]; then + echo "Running database / environment upgrade.php " + gosu www-data php public/upgrade.php +fi + +exec "$@"