diff --git a/docker-compose.yaml b/docker-compose.yaml new file mode 100644 index 0000000..7a4d233 --- /dev/null +++ b/docker-compose.yaml @@ -0,0 +1,11 @@ +version: "2.4" +services: + strapi: + build: ./docker + ports: + - ${PORT:-1337}:1337 + volumes: + - .:/srv/app/src/plugins/export-data + - ./plugins.js:/srv/app/config/plugins.js +volumes: + strapi: diff --git a/docker/Dockerfile b/docker/Dockerfile new file mode 100644 index 0000000..6c6c791 --- /dev/null +++ b/docker/Dockerfile @@ -0,0 +1,31 @@ +ARG NODE_VERSION=18 +FROM node:${NODE_VERSION}-alpine AS base-alpine +EXPOSE 1337 + +FROM base-alpine + +ARG STRAPI_VERSION=latest + +RUN yarn global add @strapi/strapi@${STRAPI_VERSION} + + +RUN mkdir -p /srv/app && chown 1000:1000 -R /srv/app + +WORKDIR /srv/app + +RUN strapi new ./ --no-run \ + --dbclient=sqlite + + +RUN yarn install --prod --silent +RUN yarn add @faker-js/faker --dev +RUN mkdir src/plugins +# copy sources +COPY --link ../ ./src/plugins/export-data/ +COPY --link api ./src/api +COPY --link index.js ./src/index.js +RUN rm -Rf ./src/plugins/export-data/docker/ + +#RUN "yarn" + +CMD ["strapi","develop"] diff --git a/docker/api/.gitkeep b/docker/api/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/docker/api/article/content-types/article/schema.json b/docker/api/article/content-types/article/schema.json new file mode 100644 index 0000000..0cb0ccd --- /dev/null +++ b/docker/api/article/content-types/article/schema.json @@ -0,0 +1,31 @@ +{ + "kind": "collectionType", + "collectionName": "articles", + "info": { + "singularName": "article", + "pluralName": "articles", + "displayName": "Article" + }, + "options": { + "draftAndPublish": true + }, + "pluginOptions": {}, + "attributes": { + "title": { + "type": "string" + }, + "description": { + "type": "text" + }, + "thumbnail": { + "allowedTypes": [ + "images", + "files", + "videos", + "audios" + ], + "type": "media", + "multiple": false + } + } +} diff --git a/docker/api/article/controllers/article.js b/docker/api/article/controllers/article.js new file mode 100644 index 0000000..c4bca44 --- /dev/null +++ b/docker/api/article/controllers/article.js @@ -0,0 +1,9 @@ +'use strict'; + +/** + * article controller + */ + +const { createCoreController } = require('@strapi/strapi').factories; + +module.exports = createCoreController('api::article.article'); diff --git a/docker/api/article/routes/article.js b/docker/api/article/routes/article.js new file mode 100644 index 0000000..4d843fa --- /dev/null +++ b/docker/api/article/routes/article.js @@ -0,0 +1,9 @@ +'use strict'; + +/** + * article router + */ + +const { createCoreRouter } = require('@strapi/strapi').factories; + +module.exports = createCoreRouter('api::article.article'); diff --git a/docker/api/article/services/article.js b/docker/api/article/services/article.js new file mode 100644 index 0000000..b9890be --- /dev/null +++ b/docker/api/article/services/article.js @@ -0,0 +1,9 @@ +'use strict'; + +/** + * article service + */ + +const { createCoreService } = require('@strapi/strapi').factories; + +module.exports = createCoreService('api::article.article'); diff --git a/docker/api/homepage/content-types/homepage/schema.json b/docker/api/homepage/content-types/homepage/schema.json new file mode 100644 index 0000000..ca38a9a --- /dev/null +++ b/docker/api/homepage/content-types/homepage/schema.json @@ -0,0 +1,24 @@ +{ + "kind": "singleType", + "collectionName": "homepages", + "info": { + "singularName": "homepage", + "pluralName": "homepages", + "displayName": "Homepage" + }, + "options": { + "draftAndPublish": true + }, + "pluginOptions": {}, + "attributes": { + "title": { + "type": "string" + }, + "cta_title": { + "type": "string" + }, + "section_3_title": { + "type": "string" + } + } +} diff --git a/docker/api/homepage/controllers/homepage.js b/docker/api/homepage/controllers/homepage.js new file mode 100644 index 0000000..8deb30e --- /dev/null +++ b/docker/api/homepage/controllers/homepage.js @@ -0,0 +1,9 @@ +'use strict'; + +/** + * homepage controller + */ + +const { createCoreController } = require('@strapi/strapi').factories; + +module.exports = createCoreController('api::homepage.homepage'); diff --git a/docker/api/homepage/routes/homepage.js b/docker/api/homepage/routes/homepage.js new file mode 100644 index 0000000..40dc32a --- /dev/null +++ b/docker/api/homepage/routes/homepage.js @@ -0,0 +1,9 @@ +'use strict'; + +/** + * homepage router + */ + +const { createCoreRouter } = require('@strapi/strapi').factories; + +module.exports = createCoreRouter('api::homepage.homepage'); diff --git a/docker/api/homepage/services/homepage.js b/docker/api/homepage/services/homepage.js new file mode 100644 index 0000000..86c6bd8 --- /dev/null +++ b/docker/api/homepage/services/homepage.js @@ -0,0 +1,9 @@ +'use strict'; + +/** + * homepage service + */ + +const { createCoreService } = require('@strapi/strapi').factories; + +module.exports = createCoreService('api::homepage.homepage'); diff --git a/docker/index.js b/docker/index.js new file mode 100644 index 0000000..6a5b1f2 --- /dev/null +++ b/docker/index.js @@ -0,0 +1,41 @@ +'use strict'; + +module.exports = { + /** + * An asynchronous register function that runs before + * your application is initialized. + * + * This gives you an opportunity to extend code. + */ + register(/*{ strapi }*/) {}, + + /** + * An asynchronous bootstrap function that runs before + * your application gets started. + * + * This gives you an opportunity to set up your data model, + * run jobs, or perform some special logic. + */ + bootstrap({ strapi }) { + if(process.env.NODE_ENV === 'development'){ + strapi.entityService.create('admin::user', {data: { + 'firstname': 'John', + 'lastname': 'Doe', + 'email': 'test@example.com', + 'password': 'test1234', + 'isActive': true, + 'created_at': new Date(), + 'roles': [1] + },}); + const {faker} = require('@faker-js/faker'); + for(let i =0; i < 20000; i++) { + strapi.entityService.create('api::article.article',{ + data:{ + title: faker.lorem.sentence(), + description: faker.lorem.paragraphs(), + } + }) + } + } + }, +}; diff --git a/plugins.js b/plugins.js new file mode 100644 index 0000000..7bdeee2 --- /dev/null +++ b/plugins.js @@ -0,0 +1,8 @@ +module.exports = { + // ... + 'export-data': { + enabled: true, + resolve: './src/plugins/export-data', // path to plugin folder + config: {} + }, +}