LINUX.ORG.RU
ФорумAdmin

Перестали передаваться данные по API на VPS сервере

 


0

1

Всем здравствуйте.

Есть сайт psihotip.fincult.ru на VPS

Всё работало отлично, после прохождения теста и нажатия на кнопку пользователь через API добавлялся на платформу GetCourse, потом был сбой сервера и теперь перестало работать.

1. При выполнении команды node /root/phycho/server.js выдает следующее http://joxi.ru/YmE8EYpSw5jyqr 2. Вывод команды netstat -tulpn | grep LISTEN http://joxi.ru/V2Va1pvcd7aoJm 3. Где посмотреть логи ошибок не знаю, если честно и куда они сохраняются 4. Может быть, проблема связана с тем, что места свободного почти не осталось, вывод команды vmstat http://joxi.ru/4AkvbQEFoZ5qx2 Вывод команды df -h http://joxi.ru/a2XxpDYhwP7YE2

Код файла server.js

const
  express = require('express'),
  bodyParser = require('body-parser'),
  cors = require('cors'),
  mngs = require('mongoose'),
  work = require('./app/work'),
  validData = require('./app/validation'),
  sendCourse = require('./app/getcourse/send'),
  createExcel = require('./app/excel/create'),
  saveUser = require('./app/excel/seeder'),
  redirect = require('./app/redirect'),
  rmdb = require('./app/excel/remove'),
  hbs = require('hbs'),
  newStat = require('./app/statistics/create'),
  updateStat = require('./app/statistics/update'),
  createStat = require('./app/statistics/excel'),

  app = express(), server_port = 80

mngs.connect(require("./app/database"), { useMongoClient: true })

let order = 0

app.set('views', __dirname + '/public')
app.set('view engine', 'hbs')

hbs.registerHelper('check', (val1, val2, option) => val1 === val2 ? option.fn(this) : option.inverse(this))

app.use(cors())
app.use(bodyParser.json())
app.use(bodyParser.urlencoded({ extended: true }))
app.use(express.static(__dirname + '/public'))
app.use(express.static(__dirname + '/excel'))

app.get('/', (req, res) => {
  let qr = req.query, result = qr.result, sex
  if (result !== undefined) {
    sex = result[0] === 'm' ? 1 : 0
  } else sex = 0

  const utm = {
    source: qr['utm_source'],
    medium: qr['utm_medium'],
    campaign: qr['utm_campaign']
  }

  order = 1 - order

  const version = order + 1

  newStat({ done: false, version })

    .then(id => res.render('index', { result, sex, utm, version, id }))

})

app.get('/test', (req, res) => res.send(req.query.soc))

app.post('/work', (req, res) => {
  let data = req.body

  // fs.writeFile(__dirname + '/memem.log', 'body');
  if (validData(data)) {

    let phychotype = work(data)

    redirect(res, data.sex, phychotype.data.total)
    
    saveUser(data, phychotype)
    sendCourse(data, phychotype)
  } else res.status(501).send()

})

app.get('/create', (req, res) => createExcel(res))

app.get('/stats', (req, res) => createStat(res))

app.patch('/lxcrfsoft', (req, res) => rmdb(res))

app.listen(server_port, () => console.log(`Сервер запущен -p ${server_port}`))

P.S. Не судите строго, в серверах не силен, но изучаю. Заранее спасибо за ответы!

Спасибо заранее


а почему "Код файла server.js " не картинкой выложен?

constin ★★★★ ()
  1. При выполнении команды node /root/phycho/server.js выдает следующее http://joxi.ru/YmE8EYpSw5jyqr 2. Вывод команды netstat -tulpn | grep LISTEN http://joxi.ru/V2Va1pvcd7aoJm

Порт 80 уже занят нодой. Похоже это зависший инстанс.

  1. Где посмотреть логи ошибок не знаю, если честно и куда они сохраняются

Смотря через что запускается. В самом коде никакой обработки ошибок нет.

  1. Может быть, проблема связана с тем, что места свободного почти не осталось

Нет, но это приведёт к проблемам в будущем.

Оптимальный вариант - нанять фрилансера, который сделает как надо. Потому что переделывать надо вообще всё.

  • Ноду не запускают под рутом, это не безопасно. По-хорошему нужен докер, или хотя ограниченный юзер.
  • Для контроля инстансов есть systemd или специфичные запускаторы, для ноды их несколько на выбор.
  • На выходе поставить nginx как прокси. Можно не использовать, но это хорошая практика, так как он лучше вывозит сжатие и шифрование. А ещё можно настроить кэширование запросов и масштабирование, если потребуется. Как минимум статику полезно было бы закэшировать.
  • Сервер надо переписать, говнокод. Полагаю, в остальных частях его ещё больше. Ещё бы на fastify переехать, возможности те же, а производительность на порядки выше. И от mongoose отказаться, по той же причине, а состряпать модели будет не сильно сложнее.
InterVi ★★★ ()
Ограничение на отправку комментариев: только для зарегистрированных пользователей