From ebb73ca28ca8b81e2b03a68788335da92fb60fff Mon Sep 17 00:00:00 2001
From: Eric Liu <62641231+ericcccsliu@users.noreply.github.com>
Date: Fri, 29 Mar 2024 03:27:49 -0500
Subject: [PATCH] Update README.md
gave the readme an autogenerated backend deployment section
---
README.md | 89 +++++++++++++++++++++++++++++++++++++++++++++++++++++++
1 file changed, 89 insertions(+)
diff --git a/README.md b/README.md
index 1423585..adcd19e 100644
--- a/README.md
+++ b/README.md
@@ -1 +1,90 @@
+
+
+
+
+
+
+## Backend Deployment
+
+This section describes the steps to deploy the backend FastAPI application to a DigitalOcean server using GitHub Actions for continuous deployment.
+
+### Prerequisites
+
+Before proceeding with the deployment, ensure that you have the following:
+
+- A DigitalOcean account and a server instance created
+- SSH access to the server with the necessary permissions
+- A GitHub repository containing the backend code
+- Docker installed on the server
+
+### Deployment Steps
+
+1. **Set up GitHub Secrets:**
+ - In your GitHub repository, go to "Settings" > "Secrets" > "Actions".
+ - Create the following secrets:
+ - `HOST`: The IP address or hostname of your DigitalOcean server.
+ - `USERNAME`: The SSH username for accessing the server (e.g., `root`).
+ - `PASSWORD`: The SSH password for the specified username.
+
+2. **Create the GitHub Actions Workflow:**
+ - In your GitHub repository, create a new file named `.github/workflows/deploy_api.yml`.
+ - Copy the following content into the `deploy_api.yml` file:
+
+ ```yaml
+ name: Deploy to DigitalOcean
+
+ on:
+ push:
+ branches:
+ - main
+
+ jobs:
+ deploy:
+ runs-on: ubuntu-latest
+
+ steps:
+ - name: Checkout code
+ uses: actions/checkout@v2
+
+ - name: Deploy to DigitalOcean
+ run: |
+ sshpass -p "${{ secrets.PASSWORD }}" ssh -o StrictHostKeyChecking=no ${{ secrets.USERNAME }}@${{ secrets.HOST }} '
+ mkdir -p hackgpt
+ cd hackgpt
+ if [ ! -d .git ]; then
+ git init
+ git remote add origin https://github.com/${{ github.repository }}.git
+ git config core.sparseCheckout true
+ echo "Dockerfile" >> .git/info/sparse-checkout
+ echo "api/" >> .git/info/sparse-checkout
+ echo "requirements.txt" >> .git/info/sparse-checkout
+ git pull --depth=1 origin main
+ else
+ git pull origin main
+ fi
+ docker build -t hackgpt .
+ docker stop hackgpt-container || true
+ docker rm hackgpt-container || true
+ docker run -d --name hackgpt-container -p 8000:8000 hackgpt
+ '
+ ```
+
+ - Commit and push the `deploy_api.yml` file to your GitHub repository.
+
+3. **Set up the `.env` File:**
+ - SSH into your DigitalOcean server.
+ - Navigate to the `hackgpt` directory where the backend code will be deployed.
+ - Create a file named `.env` and add the necessary environment variables required by your FastAPI application.
+
+4. **Trigger the Deployment:**
+ - Make a change to your backend code and push the changes to the `main` branch of your GitHub repository.
+ - GitHub Actions will automatically trigger the deployment workflow based on the `deploy_api.yml` configuration.
+ - The workflow will SSH into your DigitalOcean server, clone the repository, build the Docker image, stop any existing containers, and start a new container with the updated code.
+
+5. **Access the Deployed Application:**
+ - Once the deployment workflow completes successfully, your FastAPI application will be accessible at `http://:8000`.
+
+Note: Make sure that port 8000 is open and accessible on your DigitalOcean server's firewall settings.
+
+That's it! Your backend FastAPI application is now deployed to your DigitalOcean server using GitHub Actions for continuous deployment. Whenever you push changes to the `main` branch, the deployment workflow will automatically update the running application on the server.