diff --git a/backend/src/main/java/net/hackyourfuture/coursehub/CourseHubApplication.java b/backend/src/main/java/net/hackyourfuture/coursehub/CourseHubApplication.java index 746530e..54bdceb 100644 --- a/backend/src/main/java/net/hackyourfuture/coursehub/CourseHubApplication.java +++ b/backend/src/main/java/net/hackyourfuture/coursehub/CourseHubApplication.java @@ -2,7 +2,6 @@ import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; - @SpringBootApplication public class CourseHubApplication { diff --git a/backend/src/main/java/net/hackyourfuture/coursehub/SwaggerBehindReverseProxyConfig.java b/backend/src/main/java/net/hackyourfuture/coursehub/SwaggerBehindReverseProxyConfig.java index 426540f..57b71d3 100644 --- a/backend/src/main/java/net/hackyourfuture/coursehub/SwaggerBehindReverseProxyConfig.java +++ b/backend/src/main/java/net/hackyourfuture/coursehub/SwaggerBehindReverseProxyConfig.java @@ -1,6 +1,7 @@ package net.hackyourfuture.coursehub; import org.springdoc.core.customizers.ServerBaseUrlCustomizer; +import org.springframework.beans.factory.annotation.Value; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; @@ -10,13 +11,11 @@ @Configuration public class SwaggerBehindReverseProxyConfig { + @Value("${open-api.suffix:#{environment.OPEN_API_SUFFIX}}") + private String openApiSuffix; + @Bean ServerBaseUrlCustomizer serverBaseUrlCustomizer() { - return (serverBaseUrl, request) -> { - if (serverBaseUrl.contains("coursehub.hyf.dev")) { - return serverBaseUrl + "/api"; - } - return serverBaseUrl; - }; + return (serverBaseUrl, request) -> serverBaseUrl + openApiSuffix; } } diff --git a/backend/src/main/resources/application.properties b/backend/src/main/resources/application.properties index 76f0e35..b5057e2 100644 --- a/backend/src/main/resources/application.properties +++ b/backend/src/main/resources/application.properties @@ -11,4 +11,9 @@ server.port=8080 # Session in Redis Configuration # We want users to stay logged in for 7 days for convenience -spring.session.timeout=7d \ No newline at end of file +spring.session.timeout=7d + +open-api.suffix=/api + +springdoc.swagger-ui.url=${open-api.suffix}/v3/api-docs +springdoc.swagger-ui.config-url=${open-api.suffix}/v3/api-docs/swagger-config diff --git a/deployment/README.md b/deployment/README.md index 23d55e4..20379d2 100644 --- a/deployment/README.md +++ b/deployment/README.md @@ -13,3 +13,21 @@ cd /opt/course-hub docker compose down docker compose up -d ``` + +### Operations + +SSH into the server: +```bash +ssh user@server +cd /opt/course-hub +``` + +Docker status +```bash +docker stats +``` + +Checking logs: +```bash +docker compose logs -f +``` diff --git a/deployment/docker-compose.yaml b/deployment/docker-compose.yaml index d52a412..108dfc2 100644 --- a/deployment/docker-compose.yaml +++ b/deployment/docker-compose.yaml @@ -5,16 +5,23 @@ services: nginx: image: nginx:latest container_name: nginx + restart: on-failure ports: - "443:443" - "80:80" volumes: - ./nginx.conf:/etc/nginx/conf.d/default.conf - ./certificates:/etc/nginx/certificates + depends_on: + course-hub-backend: + condition: service_started + course-hub-frontend: + condition: service_started # Postgres, main data store used by course-hub-backend postgres: image: postgres:18 container_name: postgres + restart: on-failure environment: POSTGRES_USER: course_user POSTGRES_PASSWORD: course_user_password @@ -27,6 +34,7 @@ services: redis: image: redis:7 container_name: redis + restart: on-failure volumes: - redis:/data ports: @@ -34,6 +42,7 @@ services: course-hub-frontend: image: ghcr.io/hackyourfuture/course-hub-frontend:latest container_name: course-hub-frontend + restart: on-failure environment: BACKEND_URL: http://localhost/api ports: @@ -41,11 +50,13 @@ services: course-hub-backend: image: ghcr.io/hackyourfuture/course-hub-backend:latest container_name: course-hub-backend + restart: on-failure environment: - JVM_TOOL_OPTS: -XX:ReservedCodeCacheSize=80M + JVM_TOOL_OPTS: -XX:ReservedCodeCacheSize=120M BPL_JVM_THREAD_COUNT: 20 SPRING_DATASOURCE_URL: jdbc:postgresql://postgres:5432/coursehub SPRING_DATA_REDIS_HOST: redis + OPEN_API_SUFFIX: /api depends_on: postgres: condition: service_started @@ -56,6 +67,8 @@ services: # Agent that monitors whenever new versions of images are published and recreates the containers watchtower: image: containrrr/watchtower + container_name: watchtower + restart: on-failure volumes: - /var/run/docker.sock:/var/run/docker.sock command: --interval 30 diff --git a/frontend/nginx.conf b/frontend/nginx.conf index 15055d7..23bc49f 100644 --- a/frontend/nginx.conf +++ b/frontend/nginx.conf @@ -1,5 +1,5 @@ server { - listen 80; + listen 3000; server_name _; root /usr/share/nginx/html;