Adding docker compose to test api with mongodb
This commit is contained in:
parent
cfae285d44
commit
88cdce819b
|
@ -0,0 +1,16 @@
|
||||||
|
compose.yaml
|
||||||
|
node_modules
|
||||||
|
Dockerfile*
|
||||||
|
docker-compose*
|
||||||
|
.dockerignore
|
||||||
|
.git
|
||||||
|
.gitignore
|
||||||
|
README.md
|
||||||
|
LICENSE
|
||||||
|
.vscode
|
||||||
|
Makefile
|
||||||
|
helm-charts
|
||||||
|
.env
|
||||||
|
.editorconfig
|
||||||
|
.idea
|
||||||
|
coverage*
|
|
@ -36,5 +36,5 @@ COPY --from=prerelease /usr/src/app/package.json .
|
||||||
|
|
||||||
# run the app
|
# run the app
|
||||||
USER bun
|
USER bun
|
||||||
EXPOSE 3000/tcp
|
EXPOSE 8080/tcp
|
||||||
CMD ["bun", "run", "index.ts"]
|
CMD ["bun", "run", "start"]
|
||||||
|
|
|
@ -0,0 +1,34 @@
|
||||||
|
version: '3'
|
||||||
|
|
||||||
|
services:
|
||||||
|
mongodb:
|
||||||
|
image: mongo
|
||||||
|
container_name: mongodb
|
||||||
|
ports:
|
||||||
|
- "27017:27017"
|
||||||
|
environment:
|
||||||
|
MONGO_INITDB_ROOT_USERNAME: root
|
||||||
|
MONGO_INITDB_ROOT_PASSWORD: password
|
||||||
|
MONGO_INITDB_DATABASE: bot
|
||||||
|
volumes:
|
||||||
|
- mongodb_data:/data/db
|
||||||
|
- ./mongo-init.js:/docker-entrypoint-initdb.d/mongo-init.js:ro
|
||||||
|
|
||||||
|
bot-api:
|
||||||
|
image: oven/bun:1
|
||||||
|
container_name: bot-api
|
||||||
|
command: bun run dev
|
||||||
|
working_dir: /usr/src/app
|
||||||
|
ports:
|
||||||
|
- "8080:8080"
|
||||||
|
depends_on:
|
||||||
|
- mongodb
|
||||||
|
environment:
|
||||||
|
MONGODB_URI: "mongodb://mongodb:27017/bot"
|
||||||
|
MONGODB_USER: "root"
|
||||||
|
MONGODB_PASS: "password"
|
||||||
|
volumes:
|
||||||
|
- ./:/usr/src/app:ro
|
||||||
|
|
||||||
|
volumes:
|
||||||
|
mongodb_data:
|
13
index.ts
13
index.ts
|
@ -1,13 +0,0 @@
|
||||||
import express from "express";
|
|
||||||
|
|
||||||
const app = express();
|
|
||||||
|
|
||||||
// Hello World GET endpoint
|
|
||||||
app.get("/", (_, res) => {
|
|
||||||
res.send("Hello World!");
|
|
||||||
});
|
|
||||||
|
|
||||||
// Set the default port to 3000, or use the PORT environment variable
|
|
||||||
const port = process.env.PORT || 3000;
|
|
||||||
|
|
||||||
app.listen(port, () => console.log(`Express server listening on port ${port}`));
|
|
|
@ -0,0 +1,24 @@
|
||||||
|
db.createUser({
|
||||||
|
user: 'root',
|
||||||
|
pwd: 'password',
|
||||||
|
roles: [
|
||||||
|
{
|
||||||
|
role: 'readWrite',
|
||||||
|
db: 'admin',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
role: 'readWrite',
|
||||||
|
db: 'bot',
|
||||||
|
},
|
||||||
|
],
|
||||||
|
});
|
||||||
|
|
||||||
|
db = new Mongo().getDB("bot");
|
||||||
|
|
||||||
|
db.images.createIndex({ "status": 1 });
|
||||||
|
db.images.createIndex({ "image": 1 }, { "unique": true });
|
||||||
|
db.images.insert({
|
||||||
|
url: "https://example.com",
|
||||||
|
status: "consumed",
|
||||||
|
tags: ["2girls", "sleeping"]
|
||||||
|
});
|
|
@ -7,6 +7,9 @@
|
||||||
},
|
},
|
||||||
"peerDependencies": {
|
"peerDependencies": {
|
||||||
"typescript": "^5.0.0"
|
"typescript": "^5.0.0"
|
||||||
|
},"scripts": {
|
||||||
|
"start": "bun run src/index.ts",
|
||||||
|
"dev": "bun --hot run src/index.ts"
|
||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@types/express": "^4.17.21",
|
"@types/express": "^4.17.21",
|
||||||
|
|
|
@ -0,0 +1,20 @@
|
||||||
|
import mongoose from "mongoose";
|
||||||
|
|
||||||
|
const ImageSchema = new mongoose.Schema({
|
||||||
|
url: {
|
||||||
|
type: String,
|
||||||
|
required: true
|
||||||
|
},
|
||||||
|
status: {
|
||||||
|
type: String,
|
||||||
|
enum: {
|
||||||
|
values: ["consumed", "unavailable", "available"],
|
||||||
|
},
|
||||||
|
required: true
|
||||||
|
},
|
||||||
|
tags: {
|
||||||
|
type: [String]
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
export default mongoose.model('images', ImageSchema);
|
|
@ -0,0 +1,45 @@
|
||||||
|
import express from "express";
|
||||||
|
import mongoose from "mongoose";
|
||||||
|
import ImageModel from "./ImageModel";
|
||||||
|
|
||||||
|
const app = express();
|
||||||
|
|
||||||
|
app.use(express.json());
|
||||||
|
|
||||||
|
// Hello World GET endpoint
|
||||||
|
app.get("/", (_, res) => {
|
||||||
|
res.json({ message: "Blazing fast 🚀" });
|
||||||
|
});
|
||||||
|
|
||||||
|
app.get("/images", async (req, res) => {
|
||||||
|
try {
|
||||||
|
const allImages = await ImageModel.find();
|
||||||
|
res.json(allImages);
|
||||||
|
} catch (error) {
|
||||||
|
res.status(500).json({ message: error });
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
|
// Set the default port to 8080, or use the PORT environment variable
|
||||||
|
|
||||||
|
const start = async () => {
|
||||||
|
const port = process.env.PORT || 8080;
|
||||||
|
const mongo_uri: string = process.env.MONGODB_URI || "";
|
||||||
|
const mongo_user = process.env.MONGODB_USER;
|
||||||
|
const mongo_pass = process.env.MONGODB_PASS;
|
||||||
|
|
||||||
|
try {
|
||||||
|
await mongoose.connect(mongo_uri, {
|
||||||
|
authSource: "admin",
|
||||||
|
user: mongo_user,
|
||||||
|
pass: mongo_pass
|
||||||
|
});
|
||||||
|
app.listen(port, () => console.log(`Express server listening on port ${port}`));
|
||||||
|
} catch (error) {
|
||||||
|
console.error(error);
|
||||||
|
process.exit(1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
start();
|
||||||
|
|
Loading…
Reference in New Issue