У меня есть приложение React / Nodejs, которое я пытаюсь развернуть в Digital Ocean с помощью Docker.Я создал Docker Droplet с 2 ГБ ОЗУ, клонировал проект и пытаюсь его запустить.
К настоящему времени я не получаю никаких журналов ошибок при построении образа и его запуске.Но, когда я пытаюсь получить к нему доступ, в браузере появляется сообщение об ошибке «Этот сайт недоступен».
Я создаю свое изображение так: docker build -t myImage .
Изапустить его и передать мои переменные env следующим образом:
docker run -p 80:3000 -e NODE_ENV="production" -e MONGO_URI="URI" -e SECRET_OR_KEY="KEY" myImage
Кажется, все работает нормально (сборка и запуск).Я получаю журнал, что мой mongodb подключен и сервер работает.Но на самом деле я не вижу приложение.
Это мой Dockerfile:
FROM node:11.10.0
WORKDIR /usr/src
RUN git clone https://github.com/repo.git
WORKDIR /usr/src/project
RUN npm install
WORKDIR /usr/src/project/client
RUN npm install
RUN npm run build
WORKDIR /usr/src/project
EXPOSE 80 3000
ENTRYPOINT npm run server
Я создал его на основе другого приложения, которое также работает в Digital Ocean.
А это мой server.js:
const express = require('express');
const mongoose = require('mongoose');
const bodyParser = require('body-parser');
const passport = require('passport');
const path = require('path');
//Route files
const users = require('./routes/api/users');
const fpsos = require('./routes/api/fpsos');
const bids = require('./routes/api/bids');
const news = require('./routes/api/news');
const app = express();
//Body parser middlewares
app.use(bodyParser.urlencoded({extended: false}));
app.use(bodyParser.json ());
//DB config
const db = require('./config/keys').mongoURI;
//Connect to MongoDB
mongoose
.connect(db)
.then(() => console.log('MongoDB connected'))
.catch(err => console.log(err));
//Passport middleware
app.use(passport.initialize());
//Passport Config
require('./config/passport')(passport);
app.use('/api/users', users);
app.use('/api/news', news);
app.use('/api/fpso', fpsos);
app.use('/api/bid', bids);
// Server static assets if in production
if (process.env.NODE_ENV === 'production') {
// Set static folder
app.use(express.static('client/build'));
app.get('*', (req, res) => {
res.sendFile(path.resolve(__dirname, 'client', 'build', 'index.html'));
});
}
const port = process.env.PORT || 5000;
app.listen(port, () => console.log(`Server running on port ${port}`))
Что мне здесь не хватает?Я ценю любую помощь.Заранее спасибо!