mirror of
				https://github.com/optim-enterprises-bv/Mailu.git
				synced 2025-10-31 18:18:05 +00:00 
			
		
		
		
	| @@ -1,24 +1,28 @@ | |||||||
| FROM python:3-alpine | FROM alpine:3.8 | ||||||
|  | # python3 shared with most images | ||||||
|  | RUN apk add --no-cache \ | ||||||
|  |     python3 py3-pip \ | ||||||
|  |   && pip3 install --upgrade pip | ||||||
|  | # Image specific layers under this line | ||||||
| RUN mkdir -p /app | RUN mkdir -p /app | ||||||
| WORKDIR /app | WORKDIR /app | ||||||
|  |  | ||||||
| COPY requirements-prod.txt requirements.txt | COPY requirements-prod.txt requirements.txt | ||||||
| RUN apk add --no-cache openssl curl \ | RUN apk add --no-cache openssl curl \ | ||||||
|  && apk add --no-cache --virtual build-dep openssl-dev libffi-dev python-dev build-base \ |  && apk add --no-cache --virtual build-dep openssl-dev libffi-dev python3-dev build-base \ | ||||||
|  && pip install -r requirements.txt \ |  && pip3 install -r requirements.txt \ | ||||||
|  && apk del --no-cache build-dep |  && apk del --no-cache build-dep | ||||||
|  |  | ||||||
| COPY mailu ./mailu | COPY mailu ./mailu | ||||||
| COPY migrations ./migrations | COPY migrations ./migrations | ||||||
| COPY manage.py . | COPY manage.py . | ||||||
| COPY start.sh /start.sh | COPY start.py /start.py | ||||||
|  |  | ||||||
| RUN pybabel compile -d mailu/translations | RUN pybabel compile -d mailu/translations | ||||||
|  |  | ||||||
| EXPOSE 80/tcp | EXPOSE 80/tcp | ||||||
| VOLUME ["/data"] | VOLUME ["/data"] | ||||||
|  |  | ||||||
| CMD ["/start.sh"] | CMD /start.py | ||||||
|  |  | ||||||
| HEALTHCHECK CMD curl -f -L http://localhost/ui || exit 1 | HEALTHCHECK CMD curl -f -L http://localhost/ui || exit 1 | ||||||
|   | |||||||
							
								
								
									
										7
									
								
								core/admin/start.py
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										7
									
								
								core/admin/start.py
									
									
									
									
									
										Executable file
									
								
							| @@ -0,0 +1,7 @@ | |||||||
