diff --git a/backend/app.js b/backend/app.js
index d2ed579cf0a5af595795b7843d5ea80da7c4a6d8..8431a2a2755b04a3490bfb99307af84e0fe12be3 100644
--- a/backend/app.js
+++ b/backend/app.js
@@ -14,7 +14,6 @@ const Role = db.role;
 // force: true will drop the table if it already exists
 db.sequelize.sync({force: true}).then(() => {
   console.log('Drop and Resync with { force: true }');
-  initial();
 });
 
 var routes = require('./router/router')
@@ -26,26 +25,4 @@ var server = app.listen(process.env.PORT, function () {
     var port = server.address().port
    
     console.log("App listening at http://%s:%s", host, port)
-})
-
-function initial(){
-    Role.create({
-      id: 1,
-      name: 'Master Admin Diskominfo'
-    });
-    
-    Role.create({
-      id: 2,
-      name: 'Admin Diskominfo'
-    });
-    
-    Role.create({
-      id: 3,
-      name: 'Admin Dinas'
-    });
-    
-    Role.create({
-        id: 4,
-        name: 'Member Dinas'
-    })
-}
\ No newline at end of file
+})
\ No newline at end of file
diff --git a/backend/config/config.js b/backend/config/app.config.js
similarity index 100%
rename from backend/config/config.js
rename to backend/config/app.config.js
diff --git a/backend/config/config.json b/backend/config/config.json
new file mode 100644
index 0000000000000000000000000000000000000000..3cb66f7aedff3f70ea3e76fd31bd96e70ccc8e05
--- /dev/null
+++ b/backend/config/config.json
@@ -0,0 +1,23 @@
+{
+  "development": {
+    "username": "postgres",
+    "password": "hue",
+    "database": "jabar_innov_monev_2",
+    "host": "127.0.0.1",
+    "dialect": "postgresql"
+  },
+  "test": {
+    "username": "postgres",
+    "password": "hue",
+    "database": "jabar_innov_monev_2",
+    "host": "127.0.0.1",
+    "dialect": "postgresql"
+  },
+  "production": {
+    "username": "postgres",
+    "password": "hue",
+    "database": "jabar_innov_monev_2",
+    "host": "127.0.0.1",
+    "dialect": "postgresql"
+  }
+}
diff --git a/backend/config/db.config.js b/backend/config/db.config.js
index 407da55c31c9ed6c8f7088aa8cae25a84f8fbbab..ab0d9e984a0ac196b5756be79546b2a410f76a2c 100644
--- a/backend/config/db.config.js
+++ b/backend/config/db.config.js
@@ -17,8 +17,8 @@ const db = {};
 db.Sequelize = Sequelize;
 db.sequelize = sequelize;
 
-db.user = require('../model/user.model.js')(sequelize, Sequelize);
-db.role = require('../model/role.model.js')(sequelize, Sequelize);
+db.user = require('../models/user')(sequelize, Sequelize);
+db.role = require('../models/role')(sequelize, Sequelize);
 
 db.user.belongsTo(db.role, {foreignKey: 'roleId'});
 
diff --git a/backend/controller/authController.js b/backend/controller/authController.js
index 1229722495ae423586b59a3196193d17d2089d93..dfc509fcc88ed66948477447cafa9b5193728c79 100644
--- a/backend/controller/authController.js
+++ b/backend/controller/authController.js
@@ -1,5 +1,5 @@
 const db = require('../config/db.config.js');
-const config = require('../config/config.js');
+const config = require('../config/app.config.js');
 var jwt = require('jsonwebtoken');
 var bcrypt = require('bcryptjs');
 const User = db.user;
diff --git a/backend/controller/testController.js b/backend/controller/testController.js
index b4364164da46e4ee4fe2b6724c3d2623ea72acee..49bf8e9859b4e1b76fb438729973088780a5e282 100644
--- a/backend/controller/testController.js
+++ b/backend/controller/testController.js
@@ -1,5 +1,5 @@
 const db = require('../config/db.config.js');
-const config = require('../config/config.js');
+const config = require('../config/app.config.js');
 const User = db.user;
 const Role = db.role;
 
