Skip to content

Instantly share code, notes, and snippets.

@evgkirov
Last active August 29, 2015 13:57
Show Gist options
  • Save evgkirov/9487341 to your computer and use it in GitHub Desktop.
Save evgkirov/9487341 to your computer and use it in GitHub Desktop.

Установка на сервер

Далее написано как установить ЧХГ на свой сервер с Ubuntu 12.04. Разумеется, установка возможна на любой современный Linux, а также на Windows и OS X, но процесс установки будет так или иначе отличаться. Версия Python должна быть 2.6 или 2.7.

Важно, чтобы системная кодировка была UTF-8. Этого можно добиться, например, следующим образом:

sudo locale-gen en_US.UTF-8
sudo update-locale LANG=en_US.UTF-8

Чтобы изменения вступили в силу, потребуется перезайти.

Начнём с установки нужных пакетов. Часть нужных пакетов берётся из PPA ubuntugis. Для Ubuntu версий до 13.10 потребуется выполнить

sudo apt-get install python-software-properties
sudo apt-add-repository ppa:ubuntugis/ppa
sudo apt-get update

Для 13.10:

sudo apt-get install python-software-properties
sudo apt-add-repository ppa:ubuntugis/ubuntugis-unstable
sudo apt-get update

Для 14.04 не требуется подключения PPA.

Далее (для 14.04 замените 9.1 на 9.3):

sudo apt-get install binutils build-essential gdal-bin gettext git libgeos-c1 libproj-dev libyaml-dev nginx postgis postgresql-9.1 postgresql-9.1-postgis* postgresql-server-dev-9.1 python-dev python-pip python-virtualenv redis-server uwsgi uwsgi-plugin-python virtualenvwrapper

После установки нужно перезайти в систему. А теперь скачаем ЧХГ:

git clone https://github.com/whitescape/chg.git

И установим необходимые питоновские пакеты:

mkvirtualenv chg
pip install -r chg/requirements.txt

Создадим файл chg/src/chg/settings/local.py с таким содержимым:

from .base import *

COMPRESS_ENABLED = True
DEBUG = TEMPLATE_DEBUG = False
SOCIAL_AUTH_RAISE_EXCEPTIONS = False

ALLOWED_HOSTS = (
    '.example.com',
)

SECRET_KEY = '^9%d=brsx-wcymgl3rdgo!jqp&qtf@j%m43vk0sf+0b=#s4#$q'

DATABASES = {
    'default': {
        'ENGINE': 'django.contrib.gis.db.backends.postgis',
        'NAME': 'chg',
        'USER': 'chg',
        'PASSWORD': '',
        'HOST': '',
        'PORT': '',
    }
}

UPLOADCARE = {
    'pub_key': '',
    'secret': '',
    'widget_version': '0.18.0',
}

GOOGLE_API_KEY = ''
GOOGLE_ANALYTICS_KEY = ''

RECAPTCHA_PUBLIC_KEY = ''
RECAPTCHA_PRIVATE_KEY = ''

VK_APP_ID = ''
VK_API_SECRET = ''

FACEBOOK_APP_ID = FB_APP_ID = ''
FACEBOOK_API_SECRET = ''

TWITTER_CONSUMER_KEY = ''
TWITTER_CONSUMER_SECRET = ''

В ALLOWED_HOSTS помещаем доменное имя сайта. SECRET_KEY рекомендуется вписать другой (сгенерировать новый можно, например, тут). Остальные настройки:

Теперь настроим PostgreSQL. Для начала отредактируем файл /etc/postgresql/9.1/main/pg_hba.conf и в строке "local" is for Unix domain socket connections only заменим peer на md5 или trust. Перезапустим сервер БД:

sudo service postgresql restart

Создадим базу данных:

sudo -u postgres createuser -SDRP chg
sudo -u postgres createdb -O chg chg
sudo -u postgres psql -c 'create extension postgis;' -d chg
sudo -u postgres psql -c 'create extension postgis_topology;' -d chg

