From 52d8ea5988b940135febad95409dd4954ffbf567 Mon Sep 17 00:00:00 2001 From: HumanoidSandvichDispenser Date: Tue, 10 Dec 2024 18:18:40 -0800 Subject: [PATCH] Prepare for production --- README.md | 27 +++++ availabili.tf/Dockerfile.prod | 7 ++ .../src/components/AvailabilityComboBox.vue | 103 ------------------ .../src/components/AvailabilityGrid.vue | 69 +++++------- .../src/components/EventSchedulerForm.vue | 15 ++- .../src/components/IntegrationDetails.vue | 76 ------------- .../src/components/PlayerTeamCard.vue | 1 + availabili.tf/src/components/RoleTag.vue | 14 +-- .../src/components/SchedulePlayerList.vue | 6 +- .../src/components/SchedulePlayerListItem.vue | 4 +- .../src/components/WeekSelectionBox.vue | 5 +- availabili.tf/src/main.ts | 1 + availabili.tf/src/stores/auth.ts | 3 +- availabili.tf/src/stores/roster.ts | 6 +- .../src/stores/teams/integrations.ts | 8 +- availabili.tf/src/views/RosterBuilderView.vue | 23 ++-- .../src/views/RosterBuilderViewDragDrop.vue | 85 --------------- availabili.tf/src/views/ScheduleView.vue | 3 +- availabili.tf/src/views/TeamDetailsView.vue | 4 +- .../views/TeamSettings/IntegrationsView.vue | 3 +- availabili.tf/tsconfig.json | 5 +- backend-flask/Dockerfile.dev | 19 ++++ backend-flask/app.py | 3 +- backend-flask/app_db.py | 13 ++- backend-flask/jobs/fetch_logstf.py | 70 +++++++----- backend-flask/make_celery.py | 2 +- backend-flask/models/__init__.py | 17 +++ backend-flask/requirements.txt | 4 + backend-flask/team.py | 12 +- backend-flask/team_integration.py | 4 +- backend-flask/team_invite.py | 6 +- docker-compose.prod.yml | 102 +++++++++++++++++ docker-compose.yml | 2 + nginx/production.conf | 30 +++++ 34 files changed, 366 insertions(+), 386 deletions(-) create mode 100644 availabili.tf/Dockerfile.prod delete mode 100644 availabili.tf/src/components/AvailabilityComboBox.vue delete mode 100644 availabili.tf/src/components/IntegrationDetails.vue delete mode 100644 availabili.tf/src/views/RosterBuilderViewDragDrop.vue create mode 100644 backend-flask/Dockerfile.dev create mode 100644 docker-compose.prod.yml create mode 100644 nginx/production.conf diff --git a/README.md b/README.md index 2d13ac3..236d62c 100644 --- a/README.md +++ b/README.md @@ -13,17 +13,44 @@ Scheduling for TF2 OpenAPI documentation - [Flask-Migrate](https://flask-migrate.readthedocs.io/en/latest/) (Alembic) for database migrations + - [Celery](https://docs.celeryproject.org/en/stable/) for async tasks + - [Redis](https://redis.io/) for Celery broker - **Database:** [PostgreSQL 17.1](https://www.postgresql.org/docs/17/index.html) (production) / SQLite (development) ## Setup (dev) ```sh +docker compose build docker compose up +DATABASE_URI=sqlite:///db.sqlite3 flask db upgrade ``` App will run at port 8000. +## Setup (production) + +Build the frontend app: + +```sh +cd availabili.tf +npm run build +``` + +Build the rest of the containers: + +```sh +docker compose -f docker-compose.prod.yml build +docker compose -f docker-compose.prod.yml up +``` + +Perform initial database migration: + +```sh +docker exec -it backend bash +flask db upgrade +``` + ## OpenAPI The backend will automatically serve its OpenAPI-compliant spec at diff --git a/availabili.tf/Dockerfile.prod b/availabili.tf/Dockerfile.prod new file mode 100644 index 0000000..40a98b3 --- /dev/null +++ b/availabili.tf/Dockerfile.prod @@ -0,0 +1,7 @@ +FROM steebchen/nginx-spa:stable + +COPY dist/ /app + +EXPOSE 80 + +CMD ["nginx"] diff --git a/availabili.tf/src/components/AvailabilityComboBox.vue b/availabili.tf/src/components/AvailabilityComboBox.vue deleted file mode 100644 index 611ed04..0000000 --- a/availabili.tf/src/components/AvailabilityComboBox.vue +++ /dev/null @@ -1,103 +0,0 @@ - - - - - diff --git a/availabili.tf/src/components/AvailabilityGrid.vue b/availabili.tf/src/components/AvailabilityGrid.vue index cd1b763..1866ad9 100644 --- a/availabili.tf/src/components/AvailabilityGrid.vue +++ b/availabili.tf/src/components/AvailabilityGrid.vue @@ -1,37 +1,37 @@ diff --git a/availabili.tf/src/components/IntegrationDetails.vue b/availabili.tf/src/components/IntegrationDetails.vue deleted file mode 100644 index 86f9694..0000000 --- a/availabili.tf/src/components/IntegrationDetails.vue +++ /dev/null @@ -1,76 +0,0 @@ - - - - - diff --git a/availabili.tf/src/components/PlayerTeamCard.vue b/availabili.tf/src/components/PlayerTeamCard.vue index 3491699..944cbab 100644 --- a/availabili.tf/src/components/PlayerTeamCard.vue +++ b/availabili.tf/src/components/PlayerTeamCard.vue @@ -3,6 +3,7 @@ import { computed, type PropType, ref, watch } from "vue"; import { useTeamsStore } from "../stores/teams"; import { useRosterStore } from "../stores/roster"; import { type ViewTeamMembersResponse, type TeamSchema, type RoleSchema } from "@/client"; +// @ts-expect-error import SvgIcon from "@jamescoyle/vue-icon"; import { mdiCrown } from "@mdi/js"; import RoleTag from "../components/RoleTag.vue"; diff --git a/availabili.tf/src/components/RoleTag.vue b/availabili.tf/src/components/RoleTag.vue index 4db2a6c..62aa4fb 100644 --- a/availabili.tf/src/components/RoleTag.vue +++ b/availabili.tf/src/components/RoleTag.vue @@ -1,17 +1,17 @@ - - - - diff --git a/availabili.tf/src/views/ScheduleView.vue b/availabili.tf/src/views/ScheduleView.vue index 0e0e31c..5c67d73 100644 --- a/availabili.tf/src/views/ScheduleView.vue +++ b/availabili.tf/src/views/ScheduleView.vue @@ -1,6 +1,5 @@