# server
**Repository Path**: amplitude/server
## Basic Information
- **Project Name**: server
- **Description**: No description available
- **Primary Language**: Python
- **License**: Not specified
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 0
- **Created**: 2024-01-29
- **Last Updated**: 2024-01-29
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
   
   
      
   
   
      
   
   
      
   
    
**Please note**: If you are new to Prefect, we strongly recommend starting with [Prefect 2](https://docs.prefect.io/) and [Prefect Cloud 2](https://app.prefect.cloud), as they are in [General Availability](https://www.prefect.io/guide/blog/the-global-coordination-plane/). 
Prefect 1 Core, Server, and Cloud are our first-generation workflow and orchestration tools. You can continue to use them and we'll continue to support them while migrating users to Prefect 2. Prefect 2 can also be self-hosted and does not depend on this repository in any way.
If you're ready to start migrating your workflows to [Prefect 2](https://github.com/PrefectHQ/prefect), see our [migration guide](https://docs.prefect.io/migration-guide/).
# Prefect Server
Please note: this repo is for Prefect Server development. If you want to run Prefect Server, the best first step is to install [Prefect](https://github.com/prefecthq/prefect) and run `prefect server start`.
If you want to install Prefect Server on Kubernetes, take a look at the [Server Helm Chart](./helm/prefect-server).
If you would like to work on the Prefect UI or open a UI-specific issue, please visit [the Prefect UI repository](https://github.com/PrefectHQ/ui).
## Overview
[Prefect Server](https://docs.prefect.io/orchestration/server/overview.html) is an open source backend that makes it easy to monitor and execute your Prefect flows.
Prefect Server consists of a number of related services including:
- `postgres`: the database persistence layer
- `hasura`: a GraphQL API for Postgres (http://hasura.io)
- `graphql`: a Python-based GraphQL server that exposes mutations (actions) representing Prefect Server's logic
- `apollo`: an Apollo Server that serves as the main user interaction endpoint, and stitches together the `hasura` and `graphql` APIs
- `towel`: a variety of utility services that provide maintenance routines, because a towel is just about the most massively useful thing an interstellar hitchhiker can carry
  - `scheduler`: a service that searches for flows that need scheduling and creates new flow runs
  - `lazarus`: a service that detects when flow runs ended abnormally and should be restarted
  - `zombie_killer`: a service that detects when task runs ended abnormally and should be failed
These services are intended to be run within [Docker](https://www.docker.com/) and some CLI commands require [`docker-compose`](https://docs.docker.com/compose/) which helps orchestrate running multiple Docker containers simultaneously.
## Installation
1. Don't Panic.
1. Make sure you have Python 3.7+ and Prefect installed:
   ```
   pip install prefect
   ```
1. Clone this repo, then install Prefect Server and its dependencies by running:
   ```
   pip install -e .
   cd services/apollo && npm install
   ```
*Note: if installing for local development, it is important to install using the -e flag with `[dev]` extras: `pip install -e ".[dev]"`*
## Running the system as a developer
*Note: for [deploying Prefect Server](https://docs.prefect.io/orchestration/server/overview.html#deploying-prefect-server), please use the `prefect server start` CLI command in Prefect Core 0.13.0+.*
If you are doing local development on Prefect Server, it is best to run most services as local processes.
This allows for hot-reloading as code changes, setting debugging breakpoints, and generally speeds up the
pace of iteration.
In order to run the system:
1. Start the database and Hasura in Docker:
   ```bash
   prefect-server dev infrastructure
   ```
   _If when starting the infrastructure, you receive an error message stating_ `infrastructure_hasura_1 exited with code 137`, _it is likely a memory issue with Docker. Bumping Docker Memory to 8GB should solve this._
1. Run the database migrations and apply Hasura metadata:
   ```bash
   prefect-server database upgrade
   ```
1. In a new terminal, start the services locally:
   ```bash
   prefect-server dev services
   ```
You can use the `-i` (include) or `-e` (exclude) flags to choose specific services:
```bash
# run only apollo and graphql
prefect-server dev services -i apollo,graphql
# run all except graphql
prefect-server dev services -e graphql
```
## Running tests
Prefect Server has three types of tests:
- `unit tests`: used to validate individual functions
- `service tests`: used to verify functionality throughout Prefect Server
- `integration tests`: used to verify functionality between Prefect Core and Server
Prefect Server uses `pytest` for testing. Tests are organized in a way that generally mimics the `src` directory. For example, in order to run all unit tests
for the API and the GraphQL server, run:
```bash
pytest tests/api tests/graphql
```
Unit tests can be run with only `prefect-server dev infrastructure` running. Service and
integration tests require Prefect Server's services to be running as well.
## Filing an issue
Whether you'd like a feature or you're seeing a bug, we welcome users filing issues. Helpful
bug issues include:
- the circumstances surrounding the bug
- the desired behavior
- a minimum reproducible example
Helpful feature requests include:
- a description of the feature
- how the feature could be helpful
- if applicable, initial thoughts about feature implementation
**Please be aware** that Prefect Server feature requests that might compete with propriety [Prefect Cloud](https://cloud.prefect.io/) features will be rejected.
## License
Prefect Server is lovingly made by the team at [Prefect](https://www.prefect.io) and licensed under the [Prefect Community License](https://www.prefect.io/legal/prefect-community-license/). For information on how you can use, extend, and depend on Prefect Server to automate your data, take a look at our [license](https://github.com/PrefectHQ/server/blob/master/LICENSE) or [contact us](https://www.prefect.io/get-prefect#contact).