Skip to content

Commit 9b97776

Browse files
author
Innokentii Kozlov
committed
run local env docker
1 parent 78cba7a commit 9b97776

File tree

13 files changed

+144
-49
lines changed

13 files changed

+144
-49
lines changed

Makefile

Lines changed: 24 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,18 @@
11
API_IMAGE_TAG ?= latest
22
MIGRATIONS_IMAGE_TAG ?= latest
3-
SSL_DIR ?= $(shell pwd)/ssl
3+
SSL_DIR ?= $(shell pwd)/infrastructure/docker/ssl
44
COMMON_NAME ?= localhost
55

6+
67
.PHONY: build-api-docker-image
78
build-api-docker-image:
89
docker build -t ghcr.io/kesha123/nodejs-rest-api/api:$(API_IMAGE_TAG) -f ./api/docker/Dockerfile ./api
910

11+
1012
.PHONY: build-migrations-docker-image
1113
build-migrations-docker-image:
1214
docker build -t ghcr.io/kesha123/nodejs-rest-api/migrations:$(MIGRATIONS_IMAGE_TAG) -f ./data/docker/Dockerfile ./data
1315

14-
.PHONY: build-datasource-npm-package
15-
build-datasource-npm-package:
16-
cd ./data && npm install
1716

1817
.PHONY: generate-tls-certificates
1918
generate-tls-certificates:
@@ -24,3 +23,24 @@ generate-tls-certificates:
2423
openssl rsa -in ${SSL_DIR}/privkey.pem -passin pass:${PASSPHRASE} -out ${SSL_DIR}/server.key
2524
openssl req -x509 -in ${SSL_DIR}/server.req -text -key ${SSL_DIR}/server.key -out ${SSL_DIR}/server.crt
2625
@sudo chmod 600 ${SSL_DIR}/server.key
26+
27+
28+
.PHONY: export-tls-certificates-to-env
29+
export-tls-certificates-to-env:
30+
@echo "Exporting TLS certificates to environment variables..."
31+
@mkdir -p $(shell pwd)/infrastructure/docker
32+
@echo "SSL_CERTIFICATE=$(shell cat $(SSL_DIR)/server.crt)" >> $(shell pwd)/infrastructure/docker/.env
33+
@echo "SSL_KEY=$(shell cat $(SSL_DIR)/server.key)" >> $(shell pwd)/infrastructure/docker/.env
34+
@echo "SSL_CA=$(shell cat $(SSL_DIR)/server.crt)" >> $(shell pwd)/infrastructure/docker/.env
35+
36+
37+
.PHONY: database-start-local
38+
database-start-local:
39+
docker compose -f ./infrastructure/docker/docker-compose.database.yml up -d
40+
docker exec -t nodejs-rest-api_postgres sh -c "psql -U postgres -d postgres -f /opt/sql/insert.sql"
41+
42+
43+
.PHONY: api-start-local
44+
api-start-local:
45+
docker compose -f ./infrastructure/docker/docker-compose.yml up -d
46+
docker exec -t nodejs-rest-api_postgres sh -c "psql -U postgres -d postgres -f /opt/sql/insert.sql"

api/src/datasource.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -22,9 +22,9 @@ export const getDataSourceOptions = (): DataSourceOptions => ({
2222
entities: [EmployeeEntity, DepartmentEntity],
2323
ssl: {
2424
rejectUnauthorized: false,
25-
ca: process.env.CA,
26-
key: process.env.KEY,
27-
cert: process.env.CERT,
25+
ca: process.env.SSL_CA,
26+
key: process.env.SSL_KEY,
27+
cert: process.env.SSL_CERTIFICATE,
2828
},
2929
});
3030

data/src/datasource.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -17,9 +17,9 @@ export const getDataSourceOptions = (): DataSourceOptions => ({
1717
migrations: [join(__dirname, './migrations', '**', '*.ts')],
1818
ssl: {
1919
rejectUnauthorized: false,
20-
ca: process.env.CA,
21-
key: process.env.KEY,
22-
cert: process.env.CERT,
20+
ca: process.env.SSL_CA,
21+
key: process.env.SSL_KEY,
22+
cert: process.env.SSL_CERTIFICATE,
2323
},
2424
});
2525

docker/docker-compose.yml

Lines changed: 0 additions & 39 deletions
This file was deleted.

