diff --git a/.dockerignore b/.dockerignore index fe9b412..68e6f5a 100644 --- a/.dockerignore +++ b/.dockerignore @@ -9,4 +9,5 @@ db.sqlite3 static .env .venv/ -.coverage \ No newline at end of file +.coverage +fly.toml \ No newline at end of file diff --git a/.github/workflows/fly-deploy.yml b/.github/workflows/fly-deploy.yml new file mode 100644 index 0000000..b0c246e --- /dev/null +++ b/.github/workflows/fly-deploy.yml @@ -0,0 +1,18 @@ +# See https://fly.io/docs/app-guides/continuous-deployment-with-github-actions/ + +name: Fly Deploy +on: + push: + branches: + - main +jobs: + deploy: + name: Deploy app + runs-on: ubuntu-latest + concurrency: deploy-group # optional: ensure only one action runs at a time + steps: + - uses: actions/checkout@v4 + - uses: superfly/flyctl-actions/setup-flyctl@master + - run: flyctl deploy --remote-only + env: + FLY_API_TOKEN: ${{ secrets.FLY_API_TOKEN }} diff --git a/Dockerfile b/Dockerfile index 382c1fb..9e3a6ed 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,15 +1,34 @@ -FROM python:3.11.4-slim-buster +ARG PYTHON_VERSION=3.11-slim + +FROM python:${PYTHON_VERSION} ENV PYTHONDONTWRITEBYTECODE 1 ENV PYTHONUNBUFFERED 1 -WORKDIR /app +# install psycopg2 dependencies. +RUN apt-get update && apt-get install -y \ + libpq-dev \ + gcc \ + && rm -rf /var/lib/apt/lists/* + +RUN mkdir -p /code + +WORKDIR /code + +COPY requirements.txt /tmp/requirements.txt + +# install psycopg2 dependencies. +RUN set -ex && \ + pip install --upgrade pip && \ + pip install -r /tmp/requirements.txt && \ + rm -rf /root/.cache/ +COPY . /code -COPY . . +# env var for building purposes +ENV SECRET_KEY "aGkCk2XY3qk7kOZ0HDXoGq5DXlshIhfpspT2bgrV13CzJWCsQa" -RUN pip install --upgrade pip && \ - pip install --no-cache-dir -r requirements.txt +RUN python manage.py collectstatic --noinput EXPOSE 8000 -CMD ["gunicorn", "--reload", "--bind", ":8000", "--workers", "2", "minesweeper.wsgi"] \ No newline at end of file +CMD ["gunicorn","--bind",":8000","--workers","2","minesweeper.wsgi"] diff --git a/README.md b/README.md index fbabbc0..aea595a 100644 --- a/README.md +++ b/README.md @@ -5,6 +5,7 @@ This repo contains the backend code built using Python/Django for the Minesweepe The Frontend is built with React and the code is available at [Minesweeper API](https://github.com/fnscoder/minesweeper-web) You can check the live game here: [Minesweeper](https://minesweeper-web-eight.vercel.app/) +API is available here: [Minesweeper API](https://minesweeper-api.fly.dev/api/) ## How to run the project with docker @@ -40,7 +41,7 @@ You can check the live game here: [Minesweeper](https://minesweeper-web-eight.ve * Docker Compose * RUFF * Gunicorn -* Running on Render +* Running on fly.io ## API Endpoints * GET `/api/games/`: List all games diff --git a/fly.toml b/fly.toml new file mode 100644 index 0000000..c1904a9 --- /dev/null +++ b/fly.toml @@ -0,0 +1,33 @@ +# fly.toml app configuration file generated for minesweeper-api on 2024-11-22T09:15:04-03:00 +# +# See https://fly.io/docs/reference/configuration/ for information about how to use this file. +# + +app = 'minesweeper-api' +primary_region = 'yyz' +console_command = '/code/manage.py shell' + +[build] + +[deploy] + release_command = 'python manage.py migrate --noinput' + +[env] + PORT = '8000' + +[http_service] + internal_port = 8000 + force_https = true + auto_stop_machines = 'stop' + auto_start_machines = true + min_machines_running = 0 + processes = ['app'] + +[[vm]] + memory = '1gb' + cpu_kind = 'shared' + cpus = 1 + +[[statics]] + guest_path = '/code/static' + url_prefix = '/static/'