feat: add docker support and update deps

This commit is contained in:
divlo
2020-10-30 16:58:27 +01:00
parent f5a8be5000
commit ffec0058e5
35 changed files with 5006 additions and 4502 deletions

2
api/.dockerignore Normal file
View File

@ -0,0 +1,2 @@
node_modules
build

View File

@ -1,12 +1,15 @@
HOST = "http://localhost:8080"
FRONT_END_HOST = "http://localhost:3000"
OpenWeatherMap_API_KEY = ""
Scraper_API_KEY = ""
DB_HOST = ""
DB_NAME = ""
DB_USER = ""
DB_PASS = ""
JWT_SECRET = ""
EMAIL_HOST = ""
EMAIL_USER = ""
EMAIL_PASSWORD = ""
HOST="http://localhost:8080"
FRONT_END_HOST="http://localhost:3000"
OpenWeatherMap_API_KEY=""
Scraper_API_KEY=""
DATABASE_HOST="functionproject-database"
DATABASE_NAME="functionproject"
DATABASE_USER="root"
DATABASE_PASSWORD="password"
DATABASE_PORT=3306
JWT_SECRET=""
EMAIL_HOST="functionproject-maildev"
EMAIL_USER="no-reply@functionproject.fr"
EMAIL_PASSWORD="password"
EMAIL_PORT=25
COMPOSE_PROJECT_NAME="function.divlo.fr-api"

6
api/.gitignore vendored
View File

@ -11,14 +11,16 @@
# production
/build
# misc
.DS_Store
# envs
.env
.env.local
.env.development.local
.env.test.local
.env.production.local
.env.production
# misc
.DS_Store
/temp
/assets/images/

13
api/Dockerfile Normal file
View File

@ -0,0 +1,13 @@
FROM node:14.15.0-alpine3.12
WORKDIR /app
COPY ./package*.json ./
RUN npm install
COPY ./ ./
# docker-compose-wait
ADD https://github.com/ufoscout/docker-compose-wait/releases/download/2.7.3/wait /wait
RUN chmod +x /wait
CMD /wait && npm run dev

View File

@ -16,11 +16,14 @@ const isAdmin = require('./middlewares/isAdmin')
const app = express()
/* Middlewares */
if (process.env.NODE_ENV === 'development') {
app.use(morgan('dev'))
} else if (process.env.NODE_ENV === 'production') {
app.use(redirectToHTTPS())
}
app.use(helmet())
app.use(cors())
app.use(morgan('dev'))
app.use(express.json())
app.use(redirectToHTTPS([/localhost:(\d{4})/]))
/* Routes */
app.use('/images', express.static(path.join(__dirname, 'assets', 'images')))
@ -37,7 +40,7 @@ app.use('/links', require('./routes/links_shortener'))
/* Errors Handling */
app.use((_req, _res, next) =>
errorHandling(next, { statusCode: 404, message: "La route n'existe pas!" })
) // 404
)
app.use((error, _req, res, _next) => {
console.log(error)
const { statusCode, message } = error
@ -83,7 +86,6 @@ Users.hasMany(ShortLinks)
ShortLinks.belongsTo(Users, { constraints: false })
/* Server */
// sequelize.sync({ force: true })
sequelize
.sync()
.then(() => {

View File

@ -1,3 +1,8 @@
const dotenv = require('dotenv')
dotenv.config()
const EMAIL_PORT = parseInt(process.env.EMAIL_PORT ?? '465', 10)
const config = {
PORT: process.env.PORT || 8080,
HOST: process.env.HOST,
@ -5,20 +10,22 @@ const config = {
WEATHER_API_KEY: process.env.OpenWeatherMap_API_KEY,
SCRAPER_API_KEY: process.env.Scraper_API_KEY,
DATABASE: {
host: process.env.DB_HOST,
name: process.env.DB_NAME,
user: process.env.DB_USER,
password: process.env.DB_PASS
host: process.env.DATABASE_HOST,
name: process.env.DATABASE_NAME,
user: process.env.DATABASE_USER,
password: process.env.DATABASE_PASSWORD,
port: parseInt(process.env.DATABASE_PORT ?? '3306', 10)
},
JWT_SECRET: process.env.JWT_SECRET,
EMAIL_INFO: {
host: process.env.EMAIL_HOST,
port: 465,
secure: true, // true for 465, false for other ports
port: EMAIL_PORT,
secure: EMAIL_PORT === 465,
auth: {
user: process.env.EMAIL_USER,
pass: process.env.EMAIL_PASSWORD
}
},
ignoreTLS: process.env.NODE_ENV !== 'production'
},
TOKEN_LIFE: '1 week'
}

View File

@ -7,7 +7,8 @@ const sequelize = new Sequelize(
DATABASE.password,
{
dialect: 'mysql',
host: DATABASE.host
host: DATABASE.host,
port: DATABASE.port
}
)

1649
api/package-lock.json generated

File diff suppressed because it is too large Load Diff

View File

@ -5,33 +5,33 @@
"scripts": {
"start": "node app.js",
"dev": "nodemon app.js",
"format": "standard \"./**/*.js\" --fix | snazzy || exit 0"
"format": "standard \"./**/*.js\" --fix | snazzy"
},
"dependencies": {
"axios": "^0.19.2",
"axios": "^0.21.0",
"bcryptjs": "^2.4.3",
"cors": "^2.8.5",
"express": "^4.17.1",
"express-fileupload": "^1.1.6",
"express-fileupload": "^1.2.0",
"express-http-to-https": "^1.1.4",
"express-validator": "^6.4.0",
"helmet": "^3.21.3",
"jsdom": "^16.2.2",
"express-validator": "^6.6.1",
"helmet": "^4.1.1",
"jsdom": "^16.4.0",
"jsonwebtoken": "^8.5.1",
"moment": "^2.24.0",
"moment": "^2.29.1",
"ms": "^2.1.2",
"mysql2": "^2.1.0",
"nodemailer": "^6.4.6",
"sequelize": "^5.21.5",
"mysql2": "^2.2.5",
"nodemailer": "^6.4.14",
"sequelize": "^6.3.5",
"smart-request-balancer": "^2.1.1",
"uuid": "^7.0.2",
"validator": "^13.0.0",
"uuid": "^8.3.1",
"validator": "^13.1.17",
"dotenv": "^8.2.0",
"morgan": "^1.9.1"
"morgan": "^1.10.0"
},
"devDependencies": {
"nodemon": "^2.0.4",
"snazzy": "^8.0.0",
"standard": "^14.3.4"
"nodemon": "^2.0.6",
"snazzy": "^9.0.0",
"standard": "^16.0.0"
}
}