Skip to content

Commit

Permalink
Merge pull request #279 from emp7yhead/add_railway_deploy_instruction
Browse files Browse the repository at this point in the history
Add railway deploy instruction and split dokerfile for dev and deploy
  • Loading branch information
emp7yhead committed Jun 22, 2023
2 parents 85a1d39 + 7779071 commit 0b12f53
Show file tree
Hide file tree
Showing 9 changed files with 121 additions and 11 deletions.
51 changes: 51 additions & 0 deletions DEPLOYMENT.md
@@ -0,0 +1,51 @@
## Развертывание Hexlet-Friends на Railway

1. Создайте новый проект на Railway. Для успешного деплоя приложения вам понадобится база данных `PostgreSQL` и приложение
2. Для добавления БД при создании проекта выберите `Provision PostgreSQL`
3. После добавления БД, нажмите `+ New` -> `Github Repo`. В выпадающем списке выберите свой репозиторий с `Hexlet-friends`. Здесь возможно понадобится дать доступы Railway к вашим репозитория, если ранее вы их не настроили
4. Переходим в настройки нашего приложения. Нам необходимо:

- настроить переменные окружения на вкладке `Variables`. Вам понадобятся:

- `PORT` - присвойте значение 8000, после нажмите на три вертикальные точки справа от переменной и выберите `Promote` - это позволит использовать данный порт для входа в приложение.
- `GITHUB_AUTH_TOKEN`
- `SECRET_KEY`
- `POSTGRES_DB`
- `POSTGRES_USER`
- `POSTGRES_PASSWORD`
- `POSTGRES_HOST`
- `POSTGRES_PORT`

Переменные `PostgreSQL` можно использовать через `Add reference` при создании переменной для приложения

- выбрать ветку, изменения из которой будут отслеживаться в меню `Automatic Deployments` на вкладке `Settings`
- в графе `Domains` нажмем кнопку `Generate Domain` для генерации домена для доступа к приложению
- в меню `Deployments` открывает `Deploy Logs` и убеждаемся, что все работает

```bash
Performing system checks...
System check identified no issues (0 silenced).
You have 36 unapplied migration(s). Your project may not work properly until you apply the migrations for app(s): admin, auth, contenttypes, contributors, custom_auth, sessions.
Run 'python manage.py migrate' to apply them.
June 21, 2023 - 09:22:50
Django version 4.1.9, using settings 'config.settings'
Starting development server at http://0.0.0.0:8000/
Quit the server with CONTROL-C.
```
5. Как видим миграции не приняты, для этого перейдем вновь на вкладку `Settings` в настройках приложения:
- в меню `Start Command` укажем `python manage.py migrate`
- произойдет редеплой в ходе которого применятся миграции. Отследить выполнение команды можно в логах приложения
- удалим команду из `Start Command`
- убедимся по логам, что все в порядке
```bash
Performing system checks...
Django version 4.1.9, using settings 'config.settings'
Starting development server at http://0.0.0.0:8000/
Quit the server with CONTROL-C.
```
6. Если необходимо выполнить заполнение БД, то в `Start Command` следует указать команду `python manage.py fetchdata <organization name>`
7. Перейдем по ссылке в `Domains` в `Settings` и убедимся, что приложение работает
32 changes: 24 additions & 8 deletions Dockerfile
Expand Up @@ -19,18 +19,34 @@ RUN apk add --no-cache \
cargo \
curl \
gettext \
git \
make
git

RUN curl -sSL https://install.python-poetry.org | python3 - \
&& poetry --version
RUN curl -sSL https://install.python-poetry.org | python3 - && poetry --version

WORKDIR /project/
WORKDIR /usr/local/src/hexlet-friends

COPY . .

RUN poetry install --extras psycopg2-binary --only main

FROM python:3.11-alpine as runner

ENV PYTHONFAULTHANDLER=1 \
PYTHONUNBUFFERED=1 \
PYTHONDONTWRITEBYTECODE=1

RUN apk add --no-cache libpq gettext

RUN addgroup -S appgroup && adduser -S appuser -G appgroup

COPY --from=builder /usr/local/src/hexlet-friends /usr/local/src/hexlet-friends
COPY --from=builder /usr/local/lib/python3.11/site-packages /usr/local/lib/python3.11/site-packages
COPY --from=builder /usr/local/bin /usr/local/bin

COPY pyproject.toml poetry.lock ./
RUN chown -R appuser:appgroup /usr/local/src/hexlet-friends

RUN poetry install --extras psycopg2-binary
USER appuser

WORKDIR /usr/local/src/hexlet-friends

CMD ["make", "start"]
CMD ["python", "manage.py", "runserver", "0.0.0.0:8000"]
36 changes: 36 additions & 0 deletions Dockerfile.dev
@@ -0,0 +1,36 @@
FROM python:3.11-alpine as builder

ENV PYTHONFAULTHANDLER=1 \
PYTHONUNBUFFERED=1 \
PYTHONDONTWRITEBYTECODE=1 \
PIP_DISABLE_PIP_VERSION_CHECK=on \
POETRY_VERSION=1.2.2 \
POETRY_NO_INTERACTION=1 \
POETRY_VIRTUALENVS_CREATE=false \
POETRY_CACHE_DIR='/var/cache/pypoetry' \
PATH="$PATH:/root/.local/bin"

RUN apk add --no-cache \
gcc \
musl-dev \
postgresql-dev \
libffi-dev \
openssl-dev \
cargo \
curl \
gettext \
git \
make

RUN curl -sSL https://install.python-poetry.org | python3 - \
&& poetry --version

WORKDIR /project/

COPY pyproject.toml poetry.lock ./

RUN poetry install --extras psycopg2-binary

WORKDIR /usr/local/src/hexlet-friends

CMD ["make", "start"]
2 changes: 2 additions & 0 deletions README.md
Expand Up @@ -13,6 +13,8 @@ Contribution &mdash; issues, pull requests, commits, comments.

_[Instructions for installing and running the app](INSTALLATION.md)_

_[Instructions for deploying app on Railway](DEPLOYMENT.md)_

## Contributing

See [contribution guidelines](./CONTRIBUTING.md)
Expand Down
2 changes: 2 additions & 0 deletions config/settings.py
Expand Up @@ -30,7 +30,9 @@
'127.0.0.1',
'[::1]',
'.herokuapp.com',
'.railway.app',
'.hexlet.io',
'0.0.0.0',
]

INSTALLED_APPS = [
Expand Down
1 change: 1 addition & 0 deletions docker-compose.yml
Expand Up @@ -13,6 +13,7 @@ services:
django:
build:
context: .
dockerfile: dockerfile.dev
environment:
- DEBUG=True
env_file:
Expand Down
4 changes: 2 additions & 2 deletions poetry.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion pyproject.toml
Expand Up @@ -23,12 +23,12 @@ cryptography = "^41.0.0"
crispy-bootstrap5 = "^0.6"
django-extensions = "^3.2.1"
black = "^23.3.0"
django-debug-toolbar = "^3.8.1"

[tool.poetry.dev-dependencies]
wemake-python-styleguide = "^0.16.1"
Faker = "^13.15.1"
coverage = "^6.4.2"
django-debug-toolbar = "^3.8.1"

[tool.poetry.extras]
psycopg2 = ["psycopg2"]
Expand Down
2 changes: 2 additions & 0 deletions setup.cfg
Expand Up @@ -39,6 +39,8 @@ per-file-ignores =
WPS407,
# Found nested import
WPS433
# Possible binding to all interfaces.
S104,

contrib_extras.py:
# Found string constant over-use
Expand Down

0 comments on commit 0b12f53

Please sign in to comment.