|  | #!/usr/bin/python3 | ||||||
|  |  | ||||||
|  | import os | ||||||
|  |  | ||||||
|  | os.system("python3 manage.py advertise") | ||||||
|  | os.system("python3 manage.py db upgrade") | ||||||
|  | os.system("gunicorn -w 4 -b :80 --access-logfile - --error-logfile - --preload mailu:app") | ||||||
| @@ -1,5 +0,0 @@ | |||||||
| #!/bin/sh |  | ||||||
|  |  | ||||||
| python manage.py advertise |  | ||||||
| python manage.py db upgrade |  | ||||||
| gunicorn -w 4 -b :80 --access-logfile - --error-logfile - --preload mailu:app |  | ||||||
| @@ -1,10 +1,16 @@ | |||||||
| FROM alpine:3.8 | FROM alpine:3.8 | ||||||
|  | # python3 shared with most images | ||||||
| RUN apk add --no-cache \ | RUN apk add --no-cache \ | ||||||
|      dovecot dovecot-pigeonhole-plugin dovecot-fts-lucene rspamd-client \ |     python3 py3-pip \ | ||||||
|      bash python3 py3-pip \ |   && pip3 install --upgrade pip | ||||||
|  && pip3 install --upgrade pip \ | # Shared layer between rspamd, postfix, dovecot, unbound and nginx | ||||||
|  && pip3 install jinja2 podop tenacity | RUN pip3 install jinja2 | ||||||
|  | # Shared layer between rspamd, postfix, dovecot | ||||||
|  | RUN pip3 install tenacity | ||||||
|  | # Image specific layers under this line | ||||||
|  | RUN apk add --no-cache \ | ||||||
|  |   dovecot dovecot-pigeonhole-plugin dovecot-fts-lucene rspamd-client bash \ | ||||||
|  |   && pip3 install podop | ||||||
|  |  | ||||||
| COPY conf /conf | COPY conf /conf | ||||||
| COPY start.py /start.py | COPY start.py /start.py | ||||||
|   | |||||||
| @@ -21,15 +21,12 @@ def start_podop(): | |||||||
|  |  | ||||||
| convert = lambda src, dst: open(dst, "w").write(jinja2.Template(open(src).read()).render(**os.environ)) | convert = lambda src, dst: open(dst, "w").write(jinja2.Template(open(src).read()).render(**os.environ)) | ||||||
|  |  | ||||||
| @retry(stop=tenacity.stop_after_attempt(100), wait=tenacity.wait_random(min=2, max=5)) |  | ||||||
| def resolve(): |  | ||||||
| 	os.environ["FRONT_ADDRESS"] = socket.gethostbyname(os.environ.get("FRONT_ADDRESS", "front")) |  | ||||||
| 	os.environ["REDIS_ADDRESS"] = socket.gethostbyname(os.environ.get("REDIS_ADDRESS", "redis")) |  | ||||||
| 	if os.environ["WEBMAIL"] != "none": |  | ||||||
| 		os.environ["WEBMAIL_ADDRESS"] = socket.gethostbyname(os.environ.get("WEBMAIL_ADDRESS", "webmail")) |  | ||||||
|  |  | ||||||
| # Actual startup script | # Actual startup script | ||||||
| resolve() | resolve = retry(socket.gethostbyname, stop=tenacity.stop_after_attempt(100), wait=tenacity.wait_random(min=2, max=5)) | ||||||
|  | os.environ["FRONT_ADDRESS"] = resolve(os.environ.get("FRONT_ADDRESS", "front")) | ||||||
|  | os.environ["REDIS_ADDRESS"] = resolve(os.environ.get("REDIS_ADDRESS", "redis")) | ||||||
|  | if os.environ["WEBMAIL"] != "none": | ||||||
|  |     os.environ["WEBMAIL_ADDRESS"] = resolve(os.environ.get("WEBMAIL_ADDRESS", "webmail")) | ||||||
|  |  | ||||||
| for dovecot_file in glob.glob("/conf/*.conf"): | for dovecot_file in glob.glob("/conf/*.conf"): | ||||||
|     convert(dovecot_file, os.path.join("/etc/dovecot", os.path.basename(dovecot_file))) |     convert(dovecot_file, os.path.join("/etc/dovecot", os.path.basename(dovecot_file))) | ||||||
|   | |||||||
| @@ -1,9 +1,13 @@ | |||||||
| FROM alpine:3.8 | FROM alpine:3.8 | ||||||
|  | # python3 shared with most images | ||||||
|  | RUN apk add --no-cache \ | ||||||
|  |     python3 py3-pip \ | ||||||
|  |   && pip3 install --upgrade pip | ||||||
|  | # Shared layer between rspamd, postfix, dovecot, unbound and nginx | ||||||
|  | RUN pip3 install jinja2 | ||||||
|  | # Image specific layers under this line | ||||||
| RUN apk add --no-cache certbot nginx nginx-mod-mail openssl curl \ | RUN apk add --no-cache certbot nginx nginx-mod-mail openssl curl \ | ||||||
|  python py-jinja2 py-requests-toolbelt py-pip \ |  && pip3 install idna requests | ||||||
|  && pip install --upgrade pip \ |  | ||||||
|  && pip install idna |  | ||||||
|  |  | ||||||
| COPY conf /conf | COPY conf /conf | ||||||
| COPY *.py / | COPY *.py / | ||||||
|   | |||||||
| @@ -1,4 +1,4 @@ | |||||||
| #!/usr/bin/python | #!/usr/bin/python3 | ||||||
|  |  | ||||||
| import jinja2 | import jinja2 | ||||||
| import os | import os | ||||||
|   | |||||||
| @@ -1,4 +1,4 @@ | |||||||
| #!/usr/bin/python | #!/usr/bin/python3 | ||||||
|  |  | ||||||
| import os | import os | ||||||
| import time | import time | ||||||
|   | |||||||
| @@ -1,4 +1,4 @@ | |||||||
| #!/usr/bin/python | #!/usr/bin/python3 | ||||||
|  |  | ||||||
| import os | import os | ||||||
| import subprocess | import subprocess | ||||||
|   | |||||||
| @@ -1,9 +1,16 @@ | |||||||
| FROM alpine:3.8 | FROM alpine:3.8 | ||||||
|  | # python3 shared with most images | ||||||
|  | RUN apk add --no-cache \ | ||||||
|  |     python3 py3-pip \ | ||||||
|  |   && pip3 install --upgrade pip | ||||||
|  | # Shared layer between rspamd, postfix, dovecot, unbound and nginx | ||||||
|  | RUN pip3 install jinja2 | ||||||
|  | # Shared layer between rspamd, postfix, dovecot | ||||||
|  | RUN pip3 install tenacity | ||||||
|  | # Image specific layers under this line | ||||||
|  |  | ||||||
| RUN apk add --no-cache postfix postfix-pcre rsyslog \ | RUN apk add --no-cache postfix postfix-pcre rsyslog \ | ||||||
|     python3 py3-pip \ |  && pip3 install podop | ||||||
|  && pip3 install --upgrade pip \ |  | ||||||
|  && pip3 install jinja2 podop tenacity |  | ||||||
|  |  | ||||||
| COPY conf /conf | COPY conf /conf | ||||||
| COPY start.py /start.py | COPY start.py /start.py | ||||||
|   | |||||||
| @@ -24,12 +24,10 @@ def start_podop(): | |||||||
|  |  | ||||||
| convert = lambda src, dst: open(dst, "w").write(jinja2.Template(open(src).read()).render(**os.environ)) | convert = lambda src, dst: open(dst, "w").write(jinja2.Template(open(src).read()).render(**os.environ)) | ||||||
|  |  | ||||||
| @retry(stop=tenacity.stop_after_attempt(100), wait=tenacity.wait_random(min=2, max=5)) |  | ||||||
| def resolve(): |  | ||||||
| 	os.environ["FRONT_ADDRESS"] = socket.gethostbyname(os.environ.get("FRONT_ADDRESS", "front")) |  | ||||||
|  |  | ||||||
| # Actual startup script | # Actual startup script | ||||||
| resolve() | resolve = retry(socket.gethostbyname, stop=tenacity.stop_after_attempt(100), wait=tenacity.wait_random(min=2, max=5)) | ||||||
|  |  | ||||||
|  | os.environ["FRONT_ADDRESS"] = resolve(os.environ.get("FRONT_ADDRESS", "front")) | ||||||
| os.environ["HOST_ANTISPAM"] = os.environ.get("HOST_ANTISPAM", "antispam:11332") | os.environ["HOST_ANTISPAM"] = os.environ.get("HOST_ANTISPAM", "antispam:11332") | ||||||
| os.environ["HOST_LMTP"] = os.environ.get("HOST_LMTP", "imap:2525") | os.environ["HOST_LMTP"] = os.environ.get("HOST_LMTP", "imap:2525") | ||||||
|  |  | ||||||
|   | |||||||
| @@ -1,14 +1,18 @@ | |||||||
| FROM alpine:3.8 | FROM alpine:3.8 | ||||||
|  | # python3 shared with most images | ||||||
|  | RUN apk add --no-cache \ | ||||||
|  |     python3 py3-pip \ | ||||||
|  |   && pip3 install --upgrade pip | ||||||
|  | # Image specific layers under this line | ||||||
| RUN apk add --no-cache clamav rsyslog wget clamav-libunrar | RUN apk add --no-cache clamav rsyslog wget clamav-libunrar | ||||||
|  |  | ||||||
| COPY conf /etc/clamav | COPY conf /etc/clamav | ||||||
| COPY start.sh /start.sh | COPY start.py /start.py | ||||||
| COPY health.sh /health.sh | COPY health.sh /health.sh | ||||||
|  |  | ||||||
| EXPOSE 3310/tcp | EXPOSE 3310/tcp | ||||||
| VOLUME ["/data"] | VOLUME ["/data"] | ||||||
|  |  | ||||||
| CMD ["/start.sh"] | CMD /start.py | ||||||
|  |  | ||||||
| HEALTHCHECK CMD /health.sh | HEALTHCHECK CMD /health.sh | ||||||
|   | |||||||
							
								
								
									
										12
									
								
								optional/clamav/start.py
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										12
									
								
								optional/clamav/start.py
									
									
									
									
									
										Executable file
									
								
							| @@ -0,0 +1,12 @@ | |||||||
|  | #!/usr/bin/python3 | ||||||
|  |  | ||||||
|  | import os | ||||||
|  |  | ||||||
|  | # Bootstrap the database if clamav is running for the first time | ||||||
|  | os.system("[ -f /data/main.cvd ] || freshclam") | ||||||
|  |  | ||||||
|  | # Run the update daemon | ||||||
|  | os.system("freshclam -d -c 6") | ||||||
|  |  | ||||||
|  | # Run clamav | ||||||
|  | os.system("clamd") | ||||||
| @@ -1,10 +0,0 @@ | |||||||
| #!/bin/sh |  | ||||||
|  |  | ||||||
| # Bootstrap the database if clamav is running for the first time |  | ||||||
| [ -f /data/main.cvd ] || freshclam |  | ||||||
|  |  | ||||||
| # Run the update daemon |  | ||||||
| freshclam -d -c 6 |  | ||||||
|  |  | ||||||
| # Run clamav |  | ||||||
| clamd |  | ||||||
| @@ -1,7 +1,11 @@ | |||||||
| FROM python:3-alpine | FROM alpine:3.8 | ||||||
|  | # python3 shared with most images | ||||||
|  | RUN apk add --no-cache \ | ||||||
|  |     python3 py3-pip \ | ||||||
|  |   && pip3 install --upgrade pip | ||||||
|  | # Image specific layers under this line | ||||||
| RUN apk add --no-cache fetchmail ca-certificates \ | RUN apk add --no-cache fetchmail ca-certificates \ | ||||||
|  && pip install requests |  && pip3 install requests | ||||||
|  |  | ||||||
| COPY fetchmail.py /fetchmail.py | COPY fetchmail.py /fetchmail.py | ||||||
| USER fetchmail | USER fetchmail | ||||||
|   | |||||||
| @@ -1,4 +1,4 @@ | |||||||
| #!/usr/bin/env python | #!/usr/bin/python3 | ||||||
|  |  | ||||||
| import time | import time | ||||||
| import os | import os | ||||||
|   | |||||||
| @@ -1,8 +1,14 @@ | |||||||
| FROM alpine:3.8 | FROM alpine:3.8 | ||||||
|  | # python3 shared with most images | ||||||
| RUN apk add --no-cache python py-jinja2 rspamd rspamd-controller rspamd-proxy rspamd-fuzzy ca-certificates py-pip curl\ | RUN apk add --no-cache \ | ||||||
|  && pip install --upgrade pip \ |     python3 py3-pip \ | ||||||
|  && pip install tenacity |   && pip3 install --upgrade pip | ||||||
|  | # Shared layer between rspamd, postfix, dovecot, unbound and nginx | ||||||
|  | RUN pip3 install jinja2 | ||||||
|  | # Shared layer between rspamd, postfix, dovecot | ||||||
|  | RUN pip3 install tenacity | ||||||
|  | # Image specific layers under this line | ||||||
|  | RUN apk add --no-cache rspamd rspamd-controller rspamd-proxy rspamd-fuzzy ca-certificates curl | ||||||
|  |  | ||||||
| RUN mkdir /run/rspamd | RUN mkdir /run/rspamd | ||||||
|  |  | ||||||
|   | |||||||
| @@ -1,4 +1,4 @@ | |||||||
| #!/usr/bin/python | #!/usr/bin/python3 | ||||||
|  |  | ||||||
| import jinja2 | import jinja2 | ||||||
| import os | import os | ||||||
| @@ -9,12 +9,11 @@ from tenacity import retry | |||||||
|  |  | ||||||
| convert = lambda src, dst: open(dst, "w").write(jinja2.Template(open(src).read()).render(**os.environ)) | convert = lambda src, dst: open(dst, "w").write(jinja2.Template(open(src).read()).render(**os.environ)) | ||||||
|  |  | ||||||
| @retry(stop=tenacity.stop_after_attempt(100), wait=tenacity.wait_random(min=2, max=5)) |  | ||||||
| def resolve(): |  | ||||||
| 	os.environ["FRONT_ADDRESS"] = socket.gethostbyname(os.environ.get("FRONT_ADDRESS", "front")) |  | ||||||
|  |  | ||||||
| # Actual startup script | # Actual startup script | ||||||
| resolve() | resolve = retry(socket.gethostbyname, stop=tenacity.stop_after_attempt(100), wait=tenacity.wait_random(min=2, max=5)) | ||||||
|  |  | ||||||
|  | os.environ["FRONT_ADDRESS"] = resolve(os.environ.get("FRONT_ADDRESS", "front")) | ||||||
|  |  | ||||||
| if "HOST_REDIS" not in os.environ: os.environ["HOST_REDIS"] = "redis" | if "HOST_REDIS" not in os.environ: os.environ["HOST_REDIS"] = "redis" | ||||||
|  |  | ||||||
| for rspamd_file in glob.glob("/conf/*"): | for rspamd_file in glob.glob("/conf/*"): | ||||||
|   | |||||||
| @@ -1,7 +1,12 @@ | |||||||
| FROM python:3-alpine | FROM alpine:3.8 | ||||||
|  | # python3 shared with most images | ||||||
|  | RUN apk add --no-cache \ | ||||||
|  |     python3 py3-pip \ | ||||||
|  |   && pip3 install --upgrade pip | ||||||
|  | # Shared layer between rspamd, postfix, dovecot, unbound and nginx | ||||||
|  | RUN pip3 install jinja2 | ||||||
|  | # Image specific layers under this line | ||||||
| RUN apk add --no-cache unbound curl bind-tools \ | RUN apk add --no-cache unbound curl bind-tools \ | ||||||
|   && pip3 install jinja2 \ |  | ||||||
|   && curl -o /etc/unbound/root.hints https://www.internic.net/domain/named.cache \ |   && curl -o /etc/unbound/root.hints https://www.internic.net/domain/named.cache \ | ||||||
|   && chown root:unbound /etc/unbound \ |   && chown root:unbound /etc/unbound \ | ||||||
|   && chmod 775 /etc/unbound \ |   && chmod 775 /etc/unbound \ | ||||||
|   | |||||||
| @@ -1,4 +1,4 @@ | |||||||
| #!/usr/local/bin/python3 | #!/usr/bin/python3 | ||||||
|  |  | ||||||
| import jinja2 | import jinja2 | ||||||
| import os | import os | ||||||
|   | |||||||
| @@ -1,9 +1,13 @@ | |||||||
| FROM php:7.2-apache | FROM php:7.2-apache | ||||||
|  | #Shared layer between rainloop and roundcube | ||||||
|  | RUN apt-get update && apt-get install -y \ | ||||||
|  |   python3 curl \ | ||||||
|  |   && rm -rf /var/lib/apt/lists | ||||||
|  |  | ||||||
| ENV RAINLOOP_URL https://github.com/RainLoop/rainloop-webmail/releases/download/v1.12.1/rainloop-community-1.12.1.zip | ENV RAINLOOP_URL https://github.com/RainLoop/rainloop-webmail/releases/download/v1.12.1/rainloop-community-1.12.1.zip | ||||||
|  |  | ||||||
| RUN apt-get update && apt-get install -y \ | RUN apt-get update && apt-get install -y \ | ||||||
|       unzip python3 python3-jinja2 curl \ |       unzip python3-jinja2 \ | ||||||
|  && rm -rf /var/www/html/ \ |  && rm -rf /var/www/html/ \ | ||||||
|  && mkdir /var/www/html \ |  && mkdir /var/www/html \ | ||||||
|  && cd /var/www/html \ |  && cd /var/www/html \ | ||||||
|   | |||||||
| @@ -1,9 +1,13 @@ | |||||||
| FROM php:7.2-apache | FROM php:7.2-apache | ||||||
|  | #Shared layer between rainloop and roundcube | ||||||
|  | RUN apt-get update && apt-get install -y \ | ||||||
|  |   python3 curl \ | ||||||
|  |   && rm -rf /var/lib/apt/lists | ||||||
|  |  | ||||||
| ENV ROUNDCUBE_URL https://github.com/roundcube/roundcubemail/releases/download/1.3.8/roundcubemail-1.3.8-complete.tar.gz | ENV ROUNDCUBE_URL https://github.com/roundcube/roundcubemail/releases/download/1.3.8/roundcubemail-1.3.8-complete.tar.gz | ||||||
|  |  | ||||||
| RUN apt-get update && apt-get install -y \ | RUN apt-get update && apt-get install -y \ | ||||||
|       zlib1g-dev curl \ |       zlib1g-dev \ | ||||||
|  && docker-php-ext-install zip \ |  && docker-php-ext-install zip \ | ||||||
|  && echo date.timezone=UTC > /usr/local/etc/php/conf.d/timezone.ini \ |  && echo date.timezone=UTC > /usr/local/etc/php/conf.d/timezone.ini \ | ||||||
|  && rm -rf /var/www/html/ \ |  && rm -rf /var/www/html/ \ | ||||||
| @@ -19,14 +23,12 @@ RUN apt-get update && apt-get install -y \ | |||||||
|  && rm -rf /var/lib/apt/lists |  && rm -rf /var/lib/apt/lists | ||||||
|  |  | ||||||
| COPY php.ini /usr/local/etc/php/conf.d/roundcube.ini | COPY php.ini /usr/local/etc/php/conf.d/roundcube.ini | ||||||
|  |  | ||||||
| COPY config.inc.php /var/www/html/config/ | COPY config.inc.php /var/www/html/config/ | ||||||
|  | COPY start.py /start.py | ||||||
| COPY start.sh /start.sh |  | ||||||
|  |  | ||||||
| EXPOSE 80/tcp | EXPOSE 80/tcp | ||||||
| VOLUME ["/data"] | VOLUME ["/data"] | ||||||
|  |  | ||||||
| CMD ["/start.sh"] | CMD /start.py | ||||||
|  |  | ||||||
| HEALTHCHECK CMD curl -f -L http://localhost/ || exit 1 | HEALTHCHECK CMD curl -f -L http://localhost/ || exit 1 | ||||||
|   | |||||||
							
								
								
									
										10
									
								
								webmails/roundcube/start.py
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										10
									
								
								webmails/roundcube/start.py
									
									
									
									
									
										Executable file
									
								
							| @@ -0,0 +1,10 @@ | |||||||
|  | #!/usr/bin/python3 | ||||||
|  |  | ||||||
|  | import os | ||||||
|  |  | ||||||
|  | # Fix some permissions | ||||||
|  | os.system("mkdir -p /data/gpg") | ||||||
|  | os.system("chown -R www-data:www-data /data") | ||||||
|  |  | ||||||
|  | # Run apache | ||||||
|  | os.execv("/usr/local/bin/apache2-foreground", ["apache2-foreground"]) | ||||||
| @@ -1,8 +0,0 @@ | |||||||
| #!/bin/sh |  | ||||||
|  |  | ||||||
| # Fix some permissions |  | ||||||
| mkdir -p /data/gpg |  | ||||||
| chown -R www-data:www-data /data |  | ||||||
|  |  | ||||||
| # Run apache |  | ||||||
| exec apache2-foreground |  | ||||||
		Reference in New Issue
	
	Block a user
	![mergify[bot]@users.noreply.github.com](/assets/img/avatar_default.png) mergify[bot]
					mergify[bot]