# GymFlow Deployment Guide (NAS / Existing Container) This guide explains how to deploy GymFlow to your Ugreen NAS by integrating it into your existing `nodejs-apps` container. ## 1. Preparation (Build) You need to build the application on your local machine before transferring it to the NAS. ### Build Frontend Run the following in the project root: ```bash npm install npm run build ``` This creates a `dist` folder with the compiled frontend. ### Build Backend Run the following in the project root: ```bash cd server npm install npm run build cd .. ``` This creates a `server/dist` folder with the compiled backend. ## 2. Transfer Files Copy the entire `gymflow` folder to your NAS. Destination: `nodejs_data/gymflow` (inside the folder mounted to `/usr/src/app`). Ensure the following files/folders are present on the NAS: - `gymflow/dist/` (Frontend assets) - `gymflow/server/dist/` (Backend code) - `gymflow/server/package.json` - `gymflow/server/prisma/` (Schema for database) - `gymflow/ecosystem.config.cjs` (PM2 config) *Note: You do not need to copy `node_modules`. We will install production dependencies on the NAS to ensure compatibility.* ## 3. Integration Update your `docker-compose.yml` to include GymFlow in the startup command and map the new port. ### Update `command` Add the following to your existing command string (append before the final `pm2 logs`): ```bash ... && cd ../gymflow/server && npm install --omit=dev && DATABASE_URL=file:./prod.db npx prisma db push && cd .. && pm2 start ecosystem.config.cjs && ... ``` *Note: We assume `gymflow` is a sibling of `ag-beats` etc.* **Full Command Example:** ```yaml command: /bin/sh -c "npm install -g pm2 && cd ag-beats && npm install && cd ../ball-shooting && npm install && cd ../gymflow/server && npm install --omit=dev && DATABASE_URL=file:./prod.db npx prisma db push && cd .. && pm2 start ecosystem.config.cjs && cd ../ag-beats && pm2 start ecosystem.config.js && cd ../ball-shooting && pm2 start npm --name ag-ball -- start && pm2 logs --raw" ``` ### Update `ports` Add the GymFlow port (3003 inside container, mapped to your choice, e.g., 3033): ```yaml ports: - "3030:3000" - "3031:3001" - "3032:3002" - "3033:3003" # GymFlow ``` ## 4. Environment Variables GymFlow uses `dotenv` but in this setup PM2 handles the variables via `ecosystem.config.cjs`. - Port: `3003` (Internal) - Database: `server/prod.db` (SQLite) - Node Env: `production` ## 5. Nginx Proxy Manager Point your domain (e.g., `gym.yourdomain.com`) to the NAS IP and the mapped port (`3033`). - Scheme: `http` - Forward Hostname / IP: `[NAS_IP]` - Forward Port: `3033` - Websockets Support: Enable (if needed for future features).