@hombackerCk
Программист

Как перезагрузить python (DJANGO) на сервере и обновить данные на сервере после push??

Добрый день всем.
Сайт построен на Django, работаем с GIT.
В течении дня пишу код и делаю коммиты. В конце рабочего дня делаю push в master.
К сожалению на сервере обновления мои не появляются, во всяком случае обновив ссылку обновлений не вижу.
Но не беда, я говорю начальнику что я залил пушнул коммиты и тот их заливает на сервер.
Он мне подсказал мне что нужно написать скрипт который умел бы пушить на сервер и перезагружать Python на севере.
Помогите пожалуйста, а то я устал отвлекать коллег. Спасибо
  • Вопрос задан
  • 3869 просмотров
Пригласить эксперта
Ответы на вопрос 3
mobilesfinks
@mobilesfinks
сисадмин *nix
Вам нужно на сервере сделать hook который будет производить перезагрузку процесса после Push в ваш репо.
hook это тот самый скрипт, но он не пушит, а только выполняется уже после того как Push пришёл в репозиторий.
Ответ написан
Комментировать
@Tirael78
самому написать можно, если вы либо имеете очень простой сервис, либо обладаете высоким скилом разработки и понимания того, как правильно перезагрузить сервис.

Но есть и иной путь, запустите свой проект через UWSGI(с Django он интегрируется очень просто), в нем есть опция - reload, те вы можете его настроить так, чтобы при изменение конкретных файлов, ваш сервис правильно рестартанул.
Подобные механизмы есть и у Gunicorn, если вам он больше нравиться, но я бы рекомендовал с Django использовать именно UWSGI

https://uwsgi-docs.readthedocs.org/en/latest/
Ответ написан
Комментировать
Можно воспользоваться готовым приложением www.fabfile.org/installing.html (https://github.com/fabric/fabric)
Суть в том, что нужно написать скрипт с поочередным выполнением команд.
Вот как реализовано у меня.
На сервере стоит nginx + uwsgi. (установка тут https://habrahabr.ru/post/226419/)
В файле uwsgi.ini добавлена строка (на хабре из ссылки выше этот файл называется mysite_uwsgi.ini)
# reload uwsgi
touch-reload=/opt/sitename/reload.txt

В директории с проектом лежит файл fabfile.py с содержимым
#!/usr/bin/python
# -*- coding: UTF-8 -*-

from fabric.api import env, run, cd

env.hosts = ['user@host', ]
#Структура такая
# /
# +  opt/
#    +  sitename/
#       +  env/     тут virtualenv
#       +  source/  тут лежит код
project_path = '/opt/sitename/'
source_path = '/opt/sitename/source/'
branch = ''

# Скрипт деплоя
def deploy():
    # выполняются комманды для загрузки данных из репозитория
    with cd(source_path):
        run('mkdir -p tmp/')
        run('hg pull')
        run('hg update %s' % branch)
    # после загрузки репозитория
    # устанавливаются пакеты перечисленные в req.txt
    # производятся миграции
    # собирается статика
    # теребим файл reload.txt, чтобы оповестить uwsgi об обновлении
    with cd(project_path):
        run('env/bin/pip install -r %sreq.txt' % source_path)
        run('env/bin/python %smanage.py migrate' % source_path)
        run('env/bin/python %smanage.py collectstatic --noinput' % source_path)
        # run('env/bin/python %smanage.py compress' % source_path)
        run('touch reload.txt')

запуск скрипта fab с параметром выполняемого таска из fabfile
fab deploy
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы