@noob1
Anykey

Как написать web приложение?

Здравствуйте!
Решил автоматизировать свои некоторые рабочие задачи . Написал скрипты на bash и ansible . Хочу написать web приложение или сайт (не знаю как правильно назвать) что бы запускать скрыпты нажатием кнопки и мониторить процесс завершение . Думаю реализовать это на python , но не всё понимаю ещё . Нужно ли брать какой-то framework , если да то какой ? Или можно своими силами ?
  • Вопрос задан
  • 623 просмотра
Пригласить эксперта
Ответы на вопрос 4
inoise
@inoise
Solution Architect
Вам, случаем, для подобных задач не подойдет Jenkins?) Банально
Ответ написан
Я лично не пробовал, но может стоит глянуть уже готовые решения, что-нибудь типа supervisor, веб-интерфейс
Ответ написан
elser
@elser
IT-шник :)
ставьте ноду, затем в консоле

npm i -g create-react-app
create-reat-app webadmin
cd webadmin
npm i ws
touch server.js


код server.js

const { spawn } = require('child_process')
const { Server } = require('ws')

const wss = new Server({ port: 8080 })

wss.on('connection',  socket => {
  ws.on('message', message => {
    // допустим message - это сразу команда, но можно заморочаться с JSON
    // и вообще свой протокол написать
    const cmd = message.split(/\s/g)
    spawn(cmd.shift(), cmd).stdout.on('data', out => ws.send(out.toString())) // вернули вывод
  });
});


код src/App.js

import React, { Component } from 'react';
import './App.css';

class App extends Component {

  constructor() {
    super()
    this.state = {
      connected: false,
      out: ""
    }
  }

  componentDidMount() {
    const ws = new WebSocket('ws://you.server.url:8080')
    ws.addEventListener( 'open', () => this.setState({ connected: true }) )
    ws.addEventListener( 'message', msg => this.setState({ out: msg.toString() }) )
  }

  runLs({value}) {
    this.ws.send(value)
  }

  render() {

    const { connected, out } = this.state 

    return (
      <div className="App">
        { connected ? (
          <input type="button" value="ls -ahl /" onClick={({target}) => this.runLs(target)} />
        ) : (
          <div>{'connecting...'}</div>
        )}
        <div>{out}<div>
      </div>
    );
  }
}

export default App;


затем в папке приложения, одной консоле
npm build
npm start

в другой
node server.js

P.S. то что сбилдится в папку build, можно отдавать любым вебсервером - там тупо статика (client only)
Ответ написан
@voidSoul
Для запуска скриптов на сервере у большинства веб-серверов (apache, nginx) есть древний интерфейс CGI ( https://ru.m.wikipedia.org/wiki/CGI ). Например, в сборке nginx-extras есть необходимый модуль CGI/FastCGI. Вот здесь ( https://debian.pro/2114 ) описано то, что Вы хотите сделать. Это по части серверной стороны. А клиентский код (то, что рисуется и исполняется в браузере) можно сделать статикой на простом html/js без излишних заморочек с create-react-app.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы
26 марта 2019, в 12:03
10000 руб./за проект
26 марта 2019, в 11:56
1 руб./за проект