diff --git a/gulpfile.js b/gulpfile.js index 1b4578c863..9b8b7229fd 100644 --- a/gulpfile.js +++ b/gulpfile.js @@ -411,18 +411,36 @@ gulp.task('watch', function() { // Docker /** - * Rebuilds the docker and it's image, if these already exist, destroys and - * rebuilds them. + * Rebuilds the docker, if already exists, destroys and + * rebuild it. */ gulp.task('docker', async () => { try { await execP('docker rm -f dblocal'); } catch (e) {} + + await runSequenceP('docker-run'); +}); + +/** + * Rebuilds the docker image, if these already exist, destroys and + * rebuilds them. + */ +gulp.task('docker-image', async () => { + try { + await execP('docker rm -f dblocal'); + } catch (e) {} try { await execP('docker rmi dblocal:latest'); } catch (e) {} - await runSequenceP('docker-run'); + log('Building image...'); + await execP('docker build -t dblocal:latest ./services/db'); + log('Starting container...'); + await execP('docker run -d --name dblocal -p 3306:3306 dblocal'); + await runSequenceP('docker-wait'); + log('Making container snapshot...'); + await execP('docker commit dblocal dblocal:latest'); }); /** @@ -457,7 +475,7 @@ gulp.task('docker-run', async () => { try { await execP('docker image inspect -f "{{json .Id}}" dblocal'); } catch (err) { - await execP('docker build -t dblocal:latest ./services/db'); + await runSequenceP('docker-image'); } await execP('docker run -d --name dblocal -p 3306:3306 dblocal'); @@ -472,7 +490,7 @@ gulp.task('docker-wait', callback => { let interval = 1; let elapsedTime = 0; - let maxInterval = 30 * 60; + let maxInterval = 45 * 60; log('Waiting for MySQL init process...'); checker(); diff --git a/services/db/03-changes.sh b/services/db/03-changes.sh deleted file mode 100644 index 0f714b2aa7..0000000000 --- a/services/db/03-changes.sh +++ /dev/null @@ -1,6 +0,0 @@ -#!/bin/bash - -for file in changes/*/*.sql; do - echo "Importing $file" - mysql -u root -proot < $file -done diff --git a/services/db/Dockerfile b/services/db/Dockerfile index 55ca078d2e..47891748bf 100644 --- a/services/db/Dockerfile +++ b/services/db/Dockerfile @@ -1,17 +1,11 @@ -FROM mysql:5.6.37 - -ENV MYSQL_ROOT_PASSWORD root +FROM verdnatura/vn-mysql:latest ENV TZ GMT-1 - WORKDIR /docker-entrypoint-initdb.d -COPY *.sql ./ -COPY 03-changes.sh . -COPY changes changes -RUN chmod -R 755 . - -CMD ["mysqld"] - +COPY install/ ./ +RUN chmod -R 777 . +RUN ./install.sh +USER mysql +CMD ["mysqld"] #HEALTHCHECK --interval=5s --timeout=10s --retries=200 \ # CMD mysqladmin ping -h 127.0.0.1 -u root || exit 1 - -EXPOSE 3306 +EXPOSE 3306 \ No newline at end of file diff --git a/services/db/export-data.cmd b/services/db/export-data.cmd index 7b8cccf1a6..7043bdfcee 100755 --- a/services/db/export-data.cmd +++ b/services/db/export-data.cmd @@ -1,16 +1,16 @@ ::IMPORTANT Any changes in this file are to applyed to mirror file export-data.sh -echo USE `account`; > 02-dumpedFixtures.sql -mysqldump --defaults-file=connect.ini --no-create-info account role roleRole roleInherit >> 02-dumpedFixtures.sql -echo USE `salix`; >> 02-dumpedFixtures.sql -mysqldump --defaults-file=connect.ini --no-create-info salix ACL >> 02-dumpedFixtures.sql -echo USE `vn`; >> 02-dumpedFixtures.sql -mysqldump --defaults-file=connect.ini --no-create-info vn cplusInvoiceType477 cplusSubjectOp cplusTaxBreak bookingPlanner pgc >> 02-dumpedFixtures.sql -echo USE `vn2008`; >> 02-dumpedFixtures.sql -mysqldump --defaults-file=connect.ini --no-create-info vn2008 accion_dits Gastos Tintas tarifa_componentes tarifa_componentes_series state bionic_updating_options >> 02-dumpedFixtures.sql -echo USE `bi`; >> 02-dumpedFixtures.sql -mysqldump --defaults-file=connect.ini --no-create-info bi tarifa_componentes tarifa_componentes_series >> 02-dumpedFixtures.sql -echo USE `cache`; >> 02-dumpedFixtures.sql -mysqldump --defaults-file=connect.ini --no-create-info cache cache >> 02-dumpedFixtures.sql +echo USE `account`; > install/dump/03-dumpedFixtures.sql +mysqldump --defaults-file=connect.ini --no-create-info account role roleRole roleInherit >> install/dump/03-dumpedFixtures.sql +echo USE `salix`; >> install/dump/03-dumpedFixtures.sql +mysqldump --defaults-file=connect.ini --no-create-info salix ACL >> install/dump/03-dumpedFixtures.sql +echo USE `vn`; >> install/dump/03-dumpedFixtures.sql +mysqldump --defaults-file=connect.ini --no-create-info vn cplusInvoiceType477 cplusSubjectOp cplusTaxBreak bookingPlanner pgc >> install/dump/03-dumpedFixtures.sql +echo USE `vn2008`; >> install/dump/03-dumpedFixtures.sql +mysqldump --defaults-file=connect.ini --no-create-info vn2008 accion_dits Gastos Tintas tarifa_componentes tarifa_componentes_series state bionic_updating_options >> install/dump/03-dumpedFixtures.sql +echo USE `bi`; >> install/dump/03-dumpedFixtures.sql +mysqldump --defaults-file=connect.ini --no-create-info bi tarifa_componentes tarifa_componentes_series >> install/dump/03-dumpedFixtures.sql +echo USE `cache`; >> install/dump/03-dumpedFixtures.sql +mysqldump --defaults-file=connect.ini --no-create-info cache cache >> install/dump/03-dumpedFixtures.sql diff --git a/services/db/export-data.sh b/services/db/export-data.sh index 01db645449..f32f824bb3 100755 --- a/services/db/export-data.sh +++ b/services/db/export-data.sh @@ -1,17 +1,17 @@ #!/bin/bash #IMPORTANT Any changes in this file are to applyed to mirror file export-data.cmd -echo "USE \`account\`;" > 02-dumpedFixtures.sql -mysqldump --defaults-file=connect.ini --no-create-info account role roleRole roleInherit >> 02-dumpedFixtures.sql -echo "USE \`salix\`;" >> 02-dumpedFixtures.sql -mysqldump --defaults-file=connect.ini --no-create-info salix ACL >> 02-dumpedFixtures.sql -echo "USE \`vn\`;" >> 02-dumpedFixtures.sql -mysqldump --defaults-file=connect.ini --no-create-info vn cplusInvoiceType477 cplusSubjectOp cplusTaxBreak bookingPlanner pgc >> 02-dumpedFixtures.sql -echo "USE \`vn2008\`;" >> 02-dumpedFixtures.sql -mysqldump --defaults-file=connect.ini --no-create-info vn2008 accion_dits Gastos Tintas tarifa_componentes tarifa_componentes_series state bionic_updating_options >> 02-dumpedFixtures.sql -echo "USE \`bi\`;" >> 02-dumpedFixtures.sql -mysqldump --defaults-file=connect.ini --no-create-info bi tarifa_componentes tarifa_componentes_series >> 02-dumpedFixtures.sql -echo "USE \`cache\`;" >> 02-dumpedFixtures.sql -mysqldump --defaults-file=connect.ini --no-create-info cache cache >> 02-dumpedFixtures.sql +echo "USE \`account\`;" > install/dump/03-dumpedFixtures.sql +mysqldump --defaults-file=connect.ini --no-create-info account role roleRole roleInherit >> install/dump/03-dumpedFixtures.sql +echo "USE \`salix\`;" >> install/dump/03-dumpedFixtures.sql +mysqldump --defaults-file=connect.ini --no-create-info salix ACL >> install/dump/03-dumpedFixtures.sql +echo "USE \`vn\`;" >> install/dump/03-dumpedFixtures.sql +mysqldump --defaults-file=connect.ini --no-create-info vn cplusInvoiceType477 cplusSubjectOp cplusTaxBreak bookingPlanner pgc >> install/dump/03-dumpedFixtures.sql +echo "USE \`vn2008\`;" >> install/dump/03-dumpedFixtures.sql +mysqldump --defaults-file=connect.ini --no-create-info vn2008 accion_dits Gastos Tintas tarifa_componentes tarifa_componentes_series state bionic_updating_options >> install/dump/03-dumpedFixtures.sql +echo "USE \`bi\`;" >> install/dump/03-dumpedFixtures.sql +mysqldump --defaults-file=connect.ini --no-create-info bi tarifa_componentes tarifa_componentes_series >> install/dump/03-dumpedFixtures.sql +echo "USE \`cache\`;" >> install/dump/03-dumpedFixtures.sql +mysqldump --defaults-file=connect.ini --no-create-info cache cache >> install/dump/03-dumpedFixtures.sql diff --git a/services/db/export-structure.cmd b/services/db/export-structure.cmd index c139ebd009..0f2203dcb5 100755 --- a/services/db/export-structure.cmd +++ b/services/db/export-structure.cmd @@ -1,2 +1,2 @@ ::IMPORTANT Any changes in this file are to applyed to mirror file export-structure.sh -mysqldump --defaults-file=connect.ini --default-character-set=utf8 --no-data --comments --triggers --routines --events --databases account util vn2008 vn edi bs bi pbx cache salix vncontrol hedera stock > 01-structure.sql +mysqldump --defaults-file=connect.ini --default-character-set=utf8 --no-data --comments --triggers --routines --events --databases account util vn2008 vn edi bs bi pbx cache salix vncontrol hedera stock > install/dump/01-structure.sql diff --git a/services/db/export-structure.sh b/services/db/export-structure.sh index 78eb382147..402174e61c 100755 --- a/services/db/export-structure.sh +++ b/services/db/export-structure.sh @@ -1,3 +1,3 @@ #!/bin/bash #IMPORTANT Any changes in this file are to applyed to mirror file export-structure.cmd -mysqldump --defaults-file=connect.ini --default-character-set=utf8 --no-data --comments --triggers --routines --events --databases account util vn2008 vn edi bs bi pbx cache salix vncontrol hedera stock > 01-structure.sql +mysqldump --defaults-file=connect.ini --default-character-set=utf8 --no-data --comments --triggers --routines --events --databases account util vn2008 vn edi bs bi pbx cache salix vncontrol hedera stock > install/dump/01-structure.sql diff --git a/services/db/import-changes.js b/services/db/import-changes.js index 3e645484b6..5a797bc6a4 100644 --- a/services/db/import-changes.js +++ b/services/db/import-changes.js @@ -8,7 +8,7 @@ const fs = require('fs-extra'); user: 'root', multipleStatements: true }); - let changesDir = './changes'; + let changesDir = './install/changes'; let results = await connection.query("SELECT dbVersion FROM util.config"); if (results[0].length != 1) throw new Error('There must be exactly one row in the configuration table'); diff --git a/services/db/import-fixtures.js b/services/db/import-fixtures.js index c7e9c5f024..8cd38a750f 100644 --- a/services/db/import-fixtures.js +++ b/services/db/import-fixtures.js @@ -8,7 +8,7 @@ const fs = require('fs-extra'); user: 'root', multipleStatements: true }); - sql = await fs.readFile(`04-fixtures.sql`, 'utf8'); + sql = await fs.readFile(`install/dump/fixtures.sql`, 'utf8'); await connection.query(sql); await connection.end(); process.exit(); diff --git a/services/db/changes/1.0.1/05-updateTriggerClient.sql b/services/db/install/changes/1.0.1/05-updateTriggerClient.sql similarity index 100% rename from services/db/changes/1.0.1/05-updateTriggerClient.sql rename to services/db/install/changes/1.0.1/05-updateTriggerClient.sql diff --git a/services/db/changes/1.0.3/01-ticketVolume.sql b/services/db/install/changes/1.0.3/01-ticketVolume.sql similarity index 100% rename from services/db/changes/1.0.3/01-ticketVolume.sql rename to services/db/install/changes/1.0.3/01-ticketVolume.sql diff --git a/services/db/changes/1.0.3/02-messageSend.sql b/services/db/install/changes/1.0.3/02-messageSend.sql similarity index 100% rename from services/db/changes/1.0.3/02-messageSend.sql rename to services/db/install/changes/1.0.3/02-messageSend.sql diff --git a/services/db/changes/1.0.3/03-messageSendWithUser.sql b/services/db/install/changes/1.0.3/03-messageSendWithUser.sql similarity index 100% rename from services/db/changes/1.0.3/03-messageSendWithUser.sql rename to services/db/install/changes/1.0.3/03-messageSendWithUser.sql diff --git a/services/db/changes/1.0.3/04-ticketUpdateAction.sql b/services/db/install/changes/1.0.3/04-ticketUpdateAction.sql similarity index 100% rename from services/db/changes/1.0.3/04-ticketUpdateAction.sql rename to services/db/install/changes/1.0.3/04-ticketUpdateAction.sql diff --git a/services/db/00-truncateAll.sql b/services/db/install/dump/00-truncateAll.sql similarity index 100% rename from services/db/00-truncateAll.sql rename to services/db/install/dump/00-truncateAll.sql diff --git a/services/db/01-structure.sql b/services/db/install/dump/01-structure.sql similarity index 100% rename from services/db/01-structure.sql rename to services/db/install/dump/01-structure.sql diff --git a/services/db/install/dump/02-plugins-mysql.sql b/services/db/install/dump/02-plugins-mysql.sql new file mode 100644 index 0000000000..248eccdac9 --- /dev/null +++ b/services/db/install/dump/02-plugins-mysql.sql @@ -0,0 +1,5 @@ +USE `vn2008`; + +-- Import compiled functions +CREATE AGGREGATE FUNCTION minacum RETURNS INT SONAME 'minacum.so'; +CREATE AGGREGATE FUNCTION multimax RETURNS INT SONAME 'multimax.so'; \ No newline at end of file diff --git a/services/db/02-dumpedFixtures.sql b/services/db/install/dump/03-dumpedFixtures.sql similarity index 100% rename from services/db/02-dumpedFixtures.sql rename to services/db/install/dump/03-dumpedFixtures.sql diff --git a/services/db/04-fixtures.sql b/services/db/install/dump/fixtures.sql similarity index 100% rename from services/db/04-fixtures.sql rename to services/db/install/dump/fixtures.sql diff --git a/services/db/install/install.sh b/services/db/install/install.sh new file mode 100644 index 0000000000..211d57948f --- /dev/null +++ b/services/db/install/install.sh @@ -0,0 +1,28 @@ +#!/bin/bash + +# Start MySQL service +service mysql start + +# Disable SQL strict mode +mysql -u root -proot -e "SET GLOBAL sql_mode='NO_ENGINE_SUBSTITUTION';" + +# Dump structure +for file in dump/*-*.sql; do + echo "Imported $file" >> log.txt + mysql -u root -proot < $file +done + +# Import changes +for file in changes/*/*.sql; do + echo "Imported $file" >> log.txt + mysql -u root -proot < $file +done + +# Import fixtures +echo "Imported fixtures.sql" >> log.txt +mysql -u root -proot < dump/fixtures.sql >> log.txt + +# Remove installation +#rm -rf /docker-entrypoint-initdb.d + +