Introduction

  • Thank you for choosing the Growly app. We are pleased to have you with us. Enclosed is the documentation to help you set up and launch the app easily. Please read it carefully, as it contains important information. If you need any assistance or have questions, our support team is just a message away.

Extract Project Zip

  • All setup is performed using Terminal (SSH).
  • Connect to your AWS server using:
ssh ubuntu@YOUR_SERVER_IP
  • Upload the backend zip file using WinSCP or SCP.
  • Navigate to your project directory and extract:
cd /home/ubuntu/growly unzip backend.zip -d backend

Create Instance In AWS

  • Launch an AWS EC2 Instance.
  • Instance Type: t3a.medium
  • Operating System: Ubuntu 24.04 LTS
  • Enable ports in Security Group:
    • 22 – SSH
    • 80 – HTTP
    • 443 – HTTPS
  • Attach key pair and launch the instance.
  • Setup Nginx

    • Install Nginx:
    sudo apt install nginx -y
    • Check Nginx version:
    nginx -v nginx/1.18.0 (Ubuntu)
    • Start and enable Nginx:
    sudo systemctl start nginx sudo systemctl enable nginx
  • Setup Node.js And PM2

    • Update Existing Pacakages
    sudo apt update && sudo apt upgrade -y
    • Install Required Dependencies:
    sudo apt install -y curl ca-certificates build-essential
    • Install NVM (Node Version Manager):
    curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.7/install.sh | bash
    • Reload terminal:
    source ~/.bashrc
    • Check NVM version:
    nvm -v
    • Install Node.js version v20.19.4:
    nvm install 20.19.4 nvm use 20.19.4 nvm alias default 20.19.4
    • Verify Node and npm:
    node -v v20.19.4 npm -v 10.8.2
    • Move Node and NPM to /usr/bin:
    sudo ln -s ~/.nvm/versions/node/v20.19.4/bin/node /usr/bin/node sudo ln -s ~/.nvm/versions/node/v20.19.4/bin/npm /usr/bin/npm
    • Install PM2 globally:
    npm install -g pm2
  • Setup MongoDB (Cloud – MongoDB Atlas)

    • Create a MongoDB Cloud account:

    Go to https://www.mongodb.com/cloud/atlas and sign up or log in.

    • Create a new cluster:
    • Select Shared Cluster (Free / M0) or paid plan as required.
    • Choose your preferred Cloud Provider (AWS / GCP / Azure).
    • Select the nearest Region for better performance.
    • Click Create Cluster.
    • Create a database user:
    • Username: growly_user
    • Password: growly_user_pass
    • Role: Read and Write to any database
    • Whitelist IP Address:
    • Add your server IP address.
    • For development/testing, you can allow 0.0.0.0/0 (not recommended for production).
    • Get MongoDB connection string:
    • Click ConnectConnect your application.
    • Select Node.js driver and copy the connection URI.
    mongodb+srv://growly_user:[email protected]/growly?retryWrites=true&w=majority
    • Update backend backend\config\database.js file:
    dbURI=mongodb+srv://growly_user:[email protected]/growly
  • Setup Project In Server

    • Navigate to project directory:
    cd /home/ubuntu/growly/backend
    • Setup and configure the .env file:
    mv .env.example .env
    • Edit the .env file and update database, server, and app settings.
    • Install project dependencies:
    npm install
    • Notification Setup (Firebase)
    • Go to Firebase Console → Project Settings → Service Accounts.
    • Click Generate new private key and download the JSON file.
    • Upload the downloaded file to the backend config folder:
    /home/ubuntu/growly/backend/config
    • Rename the downloaded file to firebase.json:
    mv firebase-adminsdk-xxxxx.json firebase.json
    • Start backend using PM2:
    pm2 start index.js --name growly pm2 save pm2 startup
    • Restart backend after Firebase setup:
    pm2 restart growly

    Env File Explanation

    • PORT: The port on which your Node.js server will run (e.g., 3000, 4000, 5000).
    • TOKEN_KEY: Secret key for JWT-based authentication and secure API token generation.
    • DATABASE_HOST: Hostname or IP address of your SQL server (e.g., localhost or a remote server).
    • DATABASE_NAME: Name of the SQL database to which your application connects.
    • DATABASE_USERNAME: Username required to authenticate and access your SQL database.
    • DATABASE_PASSWORD: Password for the database user.
    • DATABASE_PORT: The port number used by your SQL server (commonly 3306 for MySQL/MariaDB).
    • APP_URL: Backend base URL that will be used by frontend/mobile apps to interact with APIs.
    • SERVER: Defines the running environment of the application, such as development or production.
    • REVENUE_CAT_PLAY_STORE_V1_API_KEY: RevenueCat API key for Google Play Store integration (Android in-app purchases).
    • REVENUE_CAT_APP_STORE_V1_API_KEY: RevenueCat API key for Apple App Store integration (iOS in-app purchases).
    • FIREBASE_WEB_APP_KEY: Firebase Web API key, used for authentication or handling dynamic links in your application.
    • STORE_PREFIX: A prefix used to differentiate store-related data, typically helpful for multi-store setups.
    • STORE_PREFIX_NAME: The readable name for your store prefix, used for identification in app logic.
    • OLA_MAPS_API_KEY: API key for Ola Maps (or any mapping service) used for location, routing, and map-based operations.
    • APP_PACKAGE_NAME: Your Android application package name required for certain store validations and integrations.
    Environment File Example

    Configure Nginx Reverse Proxy (Without SSL)

    • All steps are performed using Terminal (SSH).
    • Create a new Nginx configuration file for your domain:
    sudo nano /etc/nginx/sites-available/growly.yourdworld.com
    • Paste the following configuration (WITHOUT SSL):
    
                server {
                listen 80;
                server_name growly.yourdworld.com;
    
                access_log /var/log/nginx/growly.access.log;
                error_log /var/log/nginx/growly.error.log;
    
                # Main application proxy
                location / {
                    proxy_pass http://127.0.0.1:7722;
                    proxy_http_version 1.1;
    
                    proxy_set_header Upgrade $http_upgrade;
                    proxy_set_header Connection "Upgrade";
                    proxy_set_header Host $host;
                    proxy_set_header X-Real-IP $remote_addr;
                    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    
                    access_log off;
                }
    
            }
    
              
    • Save and close the file:
    • Press CTRL + O → press Enter (to save)
    • Press CTRL + X (to exit nano)
    • Enable the site:
    sudo ln -s /etc/nginx/sites-available/growly.yourdworld.com /etc/nginx/sites-enabled/
    • Test Nginx configuration:
    sudo nginx -t
    • Expected output:
    
              nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
              nginx: configuration file /etc/nginx/nginx.conf test is successful
              
    • If you see the above message, your configuration is valid.
    • Restart Nginx:
    sudo systemctl restart nginx
    • Verify your application is accessible at:
    http://growly.yourdworld.com
  • SSL Certificate Setup (Let’s Encrypt + Certbot)

    Step 1: Install Certbot

    • Update package list:
    sudo apt update
    • Install Certbot with Nginx plugin:
    sudo apt install certbot python3-certbot-nginx -y

    Step 2: Generate SSL Certificate (Let’s Encrypt)

    • Run the following command to generate SSL for your domain:
    sudo certbot --nginx -d growly.yourdworld.com
    • During the process:
      • Enter your email address for renewal notifications
      • Agree to the Let’s Encrypt terms
      • Select the option to redirect HTTP to HTTPS

    Step 3: Verify Auto-Renewal

    • Test automatic renewal:
    sudo certbot renew --dry-run

    Final Access URL

    https://growly.yourdworld.com
  • Check Video For More Details
  • Admin Panel Setup

    • Open Admin Code in Vs studio code
    • Rename .env.example to .env
    • Edit env file in admin
    • update backend url to https://growly.yourdworld.com
    • Server URL Setup
    • install Node modules
    npm i
    • Create production build:
    npm run build
    • Upload build files into backend admin directory.
    • Upload Build to Server
    • Access admin panel via configured domain.
  • RevenueCat Configuration

    1. Navigate to https://www.revenuecat.com/.
    2. Log in using your RevenueCat credentials.
    3. Next, you need to add the App Store Key and Play Store Key to code. You can get these keys by going to the RevenueCat dashboard > API Keys > Secret Api Keys. Copy and paste these keys into the respective fields of code.
    4. Copied key paste to config > .env.

    Category Plugin

    The Category Plugin allows administrators to create, manage, and organize main categories and their related sub-categories. This structure is used across the application to classify services, listings, or content in a clean and scalable way.

    Category Plugin Settings

    Main Features

    Use Case

    This plugin is useful for applications that require structured classification of services or products, enabling better navigation, filtering, and user experience on the frontend.

    Reward Plugin

    The Reward Plugin allows administrators to manage user incentives by enabling rewards and offering free benefits to newly registered users. This helps improve user engagement and onboarding experience.

    Reward Plugin Settings

    Settings Overview

    Purpose

    This plugin is commonly used to encourage new user signups, retain users, and promote engagement by offering initial free rewards or benefits.

    Site Pricing

    The Site Pricing section allows administrators to configure pricing plans for purchasing offers. You can define multiple packages with different offer counts, prices, and descriptions, and mark a plan as most popular.

    Site Pricing Configuration

    Pricing Plan Fields

    Actions

    General Settings

    The General Settings section controls core application behavior, onboarding rules, payment availability, support options, and system-level toggles.

    General Settings Configuration

    Available Settings

    PhonePe Payment Gateway

    The PhonePe Payment Gateway section allows administrators to configure and manage PhonePe payment integration for the application. It supports enabling or disabling the gateway, iOS-specific settings, and switching between live and test modes.

    PhonePe Payment Gateway Settings

    Configuration Options

    Notes

    Razorpay Payment Gateway

    The Razorpay Payment Gateway section allows administrators to configure and manage Razorpay integration for secure online payments. You can enable or disable the plugin, configure iOS support, and set live API credentials.

    Razorpay Payment Gateway Settings

    Configuration Options

    Notes

    Cashfree Payment Gateway

    The Cashfree Payment Gateway section allows administrators to configure and manage Cashfree integration for handling secure online payments. You can enable the plugin for web and iOS platforms, configure API credentials, and switch between live and test modes.

    Cashfree Payment Gateway Settings

    Configuration Options

    Notes

    Folder Structure Settings

    The Folder Structure Settings section allows administrators to control how folders are created and managed within the system. This setting is mainly used to define limits or sizing rules applied when generating new folders.

    Folder Structure Settings

    Configuration Options

    Usage Notes

    SMTP Plugin

    The SMTP Plugin allows you to configure outgoing email services for the application. By setting up SMTP credentials, the system can send emails for notifications, verification, password resets, and other transactional communications.

    SMTP Plugin Settings

    SMTP Settings

    Usage Notes

    Ads Plugin

    The Ads Plugin allows administrators to enable or disable advertisements across the application and configure different ad formats. By adding the correct ad keys, you can control how and where ads are displayed to users.

    Ads Plugin Settings

    Ads Settings

    Usage Notes

    Notification Plugin

    The Notification Plugin allows administrators to send instant or scheduled push notifications to users. Notifications can include a title, message, and optional image to increase engagement.

    Notification Plugin Settings

    Create Notification

    Scheduled Notifications

    Below the notification form, a list of scheduled and previously sent notifications is displayed for easy management.

    Usage Notes

    Store Setting Banner Plugin

    The Store Setting Banner Plugin is used to manage banners that are displayed specifically on store-related screens. These banners can be enabled or disabled individually and are commonly used for store promotions, offers, or important announcements.

    Store Setting Banner Plugin

    Add Store Banner

    Banner List

    The banner list displays all store banners along with their current status.

    Usage Notes

    User Setting Banner Plugin

    The User Setting Banner Plugin allows administrators to manage banners that appear specifically on user-related settings screens. These banners are useful for highlighting announcements, feature updates, offers, or guidance relevant to users.

    User Setting Banner Plugin

    Add User Setting Banner

    Banner List

    This section displays all banners created for user settings along with their current status.

    Best Practices

    User FAQs Plugin

    The User FAQs Plugin allows administrators to manage frequently asked questions and optional help videos that are shown to end users inside the application. This helps reduce support requests by providing clear, self-service guidance.

    User FAQs Plugin

    Video Configuration

    Manage FAQs

    Below the video settings, admins can add and manage multiple FAQ entries that appear in the user application.

    Best Practices

    Store FAQs Plugin

    The Store FAQs Plugin allows administrators to manage FAQs and optional help videos that are specifically shown on the store side of the application. This helps store users understand features, policies, and common questions without contacting support.

    Store FAQs Plugin

    Video Configuration

    Manage Store FAQs

    Below the video settings, administrators can add and manage store-specific FAQs that will be displayed inside the store interface.

    Best Practices

    Storage and Backup Settings

    • The Storage and Backup Settings section allows the administrator to configure where user uploads and media files are stored, such as local storage or cloud storage providers like AWS.
    • To access this section, go to Admin Panel → Plugins → Storage and Backup Settings.
    • Important Note:
      If you change the storage type, you must manually move your existing upload folders from the source storage to the destination storage.
    • Configure the following options:
      1. Storage Type – Select the storage provider to be used for file uploads (Example: AWS, Local, or other supported providers).
      2. AWS EndPoint – Enter the AWS S3 endpoint URL associated with your storage service.
      3. AWS CDN URL – Specify the CDN URL used to serve files faster via a content delivery network.
      4. AWS Region – Enter the AWS region where your S3 bucket is hosted (e.g. us-east-1, ap-south-1).
      5. AWS Access Key – Provide your AWS access key ID with permission to access the bucket.
      6. AWS Secret Key – Enter the secret key associated with the AWS access key. This value should be kept secure.
      7. AWS Bucket Name – Specify the name of the S3 bucket where files will be stored.
    • Use the Test AWS Connection button to verify that the provided credentials and configuration are working correctly before saving the settings.
    • How to Create an AWS S3 Bucket: