Skip to content

Documentation

Installation Guide

Introduction

This guide will walk you through the initial setup, server requirements, and installation of the project on your web server. Additionally, it covers configuring Nginx as a reverse proxy and virtual host to handle API requests from your Node.js backend to serve your React frontend.

Server Requirements

Before you start, make sure your server meets the following requirements:

Node.js: Version 18.0.0 or higher
PostgreSQL: Version 13 or higher
NPM: Version 7.0.0 or higher
Nginx: Version 1.22 or higher

Setting Up

Make sure you’ve downloaded the project files from here and unzip the package files. After extracting, you’ll find fetchiyo.zip and database folder which you will need to upload to your web server.

Uploading the Project to your Web Server

Use a file transfer client like FileZilla or WinSCP to upload the fetchiyo.zip and database folder to your web server, then unzip the fetchiyo.zip file. You’ll find fetchiyo folder. You need to move this folder to the document root directory of your domain. Keep database/database.sql file at current location as we’ll use this when we import during database setup.

Rename the Project Folder

Once you have moved the extracted project folder to your web document root, you may choose to rename the folder to match your domain or project name by running the following commands:

mv fetchiyo myProject
cd myProject

Next, initialize the project

npm init -y

Install Dependencies

Install both frontend and backend dependencies:

npm install
npm install express body-parser cookie-parser cors dotenv pg

Configure Environment Variables

Find .env file in the src directory of your project. Update the following configuration and replace the placeholder values with your actual values:

SITE_NAME=myProject
DB_USER=DB_USER
DB_PASSWORD=DB_PASSWORD
DB_HOST=localhost
DB_PORT=5432
DB_NAME=DB_NAME
PORT=4002
UPLOAD_PATH=uploads/
INVOICE_PATH=invoices/
DEMO_HOST=https://demo.fetchiyo.com
HOST=https://example.com
JWT_SECRET=your_jwt_secret_here
PAYPAL_API_BASE_URL=PayPal API Base URL
PAYPAL_WEBHOOK_ID=PayPal Webhook ID
PAYSTACK_API_BASE_URL=Paystack API Base URL
FLUTTERWAVE_API_BASE_URL=Flutterwave API Base URL
    • SITE_NAME=myProject: Replace myProject with the name of your site.
    • DB_USER=DB_USER: Replace DB_USER with your PostgreSQL database username.
    • DB_PASSWORD=DB_PASSWORD: Replace DB_PASSWORD with your PostgreSQL database password.
    • DB_HOST=localhost: If your PostgreSQL server is on a different host, replace localhost with the appropriate host address.
    • DB_PORT=5432: Replace 5432 if your PostgreSQL server is using a different port.
    • DB_NAME=DB_NAME: Replace DB_NAME with your PostgreSQL database name.
    • PORT=4002: Set the port number for your Node.js server.
    • UPLOAD_PATH=uploads/: Set the path where uploaded files will be stored.
    • INVOICE_PATH=invoices/: Set the path where invoice files will be stored.
    • DEMO_HOST=https://demo.fetchiyo.com: Keep it same as it will be required for demo data.
    • HOST=https://example.com: Replace this field with your domain or host URL.
    • JWT_SECRET=your_jwt_secret_here: Replace your_jwt_secret_here with the JWT secret you’ll generate below.
    • PAYPAL_API_BASE_URL=Replace with PayPal API Base URL
    • PAYPAL_WEBHOOK_ID=Replace with your actual PayPal Webhook ID
    • PAYSTACK_API_BASE_URL=Replace with Paystack API Base URL
    • FLUTTERWAVE_API_BASE_URL=Replace with Flutterwave API Base URL

This .env file securely stores environment variables like database credentials, server port, file paths, and API keys.

Generating JWT Secret

To generate a JWT secret, follow these steps:

Open Terminal

Access your server’s command line interface.

Generate JWT Secret

openssl rand -hex 64

This command generates a 64-byte hexadecimal string. The output will look something like this:

1e9b5c2bce9d3d4e5f9e2fca3fbd5a9bca1e7c3d78e8c2d5e4f1b0a7c4e5b9c3e

Add to .env File

Open your .env file located in the src directory of your project.

Add the JWT secret value

JWT_SECRET=1e9b5c2bce9d3d4e5f9e2fca3fbd5a9bca1e7c3d78e8c2d5e4f1b0a7c4e5b9c3e

Replace the example string with your generated secret.

Importing PostgreSQL Database

To import the project’s PostgreSQL database into your own PostgreSQL database, follow these steps:

Step 1: Locate the database.sql file inside the database folder under the project folder.

Step 2. Use the psql command to import the database.sql file into your database:

psql -U your_username -d your_database_name -f path/to/database.sql
  • Replace your_username with your PostgreSQL username.
  • Replace your_database_name with the name of the database you created.
  • Replace path/to/database.sql with the actual path to your database.sql file.

Step 3: Verify the Import

Connect to your database using psql:

psql -U your_username -d your_database_name

Check if the tables and data have been imported correctly:

\dt

This command lists all tables in the database.

Configure Nginx

Nginx is required to set up as a reverse proxy to handle API requests from your Node.js server. Follow these steps to configure Nginx:

Install Nginx

sudo yum install nginx -y

Create and Edit Nginx Configuration

sudo nano /etc/nginx/conf.d/example.com.vhost

Add the following configuration:

server {
server_name example.com;

location / {
proxy_set_header X-Forwarded-For $remote_addr;
proxy_set_header Host $http_host;
proxy_pass http://localhost:5173;
proxy_http_version 1.1;
proxy_set_header Connection "";
keepalive_timeout 75s;
keepalive_requests 100;
}

location /api/ {
proxy_pass http://localhost:4002;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_http_version 1.1;
proxy_set_header Connection "";
keepalive_timeout 75s;
keepalive_requests 100;
}

location /admin/api/ {
proxy_pass http://localhost:4002;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_http_version 1.1;
proxy_set_header Connection "";
keepalive_timeout 75s;
keepalive_requests 100;
}

location /uploads/ {
alias /uploads/;
}

location /assets/ {
alias /assets/;
}

listen 443 ssl;
ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;
include /etc/letsencrypt/options-ssl-nginx.conf;
ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem;
}

server {
if ($host = example.com) {
return 301 https://$host$request_uri;
}

listen 80;
server_name example.com;
return 404;
}

Change values as per your server and project settings wherever required.

Restart Nginx to apply the configuration:

sudo systemctl restart nginx

Running the Node Server

Navigate to the directory containing your server.js file:

cd /path/to/your/myProject/src

Run the Node.js server with nohup:

nohup node server.js > server.log 2>&1 &

Running the Frontend App

To run the frontend app, follow these steps:

Navigate to your project directory:

cd /path/to/your/myProject
nohup npm run dev > dev.log 2>&1 &

If you encounter any issues or need further assistance, please contact support at support@fetchiyo.com.