diff --git a/docker-compose.server.yml b/docker-compose.server.yml new file mode 100644 index 0000000..ce9d136 --- /dev/null +++ b/docker-compose.server.yml @@ -0,0 +1,36 @@ +services: + app: + image: app:latest + build: + context: . + dockerfile: docker/Dockerfile + target: prod + labels: + - "traefik.enable=true" + - "traefik.http.routers.calendi.entrypoints=web" + - "traefik.http.routers.calendi.rule=Host(`calendi.strolap.com`)" + - "traefik.http.routers.calendi.tls=true" + - "traefik.http.routers.calendi.certresolver=strolap" + - "traefik.http.services.calendi.loadbalancer.server.port=80" + networks: + - proxy + + postgres: + image: postgres:15 + environment: + POSTGRES_USER: postgres + POSTGRES_PASSWORD: postgres + POSTGRES_DB: postgres + ports: + - "5432:5432" + volumes: + - ./var/postgres_data:/var/lib/postgresql/data + networks: + - proxy + +networks: + proxy: + external: true + +volumes: + postgres_data: diff --git a/docker-compose.yml b/docker-compose.yml index 1f89138..ca32db1 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -2,13 +2,19 @@ services: app: image: app:latest build: - context: docker - dockerfile: Dockerfile - ports: - - "9010:80" + context: . + dockerfile: docker/Dockerfile + target: dev volumes: - ./:/var/www/html - ./docker/nginx/default.conf:/etc/nginx/sites-enabled/default + labels: + - "traefik.enable=true" + - "traefik.http.routers.app.entrypoints=web" + - "traefik.http.routers.app.rule=Host(`calendi.test`)" + - "traefik.http.services.app.loadbalancer.server.port=80" + networks: + - proxy postgres: image: postgres:15 @@ -20,6 +26,12 @@ services: - "5432:5432" volumes: - ./var/postgres_data:/var/lib/postgresql/data + networks: + - proxy + +networks: + proxy: + external: true volumes: postgres_data: diff --git a/docker/Dockerfile b/docker/Dockerfile index e517535..1b4fa01 100644 --- a/docker/Dockerfile +++ b/docker/Dockerfile @@ -1,4 +1,4 @@ -FROM debian:latest +FROM debian:latest AS builder # Install dependencies RUN apt-get update && apt-get install -y \ @@ -52,8 +52,23 @@ RUN apt-get clean && rm -rf /var/lib/apt/lists/* WORKDIR /var/www/html # Copy entrypoint script -COPY entrypoint.sh /entrypoint.sh +COPY docker/entrypoint.sh /entrypoint.sh RUN chmod +x /entrypoint.sh +FROM builder AS dev + # Set entrypoint -ENTRYPOINT ["/entrypoint.sh"] \ No newline at end of file +ENTRYPOINT ["/entrypoint.sh"] + +FROM builder AS prod + +WORKDIR /var/www/html + +COPY . . +COPY docker/nginx/default.conf /etc/nginx/sites-enabled/default + +RUN cd backend && composer install +RUN cd frontend && npm install && npm run build + +# Set entrypoint +ENTRYPOINT ["/entrypoint.sh"] diff --git a/docker/nginx/default.conf b/docker/nginx/default.conf index ee3bb15..eeccb2f 100644 --- a/docker/nginx/default.conf +++ b/docker/nginx/default.conf @@ -1,6 +1,6 @@ server { listen 80; - server_name localhost; + server_name calendi.test; root /var/www/html/backend/public; index index.php index.html; @@ -18,7 +18,7 @@ server { # React Frontend location / { - proxy_pass http://localhost:9010/; + proxy_pass http://localhost:8888/; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection 'upgrade'; diff --git a/frontend/package.json b/frontend/package.json index cfd0395..b2b667b 100644 --- a/frontend/package.json +++ b/frontend/package.json @@ -20,7 +20,7 @@ "web-vitals": "^2.1.4" }, "scripts": { - "start": "export PORT=9010 && react-scripts start", + "start": "export PORT=8888 && react-scripts start", "build": "react-scripts build", "test": "react-scripts test", "eject": "react-scripts eject" diff --git a/frontend/src/lib/api/client.ts b/frontend/src/lib/api/client.ts index de2e8af..c644186 100644 --- a/frontend/src/lib/api/client.ts +++ b/frontend/src/lib/api/client.ts @@ -9,7 +9,7 @@ export type RequestOptions = { headers?: Record; }; -const API_BASE_URL = process.env.REACT_APP_API_URL || 'http://localhost:9010'; +const API_BASE_URL = process.env.REACT_APP_API_URL || 'http://calendi.test'; export class ApiError extends Error { status: number; @@ -77,6 +77,7 @@ export async function del(endpoint: string, options?: RequestOptions): Promis function buildUrl(endpoint: string, params?: Record): string { const url = new URL(`${API_BASE_URL}${endpoint}`); + url.port = window.location.port; if (params) { Object.entries(params).forEach(([key, value]) => {