diff --git a/Dockerfile b/Dockerfile index 062ec91..60abb01 100644 --- a/Dockerfile +++ b/Dockerfile @@ -24,5 +24,7 @@ RUN apt-get update && apt-get install -y \ RUN npm run build +RUN npm install pm2 -g + EXPOSE 8000 -CMD [ "npm", "start" ] \ No newline at end of file +CMD [ "pm2-runtime", "ecosystem.config.js" ] \ No newline at end of file diff --git a/docker-compose.yml b/docker-compose.yml index 72bb4bd..0ee4cdc 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -1,36 +1,66 @@ version: '2' -services: + +services: + caddy-ims: + image: caddy:latest + container_name: caddy-service + restart: unless-stopped + command: caddy reverse-proxy --from imexmedia.duckdns.org --to ims:8000 + networks: + c2_proxy: + ipv4_address: 192.168.90.254 + ports: + - 80:80 + - 443:443 + volumes: + - caddy_data:/data + - caddy_config:/config ims: + container_name: ims + networks: + - c2_proxy ports: - 8000:8000 volumes: - - ~:/root - #- "C:\\IMS:/media" - - "/Users/pfic/Desktop/ISM:/media" + - "/Users/pfic/Desktop/IMS:/media" environment: - MEDIA_PATH=/media - DUPLICATE_BILL_TO_VENDOR=false - - IMS_TOKEN=ThisIsAnImEXSecretTokenToBeSent - image: imexonline/media-server:latest - #image: imexonline/media-server:beta + - IMS_TOKEN=test + - CONVERT_QUALITY=0.5 + - KEEP_CONVERTED_ORIGINALS=TRUE + image: imexonline/media-server:beta restart: unless-stopped + watchtower: + container_name: watchtower-ims image: containrrr/watchtower + networks: + - c2_proxy volumes: - /var/run/docker.sock:/var/run/docker.sock - - /root/.docker/config.json:/config.json - command: --interval 3600 - caddy: - image: caddy:latest - container_name: caddy-service - restart: unless-stopped - ports: - - "80:80" - - "443:443" - volumes: - - $PWD/Caddyfile:/etc/caddy/Caddyfile - - caddy_data:/data - - caddy_config:/config + environment: + - TZ=America/Vancouver + - WATCHTOWER_CLEANUP=true + - WATCHTOWER_REMOVE_VOLUMES=true + - WATCHTOWER_INCLUDE_STOPPED=true + - WATCHTOWER_INCLUDE_RESTARTING=true + - WATCHTOWER_NO_STARTUP_MESSAGE=false + - WATCHTOWER_REVIVE_STOPPED=true + - WATCHTOWER_ROLLING_RESTART=true + - WATCHTOWER_TIMEOUT=60s + - WATCHTOWER_POLL_INTERVAL=3600 + restart: unless-stopped + volumes: + ims: caddy_data: - caddy_config: \ No newline at end of file + caddy_config: + +networks: + c2_proxy: + name: c2_proxy + driver: bridge + ipam: + config: + - subnet: 192.168.90.0/24 \ No newline at end of file diff --git a/ecosystem.config.js b/ecosystem.config.js new file mode 100644 index 0000000..dc04d03 --- /dev/null +++ b/ecosystem.config.js @@ -0,0 +1,8 @@ +module.exports = [ + { + script: "dist/server.js", + name: "MediaServer", + exec_mode: "cluster", + instances: 0, + }, +]; diff --git a/jobs/jobsListMedia.ts b/jobs/jobsListMedia.ts index 57366f4..6397512 100644 --- a/jobs/jobsListMedia.ts +++ b/jobs/jobsListMedia.ts @@ -73,9 +73,9 @@ export async function JobsListMedia(req: Request, res: Response) { ); } - res.json(ret); + if (!res.headersSent) res.json(ret); } catch (error) { logger.error("Error listing job media.", { jobid, error }); - res.status(500).json(error); + if (!res.headersSent) res.status(500).json(error); } } diff --git a/jobs/jobsUploadMedia.ts b/jobs/jobsUploadMedia.ts index 42a456b..f196ed7 100644 --- a/jobs/jobsUploadMedia.ts +++ b/jobs/jobsUploadMedia.ts @@ -1,13 +1,13 @@ import { Request, Response } from "express"; +import fs from "fs-extra"; import multer from "multer"; import path from "path"; import { logger } from "../server"; import GenerateThumbnail from "../util/generateThumbnail"; import generateUniqueFilename from "../util/generateUniqueFilename"; +import { ConvertHeicFiles } from "../util/heicConverter"; import { PathToRoFolder } from "../util/pathGenerators"; import { JobsListMedia } from "./jobsListMedia"; -import fs from "fs-extra"; -import { ConvertHeicFiles } from "../util/heicConverter"; export const JobMediaUploadMulter = multer({ storage: multer.diskStorage({ @@ -44,6 +44,7 @@ export async function jobsUploadMedia(req: Request, res: Response) { } else { //If we want to skip waiting for everything, just send it back that we're good. if (req.body.skip_thumbnail) { + req.headers.skipReponse === "true"; res.sendStatus(200); }