# Develop ## Introduction build backend: ```bash cd backend # run a dev container and database docker compose -f "docker-compose.debug.yml" up -d --build backend dokcer compose logs backend docker exec -it backend bash cd frontend yarn yarn start docker compose run frontend test dockere compose logs -f db|frontend|backend # 前端:https://localhost:8000 # 后端:https://localhost:8000/api # Swagger: https://localhost:8000/docs # Adminer: https://localhost:8081 # Traefik: http://localhost:8082 ``` ## Deploy first build docker image, push to docker hub ```bash docker compose logs docker compose logs backend docker compose exec backend bash bash /start-reload.sh # 重启后端服务 alembic upgrade head # migration database pip install poetry poetry config virtualenvs.create false poetry install poetry shell python main.py # gengerate token python** -c "import secrets; print(secrets.token_urlsafe(32))" alembic upgrade head alembic revision -m "$1" --autogenerate alembic downgrade "$1" vim .env docker compose -f "docker-compose.debug.yml" up -d --build backend cd backend # dev gunicorn --reload --proxy-headers -k uvicorn.workers.UvicornWorker -c gunicorn_conf.py --bind 0.0.0.0:8080 main:app --reload # prod gunicorn --forwarded-allow-ips "*" -k uvicorn.workers.UvicornWorker -c gunicorn_conf.py --bind 0.0.0.0:8080 main:app docker compose build docker compose restart docker compse down docker compose exec app migrate docker compose exec app downgrade -1 # poetry 导出 requirements.txt poetry export --without-hashes --format=requirements.txt > requirements.txt alembic revision -m "create users table" ```