infrastructure/docker/.env

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
### Api Environment Variables ###
2+
API_PORT=3000
3+
DATABASE_HOST=postgres
4+
POSTGRES_PORT=5432
5+
POSTGRES_USER=postgres
6+
POSTGRES_PASSWORD=postgres
7+
POSTGRES_DB=postgres
8+
9+
### PostgreSQL Environment Variables ###
10+
POSTGRES_DB_NAME=postgres
11+
POSTGRES_PASSWORD=postgres
12+
POSTGRES_USER=postgres
13+
14+
SSL_CERTIFICATE=Certificate: Data: Version: 3 (0x2) Serial Number: 3c:da:2f:fd:38:d2:fe:d5:8c:8a:f6:55:1e:a1:d7:0a:c4:82:6e:97 Signature Algorithm: sha256WithRSAEncryption Issuer: CN = localhost Validity Not Before: Jun 16 18:54:39 2025 GMT Not After : Jul 16 18:54:39 2025 GMT Subject: CN = localhost Subject Public Key Info: Public Key Algorithm: rsaEncryption Public-Key: (2048 bit) Modulus: 00:c9:b0:06:5c:9f:98:77:fb:bd:57:99:4e:1e:2b: 3d:a5:6d:b8:6c:9f:79:29:ca:25:e1:2a:40:cd:2a: 94:30:42:c3:a0:6c:d3:37:66:fe:b8:e0:f7:d3:c1: 68:9e:1c:e4:6f:30:7f:d7:cc:1b:b0:0a:87:39:a4: 6a:b9:89:87:e9:b2:2e:ff:b0:f3:c4:ca:68:fc:6a: 73:4e:cb:84:2f:19:f8:d6:9d:a6:d4:a8:be:ce:a7: 28:c2:c4:7e:f1:36:6b:46:6b:36:10:d9:01:e1:0d: c0:5e:ed:a0:c5:23:61:5e:7d:f0:5e:18:09:73:00: e0:76:3f:fa:32:0f:eb:78:0b:26:6a:79:ed:c4:f1: 1d:33:b3:ba:e5:56:82:69:1a:13:56:9c:f4:b7:8f: 67:85:32:1d:29:46:7e:9f:34:75:f1:de:a6:4e:11: 53:eb:cc:e3:4a:4f:ec:f1:eb:33:3c:38:af:25:0c: c5:72:d8:22:5c:2f:d9:d3:ca:f1:3c:df:f1:2d:86: c6:1e:80:a5:27:85:99:79:b9:bc:c9:71:8f:f6:be: 73:e8:a1:c5:f0:29:1b:cc:5c:e1:71:15:dc:b5:8b: 5c:f3:ec:13:1a:a5:5c:a1:ec:42:07:7f:ff:2c:27: ad:ac:5b:36:94:f0:01:9a:3d:f4:94:17:d6:2e:fe: 4b:d9 Exponent: 65537 (0x10001) X509v3 extensions: X509v3 Subject Key Identifier: F5:30:8F:65:80:0F:A3:02:96:85:6B:90:14:0C:03:6D:E5:A6:3E:4E X509v3 Authority Key Identifier: F5:30:8F:65:80:0F:A3:02:96:85:6B:90:14:0C:03:6D:E5:A6:3E:4E X509v3 Basic Constraints: critical CA:TRUE Signature Algorithm: sha256WithRSAEncryption Signature Value: 05:51:f8:0f:87:19:a3:ab:ed:c5:e5:8d:0a:05:f5:e9:45:2e: ac:07:16:99:7f:01:57:f4:e7:51:f8:bc:eb:57:41:96:07:c5: 22:4c:de:45:24:c9:57:ae:66:98:6e:41:4f:fc:49:cf:26:62: ce:c4:68:b3:06:23:ed:19:a1:a7:91:09:e8:59:af:82:36:d0: e1:38:cd:59:ca:66:dc:92:55:60:f8:08:87:6e:0d:a8:45:41: 1a:1a:5a:fc:55:1e:ad:92:a5:7c:4f:8f:d6:8c:d5:6f:11:79: a9:d1:70:3c:3f:c8:67:de:7a:5c:ce:03:4d:1f:27:43:6e:e2: 3a:bb:84:7b:c3:e1:4d:e3:e4:06:74:d8:5e:59:9b:3f:9f:9a: 4d:41:93:90:3d:3a:4f:47:c1:8b:37:7c:0f:38:db:de:8a:ef: fc:41:7b:41:65:51:41:9b:9d:14:21:e9:a7:4e:64:e2:59:9f: f0:d3:b5:1a:30:a7:df:d6:10:83:93:9f:fd:98:e6:54:b8:f3: cd:c8:14:76:2e:ba:3e:2b:22:08:4d:30:65:0c:2f:a8:18:c9: 37:df:b0:16:2c:70:d4:02:9f:38:c8:0c:4a:e4:2c:17:0b:68: 23:66:d8:95:b6:93:df:b4:cc:e7:39:dc:34:c1:3e:15:fc:c7: 50:9f:ca:56 -----BEGIN CERTIFICATE----- MIIDCTCCAfGgAwIBAgIUPNov/TjS/tWMivZVHqHXCsSCbpcwDQYJKoZIhvcNAQEL BQAwFDESMBAGA1UEAwwJbG9jYWxob3N0MB4XDTI1MDYxNjE4NTQzOVoXDTI1MDcx NjE4NTQzOVowFDESMBAGA1UEAwwJbG9jYWxob3N0MIIBIjANBgkqhkiG9w0BAQEF AAOCAQ8AMIIBCgKCAQEAybAGXJ+Yd/u9V5lOHis9pW24bJ95Kcol4SpAzSqUMELD oGzTN2b+uOD308FonhzkbzB/18wbsAqHOaRquYmH6bIu/7DzxMpo/GpzTsuELxn4 1p2m1Ki+zqcowsR+8TZrRms2ENkB4Q3AXu2gxSNhXn3wXhgJcwDgdj/6Mg/reAsm anntxPEdM7O65VaCaRoTVpz0t49nhTIdKUZ+nzR18d6mThFT68zjSk/s8eszPDiv JQzFctgiXC/Z08rxPN/xLYbGHoClJ4WZebm8yXGP9r5z6KHF8CkbzFzhcRXctYtc 8+wTGqVcoexCB3//LCetrFs2lPABmj30lBfWLv5L2QIDAQABo1MwUTAdBgNVHQ4E FgQU9TCPZYAPowKWhWuQFAwDbeWmPk4wHwYDVR0jBBgwFoAU9TCPZYAPowKWhWuQ FAwDbeWmPk4wDwYDVR0TAQH/BAUwAwEB/zANBgkqhkiG9w0BAQsFAAOCAQEABVH4 D4cZo6vtxeWNCgX16UUurAcWmX8BV/TnUfi861dBlgfFIkzeRSTJV65mmG5BT/xJ zyZizsRoswYj7Rmhp5EJ6FmvgjbQ4TjNWcpm3JJVYPgIh24NqEVBGhpa/FUerZKl fE+P1ozVbxF5qdFwPD/IZ956XM4DTR8nQ27iOruEe8PhTePkBnTYXlmbP5+aTUGT kD06T0fBizd8Dzjb3orv/EF7QWVRQZudFCHpp05k4lmf8NO1GjCn39YQg5Of/Zjm VLjzzcgUdi66PisiCE0wZQwvqBjJN9+wFixw1AKfOMgMSuQsFwtoI2bYlbaT37TM 5zncNME+FfzHUJ/KVg== -----END CERTIFICATE-----
15+
SSL_KEY=-----BEGIN PRIVATE KEY----- MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQDJsAZcn5h3+71X mU4eKz2lbbhsn3kpyiXhKkDNKpQwQsOgbNM3Zv644PfTwWieHORvMH/XzBuwCoc5 pGq5iYfpsi7/sPPEymj8anNOy4QvGfjWnabUqL7OpyjCxH7xNmtGazYQ2QHhDcBe 7aDFI2FeffBeGAlzAOB2P/oyD+t4CyZqee3E8R0zs7rlVoJpGhNWnPS3j2eFMh0p Rn6fNHXx3qZOEVPrzONKT+zx6zM8OK8lDMVy2CJcL9nTyvE83/EthsYegKUnhZl5 ubzJcY/2vnPoocXwKRvMXOFxFdy1i1zz7BMapVyh7EIHf/8sJ62sWzaU8AGaPfSU F9Yu/kvZAgMBAAECggEAVdNmuaaemrxRJARUdkkfWBTbTLoGNO7VdL5mygfq/KiE l/GHZkWZcrIlNALTUqln2hsQ5BNy2tR4G+LoGaE5aYzOLDewXFdoGrXv8KFxVBvg xO9cjZVrcQQ4N72naV0nhFVeMgguoQcZjCvh5NI7/ppoHZpr9vjyC9AI16HnqXKP DsninJQU58tP7LUM+h2o2GTNziAfep6P36wMVdGOYT5heXxDFwHLn5Li38kdoSeG RGvC3b02Ap8qgx5mYJIUs5QV+Yomn/RQRn2BiEC2Q6DNTbu9ganyN8wlct9jNbtx DQ8yW5Y+cJSwSP8zNiwNzh8oUPkG+uImqxoLOpNgkwKBgQD4qJm7V0QGkpVqAHqE vtXMtqvdjphA7G3pTdztyf3qX+SaKD5DXxlDbpa7EaGNyyj1RyaYX4G73T76z0qc k1aliPKhuRwTIzUWsMBPS3TxruayphQUpNSRp6n5dPDCjgVqFCo0Ef8UObYbt0PQ W1+Bd3NKUYfKgFA8q16QYz33KwKBgQDPpGkO7pXdWK1WoFgtbI6OV9Ar2LJdKC0M w7BbeDZ+LeaBz4f/06xfG6FhG3HJ4aU+31OF7qa6I+OCYYWLbnU/7t6ea+Gs0K96 nNLIPMdSjU2DfJ89y5JWJPPZJ8o5qV+w4PBuEcEsdkOW7Lr8P1KSJHTwBWWi4dT+ QM/ei3eHCwKBgADENEUZjcIfbYp4GeiS1gHdhkYWjG2WzPftH4M0Hi48wW2gNiDr CB7nFlvZQBA50hR/daT+ll3H3svTG73Dzn6QH39UHLwKXb2GKfGUn/WmvltKm8E8 iNMyGxoDvEI9QdMD4OVsMMcVLnSDahgYUAEMJzTRb4O2RYkKVi5HwAclAoGASAgi BfMQfDP6FfYUANYK8ihWaA+JeLWqQyZTtLeUN9uWfmvPIxl8T5YXOse5hq5Hk/MH V4v9vM8caquIF2GfPSmRguWr6TaP2XozyREEmIe6XyXJXDeVsVqqWSfriGtQbdzq q1Rvbgws0FuZVk5lR5tsEaPdqU6sg/NZ6Tr6oRcCgYEAzeI7lhVd0ZceYLNxaby2 gra/gnhKah63hL82xqQcyUloIbAFtRBUDMzpDaJzKDOLpOoyaSUsJfjpFjTL7Zx1 Q1PrGGnldJH3YnFPX/JKSfHp4Ohm3pLLVRlMkq8ppj2EWDxXFSafwdDA64QcEctc B5Si2dC9KHSqM6UD2Q8jg8w= -----END PRIVATE KEY-----
16+
SSL_CA=Certificate: Data: Version: 3 (0x2) Serial Number: 3c:da:2f:fd:38:d2:fe:d5:8c:8a:f6:55:1e:a1:d7:0a:c4:82:6e:97 Signature Algorithm: sha256WithRSAEncryption Issuer: CN = localhost Validity Not Before: Jun 16 18:54:39 2025 GMT Not After : Jul 16 18:54:39 2025 GMT Subject: CN = localhost Subject Public Key Info: Public Key Algorithm: rsaEncryption Public-Key: (2048 bit) Modulus: 00:c9:b0:06:5c:9f:98:77:fb:bd:57:99:4e:1e:2b: 3d:a5:6d:b8:6c:9f:79:29:ca:25:e1:2a:40:cd:2a: 94:30:42:c3:a0:6c:d3:37:66:fe:b8:e0:f7:d3:c1: 68:9e:1c:e4:6f:30:7f:d7:cc:1b:b0:0a:87:39:a4: 6a:b9:89:87:e9:b2:2e:ff:b0:f3:c4:ca:68:fc:6a: 73:4e:cb:84:2f:19:f8:d6:9d:a6:d4:a8:be:ce:a7: 28:c2:c4:7e:f1:36:6b:46:6b:36:10:d9:01:e1:0d: c0:5e:ed:a0:c5:23:61:5e:7d:f0:5e:18:09:73:00: e0:76:3f:fa:32:0f:eb:78:0b:26:6a:79:ed:c4:f1: 1d:33:b3:ba:e5:56:82:69:1a:13:56:9c:f4:b7:8f: 67:85:32:1d:29:46:7e:9f:34:75:f1:de:a6:4e:11: 53:eb:cc:e3:4a:4f:ec:f1:eb:33:3c:38:af:25:0c: c5:72:d8:22:5c:2f:d9:d3:ca:f1:3c:df:f1:2d:86: c6:1e:80:a5:27:85:99:79:b9:bc:c9:71:8f:f6:be: 73:e8:a1:c5:f0:29:1b:cc:5c:e1:71:15:dc:b5:8b: 5c:f3:ec:13:1a:a5:5c:a1:ec:42:07:7f:ff:2c:27: ad:ac:5b:36:94:f0:01:9a:3d:f4:94:17:d6:2e:fe: 4b:d9 Exponent: 65537 (0x10001) X509v3 extensions: X509v3 Subject Key Identifier: F5:30:8F:65:80:0F:A3:02:96:85:6B:90:14:0C:03:6D:E5:A6:3E:4E X509v3 Authority Key Identifier: F5:30:8F:65:80:0F:A3:02:96:85:6B:90:14:0C:03:6D:E5:A6:3E:4E X509v3 Basic Constraints: critical CA:TRUE Signature Algorithm: sha256WithRSAEncryption Signature Value: 05:51:f8:0f:87:19:a3:ab:ed:c5:e5:8d:0a:05:f5:e9:45:2e: ac:07:16:99:7f:01:57:f4:e7:51:f8:bc:eb:57:41:96:07:c5: 22:4c:de:45:24:c9:57:ae:66:98:6e:41:4f:fc:49:cf:26:62: ce:c4:68:b3:06:23:ed:19:a1:a7:91:09:e8:59:af:82:36:d0: e1:38:cd:59:ca:66:dc:92:55:60:f8:08:87:6e:0d:a8:45:41: 1a:1a:5a:fc:55:1e:ad:92:a5:7c:4f:8f:d6:8c:d5:6f:11:79: a9:d1:70:3c:3f:c8:67:de:7a:5c:ce:03:4d:1f:27:43:6e:e2: 3a:bb:84:7b:c3:e1:4d:e3:e4:06:74:d8:5e:59:9b:3f:9f:9a: 4d:41:93:90:3d:3a:4f:47:c1:8b:37:7c:0f:38:db:de:8a:ef: fc:41:7b:41:65:51:41:9b:9d:14:21:e9:a7:4e:64:e2:59:9f: f0:d3:b5:1a:30:a7:df:d6:10:83:93:9f:fd:98:e6:54:b8:f3: cd:c8:14:76:2e:ba:3e:2b:22:08:4d:30:65:0c:2f:a8:18:c9: 37:df:b0:16:2c:70:d4:02:9f:38:c8:0c:4a:e4:2c:17:0b:68: 23:66:d8:95:b6:93:df:b4:cc:e7:39:dc:34:c1:3e:15:fc:c7: 50:9f:ca:56 -----BEGIN CERTIFICATE----- MIIDCTCCAfGgAwIBAgIUPNov/TjS/tWMivZVHqHXCsSCbpcwDQYJKoZIhvcNAQEL BQAwFDESMBAGA1UEAwwJbG9jYWxob3N0MB4XDTI1MDYxNjE4NTQzOVoXDTI1MDcx NjE4NTQzOVowFDESMBAGA1UEAwwJbG9jYWxob3N0MIIBIjANBgkqhkiG9w0BAQEF AAOCAQ8AMIIBCgKCAQEAybAGXJ+Yd/u9V5lOHis9pW24bJ95Kcol4SpAzSqUMELD oGzTN2b+uOD308FonhzkbzB/18wbsAqHOaRquYmH6bIu/7DzxMpo/GpzTsuELxn4 1p2m1Ki+zqcowsR+8TZrRms2ENkB4Q3AXu2gxSNhXn3wXhgJcwDgdj/6Mg/reAsm anntxPEdM7O65VaCaRoTVpz0t49nhTIdKUZ+nzR18d6mThFT68zjSk/s8eszPDiv JQzFctgiXC/Z08rxPN/xLYbGHoClJ4WZebm8yXGP9r5z6KHF8CkbzFzhcRXctYtc 8+wTGqVcoexCB3//LCetrFs2lPABmj30lBfWLv5L2QIDAQABo1MwUTAdBgNVHQ4E FgQU9TCPZYAPowKWhWuQFAwDbeWmPk4wHwYDVR0jBBgwFoAU9TCPZYAPowKWhWuQ FAwDbeWmPk4wDwYDVR0TAQH/BAUwAwEB/zANBgkqhkiG9w0BAQsFAAOCAQEABVH4 D4cZo6vtxeWNCgX16UUurAcWmX8BV/TnUfi861dBlgfFIkzeRSTJV65mmG5BT/xJ zyZizsRoswYj7Rmhp5EJ6FmvgjbQ4TjNWcpm3JJVYPgIh24NqEVBGhpa/FUerZKl fE+P1ozVbxF5qdFwPD/IZ956XM4DTR8nQ27iOruEe8PhTePkBnTYXlmbP5+aTUGT kD06T0fBizd8Dzjb3orv/EF7QWVRQZudFCHpp05k4lmf8NO1GjCn39YQg5Of/Zjm VLjzzcgUdi66PisiCE0wZQwvqBjJN9+wFixw1AKfOMgMSuQsFwtoI2bYlbaT37TM 5zncNME+FfzHUJ/KVg== -----END CERTIFICATE-----
Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
version: "3.8"
2+
3+
4+
services:
5+
postgres:
6+
image: ghcr.io/kesha123/nodejs-rest-api/postgres:${DATABASE_IMAGE_TAG:-latest}
7+
container_name: postgres
8+
command: >
9+
-c ssl=on
10+
-c ssl_cert_file=/var/lib/postgresql/server.crt
11+
-c ssl_key_file=/var/lib/postgresql/server.key
12+
env_file:
13+
- .env
14+
volumes:
15+
- ./ssl/server.crt:/var/lib/postgresql/server.crt:ro
16+
- ./ssl/server.key:/var/lib/postgresql/server.key:ro
17+
- ../sql/insert.sql:/opt/sql/insert.sql:ro
18+
- postgres_data:/var/lib/postgresql/data
19+
networks:
20+
- nodejs-rest-api
21+
ports:
22+
- 5432:5432
23+
healthcheck:
24+
test: ["CMD-SHELL", "pg_isready"]
25+
interval: 10s
26+
timeout: 5s
27+
retries: 5
28+
29+
migrations:
30+
image: ghcr.io/kesha123/nodejs-rest-api/migrations:${MIGRATIONS_IMAGE_TAG:-latest}
31+
env_file:
32+
- .env
33+
depends_on:
34+
- postgres
35+
36+
37+
networks:
38+
nodejs-rest-api:
39+
driver: bridge
40+
ipam:
41+
config:
42+
- subnet: 172.28.0.0/16
43+
44+
45+
volumes:
46+
postgres_data:
47+
driver: local
Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
version: "3.8"
2+
3+
4+
include:
5+
- docker-compose.database.yaml
6+
7+
8+
services:
9+
nginx-proxy:
10+
image: ghcr.io/kesha123/nodejs-rest-api/nginx-proxy:${NGINX_PROXY_IMAGE_TAG:-stable-alpine3.21}
11+
container_name: nginx-proxy
12+
volumes:
13+
- ./nginx/nginx.conf:/etc/nginx/nginx.conf
14+
networks:
15+
- nodejs-rest-api
16+
ports:
17+
- 8080:80
18+
- 4430:443
19+
depends_on:
20+
- api
21+
22+
api:
23+
image: ghcr.io/kesha123/nodejs-rest-api/api:${API_IMAGE_TAG:-latest}
24+
container_name: api
25+
env_file:
26+
- .env
27+
depends_on:
28+
- postgres
29+
- migrations
30+
networks:
31+
- nodejs-rest-api

infrastructure/docker/nginx.conf

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
events {
2+
worker_connections 1024;
3+
}
4+
5+
upstream api {
6+
server api:3000;
7+
}
8+
9+
http {
10+
server {
11+
listen 80;
12+
13+
location / {
14+
proxy_pass http://api;
15+
proxy_set_header Host $host;
16+
proxy_set_header X-Real-IP $remote_addr;
17+
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
18+
proxy_set_header X-Forwarded-Proto $scheme;
19+
}
20+
}
File renamed without changes.
File renamed without changes.

0 commit comments

Comments
 (0)