Когда попросят ввести пароль, введите любой пароль. Потом снова откройте chg/src/chg/settings/local.py и впишите этот пароль туда.

Пора создать таблицы в базе:

cd chg/src
./manage.py syncdb --all
./manage.py migrate --fake

В какой-то момент вас попросят создать пользователя-администратора сайта: не упустите эту возможность.

Если при выполнении manage.py возникает ошибка ImportError: No module named django.core.management, делаем workon chg.

Теперь надо собрать CSS и прочие статические файлы:

./manage.py collectstatic
./manage.py compilemessages

Время настроить веб-сервер. Создадим файл для uWSGI:

sudo tee -a /etc/uwsgi/apps-available/chg.ini << EOL
[uwsgi]
chdir=$HOME/chg/src
module=wsgi:application
home=$HOME/.virtualenvs/chg
env="DJANGO_SETTINGS_MODULE=chg.settings"
plugins=python
touch-reload=$HOME/chg/reload
EOL
sudo ln -s /etc/uwsgi/apps-{available,enabled}/chg.ini
sudo service uwsgi restart

И для nginx:

sudo tee -a /etc/nginx/sites-available/chg.conf << EOL
server {
  listen 80;
  # server_name example.com;
  location / {
    uwsgi_pass unix:///run/uwsgi/app/chg/socket;
    include uwsgi_params;
  }
  location /static {
    alias $HOME/chg/src/static_serve;
  }
}
EOL
sudo ln -s /etc/nginx/sites-{available,enabled}/chg.conf
sudo rm /etc/nginx/sites-enabled/default 
sudo service nginx restart

Теперь сайт должен работать. Осталась ещё пара мелочей:

(crontab -l ; echo "*/20 * * * * $HOME/.virtualenvs/chg/bin/python $HOME/chg/src/manage.py update_index --remove > /dev/null") | crontab -

Настройка сайта

Административная панель

Основные настройки можно настроить в админ-панели. Она находится по адресу /admin/

Разделы, на которые нужно обратить внимание в первую очередь — это Настройки и Сайты. Там можно поменять название сайта, название города и сроки проведения этапов.

Ещё пара важных разделов — это Идеи горожан и Решения. Присланные пользователями идеи и решения появляются на сайте не сразу, а только после проверки модератором. Модератор пользуется именно этими разделами.

Файл src/chg/settings/local.py

В этом файле можно менять большое количество различных настроек. За подробным списком доступных параметров следует обратиться к документации Django.

Редактирование текстов на сайте

Все шаблоны находятся в директории src/templates, их можно редакторовать.

Часть строк находится в файле src/locale/ru_RU/LC_MESSAGES/django.po. После редактирования этого файла следует выполнить:

./manage.py compilemessages
sudo service uwsgi reload

Замена фотографий

После замены фотографий, которые лежат в src/static/img, требуется сделать:

./manage.py collectstatic
"""
WSGI config for moscow_idea project.
This module contains the WSGI application used by Django's development server
and any production WSGI deployments. It should expose a module-level variable
named ``application``. Django's ``runserver`` and ``runfcgi`` commands discover
this application via the ``WSGI_APPLICATION`` setting.
Usually you will have the standard Django WSGI application here, but it also
might make sense to replace the whole Django WSGI application with a custom one
that later delegates to the Django one. For example, you could introduce WSGI
middleware here, or combine a Django application with an application of another
framework.
"""
import os
import sys
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "chg.settings")
sys.dont_write_bytecode = True
# This application object is used by any WSGI server configured to use this
# file. This includes Django's development server, if the WSGI_APPLICATION
# setting points here.
from django.core.wsgi import get_wsgi_application
application = get_wsgi_application()
# Apply WSGI middleware here.
# from helloworld.wsgi import HelloWorldApplication
# application = HelloWorldApplication(application)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment