Browse Source

Fix docker-compose in production (#81)

* Fixed problem with docker-compose not updating new files in the multi-stage build.
* Update readme with a new screenshot
Alex 3 năm trước cách đây
mục cha
commit
ac0ad98b55

+ 2 - 1
README.md

@@ -34,7 +34,8 @@ Loading ~4000 images/videos
 <p align="left">
   <img src="design/nsc1.png" width="150" title="Login With Custom URL">
   <img src="design/nsc2.png" width="150" title="Backup Setting Info">
-  <img src="design/nsc3.png" width="150" title="Multiple seelct">
+  <img src="design/nsc3.png" width="150" title="Multiple select">
+  <img src="design/nsc4.jpeg" width="150" title="Curated Search Info">
   <img src="design/nsc6.png" width="150" title="EXIF Info">
 
 </p>

BIN
design/nsc4.jpeg


+ 0 - 3
docker/.env.example

@@ -1,6 +1,3 @@
-# STAGE
-NODE_ENV=development
-
 # Database
 DB_USERNAME=postgres
 DB_PASSWORD=postgres

+ 4 - 2
docker/docker-compose.dev.yml

@@ -5,7 +5,6 @@ services:
     image: immich-server-dev:1.3.2
     build:
       context: ../server
-      target: development
       dockerfile: ../server/Dockerfile
     command: npm run start:dev
     expose:
@@ -16,6 +15,8 @@ services:
       - /usr/src/app/node_modules
     env_file:
       - .env
+    environment:
+      - NODE_ENV=development
     depends_on:
       - redis
       - database
@@ -26,7 +27,6 @@ services:
     image: immich-microservices-dev:1.3.2
     build:
       context: ../microservices
-      target: development
       dockerfile: ../microservices/Dockerfile
     command: npm run start:dev
     expose:
@@ -37,6 +37,8 @@ services:
       - /usr/src/app/node_modules
     env_file:
       - .env
+    environment:
+      - NODE_ENV=development
     depends_on:
       - database
     networks:

+ 0 - 2
docker/docker-compose.gpu.yml

@@ -5,7 +5,6 @@ services:
     image: immich-server-dev:1.4.0
     build:
       context: ../server
-      target: development
       dockerfile: ../server/Dockerfile
     command: npm run start:dev
     expose:
@@ -26,7 +25,6 @@ services:
     image: immich-microservices-dev:1.4.0
     build:
       context: ../microservices
-      target: development
       dockerfile: ../microservices/Dockerfile
     command: npm run start:dev
     deploy:

+ 4 - 2
docker/docker-compose.yml

@@ -5,7 +5,6 @@ services:
     image: immich-server:1.4.0
     build:
       context: ../server
-      target: production
       dockerfile: ../server/Dockerfile
     command: npm run start:prod
     expose:
@@ -16,6 +15,8 @@ services:
       - /usr/src/app/node_modules
     env_file:
       - .env
+    environment:
+      - NODE_ENV=production
     depends_on:
       - redis
       - database
@@ -26,7 +27,6 @@ services:
     image: immich-microservices:1.4.0
     build:
       context: ../microservices
-      target: production
       dockerfile: ../microservices/Dockerfile
     command: npm run start:prod
     expose:
@@ -37,6 +37,8 @@ services:
       - /usr/src/app/node_modules
     env_file:
       - .env
+    environment:
+      - NODE_ENV=production
     depends_on:
       - database
     networks:

+ 1 - 28
microservices/Dockerfile

@@ -1,7 +1,4 @@
-##################################
-# DEVELOPMENT
-##################################
-FROM node:16-bullseye-slim AS development
+FROM node:16-bullseye-slim 
 
 ARG DEBIAN_FRONTEND=noninteractive
 
@@ -17,27 +14,3 @@ RUN npm install
 COPY . .
 
 RUN npm run build
-
-#################################
-# PRODUCTION
-#################################
-FROM node:16-bullseye-slim AS production
-
-ARG DEBIAN_FRONTEND=noninteractive
-ARG NODE_ENV=production
-ENV NODE_ENV=${NODE_ENV}
-
-WORKDIR /usr/src/app
-
-COPY package.json package-lock.json ./
-
-RUN apt-get update
-RUN apt-get install gcc g++ make cmake python3 python3-pip ffmpeg -y
-
-RUN npm install --only=production
-
-COPY . .
-
-COPY --from=development /usr/src/app/dist ./dist
-
-CMD ["node", "dist/main"]

+ 16 - 1
microservices/src/main.ts

@@ -1,10 +1,25 @@
 import { NestFactory } from '@nestjs/core';
 import { AppModule } from './app.module';
+import { Logger } from '@nestjs/common';
 
 async function bootstrap() {
   const app = await NestFactory.create(AppModule);
 
-  await app.listen(3001);
+  await app.listen(3001, () => {
+    if (process.env.NODE_ENV == 'development') {
+      Logger.log(
+        'Running Immich Microservices in DEVELOPMENT environment',
+        'IMMICH MICROSERVICES',
+      );
+    }
+
+    if (process.env.NODE_ENV == 'production') {
+      Logger.log(
+        'Running Immich Microservices in PRODUCTION environment',
+        'IMMICH MICROSERVICES',
+      );
+    }
+  });
 }
 
 bootstrap();

+ 2 - 28
server/Dockerfile

@@ -1,7 +1,4 @@
-##################################
-# DEVELOPMENT
-##################################
-FROM node:16-alpine3.14 AS development
+FROM node:16-alpine3.14
 
 ARG DEBIAN_FRONTEND=noninteractive
 
@@ -15,27 +12,4 @@ RUN npm install
 
 COPY . .
 
-RUN npm run build
-
-#################################
-# PRODUCTION
-#################################
-FROM node:16-alpine3.14 AS production
-
-ARG DEBIAN_FRONTEND=noninteractive
-ARG NODE_ENV=production
-ENV NODE_ENV=${NODE_ENV}
-
-WORKDIR /usr/src/app
-
-COPY package.json package-lock.json ./
-
-RUN apk add --update-cache build-base python3
-
-RUN npm install --only=production
-
-COPY . .
-
-COPY --from=development /usr/src/app/dist ./dist
-
-CMD ["node", "dist/main"]
+RUN npm run build

+ 3 - 1
server/src/app.module.ts

@@ -46,6 +46,8 @@ import { CommunicationModule } from './api-v1/communication/communication.module
 })
 export class AppModule implements NestModule {
   configure(consumer: MiddlewareConsumer): void {
-    // consumer.apply(AppLoggerMiddleware).forRoutes('*');
+    if (process.env.NODE_ENV == 'development') {
+      consumer.apply(AppLoggerMiddleware).forRoutes('*');
+    }
   }
 }

+ 10 - 1
server/src/main.ts

@@ -1,3 +1,4 @@
+import { Logger } from '@nestjs/common';
 import { NestFactory } from '@nestjs/core';
 import { NestExpressApplication } from '@nestjs/platform-express';
 import { AppModule } from './app.module';
@@ -10,6 +11,14 @@ async function bootstrap() {
 
   app.useWebSocketAdapter(new RedisIoAdapter(app));
 
-  await app.listen(3000);
+  await app.listen(3000, () => {
+    if (process.env.NODE_ENV == 'development') {
+      Logger.log('Running Immich Server in DEVELOPMENT environment', 'IMMICH SERVER');
+    }
+
+    if (process.env.NODE_ENV == 'production') {
+      Logger.log('Running Immich Server in PRODUCTION environment', 'IMMICH SERVER');
+    }
+  });
 }
 bootstrap();