From 8ef7aecc2a5ccd7c99fccd5f0e15f3ca6c0f3c5e Mon Sep 17 00:00:00 2001 From: Schneider Roland Date: Mon, 3 Mar 2025 08:41:01 +0100 Subject: [PATCH] Add production Docker Compose setup and environment configuration --- .../prod/docker-compose/yogastic/.example.env | 35 ++++++++++ .../yogastic/docker-compose.yaml | 67 +++++++++++++++++++ environment/prod/jenkins/Jenkinsfile | 27 ++++++++ 3 files changed, 129 insertions(+) create mode 100644 environment/prod/docker-compose/yogastic/.example.env create mode 100644 environment/prod/docker-compose/yogastic/docker-compose.yaml create mode 100644 environment/prod/jenkins/Jenkinsfile diff --git a/environment/prod/docker-compose/yogastic/.example.env b/environment/prod/docker-compose/yogastic/.example.env new file mode 100644 index 0000000..d5cf937 --- /dev/null +++ b/environment/prod/docker-compose/yogastic/.example.env @@ -0,0 +1,35 @@ +COMPOSE_PROJECT_NAME=yoga-infra + +APP_POSTGRES_URL="postgres://scrambled_user:scrambled_pass@nextjs-db:5432/nextjs" +APP_POSTGRES_URL_NON_POOLING="postgres://scrambled_user:scrambled_pass@nextjs-db:5432/nextjs" +APP_POSTGRES_USER="scrambled_user" +APP_POSTGRES_HOST="nextjs-db" +APP_POSTGRES_PORT="5432" +APP_POSTGRES_PASSWORD="scrambled_pass" +APP_POSTGRES_DATABASE="nextjs" + +# `openssl rand -base64 32` +APP_AUTH_SECRET= +APP_AUTH_URL=http://localhost:3000/api/auth +APP_STRAPI_URL=http://cms:1337 +APP_STRAPI_KEY= +APP_SMTP_SERVER_USERNAME=scrambled_user +APP_SMTP_SERVER_PASSWORD=scrambled_pass +APP_SMTP_SERVER_HOST=localhost +APP_SMTP_SERVER_PORT=4014 +APP_SMTP_SERVER_SECURE=false +APP_SITE_MAIL_RECIEVER=scrambled_email@example.com + +CMS_DATABASE_CLIENT=mysql +CMS_DATABASE_HOST=localhost +CMS_DATABASE_PORT=4011 +CMS_DATABASE_NAME=strapi +CMS_DATABASE_USERNAME=scrambled_user +CMS_DATABASE_PASSWORD=scrambled_pass +CMS_HOST=0.0.0.0 +CMS_PORT=1337 +CMS_APP_KEYS="scrambled_key1,scrambled_key2" +CMS_API_TOKEN_SALT=scrambled_salt +CMS_ADMIN_JWT_SECRET=scrambled_jwt_secret +CMS_TRANSFER_TOKEN_SALT=scrambled_salt +CMS_JWT_SECRET=scrambled_jwt_secret diff --git a/environment/prod/docker-compose/yogastic/docker-compose.yaml b/environment/prod/docker-compose/yogastic/docker-compose.yaml new file mode 100644 index 0000000..251c9c6 --- /dev/null +++ b/environment/prod/docker-compose/yogastic/docker-compose.yaml @@ -0,0 +1,67 @@ +services: + + strapi-db: + image: mariadb:11.6.2 + environment: + MARIADB_ROOT_PASSWORD: strapi + MARIADB_DATABASE: strapi + MARIADB_USER: strapi + MARIADB_PASSWORD: strapi + volumes: + - strapi-db:/var/lib/mysql + + nextjs-db: + image: postgres:17 + environment: + POSTGRES_PASSWORD: ${POSTGRES_PASSWORD} + POSTGRES_DB: ${POSTGRES_DATABASE} + POSTGRES_USER: ${POSTGRES_USER} + volumes: + - next-db:/var/lib/postgresql/data + + app: + image: docker.rschneider.hu/infra/yoga-app:202502252004.fad4103 + platform: linux/amd64 + ports: + - "4025:3000" + environment: + POSTGRES_URL: ${APP_POSTGRES_URL} + POSTGRES_URL_NON_POOLING: ${APP_POSTGRES_URL_NON_POOLING} + POSTGRES_USER: ${APP_POSTGRES_USER} + POSTGRES_HOST: ${APP_POSTGRES_HOST} + POSTGRES_PORT: ${APP_POSTGRES_PORT} + POSTGRES_PASSWORD: ${APP_POSTGRES_PASSWORD} + POSTGRES_DATABASE: ${APP_POSTGRES_DATABASE} + AUTH_SECRET: ${APP_AUTH_SECRET} + AUTH_URL: ${APP_AUTH_URL} + STRAPI_URL: ${APP_STRAPI_URL} + STRAPI_KEY: ${APP_STRAPI_KEY} + SMTP_SERVER_USERNAME: ${APP_SMTP_SERVER_USERNAME} + SMTP_SERVER_PASSWORD: ${APP_SMTP_SERVER_PASSWORD} + SMTP_SERVER_HOST: ${APP_SMTP_SERVER_HOST} + SMTP_SERVER_PORT: ${APP_SMTP_SERVER_PORT} + SMTP_SERVER_SECURE: ${APP_SMTP_SERVER_SECURE} + SITE_MAIL_RECIEVER: ${APP_SITE_MAIL_RECIEVER} + + cms: + image: docker.rschneider.hu/infra/yoga-cms:202502251913.4385f28 + ports: + - "4026:1337" + environment: + DATABASE_CLIENT: mysql + DATABASE_HOST: strapi-db + DATABASE_PORT: 3306 + DATABASE_NAME: strapi + DATABASE_USERNAME: strapi + DATABASE_PASSWORD: strapi + HOST: 0.0.0.0 + PORT: 1337 + APP_KEYS: "yoga1,yoga2" + API_TOKEN_SALT: diana + ADMIN_JWT_SECRET: 6d49a635a298dfff1457002ab1ea26d51f94f6c67c03f7299e8adc19aafe02a2aadb2258aa1be90b836898e0b1ce6970d7584dda32129fb0e4aa09db9ba2076909a44491bbf1c0e1840b8a78843388851ed80407a71fabc3674faca3b4c4fd147c86347a390e86051b1530cac454063bb351632c75852110a5dc198f96a4f4b709d34d240d3e82206f29756a703d7b873b387d7a20e87df71f31a2f934d2a32a3795898c8d43d7f088ebfc8c430b81f4112b811c2aac6be8af551afd8cc29c4875037fd5c7fdacfcd5740b89bab0e1ada51b23f99fb0d181a8ad4758447331edd339ce988e02a6eae170ff57b6650f91dfb2988f7d91be6ea330c0e8fd647799 + TRANSFER_TOKEN_SALT: 2209851913 + JWT_SECRET: fc2be7f56eefe9790bd80a3713974620f42a66313f71bb581ac15328b886ccd42c51eb54f6e897b5d3f6d12bec069dfd116eb63f09d709346ab8c5c328ff42cef1f1cd7e39448186c9c96af3d838e25a3e82dfe72578d775f322bfb3b280ee7db103ae768dcebfc3fa0a9fffeb4d4773cd70e818f6cd8e98f360faa926a8388d18a1c9abcb616600c2c450820a29328df5592dea4a76edf3e9f8147cf92fc88a8a9e3f3698e038c9f7ccbfd7fc04fada3583f2ad8d1ff087a6f23cd33cfc8edf82e6489f1470da5dc52bc1ab1ac025bc9f77a6098f5efecff451498e2d936d005284e149971df15ed81d92ddddd0f71b5ffa3584d853aa3cecc37652430e7d27 + +volumes: + next-db: {} + strapi-db: {} diff --git a/environment/prod/jenkins/Jenkinsfile b/environment/prod/jenkins/Jenkinsfile new file mode 100644 index 0000000..36e4c55 --- /dev/null +++ b/environment/prod/jenkins/Jenkinsfile @@ -0,0 +1,27 @@ +pipeline { + agent any + + stages { + stage('Git pull && docker compose restart') { + steps { + sshPublisher(publishers: [sshPublisherDesc(configName: 'rschneider', transfers: [sshTransfer(cleanRemote: false, excludes: '', execCommand: ''' + cd /home/rschneider/projects/yogastic + git pull + cd /home/rschneider/projects/yogastic/environment/prod/docker-compose/yogastic + docker compose down + docker compose up -d + ''', execTimeout: 120000, + flatten: false, + makeEmptyDirs: false, + noDefaultExcludes: false, + patternSeparator: '[, ]+', + remoteDirectory: '', + remoteDirectorySDF: false, + removePrefix: '', sourceFiles: '')], + usePromotionTimestamp: false, + useWorkspaceInPromotion: false, + verbose: true)]) + } + } + } +}