Server for NITK Connect - A platform to encourage informal connections and knowledge sharing.
$ git clone https://github.com/WebClub-NITK/Connect-Server
$ cd Connect-Server
$ npm install
Create a .env file in the root with following contents.
PORT=(3001)
MONGODB_URI=(mongo db instance url)
DB_HOST=(host url where mysql is deployed, 'localhost' if running locally)
DB_USER='<mysql_username>'
DB_PASSWORD'<mysql_userpassword'>
DATABASE='Connect'
DB_PORT=(mysql port, default 3306)
ACCESS_TOKEN_SECRET='<64 byte random string>'
MAIL_ID="<Your mailid>"
MAIL_PASSWORD="<Password>"
- You will have to reduce the security bounds of the mailid you choose
Install MySQL then enter the MYSQL console by sudo mysql
Run the following commands
CREATE USER '<your_username>'@'localhost' IDENTIFIED BY '<password_of_the_user>';
GRANT ALL PRIVILEGES ON * . * TO '<your_username>'@'localhost';
ALTER USER '<your_username>'@'localhost' IDENTIFIED WITH mysql_native_password BY '<password_of_the_user>';
FLUSH PRIVILEGES;
Enter MySQL console of your user by mysql -u <username> -p
and create a database named Connect
Create the Connect database -
CREATE DATABASE Connect;
- Currently Sequelise ORM is being used to run SQL queries.
- All tables need to be mapped as models under the model folder & imported in the
sequelize.js
file, as mentioned below.
const User = UserModel(sequelize, Sequelize.DataTypes);
// You would need to pass the above two parameters, which are defined in the sequelize.js file, to your model function.
- To resynchronise your database, change the
sequelize.sync()
call tosequelize.sync({force: true})
. Make sure to remove theforce: true
once you have resynchronised your database.
To start the server: npm start
To run in development environment: npm run dev
- Install Heroku cli and login
- Run
heroku create
- Push the branch you want to deploy to heroku
git push heroku <branch>:main
- Set all the environment variables from the configure section above, either in the Dockerfile (not recommended) or in the docker run command.
- Build the image.
- You have to create volume or bind mounts for every folder that needs to persisted across restarts (blog_images and profiles folder as of now)
- Map port, volume mount, env variables, and then run the container.
docker run -p 3000:8080 -v volume_mount:/app/blog_images <docker_image>
docker run -p 3000:8080 --mount type=bind,source="$(pwd)"/blog_images,target=/app/blog_images <docker_image>
├── public
│ └── # static files
├── requests
│ └── *.rest # define api requests here
├── src
│ ├── controllers
│ │ └── *.js # define routes here
│ ├── database
│ │ └── *.js # database setup
│ ├── models
│ │ └── *.js # define db models here
│ ├── services
│ │ └── **/*.js # business logic goes here
│ ├── utils
│ │ └── **/*.js # helper functions/middlewares
│ ├── app.js # express app setup
│ └── index.js # server setup
├── .env
├── .gitignore
└── README.md