Overview Building a robust backend is only half the battle; the real challenge lies in creating a reproducible pipeline to move that code from a local machine to a production server. This tutorial covers the end-to-end process of containerizing a FastAPI application, automating the build via GitHub Actions, and hosting it on a Virtual Private Server. By the end, you will understand how to bridge the gap between development and live distribution. Prerequisites To follow along, you should have a baseline understanding of Python and SQLAlchemy. Familiarity with basic terminal commands and Git is essential. You will also need a GitHub account to manage the automation workflows. Key Libraries & Tools - **FastAPI**: A high-performance web framework for building APIs with Python. - **Docker**: A platform for creating lightweight, portable containers that include all software dependencies. - **GitHub Actions**: A CI/CD tool to automate software workflows directly from your repository. - **Uvicorn**: An ASGI server implementation for Python, used to run the web application. - **Poetry**: A tool for dependency management and packaging in Python. Code Walkthrough: The Dockerfile A Docker file serves as the blueprint for your application environment. In this setup, we prioritize clean builds and real-time logging. ```python Use a stable Python base image FROM python:3.11.0 Prevent Python from buffering stdout/stderr ENV PYTHONUNBUFFERED=1 WORKDIR /app Install dependency manager and packages RUN pip install poetry COPY pyproject.toml poetry.lock ./ RUN poetry config virtualenvs.create false && poetry install --no-dev Copy source and expose the API COPY . . EXPOSE 8080 CMD ["uvicorn", "main:app", "--host", "0.0.0.0", "--port", "8080"] ``` Setting `PYTHONUNBUFFERED` to `1` ensures you can see logs in real-time. Disabling virtual environments inside the container is a best practice because the container itself acts as an isolated environment, removing the need for an extra layer of abstraction. Syntax Notes - **Port Mapping**: When running the container, we map the external server port to the internal container port (e.g., `-p 80:8080`). This redirects public traffic to our internal web server. - **Environment Variables**: Use `ENV` in Docker or GitHub Secrets for sensitive data like API keys and database credentials. Practical Examples This workflow is perfect for microservices. For instance, a weather API like Skypulse can separate its routing logic from CRUD operations. This modularity allows you to reuse the database logic for a command-line tool or a background worker without redeploying the entire web stack. Tips & Gotchas - **Standard Ports**: While we used `8080` for testing, production APIs should use Port `80` (HTTP) or `443` (HTTPS) to avoid blocking by client firewalls. - **SSH Security**: Always use SSH keys and secrets in GitHub Actions rather than hardcoding passwords in your YAML files. - **Database Costs**: Cloud providers often have hidden networking fees. Using a VPS from providers like Hostinger can offer more predictable monthly billing.
Skypulse
Products
May 2024 • 1 videos
High activity month for Skypulse. ArjanCodes among the most active voices, with 1 videos across 1 sources.
May 2024
- May 31, 2024