Skip to content

Commit

Permalink
Merge pull request #3 from tblanarik/remove-dockerfile
Browse files Browse the repository at this point in the history
Remove Dockerfile and convert to Azure Function App
  • Loading branch information
tblanarik authored Sep 9, 2024
2 parents 22093de + 8904f79 commit 0ec4df7
Show file tree
Hide file tree
Showing 4 changed files with 89 additions and 115 deletions.
150 changes: 75 additions & 75 deletions .github/workflows/main_hamalertspotbot.yml
Original file line number Diff line number Diff line change
@@ -1,75 +1,75 @@
# Docs for the Azure Web Apps Deploy action: https://github.com/azure/functions-action
# More GitHub Actions for Azure: https://github.com/Azure/actions
# More info on Python, GitHub Actions, and Azure Functions: https://aka.ms/python-webapps-actions

name: Build and deploy Python project to Azure Function App - hamalertspotbot

on:
push:
branches:
- main
workflow_dispatch:

env:
AZURE_FUNCTIONAPP_PACKAGE_PATH: '.' # set this to the path to your web app project, defaults to the repository root
PYTHON_VERSION: '3.11' # set this to the python version to use (supports 3.6, 3.7, 3.8)

jobs:
build:
runs-on: ubuntu-latest
steps:
- name: Checkout repository
uses: actions/checkout@v4

- name: Setup Python version
uses: actions/setup-python@v1
with:
python-version: ${{ env.PYTHON_VERSION }}

- name: Create and start virtual environment
run: |
python -m venv venv
source venv/bin/activate
- name: Install dependencies
run: pip install -r requirements.txt

# Optional: Add step to run tests here

- name: Zip artifact for deployment
run: zip release.zip ./* -r

- name: Upload artifact for deployment job
uses: actions/upload-artifact@v3
with:
name: python-app
path: |
release.zip
!venv/
deploy:
runs-on: ubuntu-latest
needs: build
environment:
name: 'Production'
url: ${{ steps.deploy-to-function.outputs.webapp-url }}

steps:
- name: Download artifact from build job
uses: actions/download-artifact@v3
with:
name: python-app

- name: Unzip artifact for deployment
run: unzip release.zip

- name: 'Deploy to Azure Functions'
uses: Azure/functions-action@v1
id: deploy-to-function
with:
app-name: 'hamalertspotbot'
slot-name: 'Production'
package: ${{ env.AZURE_FUNCTIONAPP_PACKAGE_PATH }}
publish-profile: ${{ secrets.AZUREAPPSERVICE_PUBLISHPROFILE_2A375008FC1743E4AE2D6A345036BDC4 }}
scm-do-build-during-deployment: true
enable-oryx-build: true
# Docs for the Azure Web Apps Deploy action: https://github.com/azure/functions-action
# More GitHub Actions for Azure: https://github.com/Azure/actions
# More info on Python, GitHub Actions, and Azure Functions: https://aka.ms/python-webapps-actions

name: Build and deploy Python project to Azure Function App - hamalertspotbot

on:
push:
branches:
- main
workflow_dispatch:

env:
AZURE_FUNCTIONAPP_PACKAGE_PATH: './' # set this to the path to your web app project, defaults to the repository root
PYTHON_VERSION: '3.11' # set this to the python version to use (supports 3.6, 3.7, 3.8)

jobs:
build:
runs-on: ubuntu-latest
steps:
- name: Checkout repository
uses: actions/checkout@v4

- name: Setup Python version
uses: actions/setup-python@v1
with:
python-version: ${{ env.PYTHON_VERSION }}

- name: Create and start virtual environment
run: |
python -m venv venv
source venv/bin/activate
- name: Install dependencies
run: pip install -r requirements.txt

# Optional: Add step to run tests here

- name: Zip artifact for deployment
run: zip release.zip ./* -r

- name: Upload artifact for deployment job
uses: actions/upload-artifact@v3
with:
name: python-app
path: |
release.zip
!venv/
deploy:
runs-on: ubuntu-latest
needs: build
environment:
name: 'Production'
url: ${{ steps.deploy-to-function.outputs.webapp-url }}

steps:
- name: Download artifact from build job
uses: actions/download-artifact@v3
with:
name: python-app

- name: Unzip artifact for deployment
run: unzip release.zip

- name: 'Deploy to Azure Functions'
uses: Azure/functions-action@v1
id: deploy-to-function
with:
app-name: 'hamalertspotbot'
slot-name: 'Production'
package: ${{ env.AZURE_FUNCTIONAPP_PACKAGE_PATH }}
publish-profile: ${{ secrets.AZUREAPPSERVICE_PUBLISHPROFILE_2A375008FC1743E4AE2D6A345036BDC4 }}
scm-do-build-during-deployment: true
enable-oryx-build: true
17 changes: 0 additions & 17 deletions Dockerfile

This file was deleted.

19 changes: 8 additions & 11 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -42,18 +42,15 @@ curl -X POST http://localhost:5000/forward -H "Content-Type: application/json" -

Replace `{"key": "value"}` with the actual JSON content you want to send.

## Running the Webserver using Docker
## Deploying and Running the App as an Azure Function App

To run the webserver using Docker, follow these steps:
To deploy and run the app as an Azure Function App, follow these steps:

1. Build the Docker image:
```sh
docker build -t spotbot .
```
1. Create an Azure Function App in the Azure portal.

2. Run the Docker container:
```sh
docker run -p 5000:5000 -e TARGET_URL=<target_url> -e DESTINATION_URL=<destination_url> spotbot
```
2. Set up the required environment variables in the Azure Function App configuration:
- `TARGET_URL`: The target URL to which the content will be forwarded.

Replace `<target_url>` with the actual target URL and `<destination_url>` with the desired port number for the Flask app. If `DESTINATION_URL` is not set, the default port will be 5000.
3. Deploy the app to the Azure Function App using the provided GitHub Actions workflow.

4. Once deployed, you can send POST requests to the Azure Function App endpoint to forward the content to the target URL.
18 changes: 6 additions & 12 deletions spotbot.py
Original file line number Diff line number Diff line change
@@ -1,17 +1,11 @@
from flask import Flask, request
import azure.functions as func
import requests
import os

app = Flask(__name__)

@app.route('/forward', methods=['POST'])
def forward():
content = request.get_json()
target_url = os.getenv('TARGET_URL') # Replace with the actual target URL
def main(req: func.HttpRequest) -> func.HttpResponse:
content = req.get_json()
target_url = os.getenv('TARGET_URL')
if not target_url:
return "Error: TARGET_URL environment variable is not set.", 500
return func.HttpResponse("Error: TARGET_URL environment variable is not set.", status_code=500)
response = requests.post(target_url, json=content)
return response.text, response.status_code

if __name__ == '__main__':
app.run(port=os.getenv('DESTINATION_URL', 5000))
return func.HttpResponse(response.text, status_code=response.status_code)

0 comments on commit 0ec4df7

Please sign in to comment.