diff --git a/backend/migrations/20190328063216-create-user.js b/backend/migrations/20190328063216-create-user.js
new file mode 100644
index 0000000000000000000000000000000000000000..84fcf7c5d9b06f610cd6686fbb7c55c9dca43d20
--- /dev/null
+++ b/backend/migrations/20190328063216-create-user.js
@@ -0,0 +1,36 @@
+'use strict';
+module.exports = {
+  up: (queryInterface, Sequelize) => {
+    return queryInterface.createTable('users', {
+      id: {
+        allowNull: false,
+        autoIncrement: true,
+        primaryKey: true,
+        type: Sequelize.INTEGER
+      },
+      nama: {
+        type: Sequelize.STRING
+      },
+      email: {
+        type: Sequelize.STRING
+      },
+      password: {
+        type: Sequelize.STRING
+      },
+      username: {
+        type: Sequelize.STRING
+      },
+      createdAt: {
+        allowNull: false,
+        type: Sequelize.DATE
+      },
+      updatedAt: {
+        allowNull: false,
+        type: Sequelize.DATE
+      }
+    });
+  },
+  down: (queryInterface, Sequelize) => {
+    return queryInterface.dropTable('users');
+  }
+};
\ No newline at end of file
diff --git a/backend/migrations/20190328063341-create-role.js b/backend/migrations/20190328063341-create-role.js
new file mode 100644
index 0000000000000000000000000000000000000000..256d358dce4b9a85605163b38faa6e8e3e7f8410
--- /dev/null
+++ b/backend/migrations/20190328063341-create-role.js
@@ -0,0 +1,27 @@
+'use strict';
+module.exports = {
+  up: (queryInterface, Sequelize) => {
+    return queryInterface.createTable('roles', {
+      id: {
+        allowNull: false,
+        autoIncrement: true,
+        primaryKey: true,
+        type: Sequelize.INTEGER
+      },
+      nama_role: {
+        type: Sequelize.STRING
+      },
+      createdAt: {
+        allowNull: false,
+        type: Sequelize.DATE
+      },
+      updatedAt: {
+        allowNull: false,
+        type: Sequelize.DATE
+      }
+    });
+  },
+  down: (queryInterface, Sequelize) => {
+    return queryInterface.dropTable('roles');
+  }
+};
\ No newline at end of file
diff --git a/backend/migrations/20190328063542-insert-roles.js b/backend/migrations/20190328063542-insert-roles.js
new file mode 100644
index 0000000000000000000000000000000000000000..f6d5d255d1724db05664511ffab0d8e99a0c479a
--- /dev/null
+++ b/backend/migrations/20190328063542-insert-roles.js
@@ -0,0 +1,27 @@
+'use strict';
+
+module.exports = {
+  up: (queryInterface, Sequelize) => {
+    return queryInterface.bulkInsert('roles', [{
+      nama_role: 'Master Admin Diskominfo',
+      createdAt: new Date(),
+      updatedAt: new Date()
+    },{
+      nama_role: 'Admin Diskominfo',
+      createdAt: new Date(),
+      updatedAt: new Date()
+    },{
+      nama_role: 'Admin Dinas',
+      createdAt: new Date(),
+      updatedAt: new Date()
+    },{
+      nama_role: 'Member Dinas',
+      createdAt: new Date(),
+      updatedAt: new Date()
+    }]);
+  },
+
+  down: (queryInterface, Sequelize) => {
+    return queryInterface.bulkDelete('roles', null, {});
+  }
+};
diff --git a/backend/model/role.model.js b/backend/model/role.model.js
deleted file mode 100644
index 0b24eed15494413ad20ba0eb41c4999c08ea2afa..0000000000000000000000000000000000000000
--- a/backend/model/role.model.js
+++ /dev/null
@@ -1,13 +0,0 @@
-module.exports = (sequelize, Sequelize) => {
-    const Role = sequelize.define('roles', {
-        id: {
-            type: Sequelize.INTEGER,
-            primaryKey: true
-        },
-        name: {
-            type: Sequelize.STRING
-        }
-    });
-
-    return Role;
-}
\ No newline at end of file
diff --git a/backend/model/user.model.js b/backend/model/user.model.js
deleted file mode 100644
index b92245a322ef2b8574e41b52ec6d8b194b676cbb..0000000000000000000000000000000000000000
--- a/backend/model/user.model.js
+++ /dev/null
@@ -1,18 +0,0 @@
-module.exports = (sequelize, Sequelize) => {
-    const User = sequelize.define('users', {
-        name: {
-            type: Sequelize.STRING
-        },
-        email: {
-            type: Sequelize.STRING
-        },
-        password: {
-            type: Sequelize.STRING
-        },
-        username: {
-            type: Sequelize.STRING
-        }
-    });
-    
-    return User
-}
\ No newline at end of file
diff --git a/backend/models/index.js b/backend/models/index.js
new file mode 100644
index 0000000000000000000000000000000000000000..d22fdb5e903f2f4949e9758614a1a6aa9c1dfea3
--- /dev/null
+++ b/backend/models/index.js
@@ -0,0 +1,37 @@
+'use strict';
+
+const fs = require('fs');
+const path = require('path');
+const Sequelize = require('sequelize');
+const basename = path.basename(__filename);
+const env = process.env.NODE_ENV || 'development';
+const config = require(__dirname + '/../config/app.config.json')[env];
+const db = {};
+
+let sequelize;
+if (config.use_env_variable) {
+  sequelize = new Sequelize(process.env[config.use_env_variable], config);
+} else {
+  sequelize = new Sequelize(config.database, config.username, config.password, config);
+}
+
+fs
+  .readdirSync(__dirname)
+  .filter(file => {
+    return (file.indexOf('.') !== 0) && (file !== basename) && (file.slice(-3) === '.js');
+  })
+  .forEach(file => {
+    const model = sequelize['import'](path.join(__dirname, file));
+    db[model.name] = model;
+  });
+
+Object.keys(db).forEach(modelName => {
+  if (db[modelName].associate) {
+    db[modelName].associate(db);
+  }
+});
+
+db.sequelize = sequelize;
+db.Sequelize = Sequelize;
+
+module.exports = db;
diff --git a/backend/models/role.js b/backend/models/role.js
new file mode 100644
index 0000000000000000000000000000000000000000..1f676f75cab11be82f5c8c7f7e2fc6d414bf88d5
--- /dev/null
+++ b/backend/models/role.js
@@ -0,0 +1,10 @@
+'use strict';
+module.exports = (sequelize, DataTypes) => {
+  const role = sequelize.define('role', {
+    nama_role: DataTypes.STRING
+  }, {});
+  role.associate = function(models) {
+    // associations can be defined here
+  };
+  return role;
+};
\ No newline at end of file
diff --git a/backend/models/user.js b/backend/models/user.js
new file mode 100644
index 0000000000000000000000000000000000000000..c53354b69de8e75ced46a3179150857b34a756ab
--- /dev/null
+++ b/backend/models/user.js
@@ -0,0 +1,13 @@
+'use strict';
+module.exports = (sequelize, DataTypes) => {
+  const user = sequelize.define('user', {
+    nama: DataTypes.STRING,
+    email: DataTypes.STRING,
+    password: DataTypes.STRING,
+    username: DataTypes.STRING
+  }, {});
+  user.associate = function(models) {
+    models.user.belongsTo(models.Role);
+  };
+  return user;
+};
\ No newline at end of file
diff --git a/backend/router/verifyJwtToken.js b/backend/router/verifyJwtToken.js
index 9ddda869a2c3225da5421065783c05681e599898..1a04e8d994402330db2460d310fdf4207b52ac2c 100644
--- a/backend/router/verifyJwtToken.js
+++ b/backend/router/verifyJwtToken.js
@@ -1,5 +1,5 @@
 const jwt = require('jsonwebtoken');
-const config = require('../config/config.js');
+const config = require('../config/app.config.js');
 const db = require('../config/db.config.js');
 const User = db.user;
 const Role = db.role;
diff --git a/backend/router/verifySignUp.js b/backend/router/verifySignUp.js
index 1a4502713dd19a10ece81f4c6fdc53d308938f1e..957209f79496ebfafca4f85587fc446ad0f69179 100644
--- a/backend/router/verifySignUp.js
+++ b/backend/router/verifySignUp.js
@@ -1,5 +1,5 @@
 const db = require('../config/db.config.js');
-const config = require('../config/config.js');
+const config = require('../config/app.config.js');
 const ROLEs = config.ROLEs;
 const User = db.user;