add Dockerfile and production docker-compose

master
Ian Mancini 4 years ago
parent 8a15a8c57e
commit b6aa28f220

@ -0,0 +1,4 @@
node_modules
packages/*/node_modules
packages/*/build
packages/server/.env

@ -0,0 +1,19 @@
FROM node:15.3.0
WORKDIR /app
COPY package*.json lerna.json ./
COPY packages/server/package*.json ./packages/server/
COPY packages/client/package*.json ./packages/client/
RUN npm install
RUN npm run bootstrap:production
COPY . .
COPY .env packages/server/.env
RUN npm run build
EXPOSE 3000
ENV NODE_ENV=production
CMD [ "node", "packages/server/build/index.js" ]

@ -0,0 +1,40 @@
version: "3.8"
services:
museo:
restart: always
container_name: museo-red
build: .
ports:
- 9999:9999
environment:
PORT: 9999
mongo:
container_name: mongo
image: mongo:4.2.10
restart: always
environment:
MONGO_INITDB_ROOT_USERNAME: ${MONGODB_USER}
MONGO_INITDB_ROOT_PASSWORD: ${MONGODB_PASSWORD}
volumes:
- ${DATA_HOME}:/data/db
mongo-express:
container_name: mongo-express
image: mongo-express
restart: always
ports:
- 8900:8081
environment:
ME_CONFIG_MONGODB_SERVER: "mongo"
ME_CONFIG_MONGODB_ADMINUSERNAME: ${MONGODB_USER}
ME_CONFIG_MONGODB_ADMINPASSWORD: ${MONGODB_PASSWORD}
redis:
container_name: redis
image: redis:6.0.8
restart: always
command: >
--requirepass ${REDIS_PASSWORD}
volumes:
- ${DATA_HOME}:/data

@ -0,0 +1,22 @@
MONGODB_HOST=
MONGODB_PASSWORD=
MONGODB_USER=museum
REDIS_HOST=
REDIS_PASSWORD=
SESSION_SECRET=
HOST=
HOST_DEV=
FACEBOOK_CLIENT_ID=
FACEBOOK_CLIENT_SECRET=
TWITTER_CONSUMER_KEY=
TWITTER_CONSUMER_SECRET=
GOOGLE_CLIENT_ID=
GOOGLE_CLIENT_SECRET=
DATA_HOME=

@ -6,10 +6,12 @@
},
"scripts": {
"bootstrap": "lerna bootstrap",
"bootstrap:production": "lerna bootstrap --ci",
"lint": "lerna run lint --stream",
"fix": "lerna run fix --stream",
"start": "lerna run start --stream",
"build": "lerna run build --stream",
"build": "lerna run build --stream",
"serve": "lerna run serve --stream"
}
}

File diff suppressed because it is too large Load Diff

@ -2,7 +2,7 @@ version: '3.1'
services:
mongo:
container_name: mongo
container_name: mongo-dev
image: mongo:4.2.10
restart: always
environment:
@ -13,7 +13,7 @@ services:
volumes:
- ${DATA_HOME}:/data/db
mongo-express:
container_name: mongo-express
container_name: mongo-express-dev
image: mongo-express
restart: always
ports:
@ -24,7 +24,7 @@ services:
ME_CONFIG_MONGODB_ADMINPASSWORD: ${MONGODB_PASSWORD}
redis:
container_name: redis
container_name: redis-dev
image: redis:6.0.8
restart: always
ports:

@ -36,8 +36,10 @@ import { authRouter, initPassport } from './auth/passport'
const RedisStore = connectRedis(session)
const mongoHost = process.env.MONGODB_HOST ?? 'localhost'
mongoose.connect(
'mongodb://localhost:27017',
`mongodb://${mongoHost}:27017`,
{
useCreateIndex: true,
useNewUrlParser: true,
@ -158,12 +160,17 @@ async function broadcastTransforms() {
broadcastTransforms()
if (process.env.NODE_ENV !== 'PRODUCTION') {
if (process.env.NODE_ENV !== 'production') {
app.use('/', proxy('http://localhost:4000/'))
} else {
// probably serve up build version in production
const buildPath = path.resolve(__dirname, '../../client/build')
const indexHtml = path.join(buildPath, 'index.html')
app.use(express.static(buildPath))
app.get('*', (_, res) => res.sendFile(indexHtml))
}
server.listen(3000, () => {
logger.info('Server ready on http://localhost:3000')
const port = process.env.PORT ?? 3000
server.listen(port, () => {
logger.info(`Server ready on port ${port}`)
})

@ -7,8 +7,10 @@ import { promisify } from 'util'
import redis from 'redis'
import logger from './logger'
const redisHost = process.env.REDIS_HOST ?? '127.0.0.1'
const client = redis.createClient({
host: '127.0.0.1',
host: redisHost,
port: 6379,
password: process.env.REDIS_PASSWORD,
})

@ -0,0 +1,48 @@
#!/bin/sh
check_available() {
# Function to check if a program is installed
which $1 &> /dev/null
if [ $? = 1 ]; then
echo "$1 is not available, please install it before running the script"
exit 1
fi
}
gen_password() {
check_available openssl
openssl rand -base64 32
}
read -p "Redis password: (press enter to randomize): " redis_password
redis_password=${redis_password:-`gen_password`}
read -p "Session secret: (press enter to randomize): " session_secret
session_secret=${session_secret:-`gen_password`}
read -p "MongoDB password: (press enter to randomize): " mongo_password
mongo_password=${mongo_password:-`gen_password`}
if [ ! -f "./.env" ]; then
echo "Copying ./env.example to ./.env"
cp ./env.example ./.env
fi
sed -i -e "s#REDIS_PASSWORD=.*#REDIS_PASSWORD=${redis_password}#g" \
"$(dirname "$0")/.env"
sed -i -e "s#SESSION_SECRET=.*#SESSION_SECRET=${session_secret}#g" \
"$(dirname "$0")/.env"
sed -i -e "s#MONGODB_PASSWORD=.*#MONGODB_PASSWORD=${mongo_password}#g" \
"$(dirname "$0")/.env"
read -p "Start docker containers? (requires docker-compose) [Y/n] " start_docker
start_docker=${start_docker:-Y}
if [[ $start_docker =~ [yY] ]]; then
check_available docker-compose
sudo docker-compose up -d
fi
Loading…
Cancel
Save