Развертывание производственной сборки ReactJS в Express как HTTPS - PullRequest
0 голосов
/ 30 мая 2018

Итак, я успешно развернул свое приложение React на рабочем сервере.Я использую Express для развертывания.Вот мой код.

const express = require('express')
const path = require('path')
const port = process.env.PORT || 80
const app = express()

app.use(express.static(__dirname + '/build'))

app.get('*', function (request, response){
  response.sendFile(path.resolve(__dirname, 'build', 'index.html'))
})

app.listen(port)

Я бы использовал CertBot для SSL-сертификатов и развернул бы его как HTTPS-сервер.Я действительно не знаю, как решить эту проблему.

1 Ответ

0 голосов
/ 30 мая 2018

Скажем, например, CertBot сгенерировал сертификат SSL и ключ сертификата SSL в следующих местах:

  • /etc/letsencrypt/live/example.org/fullchain.pem
  • /etc/letsencrypt/live/example.org/privkey.pem

После того, как вы сгенерировали свой сертификат и ключ, вам нужно будет напрямую использовать модуль https.

Сначала вам нужно будет экспортировать приложение Express:

const express = require('express')
const path = require('path')
const port = process.env.PORT || 80
const app = express()

app.use(express.static(__dirname + '/build'))

app.get('*', function (request, response){
  response.sendFile(path.resolve(__dirname, 'build', 'index.html'))
})

module.export = app

Затем просто импортируйте ваше приложение Express и подключите его с помощью модуля https:

const https = require('https');
const fs = require('fs');
const app = require('./app.js');

const server = https.createServer({
  key: fs.readFileSync('/etc/letsencrypt/live/example.org/fullchain.pem', 'utf8'),
  cert: fs.readFileSync('/etc/letsencrypt/live/example.org/privkey.pem', 'utf8')
}, app);

server.listen(3000);

Обратите внимание, это, по сути, то, что ./bin/www делает для вас, за исключением того, что я адаптировал его для использованияhttps вместо http module.

См. Что делает "./bin/www" в Express 4.x?

...