diff --git a/mobile/lib/modules/login/ui/login_form.dart b/mobile/lib/modules/login/ui/login_form.dart index b99aaefe8e..002e3c072c 100644 --- a/mobile/lib/modules/login/ui/login_form.dart +++ b/mobile/lib/modules/login/ui/login_form.dart @@ -13,7 +13,7 @@ class LoginForm extends HookConsumerWidget { Widget build(BuildContext context, WidgetRef ref) { final usernameController = useTextEditingController(text: 'testuser@email.com'); final passwordController = useTextEditingController(text: 'password'); - final serverEndpointController = useTextEditingController(text: 'http://192.168.1.103:3000'); + final serverEndpointController = useTextEditingController(text: 'http://192.168.1.103:2283'); return Center( child: ConstrainedBox( diff --git a/server/.dockerignore b/server/.dockerignore index 2bf223c18a..834ab88b61 100644 --- a/server/.dockerignore +++ b/server/.dockerignore @@ -1,3 +1,4 @@ node_modules/ upload/ -dist/ \ No newline at end of file +dist/ + diff --git a/server/docker-compose.yml b/server/docker-compose.yml index fae9111f3c..d896aff895 100644 --- a/server/docker-compose.yml +++ b/server/docker-compose.yml @@ -10,8 +10,10 @@ services: target: development dockerfile: ./Dockerfile-minimal command: yarn start:dev - ports: - - "3000:3000" + # ports: + # - "3000:3000" + expose: + - 3000 volumes: - .:/usr/src/app - userdata:/usr/src/app/upload @@ -47,6 +49,21 @@ services: networks: - immich_network + nginx: + container_name: proxy_nginx + image: nginx:latest + volumes: + - ./settings/nginx-conf:/etc/nginx/conf.d + ports: + - 2283:80 + - 2284:443 + logging: + driver: none + networks: + - immich_network + depends_on: + - server + networks: immich_network: volumes: diff --git a/server/settings/nginx-conf/nginx.conf b/server/settings/nginx-conf/nginx.conf new file mode 100644 index 0000000000..7642f8c8a4 --- /dev/null +++ b/server/settings/nginx-conf/nginx.conf @@ -0,0 +1,18 @@ +server { + listen 80; + + location / { + proxy_buffering off; + proxy_buffer_size 16k; + proxy_busy_buffers_size 24k; + proxy_buffers 64 4k; + proxy_force_ranges on; + + proxy_set_header Host $host; + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + proxy_set_header X-Forwarded-Proto $scheme; + + proxy_pass http://immich_server:3000; + } +} \ No newline at end of file diff --git a/server/src/api-v1/asset/asset.controller.ts b/server/src/api-v1/asset/asset.controller.ts index 2bc720317e..acc1e5a052 100644 --- a/server/src/api-v1/asset/asset.controller.ts +++ b/server/src/api-v1/asset/asset.controller.ts @@ -87,7 +87,6 @@ export class AssetController { return new StreamableFile(file); } else if (asset.type == AssetType.VIDEO) { // Handle Handling Video - const { size } = await fileInfo(asset.originalPath); const range = headers.range; @@ -108,6 +107,7 @@ export class AssetController { // Handle unavailable range request if (start >= size || end >= size) { + console.error('Bad Request'); // Return the 416 Range Not Satisfiable. res.status(416).set({ 'Content-Range': `bytes */${size}`, @@ -117,6 +117,8 @@ export class AssetController { } /** Sending Partial Content With HTTP Code 206 */ + console.log('Sendinf file with type ', asset.mimeType); + res.status(206).set({ 'Content-Range': `bytes ${start}-${end}/${size}`, 'Accept-Ranges': 'bytes', @@ -127,8 +129,16 @@ export class AssetController { const videoStream = createReadStream(asset.originalPath, { start: start, end: end }); return new StreamableFile(videoStream); + } else { + res.set({ + 'Content-Type': asset.mimeType, + }); + + return new StreamableFile(createReadStream(asset.originalPath)); } } + + console.log('SHOULD NOT BE HERE'); } @Get('/all')