From c9f9648290a4f0ad3233358fa5ea8689643567dd Mon Sep 17 00:00:00 2001 From: nathanaelrea Date: Fri, 24 Jan 2025 19:11:41 -0500 Subject: [PATCH 1/4] chore(cli): move start-database to /db subdir for easier copy in next commit, or more files in the future --- cli/src/installers/dbContainer.ts | 26 ++++++++++++------- .../mysql/start-database.sh} | 0 .../postgres/start-database.sh} | 0 3 files changed, 16 insertions(+), 10 deletions(-) rename cli/template/extras/{start-database/mysql.sh => docker/mysql/start-database.sh} (100%) rename cli/template/extras/{start-database/postgres.sh => docker/postgres/start-database.sh} (100%) diff --git a/cli/src/installers/dbContainer.ts b/cli/src/installers/dbContainer.ts index 0a13f198df..8feb321e68 100644 --- a/cli/src/installers/dbContainer.ts +++ b/cli/src/installers/dbContainer.ts @@ -17,12 +17,6 @@ export const dbContainerInstaller: Installer = ({ databaseProvider, projectName, }) => { - const scriptSrc = path.join( - PKG_ROOT, - `template/extras/start-database/${databaseProvider}.sh` - ); - const scriptText = fs.readFileSync(scriptSrc, "utf-8"); - const scriptDest = path.join(projectDir, "start-database.sh"); // for configuration with postgresql and mysql when project is created with '.' project name const [projectNameParsed] = projectName === "." ? parseNameAndPath(projectDir) : [projectName]; @@ -30,9 +24,21 @@ export const dbContainerInstaller: Installer = ({ // Sanitize the project name for Docker container usage const sanitizedProjectName = sanitizeName(projectNameParsed); - fs.writeFileSync( - scriptDest, - scriptText.replaceAll("project1", sanitizedProjectName) + const dockerFolder = path.join( + PKG_ROOT, + "template/extras/docker/", + databaseProvider ); - fs.chmodSync(scriptDest, "755"); + + const files = fs.readdirSync(dockerFolder); + for (const file of files) { + const scriptSrc = path.join(dockerFolder, file); + const scriptDest = path.join(projectDir, file); + const scriptText = fs.readFileSync(scriptSrc, "utf-8"); + fs.writeFileSync( + scriptDest, + scriptText.replaceAll("project1", sanitizedProjectName) + ); + fs.chmodSync(scriptDest, "755"); + } }; diff --git a/cli/template/extras/start-database/mysql.sh b/cli/template/extras/docker/mysql/start-database.sh similarity index 100% rename from cli/template/extras/start-database/mysql.sh rename to cli/template/extras/docker/mysql/start-database.sh diff --git a/cli/template/extras/start-database/postgres.sh b/cli/template/extras/docker/postgres/start-database.sh similarity index 100% rename from cli/template/extras/start-database/postgres.sh rename to cli/template/extras/docker/postgres/start-database.sh From 1a05a63189c60221e9df0c6c9065dac743795f9a Mon Sep 17 00:00:00 2001 From: nathanaelrea Date: Fri, 24 Jan 2025 19:13:15 -0500 Subject: [PATCH 2/4] feat(cli): add docker compose files use `docker compose up -d` in start-database.sh --- .../extras/docker/mysql/docker-compose.yml | 10 ++++++++++ cli/template/extras/docker/mysql/start-database.sh | 13 +++++++------ .../extras/docker/postgres/docker-compose.yml | 11 +++++++++++ .../extras/docker/postgres/start-database.sh | 14 +++++++------- 4 files changed, 35 insertions(+), 13 deletions(-) create mode 100644 cli/template/extras/docker/mysql/docker-compose.yml create mode 100644 cli/template/extras/docker/postgres/docker-compose.yml diff --git a/cli/template/extras/docker/mysql/docker-compose.yml b/cli/template/extras/docker/mysql/docker-compose.yml new file mode 100644 index 0000000000..599bc046e2 --- /dev/null +++ b/cli/template/extras/docker/mysql/docker-compose.yml @@ -0,0 +1,10 @@ +services: + db: + image: mysql:latest + container_name: ${DB_CONTAINER_NAME?} + restart: unless-stopped + ports: + - "${DB_PORT?}:3306" + environment: + MYSQL_ROOT_PASSWORD: ${DB_PASSWORD?} + MYSQL_DATABASE: ${DB_NAME?} \ No newline at end of file diff --git a/cli/template/extras/docker/mysql/start-database.sh b/cli/template/extras/docker/mysql/start-database.sh index 65789a3c7b..fe692e0b54 100755 --- a/cli/template/extras/docker/mysql/start-database.sh +++ b/cli/template/extras/docker/mysql/start-database.sh @@ -50,9 +50,10 @@ if [ "$DB_PASSWORD" == "password" ]; then sed -i -e "s#:password@#:$DB_PASSWORD@#" .env fi -docker run -d \ - --name $DB_CONTAINER_NAME \ - -e MYSQL_ROOT_PASSWORD="$DB_PASSWORD" \ - -e MYSQL_DATABASE="$DB_NAME" \ - -p "$DB_PORT":3306 \ - docker.io/mysql && echo "Database container '$DB_CONTAINER_NAME' was successfully created" +export DB_PASSWORD +export DB_PORT +export DB_NAME +export DB_CONTAINER_NAME + +docker compose up -d \ + && echo "Database container '$DB_CONTAINER_NAME' was successfully created" diff --git a/cli/template/extras/docker/postgres/docker-compose.yml b/cli/template/extras/docker/postgres/docker-compose.yml new file mode 100644 index 0000000000..fa1ee9bb43 --- /dev/null +++ b/cli/template/extras/docker/postgres/docker-compose.yml @@ -0,0 +1,11 @@ +services: + db: + image: postgres:latest + container_name: ${DB_CONTAINER_NAME?} + restart: unless-stopped + ports: + - "${DB_PORT?}:5432" + environment: + POSTGRES_USER: postgres + POSTGRES_PASSWORD: ${DB_PASSWORD?} + POSTGRES_DB: ${DB_NAME?} \ No newline at end of file diff --git a/cli/template/extras/docker/postgres/start-database.sh b/cli/template/extras/docker/postgres/start-database.sh index b162abdfe3..350f325163 100755 --- a/cli/template/extras/docker/postgres/start-database.sh +++ b/cli/template/extras/docker/postgres/start-database.sh @@ -51,10 +51,10 @@ if [ "$DB_PASSWORD" = "password" ]; then sed -i -e "s#:password@#:$DB_PASSWORD@#" .env fi -docker run -d \ - --name $DB_CONTAINER_NAME \ - -e POSTGRES_USER="postgres" \ - -e POSTGRES_PASSWORD="$DB_PASSWORD" \ - -e POSTGRES_DB="$DB_NAME" \ - -p "$DB_PORT":5432 \ - docker.io/postgres && echo "Database container '$DB_CONTAINER_NAME' was successfully created" +export DB_PASSWORD +export DB_PORT +export DB_NAME +export DB_CONTAINER_NAME + +docker compose up -d \ + && echo "Database container '$DB_CONTAINER_NAME' was successfully created" From 416ba657048107a57b83dc50fe963cccccd7f8f1 Mon Sep 17 00:00:00 2001 From: nathanaelrea Date: Fri, 24 Jan 2025 19:42:17 -0500 Subject: [PATCH 3/4] feat(www): add docs for docker-compose.yml file --- www/src/components/docs/folderStructureDiagramApp.astro | 1 + www/src/components/docs/folderStructureDiagramPages.astro | 1 + www/src/pages/en/folder-structure-app.mdx | 7 +++++++ www/src/pages/en/folder-structure-pages.mdx | 7 +++++++ 4 files changed, 16 insertions(+) diff --git a/www/src/components/docs/folderStructureDiagramApp.astro b/www/src/components/docs/folderStructureDiagramApp.astro index 68e9690737..6c500f2ec4 100644 --- a/www/src/components/docs/folderStructureDiagramApp.astro +++ b/www/src/components/docs/folderStructureDiagramApp.astro @@ -45,6 +45,7 @@ "prettier.config.js": ["tailwind"], "README.md": [], "start-database.sh (mysql or postgres only)": ["drizzle"], + "docker-compose.yml (mysql or postgres only)": ["drizzle"], "tailwind.config.ts": ["tailwind"], "tsconfig.json": [], }; diff --git a/www/src/components/docs/folderStructureDiagramPages.astro b/www/src/components/docs/folderStructureDiagramPages.astro index 8756fb6f4c..d4573dfa20 100644 --- a/www/src/components/docs/folderStructureDiagramPages.astro +++ b/www/src/components/docs/folderStructureDiagramPages.astro @@ -42,6 +42,7 @@ "prettier.config.js": ["tailwind"], "README.md": [], "start-database.sh (mysql or postgres only)": ["drizzle"], + "docker-compose.yml (mysql or postgres only)": ["drizzle"], "tailwind.config.ts": ["tailwind"], "tsconfig.json": [], }; diff --git a/www/src/pages/en/folder-structure-app.mdx b/www/src/pages/en/folder-structure-app.mdx index e0f3d77b85..b15f56fdd1 100644 --- a/www/src/pages/en/folder-structure-app.mdx +++ b/www/src/pages/en/folder-structure-app.mdx @@ -244,6 +244,13 @@ The `prettier.config.mjs` file is used to configure Prettier to include the pret The `start-database.sh` file is used to start the database. Please see the comments inside the file for information on how to start the database with your operating system. + +
+ +### `docker-compose.yml (mysql or postgres only)` + +The `docker-compose.yml` file is run after `start-database.sh` loads the necessary environment variables. Please see the contents inside for the environment variables that are required. If they are set you can directly run `docker compose up -d`. +
diff --git a/www/src/pages/en/folder-structure-pages.mdx b/www/src/pages/en/folder-structure-pages.mdx index a9c49aed4d..ee1254f2e7 100644 --- a/www/src/pages/en/folder-structure-pages.mdx +++ b/www/src/pages/en/folder-structure-pages.mdx @@ -237,6 +237,13 @@ The `prettier.config.mjs` file is used to configure Prettier to include the pret The `start-database.sh` file is used to start the database. Please see the comments inside the file for information on how to start the database with your operating system. +
+
+ +### `docker-compose.yml (mysql or postgres only)` + +The `docker-compose.yml` file is run after `start-database.sh` loads the necessary environment variables. Please see the contents inside for the environment variables that are required. If they are set you can directly run `docker compose up -d`. +
From 8d2ce67f387d9d1be081a7499423b845fec7b215 Mon Sep 17 00:00:00 2001 From: nathanaelrea Date: Fri, 24 Jan 2025 20:00:56 -0500 Subject: [PATCH 4/4] chore: add changeset --- .changeset/fair-ducks-grow.md | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 .changeset/fair-ducks-grow.md diff --git a/.changeset/fair-ducks-grow.md b/.changeset/fair-ducks-grow.md new file mode 100644 index 0000000000..addacefcde --- /dev/null +++ b/.changeset/fair-ducks-grow.md @@ -0,0 +1,5 @@ +--- +"create-t3-app": patch +--- + +create docker-compose.yml for postgres/mysql database options