Commit ba698450 by Christophe Angeli

add supervisor, smtp ko

parent 5e30584b
...@@ -16,16 +16,27 @@ RUN apk add --update \ ...@@ -16,16 +16,27 @@ RUN apk add --update \
imagemagick \ imagemagick \
jq \ jq \
nginx \ nginx \
openssl \
php7 \ php7 \
php7-curl \
php7-fpm \
php7-imap \
php7-json \
php7-mbstring \
php7-pdo \
php7-pdo_pgsql \
php7-pgsql \
php7-xml \
postfix \ postfix \
postgresql-client \ postgresql-client \
supervisor \
unzip && \ unzip && \
rm -rf /var/cache/apk/* rm -rf /var/cache/apk/*
ADD https://github.com/just-containers/s6-overlay/releases/download/v1.19.1.1/s6-overlay-amd64.tar.gz /tmp/ RUN curl -L -s -o /etc/apk/keys/diego@hernandev.com-58b4c2e0.rsa.pub http://php.codecasts.rocks/php-alpine.pub && \
RUN tar xzf /tmp/s6-overlay-amd64.tar.gz -C / echo "http://php.codecasts.rocks/7.0" >> /etc/apk/repositories && \
apk add --update php7-imagick && \
COPY services.d / rm -rf /var/cache/apk/*
# deploy app and extensions # deploy app and extensions
RUN curl -L -s -o /tmp/restyaboard.zip https://github.com/RestyaPlatform/board/releases/download/${RESTYABOARD_VERSION}/board-${RESTYABOARD_VERSION}.zip && \ RUN curl -L -s -o /tmp/restyaboard.zip https://github.com/RestyaPlatform/board/releases/download/${RESTYABOARD_VERSION}/board-${RESTYABOARD_VERSION}.zip && \
...@@ -46,19 +57,29 @@ RUN curl -L -s -o /tmp/restyaboard.zip https://github.com/RestyaPlatform/board/r ...@@ -46,19 +57,29 @@ RUN curl -L -s -o /tmp/restyaboard.zip https://github.com/RestyaPlatform/board/r
# configure app # configure app
RUN addgroup -g 82 -S www-data ; \ RUN addgroup -g 82 -S www-data ; \
adduser -u 82 -D -S -G www-data www-data && \ adduser -u 82 -D -S -G www-data www-data && \
sed -i "s/user nginx;/user www-data;/" /etc/nginx/nginx.conf && \
rm /etc/nginx/conf.d/default.conf && \
mkdir -p ${CONF_DIR} && \ mkdir -p ${CONF_DIR} && \
cp ${ROOT_DIR}/restyaboard.conf ${CONF_DIR} && \ cp ${ROOT_DIR}/restyaboard.conf ${CONF_DIR} && \
sed -i "s/server_name.*$/server_name \"localhost\";/" ${CONF_DIR}/restyaboard.conf && \ sed -i "s/server_name.*$/server_name \"localhost\";/" ${CONF_DIR}/restyaboard.conf && \
sed -i "s|listen 80.*$|listen 80;|" ${CONF_DIR}/restyaboard.conf && \ sed -i "s|listen 80.*$|listen 80;|" ${CONF_DIR}/restyaboard.conf && \
sed -i "s|root.*html|root ${ROOT_DIR}|" ${CONF_DIR}/restyaboard.conf && \ sed -i "s|root.*html|root ${ROOT_DIR}|" ${CONF_DIR}/restyaboard.conf && \
sed -i "s|user = nobody|user = www-data|" /etc/php7/php-fpm.d/www.conf && \
sed -i "s|group = nobody|group = www-data|" /etc/php7/php-fpm.d/www.conf && \
sed -i "s|listen = 127.0.0.1:9000|listen = /run/php/php7.0-fpm.sock|" /etc/php7/php-fpm.d/www.conf && \
sed -i "s|;listen.owner = nobody|listen.owner = www-data|" /etc/php7/php-fpm.d/www.conf && \
sed -i "s|;listen.group = nobody|listen.group = www-data|" /etc/php7/php-fpm.d/www.conf && \
sed -i "s|;listen.mode = 0660|listen.mode = 0660|" /etc/php7/php-fpm.d/www.conf && \
sed -i "s|GLOB_BRACE|defined('GLOB_BRACE') ? GLOB_BRACE : 0|g" ${ROOT_DIR}/server/php/R/r.php && \
chown -R www-data:www-data ${ROOT_DIR} && \ chown -R www-data:www-data ${ROOT_DIR} && \
chmod -R 777 ${ROOT_DIR}/media && \ chmod -R 777 ${ROOT_DIR}/media && \
chmod -R 777 ${ROOT_DIR}/client/img && \ chmod -R 777 ${ROOT_DIR}/client/img && \
chmod -R 777 ${ROOT_DIR}/tmp chmod -R 777 ${ROOT_DIR}/tmp && \
mkdir -p /run/nginx && \
mkdir -p /run/php
# entrypoint # entrypoint
COPY docker-entrypoint.sh / COPY supervisord.conf /supervisord.conf
COPY docker-entrypoint.sh /docker-entrypoint.sh
RUN chmod +x /docker-entrypoint.sh RUN chmod +x /docker-entrypoint.sh
WORKDIR ${ROOT_DIR}
ENTRYPOINT ["/docker-entrypoint.sh"] ENTRYPOINT ["/docker-entrypoint.sh"]
CMD ["start"]
#!/bin/sh #!/bin/sh
set -e set -e
if [ "$1" = 'start' ]; then # config
sed -i "s/^.*'R_DB_HOST'.*$/define('R_DB_HOST', '${POSTGRES_HOST}');/g" \
${ROOT_DIR}/server/php/config.inc.php
sed -i "s/^.*'R_DB_PORT'.*$/define('R_DB_PORT', '5432');/g" \
${ROOT_DIR}/server/php/config.inc.php
sed -i "s/^.*'R_DB_USER'.*$/define('R_DB_USER', '${POSTGRES_USER}');/g" \
${ROOT_DIR}/server/php/config.inc.php
sed -i "s/^.*'R_DB_PASSWORD'.*$/define('R_DB_PASSWORD', '${POSTGRES_PASSWORD}');/g" \
${ROOT_DIR}/server/php/config.inc.php
sed -i "s/^.*'R_DB_NAME'.*$/define('R_DB_NAME', '${POSTGRES_DB}');/g" \
${ROOT_DIR}/server/php/config.inc.php
# config # postfix
sed -i "s/^.*'R_DB_HOST'.*$/define('R_DB_HOST', '${POSTGRES_HOST}');/g" \ postconf -e smtputf8_enable=no
${ROOT_DIR}/server/php/config.inc.php postalias /etc/postfix/aliases
sed -i "s/^.*'R_DB_PORT'.*$/define('R_DB_PORT', '5432');/g" \ postconf -e smtpd_delay_reject=yes
${ROOT_DIR}/server/php/config.inc.php postconf -e smtpd_helo_required=yes
sed -i "s/^.*'R_DB_USER'.*$/define('R_DB_USER', '${POSTGRES_USER}');/g" \ postconf -e "smtpd_helo_restrictions=permit_mynetworks,reject_invalid_helo_hostname,permit"
${ROOT_DIR}/server/php/config.inc.php postconf -e "smtpd_recipient_restrictions=reject_non_fqdn_recipient,reject_unknown_recipient_domain,reject_unverified_recipient"
sed -i "s/^.*'R_DB_PASSWORD'.*$/define('R_DB_PASSWORD', '${POSTGRES_PASSWORD}');/g" \ echo "[${SMTP_SERVER}]:${SMTP_PORT} ${SMTP_USERNAME}:${SMTP_PASSWORD}" > /etc/postfix/sasl_passwd
${ROOT_DIR}/server/php/config.inc.php postmap /etc/postfix/sasl_passwd
sed -i "s/^.*'R_DB_NAME'.*$/define('R_DB_NAME', '${POSTGRES_DB}');/g" \ echo "www-data@${SMTP_DOMAIN} ${SMTP_USERNAME}" > /etc/postfix/sender_canonical
${ROOT_DIR}/server/php/config.inc.php postmap /etc/postfix/sender_canonical
sed -i '/mydomain.*/d' /etc/postfix/main.cf
sed -i '/myhostname.*/d' /etc/postfix/main.cf
sed -i '/myorigin.*/d' /etc/postfix/main.cf
sed -i '/mydestination.*/d' /etc/postfix/main.cf
sed -i "$ a mydomain = ${SMTP_DOMAIN}" /etc/postfix/main.cf
sed -i "$ a myhostname = localhost" /etc/postfix/main.cf
sed -i '$ a myorigin = $mydomain' /etc/postfix/main.cf
sed -i '$ a mydestination = localhost, $myhostname, localhost.$mydomain' /etc/postfix/main.cf
sed -i '$ a sender_canonical_maps = hash:/etc/postfix/sender_canonical' /etc/postfix/main.cf
sed -i "s/relayhost =.*$/relayhost = [${SMTP_SERVER}]:${SMTP_PORT}/" /etc/postfix/main.cf
sed -i '/smtp_.*/d' /etc/postfix/main.cf
sed -i '$ a smtpd_tls_session_cache_database = btree:${data_directory}/smtpd_scache' /etc/postfix/main.cf
sed -i '$ a smtp_sasl_auth_enable = yes' /etc/postfix/main.cf
sed -i '$ a smtp_sasl_security_options = noanonymous' /etc/postfix/main.cf
sed -i '$ a smtp_sasl_password_maps = hash:/etc/postfix/sasl_passwd' /etc/postfix/main.cf
sed -i '$ a smtp_use_tls = yes' /etc/postfix/main.cf
sed -i '$ a smtp_tls_CAfile = /etc/ssl/certs/ca-certificates.crt' /etc/postfix/main.cf
sed -i '$ a smtp_tls_wrappermode = yes' /etc/postfix/main.cf
sed -i '$ a smtp_tls_security_level = encrypt' /etc/postfix/main.cf
# postfix # init db
echo "[${SMTP_SERVER}]:${SMTP_PORT} ${SMTP_USERNAME}:${SMTP_PASSWORD}" > /etc/postfix/sasl_passwd export PGHOST=${POSTGRES_HOST}
postmap /etc/postfix/sasl_passwd export PGPORT=5432
echo "www-data@${SMTP_DOMAIN} ${SMTP_USERNAME}" > /etc/postfix/sender_canonical export PGUSER=${POSTGRES_USER}
postmap /etc/postfix/sender_canonical export PGPASSWORD=${POSTGRES_PASSWORD}
sed -i '/mydomain.*/d' /etc/postfix/main.cf export PGDATABASE=${POSTGRES_DB}
sed -i '/myhostname.*/d' /etc/postfix/main.cf set +e
sed -i '/myorigin.*/d' /etc/postfix/main.cf while :
sed -i '/mydestination.*/d' /etc/postfix/main.cf do
sed -i "$ a mydomain = ${SMTP_DOMAIN}" /etc/postfix/main.cf psql -c "\q"
sed -i "$ a myhostname = localhost" /etc/postfix/main.cf if [ "$?" = 0 ]; then
sed -i '$ a myorigin = $mydomain' /etc/postfix/main.cf break
sed -i '$ a mydestination = localhost, $myhostname, localhost.$mydomain' /etc/postfix/main.cf
sed -i '$ a sender_canonical_maps = hash:/etc/postfix/sender_canonical' /etc/postfix/main.cf
sed -i "s/relayhost =.*$/relayhost = [${SMTP_SERVER}]:${SMTP_PORT}/" /etc/postfix/main.cf
sed -i '/smtp_.*/d' /etc/postfix/main.cf
sed -i '$ a smtpd_tls_session_cache_database = btree:${data_directory}/smtpd_scache' /etc/postfix/main.cf
sed -i '$ a smtp_sasl_auth_enable = yes' /etc/postfix/main.cf
sed -i '$ a smtp_sasl_security_options = noanonymous' /etc/postfix/main.cf
sed -i '$ a smtp_sasl_password_maps = hash:/etc/postfix/sasl_passwd' /etc/postfix/main.cf
sed -i '$ a smtp_use_tls = yes' /etc/postfix/main.cf
sed -i '$ a smtp_tls_CAfile = /etc/ssl/certs/ca-certificates.crt' /etc/postfix/main.cf
sed -i '$ a smtp_tls_wrappermode = yes' /etc/postfix/main.cf
sed -i '$ a smtp_tls_security_level = encrypt' /etc/postfix/main.cf
# init db
export PGHOST=${POSTGRES_HOST}
export PGPORT=5432
export PGUSER=${POSTGRES_USER}
export PGPASSWORD=${POSTGRES_PASSWORD}
export PGDATABASE=${POSTGRES_DB}
set +e
while :
do
psql -c "\q"
if [ "$?" = 0 ]; then
break
fi
sleep 1
done
if [ "$(psql -c '\d')" = "No relations found." ]; then
psql -f "${ROOT_DIR}/sql/restyaboard_with_empty_data.sql"
fi fi
set -e sleep 1
done
# cron shell if [ "$(psql -c '\d')" = "No relations found." ]; then
cp ${ROOT_DIR}/server/php/shell/instant_email_notification.sh ${ROOT_DIR}/server/php/shell/instant_email_notification psql -f "${ROOT_DIR}/sql/restyaboard_with_empty_data.sql"
cp ${ROOT_DIR}/server/php/shell/periodic_email_notification.sh ${ROOT_DIR}/server/php/shell/periodic_email_notification
cp ${ROOT_DIR}/server/php/shell/imap.sh ${ROOT_DIR}/server/php/shell/imap
cp ${ROOT_DIR}/server/php/shell/webhook.sh ${ROOT_DIR}/server/php/shell/webhook
cp ${ROOT_DIR}/server/php/shell/card_due_notification.sh ${ROOT_DIR}/server/php/shell/card_due_notification
sed -i "s#bin/bash#bin/sh#" ${ROOT_DIR}/server/php/shell/instant_email_notification
sed -i "s#bin/bash#bin/sh#" ${ROOT_DIR}/server/php/shell/periodic_email_notification
sed -i "s#bin/bash#bin/sh#" ${ROOT_DIR}/server/php/shell/imap
sed -i "s#bin/bash#bin/sh#" ${ROOT_DIR}/server/php/shell/webhook
sed -i "s#bin/bash#bin/sh#" ${ROOT_DIR}/server/php/shell/card_due_notification
echo "*/5 * * * * ${ROOT_DIR}/server/php/shell/instant_email_notification" >> /var/spool/cron/crontabs/root
echo "0 * * * * ${ROOT_DIR}/server/php/shell/periodic_email_notification" >> /var/spool/cron/crontabs/root
echo "*/30 * * * * ${ROOT_DIR}/server/php/shell/imap" >> /var/spool/cron/crontabs/root
echo "*/5 * * * * ${ROOT_DIR}/server/php/shell/webhook" >> /var/spool/cron/crontabs/root
echo "*/5 * * * * ${ROOT_DIR}/server/php/shell/card_due_notification" >> /var/spool/cron/crontabs/root
# service start
crond
rc-service php7.0-fpm start
rc-service nginx start
rc-service postfix start
# tail log
exec tail -f /var/log/nginx/access.log /var/log/nginx/error.log
/init
fi fi
set -e
# cron shell
cp ${ROOT_DIR}/server/php/shell/instant_email_notification.sh ${ROOT_DIR}/server/php/shell/instant_email_notification
cp ${ROOT_DIR}/server/php/shell/periodic_email_notification.sh ${ROOT_DIR}/server/php/shell/periodic_email_notification
cp ${ROOT_DIR}/server/php/shell/imap.sh ${ROOT_DIR}/server/php/shell/imap
cp ${ROOT_DIR}/server/php/shell/webhook.sh ${ROOT_DIR}/server/php/shell/webhook
cp ${ROOT_DIR}/server/php/shell/card_due_notification.sh ${ROOT_DIR}/server/php/shell/card_due_notification
sed -i "s#bin/bash#bin/sh#" ${ROOT_DIR}/server/php/shell/instant_email_notification
sed -i "s#bin/bash#bin/sh#" ${ROOT_DIR}/server/php/shell/periodic_email_notification
sed -i "s#bin/bash#bin/sh#" ${ROOT_DIR}/server/php/shell/imap
sed -i "s#bin/bash#bin/sh#" ${ROOT_DIR}/server/php/shell/webhook
sed -i "s#bin/bash#bin/sh#" ${ROOT_DIR}/server/php/shell/card_due_notification
echo "*/5 * * * * ${ROOT_DIR}/server/php/shell/instant_email_notification" >> /var/spool/cron/crontabs/root
echo "0 * * * * ${ROOT_DIR}/server/php/shell/periodic_email_notification" >> /var/spool/cron/crontabs/root
echo "*/30 * * * * ${ROOT_DIR}/server/php/shell/imap" >> /var/spool/cron/crontabs/root
echo "*/5 * * * * ${ROOT_DIR}/server/php/shell/webhook" >> /var/spool/cron/crontabs/root
echo "*/5 * * * * ${ROOT_DIR}/server/php/shell/card_due_notification" >> /var/spool/cron/crontabs/root
exec "$@" # service start
crond
/usr/bin/supervisord -c /supervisord.conf
#!/bin/sh
s6-svscanctl -t /var/run/s6/services
#!/bin/sh
exec nginx -g 'daemon off;'
#!/bin/sh
exec /usr/bin/php-fpm -R --nodaemonize --force-stderr --fpm-config /etc/php/php-fpm.conf --pid /var/run/php-fpm.pid
\ No newline at end of file
#!/bin/sh
command_directory=$(postconf -h command_directory)
daemon_directory=$($command_directory/postconf -h daemon_directory)
# make consistency check
$command_directory/postfix check 2>&1
# run Postfix
exec $daemon_directory/master -d
\ No newline at end of file
[supervisord]
nodaemon=true
[program:postfix]
command=/usr/sbin/postfix -c /etc/postfix start
autorestart=false
[program:php7-fpm]
command=/usr/sbin/php-fpm7 -F
[program:nginx]
command=/usr/sbin/nginx -g "daemon off;"
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment