image size reduction, better cronjobs, better tests, better logs
This commit is contained in:
parent
d3c3edead2
commit
a0f1d0b6e6
38
Dockerfile
38
Dockerfile
|
|
@ -14,27 +14,28 @@ ARG PECL_PASSBOLT_EXTENSIONS="gnupg \
|
||||||
redis \
|
redis \
|
||||||
mcrypt"
|
mcrypt"
|
||||||
|
|
||||||
ENV PECL_BASE_URL="https://pecl.php.net/get"
|
ARG PASSBOLT_DEV_PACKAGES="libgpgme11-dev \
|
||||||
ENV PHP_EXT_DIR="/usr/src/php/ext"
|
|
||||||
|
|
||||||
WORKDIR /var/www/passbolt
|
|
||||||
RUN apt-get update && apt-get -y install \
|
|
||||||
--no-install-recommends \
|
|
||||||
nginx \
|
|
||||||
libgpgme11-dev \
|
|
||||||
gnupg1 \
|
|
||||||
mysql-client \
|
|
||||||
libpng-dev \
|
libpng-dev \
|
||||||
libicu-dev \
|
libicu-dev \
|
||||||
libxslt1-dev \
|
libxslt1-dev \
|
||||||
libmcrypt-dev \
|
libmcrypt-dev \
|
||||||
|
unzip \
|
||||||
|
git"
|
||||||
|
|
||||||
|
ENV PECL_BASE_URL="https://pecl.php.net/get"
|
||||||
|
ENV PHP_EXT_DIR="/usr/src/php/ext"
|
||||||
|
|
||||||
|
WORKDIR /var/www/passbolt
|
||||||
|
RUN apt-get update \
|
||||||
|
&& apt-get -y install --no-install-recommends $PASSBOLT_DEV_PACKAGES \
|
||||||
|
nginx \
|
||||||
|
gnupg \
|
||||||
|
libgpgme11 \
|
||||||
|
libmcrypt4 \
|
||||||
|
mysql-client \
|
||||||
supervisor \
|
supervisor \
|
||||||
git \
|
|
||||||
netcat \
|
netcat \
|
||||||
procps \
|
|
||||||
cron \
|
cron \
|
||||||
&& mv /usr/bin/gpg /usr/bin/gpg2 \
|
|
||||||
&& update-alternatives --verbose --install /usr/bin/gpg gnupg /usr/bin/gpg1 50 \
|
|
||||||
&& mkdir /home/www-data \
|
&& mkdir /home/www-data \
|
||||||
&& chown -R www-data:www-data /home/www-data \
|
&& chown -R www-data:www-data /home/www-data \
|
||||||
&& usermod -d /home/www-data www-data \
|
&& usermod -d /home/www-data www-data \
|
||||||
|
|
@ -45,19 +46,22 @@ RUN apt-get update && apt-get -y install \
|
||||||
done \
|
done \
|
||||||
&& docker-php-ext-install -j4 $PHP_EXTENSIONS $PECL_PASSBOLT_EXTENSIONS \
|
&& docker-php-ext-install -j4 $PHP_EXTENSIONS $PECL_PASSBOLT_EXTENSIONS \
|
||||||
&& docker-php-ext-enable $PHP_EXTENSIONS $PECL_PASSBOLT_EXTENSIONS \
|
&& docker-php-ext-enable $PHP_EXTENSIONS $PECL_PASSBOLT_EXTENSIONS \
|
||||||
|
&& docker-php-source delete \
|
||||||
&& curl -sS https://getcomposer.org/installer | php \
|
&& curl -sS https://getcomposer.org/installer | php \
|
||||||
&& mv composer.phar /usr/local/bin/composer \
|
&& mv composer.phar /usr/local/bin/composer \
|
||||||
&& curl -sSL $PASSBOLT_URL | tar zxf - -C . --strip-components 1 \
|
&& curl -sSL $PASSBOLT_URL | tar zxf - -C . --strip-components 1 \
|
||||||
&& composer install --no-dev --optimize-autoloader \
|
&& composer install -n --no-dev --optimize-autoloader \
|
||||||
&& chown -R www-data:www-data . \
|
&& chown -R www-data:www-data . \
|
||||||
&& chmod 775 $(find /var/www/passbolt/tmp -type d) \
|
&& chmod 775 $(find /var/www/passbolt/tmp -type d) \
|
||||||
&& chmod 664 $(find /var/www/passbolt/tmp -type f) \
|
&& chmod 664 $(find /var/www/passbolt/tmp -type f) \
|
||||||
&& chmod 775 $(find /var/www/passbolt/webroot/img/public -type d) \
|
&& chmod 775 $(find /var/www/passbolt/webroot/img/public -type d) \
|
||||||
&& chmod 664 $(find /var/www/passbolt/webroot/img/public -type f) \
|
&& chmod 664 $(find /var/www/passbolt/webroot/img/public -type f) \
|
||||||
&& rm /etc/nginx/sites-enabled/default
|
&& rm /etc/nginx/sites-enabled/default \
|
||||||
|
&& apt-get purge -y --auto-remove $PASSBOLT_DEV_PACKAGES \
|
||||||
|
&& rm -rf /var/lib/apt/lists/*
|
||||||
|
|
||||||
COPY conf/passbolt.conf /etc/nginx/conf.d/default.conf
|
COPY conf/passbolt.conf /etc/nginx/conf.d/default.conf
|
||||||
COPY conf/supervisord.conf /etc/supervisord.conf
|
COPY conf/supervisord.conf /etc/supervisor/supervisord.conf
|
||||||
COPY bin/docker-entrypoint.sh /docker-entrypoint.sh
|
COPY bin/docker-entrypoint.sh /docker-entrypoint.sh
|
||||||
|
|
||||||
EXPOSE 80 443
|
EXPOSE 80 443
|
||||||
|
|
|
||||||
|
|
@ -18,24 +18,26 @@ gpg_gen_key() {
|
||||||
expiration="${PASSBOLT_KEY_EXPIRATION:-0}"
|
expiration="${PASSBOLT_KEY_EXPIRATION:-0}"
|
||||||
|
|
||||||
su -m -c "gpg --batch --no-tty --gen-key <<EOF
|
su -m -c "gpg --batch --no-tty --gen-key <<EOF
|
||||||
Key-Type: 1
|
Key-Type: default
|
||||||
Key-Length: $key_length
|
Key-Length: $key_length
|
||||||
Subkey-Type: 1
|
Subkey-Type: default
|
||||||
Subkey-Length: $subkey_length
|
Subkey-Length: $subkey_length
|
||||||
Name-Real: $key_name
|
Name-Real: $key_name
|
||||||
Name-Email: $key_email
|
Name-Email: $key_email
|
||||||
Expire-Date: $expiration
|
Expire-Date: $expiration
|
||||||
|
%no-protection
|
||||||
%commit
|
%commit
|
||||||
EOF" -ls /bin/sh www-data
|
EOF" -ls /bin/sh www-data
|
||||||
|
|
||||||
|
su -c "gpg --batch --yes --pinentry-mode loopback --quick-gen-key --passphrase '' $key_email" -ls /bin/sh www-data
|
||||||
|
|
||||||
su -c "gpg --armor --export-secret-keys $key_email > $gpg_private_key" -ls /bin/sh www-data
|
su -c "gpg --armor --export-secret-keys $key_email > $gpg_private_key" -ls /bin/sh www-data
|
||||||
su -c "gpg --armor --export $key_email > $gpg_public_key" -ls /bin/sh www-data
|
su -c "gpg --armor --export $key_email > $gpg_public_key" -ls /bin/sh www-data
|
||||||
}
|
}
|
||||||
|
|
||||||
gpg_import_key() {
|
gpg_import_key() {
|
||||||
key_id=$(su -m -c "gpg --with-colons $gpg_private_key | grep sec |cut -f5 -d:" -ls /bin/sh www-data)
|
su -c "gpg --batch --import $gpg_public_key" -ls /bin/bash www-data
|
||||||
su -c "gpg --batch --import $gpg_public_key" -ls /bin/sh www-data
|
su -c "gpg --batch --import $gpg_private_key" -ls /bin/bash www-data
|
||||||
su -c "gpg -K $key_id" -ls /bin/sh www-data || su -m -c "gpg --batch --import $gpg_private_key" -ls /bin/sh www-data
|
|
||||||
}
|
}
|
||||||
|
|
||||||
gen_ssl_cert() {
|
gen_ssl_cert() {
|
||||||
|
|
@ -46,11 +48,11 @@ gen_ssl_cert() {
|
||||||
|
|
||||||
install() {
|
install() {
|
||||||
tables=$(mysql \
|
tables=$(mysql \
|
||||||
-u "$DATASOURCES_DEFAULT_USERNAME" \
|
-u "${DATASOURCES_DEFAULT_USERNAME:-passbolt}" \
|
||||||
-h "$DATASOURCES_DEFAULT_HOST" \
|
-h "${DATASOURCES_DEFAULT_HOST:-localhost}" \
|
||||||
-P "$DATASOURCES_DEFAULT_PORT" \
|
-P "${DATASOURCES_DEFAULT_PORT:-3306}" \
|
||||||
-BN -e "SHOW TABLES FROM $DATASOURCES_DEFAULT_DATABASE" \
|
-BN -e "SHOW TABLES FROM ${DATASOURCES_DEFAULT_DATABASE:-passbolt}" \
|
||||||
-p"$DATASOURCES_DEFAULT_PASSWORD" |wc -l)
|
-p"${DATASOURCES_DEFAULT_PASSWORD:-P4ssb0lt}" |wc -l)
|
||||||
app_config="/var/www/passbolt/config/app.php"
|
app_config="/var/www/passbolt/config/app.php"
|
||||||
|
|
||||||
if [ ! -f "$app_config" ]; then
|
if [ ! -f "$app_config" ]; then
|
||||||
|
|
@ -58,21 +60,23 @@ install() {
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if [ -z "${PASSBOLT_GPG_SERVER_KEY_FINGERPRINT+xxx}" ]; then
|
if [ -z "${PASSBOLT_GPG_SERVER_KEY_FINGERPRINT+xxx}" ]; then
|
||||||
gpg_auto_fingerprint="$(su -c "gpg --with-fingerprint $gpg_public_key | grep fingerprint | awk '{for(i=4;i<=NF;++i)printf \$i}'" -ls /bin/sh www-data)"
|
gpg_auto_fingerprint="$(su -c "gpg --list-keys --with-colons ${PASSBOLT_KEY_EMAIL:-passbolt@yourdomain.com} |grep fpr |head -1| cut -f10 -d:" -ls /bin/sh www-data)"
|
||||||
export PASSBOLT_GPG_SERVER_KEY_FINGERPRINT=$gpg_auto_fingerprint
|
export PASSBOLT_GPG_SERVER_KEY_FINGERPRINT=$gpg_auto_fingerprint
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if [ "$tables" -eq 0 ]; then
|
if [ "$tables" -eq 0 ]; then
|
||||||
su -c '/var/www/passbolt/bin/cake passbolt install --no-admin --force' -s /bin/sh www-data
|
su -c '/var/www/passbolt/bin/cake passbolt install --no-admin --force' -s /bin/sh www-data
|
||||||
else
|
else
|
||||||
|
su -c '/var/www/passbolt/bin/cake migrations migrate' -s /bin/sh www-data
|
||||||
echo "Enjoy! ☮"
|
echo "Enjoy! ☮"
|
||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
email_cron_job() {
|
email_cron_job() {
|
||||||
|
printenv > /etc/environment
|
||||||
|
sed -i 's/=\(.*\)/="\1"/g' /etc/environment
|
||||||
cron_task='/etc/cron.d/passbolt_email'
|
cron_task='/etc/cron.d/passbolt_email'
|
||||||
process_email="/var/www/passbolt/bin/cake EmailQueue.sender --quiet"
|
echo "* * * * * su -c \"source /etc/environment ; /var/www/passbolt/bin/cake EmailQueue.sender\" -s /bin/bash www-data >> /var/log/cron.log 2>&1" >> $cron_task
|
||||||
echo "* * * * * su -c \"$process_email\" -s /bin/sh www-data" >> $cron_task
|
|
||||||
|
|
||||||
crontab /etc/cron.d/passbolt_email
|
crontab /etc/cron.d/passbolt_email
|
||||||
}
|
}
|
||||||
|
|
@ -93,4 +97,4 @@ fi
|
||||||
install
|
install
|
||||||
email_cron_job
|
email_cron_job
|
||||||
|
|
||||||
/usr/bin/supervisord -n -c /etc/supervisord.conf
|
/usr/bin/supervisord -n
|
||||||
|
|
|
||||||
|
|
@ -1,15 +1,13 @@
|
||||||
|
; supervisor config file
|
||||||
|
|
||||||
[unix_http_server]
|
[unix_http_server]
|
||||||
file=/tmp/supervisor.sock ; (the path to the socket file)
|
file=/var/run/supervisor.sock ; (the path to the socket file)
|
||||||
|
chmod=0700 ; sockef file mode (default 0700)
|
||||||
|
|
||||||
[supervisord]
|
[supervisord]
|
||||||
logfile=/tmp/supervisord.log ; (main log file;default $CWD/supervisord.log)
|
logfile=/var/log/supervisor/supervisord.log ; (main log file;default $CWD/supervisord.log)
|
||||||
logfile_maxbytes=50MB ; (max main logfile bytes b4 rotation;default 50MB)
|
pidfile=/var/run/supervisord.pid ; (supervisord pidfile;default supervisord.pid)
|
||||||
logfile_backups=10 ; (num of main logfile rotation backups;default 10)
|
childlogdir=/var/log/supervisor ; ('AUTO' child log dir, default $TEMP)
|
||||||
loglevel=info ; (log level;default info; others: debug,warn,trace)
|
|
||||||
pidfile=/tmp/supervisord.pid ; (supervisord pidfile;default supervisord.pid)
|
|
||||||
nodaemon=false ; (start in foreground if true;default false)
|
|
||||||
minfds=1024 ; (min. avail startup file descriptors;default 1024)
|
|
||||||
minprocs=200 ; (min. avail process descriptors;default 200)
|
|
||||||
|
|
||||||
; the below section must remain in the config file for RPC
|
; the below section must remain in the config file for RPC
|
||||||
; (supervisorctl/web interface) to work, additional interfaces may be
|
; (supervisorctl/web interface) to work, additional interfaces may be
|
||||||
|
|
@ -18,19 +16,37 @@ minprocs=200 ; (min. avail process descriptors;default 200)
|
||||||
supervisor.rpcinterface_factory = supervisor.rpcinterface:make_main_rpcinterface
|
supervisor.rpcinterface_factory = supervisor.rpcinterface:make_main_rpcinterface
|
||||||
|
|
||||||
[supervisorctl]
|
[supervisorctl]
|
||||||
serverurl=unix:///tmp/supervisor.sock ; use a unix:// URL for a unix socket
|
serverurl=unix:///var/run/supervisor.sock ; use a unix:// URL for a unix socket
|
||||||
|
|
||||||
|
; The [include] section can just contain the "files" setting. This
|
||||||
|
; setting can list multiple files (separated by whitespace or
|
||||||
|
; newlines). It can also contain wildcards. The filenames are
|
||||||
|
; interpreted as relative to this file. Included files *cannot*
|
||||||
|
; include files themselves.
|
||||||
|
|
||||||
[program:php-fpm]
|
[program:php-fpm]
|
||||||
command=php-fpm
|
command=php-fpm
|
||||||
autostart=true
|
autostart=true
|
||||||
priority=5
|
priority=5
|
||||||
|
stdout_logfile=/dev/stdout
|
||||||
|
stdout_logfile_maxbytes=0
|
||||||
|
stderr_logfile=/dev/stderr
|
||||||
|
stderr_logfile_maxbytes=0
|
||||||
|
|
||||||
[program:nginx]
|
[program:nginx]
|
||||||
command=nginx -g "daemon off;"
|
command=nginx -g "daemon off;"
|
||||||
autostart=true
|
autostart=true
|
||||||
priority=10
|
priority=10
|
||||||
|
stdout_logfile=/dev/stdout
|
||||||
|
stdout_logfile_maxbytes=0
|
||||||
|
stderr_logfile=/dev/stderr
|
||||||
|
stderr_logfile_maxbytes=0
|
||||||
|
|
||||||
[program:cron]
|
[program:cron]
|
||||||
command=cron
|
command=cron -f -l
|
||||||
autostart=true
|
autostart=true
|
||||||
priority=20
|
priority=20
|
||||||
|
stdout_logfile=/dev/stdout
|
||||||
|
stdout_logfile_maxbytes=0
|
||||||
|
stderr_logfile=/dev/stderr
|
||||||
|
stderr_logfile_maxbytes=0
|
||||||
|
|
|
||||||
|
|
@ -10,7 +10,8 @@ services:
|
||||||
- 3306
|
- 3306
|
||||||
|
|
||||||
passbolt:
|
passbolt:
|
||||||
image: gcr.io/passbolt-production/passbolt-api:2.0.0-rc2-debian
|
image: passbolt/passbolt:develop-debian
|
||||||
|
tty: true
|
||||||
depends_on:
|
depends_on:
|
||||||
- db
|
- db
|
||||||
env_file:
|
env_file:
|
||||||
|
|
|
||||||
|
|
@ -26,7 +26,7 @@ describe 'Dockerfile' do
|
||||||
let(:composer) { '/usr/local/bin/composer'}
|
let(:composer) { '/usr/local/bin/composer'}
|
||||||
let(:php_extensions) { [
|
let(:php_extensions) { [
|
||||||
'curl', 'gd', 'intl', 'json', 'mcrypt', 'mysqlnd', 'xsl', 'phar',
|
'curl', 'gd', 'intl', 'json', 'mcrypt', 'mysqlnd', 'xsl', 'phar',
|
||||||
'posix', 'xml', 'xsl', 'zlib', 'ctype', 'pdo', 'gnupg', 'pdo_mysql'
|
'posix', 'xml', 'zlib', 'ctype', 'pdo', 'gnupg', 'pdo_mysql'
|
||||||
] }
|
] }
|
||||||
|
|
||||||
describe 'passbolt required php extensions' do
|
describe 'passbolt required php extensions' do
|
||||||
|
|
|
||||||
|
|
@ -49,17 +49,17 @@ describe 'passbolt_api service' do
|
||||||
|
|
||||||
describe 'php service' do
|
describe 'php service' do
|
||||||
it 'is running supervised' do
|
it 'is running supervised' do
|
||||||
expect(process('php-fpm')).to be_running.under('supervisor')
|
expect(service('php-fpm')).to be_running.under('supervisor')
|
||||||
end
|
end
|
||||||
|
|
||||||
it 'has its port open' do
|
it 'has its port open' do
|
||||||
expect(port(9000)).to be_listening.with('tcp')
|
expect(@container.json['Config']['ExposedPorts']).to have_key('9000/tcp')
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
describe 'email cron' do
|
describe 'email cron' do
|
||||||
it 'is running supervised' do
|
it 'is running supervised' do
|
||||||
expect(service('crond')).to be_running.under('supervisor')
|
expect(service('cron')).to be_running.under('supervisor')
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
@ -69,11 +69,11 @@ describe 'passbolt_api service' do
|
||||||
end
|
end
|
||||||
|
|
||||||
it 'is listening on port 80' do
|
it 'is listening on port 80' do
|
||||||
expect(port(80)).to be_listening.with('tcp')
|
expect(@container.json['Config']['ExposedPorts']).to have_key('80/tcp')
|
||||||
end
|
end
|
||||||
|
|
||||||
it 'is listening on port 443' do
|
it 'is listening on port 443' do
|
||||||
expect(port(443)).to be_listening.with('tcp')
|
expect(@container.json['Config']['ExposedPorts']).to have_key('443/tcp')
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue