init
This commit is contained in:
commit
d1a8e36360
34
Dockerfile
Normal file
34
Dockerfile
Normal file
@ -0,0 +1,34 @@
|
|||||||
|
FROM gentoo/portage:latest as portage
|
||||||
|
FROM gentoo/stage3:amd64
|
||||||
|
|
||||||
|
COPY --from=portage /var/db/repos/gentoo /var/db/repos/gentoo
|
||||||
|
|
||||||
|
# courier and pythonfilter install + activate + cleanup
|
||||||
|
RUN echo '=mail-filter/courier-pythonfilter-3.0.2-r1' > /etc/portage/package.accept_keywords && \
|
||||||
|
emerge mail-mta/courier mail-filter/courier-pythonfilter dev-python/pyspf dev-python/pydns && \
|
||||||
|
ln -s /usr/bin/pythonfilter /usr/libexec/filters && \
|
||||||
|
filterctl start pythonfilter && \
|
||||||
|
rm -rf /var/db/repos/gentoo
|
||||||
|
|
||||||
|
# courier config
|
||||||
|
RUN sed -i 's;^TCPDOPTS=.\+$;TCPDOPTS="-stderrlogger=/usr/sbin/courierlogger -nodnslookup -noidentlookup";' /etc/courier/esmtpd && \
|
||||||
|
sed -i 's;^TCPDOPTS=.\+$;TCPDOPTS="-stderrlogger=/usr/sbin/courierlogger -nodnslookup -noidentlookup";' /etc/courier/imapd && \
|
||||||
|
sed -i 's;^DEFAULTDELIVERY=.\+$;DEFAULTDELIVERY="| /usr/bin/maildrop";' /etc/courier/courierd && \
|
||||||
|
sed -i 's;^MAILDROPDEFAULT=.\+$;MAILDROPDEFAULT="./maildir";' /etc/courier/courierd && \
|
||||||
|
sed -i 's;^authmodulelist=.\+$;authmodulelist="authuserdb";' /etc/courier/authlib/authdaemonrc
|
||||||
|
#RUN sed -i 's;^DEFAULTDELIVERY=.\+$;DEFAULTDELIVERY="./maildir";' /etc/courier/courierd
|
||||||
|
|
||||||
|
# courier runtime
|
||||||
|
ADD start.sh /
|
||||||
|
RUN chmod +x /start.sh
|
||||||
|
|
||||||
|
ADD userdb.example /etc/courier/authlib
|
||||||
|
|
||||||
|
EXPOSE 25
|
||||||
|
EXPOSE 143
|
||||||
|
EXPOSE 993
|
||||||
|
|
||||||
|
VOLUME /conf
|
||||||
|
VOLUME /mail
|
||||||
|
|
||||||
|
CMD /start.sh
|
15
README.md
Normal file
15
README.md
Normal file
@ -0,0 +1,15 @@
|
|||||||
|
# docker-courier
|
||||||
|
Docker image providing full [Courier MTA](http://www.courier-mta.org/) suite (not just IMAP)
|
||||||
|
|
||||||
|
# Usage
|
||||||
|
1. `git clone https://github.com/tuxmainy/docker-courier.git`
|
||||||
|
2. `cp env.example .env`
|
||||||
|
3. edit .env
|
||||||
|
4. make sure volume directories are present
|
||||||
|
5. `docker-compose up -d`
|
||||||
|
|
||||||
|
# add users
|
||||||
|
1. `echo -n 'mypassword' |openssl sha256 -binary |base64`
|
||||||
|
2. add new user to userdb:
|
||||||
|
|
||||||
|
`user@example.org systempw={SHA256}<your generated hash goes here>|home=/mail/user|uid=8|gid=12|mail=/mail/user/maildir`
|
32
docker-compose.yml
Normal file
32
docker-compose.yml
Normal file
@ -0,0 +1,32 @@
|
|||||||
|
version: "3.7"
|
||||||
|
|
||||||
|
services:
|
||||||
|
server:
|
||||||
|
build:
|
||||||
|
context: .
|
||||||
|
network_mode: bridge
|
||||||
|
ports:
|
||||||
|
- "138.201.55.55:25:25"
|
||||||
|
- "138.201.55.55:143:143"
|
||||||
|
- "138.201.55.55:993:993"
|
||||||
|
- "2a01:4f8:172:101f::2:25:25"
|
||||||
|
- "2a01:4f8:172:101f::2:143:143"
|
||||||
|
- "2a01:4f8:172:101f::2:993:993"
|
||||||
|
volumes:
|
||||||
|
- conf:/etc/courier
|
||||||
|
- mail:/mail
|
||||||
|
- /dev/log:/dev/log
|
||||||
|
hostname: devloop.de
|
||||||
|
restart: always
|
||||||
|
volumes:
|
||||||
|
conf:
|
||||||
|
driver_opts:
|
||||||
|
type: "none"
|
||||||
|
o: "bind"
|
||||||
|
device: "${DATA_BASE}/conf"
|
||||||
|
mail:
|
||||||
|
driver_opts:
|
||||||
|
type: "none"
|
||||||
|
o: "bind"
|
||||||
|
device: "${DATA_BASE}/mail"
|
||||||
|
|
2
env.example
Normal file
2
env.example
Normal file
@ -0,0 +1,2 @@
|
|||||||
|
COMPOSE_PROJECT_NAME=courier
|
||||||
|
DATA_BASE=/path/to/my/basedir/containing/maildirandconf
|
68
start.sh
Normal file
68
start.sh
Normal file
@ -0,0 +1,68 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
#test -e /etc/courier/esmtpd || cp -a /etc/courier.docker/* /etc/courier
|
||||||
|
|
||||||
|
OVERRIDE_CONF='/conf'
|
||||||
|
CONF='/etc/courier'
|
||||||
|
|
||||||
|
for d in `find "${OVERRIDE_CONF}" -mindepth 1 -type d`; do
|
||||||
|
basedir=`echo "${d}" |sed "s;^${OVERRIDE_CONF}/;;"`
|
||||||
|
confdir="${CONF}/${basedir}"
|
||||||
|
|
||||||
|
if [[ ! -e "${confdir}" ]]; then
|
||||||
|
mkdir "${confdir}"
|
||||||
|
elif [[ ! -d "${confdir}" ]]; then
|
||||||
|
echo "${confdir} is not a directory. Thus cannot override with a directory."
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
|
||||||
|
for f in `find "${OVERRIDE_CONF}" -mindepth 1 -type f ! -name '*.docker'`; do
|
||||||
|
basefile=`echo "${f}" |sed "s;^${OVERRIDE_CONF}/;;"`
|
||||||
|
conffile="${CONF}/${basefile}"
|
||||||
|
|
||||||
|
if [[ ! -e "${conffile}" ]]; then
|
||||||
|
cp -a "${f}" "${conffile}"
|
||||||
|
elif [[ -f "${conffile}" ]]; then
|
||||||
|
mv "${conffile}" "${f}.docker"
|
||||||
|
cp -a "${f}" "${conffile}"
|
||||||
|
else
|
||||||
|
echo "${conffile} is not a file. Thus cannot override with a file."
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
|
||||||
|
|
||||||
|
/usr/sbin/makeacceptmailfor
|
||||||
|
/usr/sbin/makealiases
|
||||||
|
/usr/sbin/makeuserdb
|
||||||
|
/usr/sbin/makehosteddomains
|
||||||
|
/usr/sbin/makealiases
|
||||||
|
/usr/sbin/makesmtpaccess
|
||||||
|
|
||||||
|
#/usr/lib/courier/courier-authlib/authdaemond &
|
||||||
|
#/usr/sbin/couriertcpd -address=0 -maxprocs=40 -maxperip=20 -nodnslookup -noidentlookup 143 /usr/lib/courier/courier/imaplogin /usr/bin/imapd Maildir
|
||||||
|
|
||||||
|
/usr/sbin/authdaemond start
|
||||||
|
|
||||||
|
sleep 1
|
||||||
|
for home in `/usr/sbin/authenumerate |awk '{print $4}'`; do
|
||||||
|
if [[ ! -e "$home" ]]; then
|
||||||
|
mkdir -p "$home"
|
||||||
|
/usr/bin/maildirmake "$home/maildir"
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
|
||||||
|
chown -R 8:12 /mail
|
||||||
|
chown -R 8:12 /etc/courier
|
||||||
|
chmod go-wrx /etc/courier/maildroprc
|
||||||
|
|
||||||
|
/usr/sbin/esmtpd start
|
||||||
|
/usr/sbin/courier-imapd start
|
||||||
|
/usr/sbin/courier-imapd-ssl start
|
||||||
|
/usr/sbin/courier start
|
||||||
|
|
||||||
|
#umask 0111
|
||||||
|
while true; do
|
||||||
|
#nc -lU /dev/log |sed 's/</\n</g' >&2
|
||||||
|
sleep 10
|
||||||
|
done
|
6
test.sh
Executable file
6
test.sh
Executable file
@ -0,0 +1,6 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
base=`dirname $0`
|
||||||
|
base=`readlink -f "$base"`
|
||||||
|
docker run -v "$base/conftest:/conf" --rm -it "$1" "$2"
|
||||||
|
|
1
userdb.example
Normal file
1
userdb.example
Normal file
@ -0,0 +1 @@
|
|||||||
|
user@example.org systempw={SHA256}0123456789abcdef=|home=/mail/maildir|uid=8|gid=12
|
Loading…
x
Reference in New Issue
Block a user