public
nobgit
read
NobMail
Based on mailcow: dockerized
Languages
Repository composition by tracked source files.
PHP
49%
JavaScript
35%
HTML
9%
CSS
4%
Shell
2%
Python
1%
Lua
0%
Perl
0%
Ruby
0%
SCSS
0%
Create file
Wiki Documentation
Clone
https://nobgit.com/orgs/nobgit/nobmail.git
ssh://[email protected]:2222/orgs/nobgit/nobmail.git
Commit
Merge remote-tracking branch 'origin/staging' into nightly
a41bb55c
.github/FUNDING.yml | 1 +
data/Dockerfiles/acme/acme.sh | 4 +-
data/Dockerfiles/acme/obtain-certificate.sh | 2 +-
data/Dockerfiles/dockerapi/main.py | 4 +-
data/Dockerfiles/dovecot/clean_q_aged.sh | 2 +-
data/Dockerfiles/dovecot/docker-entrypoint.sh | 4 +-
data/Dockerfiles/dovecot/quarantine_notify.py | 2 +-
data/Dockerfiles/dovecot/quota_notify.py | 2 +-
data/Dockerfiles/dovecot/repl_health.sh | 4 +-
.../Dockerfiles/dovecot/syslog-ng-redis_slave.conf | 2 +
data/Dockerfiles/dovecot/syslog-ng.conf | 2 +
data/Dockerfiles/dovecot/trim_logs.sh | 4 +-
data/Dockerfiles/netfilter/main.py | 8 +-
data/Dockerfiles/nginx/Dockerfile | 18 ++
data/Dockerfiles/nginx/bootstrap.py | 76 +++++
data/Dockerfiles/nginx/docker-entrypoint.sh | 26 ++
data/Dockerfiles/phpfpm/docker-entrypoint.sh | 4 +-
.../Dockerfiles/postfix/syslog-ng-redis_slave.conf | 2 +
data/Dockerfiles/postfix/syslog-ng.conf | 2 +
data/Dockerfiles/rspamd/docker-entrypoint.sh | 12 +-
data/Dockerfiles/sogo/syslog-ng-redis_slave.conf | 2 +
data/Dockerfiles/sogo/syslog-ng.conf | 2 +
data/Dockerfiles/watchdog/watchdog.sh | 20 +-
data/conf/mysql/my.cnf | 2 +-
data/conf/nginx/000-map-size.conf | 3 -
data/conf/nginx/dynmaps.conf | 19 --
data/conf/nginx/includes/site-defaults.conf | 242 ---------------
data/conf/nginx/includes/sogo_proxy_auth.conf | 8 -
data/conf/nginx/mailcow_auth.conf | 23 --
data/conf/nginx/meta_exporter.conf | 19 --
data/conf/nginx/nginx.conf.j2 | 142 +++++++++
data/conf/nginx/site.conf | 10 -
data/conf/nginx/sites-default.conf.j2 | 276 +++++++++++++++++
data/conf/nginx/templates/listen_plain.template | 2 -
data/conf/nginx/templates/listen_ssl.template | 3 -
data/conf/nginx/templates/server_name.template.sh | 1 -
data/conf/nginx/templates/sites.template.sh | 38 ---
data/conf/nginx/templates/sogo.template | 1 -
data/conf/nginx/templates/sogo_eas.template.sh | 5 -
data/conf/postfix/postscreen_access.cidr | 76 ++---
data/conf/redis/redis-conf.sh | 7 +
data/conf/rspamd/dynmaps/aliasexp.php | 1 +
data/conf/rspamd/dynmaps/forwardinghosts.php | 1 +
data/conf/rspamd/meta_exporter/pipe.php | 7 +-
data/conf/rspamd/meta_exporter/pipe_rl.php | 1 +
data/conf/rspamd/meta_exporter/pushover.php | 1 +
data/web/_rspamderror.php | 1 +
data/web/admin.php | 2 +-
data/web/autodiscover.php | 1 +
data/web/f2b-banlist.php | 11 +
data/web/inc/functions.dkim.inc.php | 4 +-
data/web/inc/functions.inc.php | 2 +
data/web/inc/functions.mailbox.inc.php | 7 +-
data/web/inc/init_db.inc.php | 20 +-
data/web/inc/prerequisites.inc.php | 1 +
data/web/js/site/mailbox.js | 41 +--
data/web/json_api.php | 14 -
data/web/lang/lang.fr-fr.json | 2 +-
data/web/lang/lang.ru-ru.json | 334 ++++++++++++++-------
data/web/mailbox.php | 1 +
data/web/templates/admin/tab-config-f2b.twig | 2 +-
data/web/templates/mailbox.twig | 1 +
docker-compose.yml | 59 ++--
generate_config.sh | 18 +-
helper-scripts/_cold-standby.sh | 4 +-
helper-scripts/backup_and_restore.sh | 2 +-
helper-scripts/nextcloud.sh | 4 +-
helper-scripts/reset-learns.sh | 10 +-
update.sh | 15 +-
69 files changed, 959 insertions(+), 690 deletions(-)
create mode 100644 data/Dockerfiles/nginx/Dockerfile
create mode 100644 data/Dockerfiles/nginx/bootstrap.py
create mode 100755 data/Dockerfiles/nginx/docker-entrypoint.sh
delete mode 100644 data/conf/nginx/000-map-size.conf
delete mode 100644 data/conf/nginx/dynmaps.conf
delete mode 100644 data/conf/nginx/includes/site-defaults.conf
delete mode 100644 data/conf/nginx/includes/sogo_proxy_auth.conf
delete mode 100644 data/conf/nginx/mailcow_auth.conf
delete mode 100644 data/conf/nginx/meta_exporter.conf
create mode 100644 data/conf/nginx/nginx.conf.j2
delete mode 100644 data/conf/nginx/site.conf
create mode 100644 data/conf/nginx/sites-default.conf.j2
delete mode 100644 data/conf/nginx/templates/listen_plain.template
delete mode 100644 data/conf/nginx/templates/listen_ssl.template
delete mode 100755 data/conf/nginx/templates/server_name.template.sh
delete mode 100644 data/conf/nginx/templates/sites.template.sh
delete mode 100644 data/conf/nginx/templates/sogo.template
delete mode 100644 data/conf/nginx/templates/sogo_eas.template.sh
create mode 100755 data/conf/redis/redis-conf.sh
create mode 100644 data/web/f2b-banlist.php
Diff
diff --cc data/conf/nginx/nginx.conf.j2
index 00000000,13444129..833c480f
mode 000000,100644..100644
--- a/data/conf/nginx/nginx.conf.j2
+++ b/data/conf/nginx/nginx.conf.j2
@@@ -1,0 -1,119 +1,142 @@@
+ user nginx;
+ worker_processes auto;
+
+ error_log /var/log/nginx/error.log notice;
+ pid /var/run/nginx.pid;
+
+
+ events {
+ worker_connections 1024;
+ }
+
+
+ http {
+ include /etc/nginx/mime.types;
+ default_type application/octet-stream;
+
+ log_format main '$remote_addr - $remote_user [$time_local] "$request" '
+ '$status $body_bytes_sent "$http_referer" '
+ '"$http_user_agent" "$http_x_forwarded_for"';
+
+ access_log /var/log/nginx/access.log main;
+
+ sendfile on;
+ #tcp_nopush on;
+
+ keepalive_timeout 65;
+
+ #gzip on;
+
+ # map-size.conf:
+ map_hash_max_size 256;
+ map_hash_bucket_size 256;
+
+ # site.conf:
+ proxy_cache_path /tmp levels=1:2 keys_zone=sogo:10m inactive=24h max_size=1g;
+ server_names_hash_max_size 512;
+ server_names_hash_bucket_size 128;
+
+ map $http_x_forwarded_proto $client_req_scheme {
+ default $scheme;
+ https https;
+ }
+
+ # Default
+ server {
+ listen 127.0.0.1:65510; # sogo-auth verify internal
+ listen {{ HTTP_PORT }}{% if NGINX_USE_PROXY_PROTOCOL %} proxy_protocol{%endif%};
+ listen [::]:{{ HTTP_PORT }}{% if NGINX_USE_PROXY_PROTOCOL %} proxy_protocol{%endif%};
+ listen {{ HTTPS_PORT }}{% if NGINX_USE_PROXY_PROTOCOL %} proxy_protocol{%endif%} ssl;
+ listen [::]:{{ HTTPS_PORT }}{% if NGINX_USE_PROXY_PROTOCOL %} proxy_protocol{%endif%} ssl;
+ http2 on;
+
+ ssl_certificate /etc/ssl/mail/cert.pem;
+ ssl_certificate_key /etc/ssl/mail/key.pem;
+
+ server_name {{ MAILCOW_HOSTNAME }} autodiscover.* autoconfig.* {{ ADDITIONAL_SERVER_NAMES }};
+
+ include /etc/nginx/includes/sites-default.conf;
+ }
+
+ # rspamd dynmaps:
+ server {
+ listen 8081;
+ listen [::]:8081;
+ index index.php index.html;
+ server_name _;
+ error_log /var/log/nginx/error.log;
+ access_log /var/log/nginx/access.log;
+ root /dynmaps;
+
+ location ~ \.php$ {
+ try_files $uri =404;
+ fastcgi_split_path_info ^(.+\.php)(/.+)$;
+ fastcgi_pass {{ PHPFPMHOST }}:9001;
+ fastcgi_index index.php;
+ include fastcgi_params;
+ fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
+ fastcgi_param PATH_INFO $fastcgi_path_info;
+ }
+ }
+
+ # rspamd meta_exporter:
+ server {
+ listen 9081;
+ index index.php index.html;
+ server_name _;
+ error_log /var/log/nginx/error.log;
+ access_log /var/log/nginx/access.log;
+ root /meta_exporter;
+ client_max_body_size 10M;
+ location ~ \.php$ {
+ client_max_body_size 10M;
+ try_files $uri =404;
+ fastcgi_split_path_info ^(.+\.php)(/.+)$;
+ fastcgi_pass {{ PHPFPMHOST }}:9001;
+ fastcgi_index pipe.php;
+ include fastcgi_params;
+ fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
+ fastcgi_param PATH_INFO $fastcgi_path_info;
+ }
+ }
+
++ server {
++ listen 9082 ssl http2;
++
++ ssl_certificate /etc/ssl/mail/cert.pem;
++ ssl_certificate_key /etc/ssl/mail/key.pem;
++
++ index mailcowauth.php;
++ server_name _;
++ error_log /var/log/nginx/error.log;
++ access_log /var/log/nginx/access.log;
++ root /mailcowauth;
++ client_max_body_size 10M;
++ location ~ \.php$ {
++ client_max_body_size 10M;
++ try_files $uri =404;
++ fastcgi_split_path_info ^(.+\.php)(/.+)$;
++ fastcgi_pass phpfpm:9001;
++ include fastcgi_params;
++ fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
++ fastcgi_param PATH_INFO $fastcgi_path_info;
++ }
++ }
++
+ {% for cert in valid_cert_dirs %}
+ server {
+ listen {{ HTTP_PORT }}{% if NGINX_USE_PROXY_PROTOCOL %} proxy_protocol{%endif%};
+ listen [::]:{{ HTTP_PORT }}{% if NGINX_USE_PROXY_PROTOCOL %} proxy_protocol{%endif%};
+ listen {{ HTTPS_PORT }}{% if NGINX_USE_PROXY_PROTOCOL %} proxy_protocol{%endif%} ssl;
+ listen [::]:{{ HTTPS_PORT }}{% if NGINX_USE_PROXY_PROTOCOL %} proxy_protocol{%endif%} ssl;
+ http2 on;
+
+ ssl_certificate {{ cert.cert_path }}cert.pem;
+ ssl_certificate_key {{ cert.cert_path }}key.pem;
+
+ server_name {{ cert.domains }};
+
+ include /etc/nginx/includes/sites-default.conf;
+ }
+ {% endfor %}
+ }
diff --cc data/web/inc/init_db.inc.php
index fd196f9e,3cfeb37d..7fb619d4
--- a/data/web/inc/init_db.inc.php
+++ b/data/web/inc/init_db.inc.php
@@@ -1467,12 -1456,9 +1471,12 @@@ function init_db_schema()
":type" => "mailbox",
":template" => $default_mailbox_template["template"],
":attributes" => json_encode($default_mailbox_template["attributes"])
- ));
- }
+ ));
+ }
+ // remove old sogo views and triggers
+ $pdo->query("DROP TRIGGER IF EXISTS sogo_update_password");
+
if (php_sapi_name() == "cli") {
echo "DB initialization completed" . PHP_EOL;
} else {
diff --cc data/web/lang/lang.ru-ru.json
index fb35d213,5d1ef9af..f64664aa
--- a/data/web/lang/lang.ru-ru.json
+++ b/data/web/lang/lang.ru-ru.json
@@@ -612,6 -694,8 +694,8 @@@
"sieve_desc": "Краткое описание",
"sieve_type": "Тип фильтра",
"skipcrossduplicates": "Пропускать повторяющиеся сообщения в папках",
- "sogo_access": "Предоставить прямой доступ к SOGo",
- "sogo_access_info": "Единый вход из интерфейса почты продолжает работать. Эта настройка не влияет на доступ ко всем другим службам, а также не удаляет или изменяет существующий профиль пользователя SOGo.",
++ "sogo_access": "Прямая переадресация в SOGo",
++ "sogo_access_info": "После входа в систему пользователь автоматически перенаправляется в SOGo.",
"sogo_visible": "Отображать псевдоним в SOGo",
"sogo_visible_info": "Влияет только на объекты, которые могут отображаться в SOGo (персональные или общие псевдонимы, указывающие как минимум на один локальный почтовый аккаунт). Учтите, что если функция отключена, у пользователей не будет возможности выбрать адрес псевдонима в качестве отправителя в SOGo.",
"spam_alias": "Создать или изменить временные (спам) псевдонимы",
diff --cc docker-compose.yml
index 85395b64,226c48ac..9218b396
--- a/docker-compose.yml
+++ b/docker-compose.yml
@@@ -193,7 -182,7 +198,7 @@@ services
- phpfpm
sogo-mailcow:
- image: mailcow/sogo:nightly-20241112
- image: mailcow/sogo:1.128
++ image: mailcow/sogo:nightly-20241205
environment:
- DBNAME=${DBNAME}
- DBUSER=${DBUSER}
@@@ -240,7 -230,7 +246,7 @@@
- sogo
dovecot-mailcow:
- image: mailcow/dovecot:nightly-20241112
- image: mailcow/dovecot:2.21
++ image: mailcow/dovecot:nightly-20241205
depends_on:
- mysql-mailcow
- netfilter-mailcow