commit
ffc6c1f002
31 changed files with 83 additions and 2492 deletions
Binary file not shown.
@ -1,380 +0,0 @@ |
|||||||
# -*- coding: utf-8 -*- |
|
||||||
from os.path import join, basename |
|
||||||
from collections import namedtuple, OrderedDict |
|
||||||
import re |
|
||||||
from fabric.api import * |
|
||||||
|
|
||||||
|
|
||||||
env.roledefs = { |
|
||||||
'dev': ['root@176.121.11.165'], |
|
||||||
'prod': ['root@176.121.11.162'], |
|
||||||
} |
|
||||||
env.passwords = { |
|
||||||
'root@176.121.11.165:22': 'ue6R287QZfMc', |
|
||||||
'root@176.121.11.162:22': 'XcS2jx5e8k6n', |
|
||||||
} |
|
||||||
|
|
||||||
REMOTE_HOME_DIR = '/home/www/expomap/' |
|
||||||
LOCAL_HOME_DIR = '/home/as/PycharmProjects/expomap/' |
|
||||||
|
|
||||||
nginx_conf_tech = '/etc/nginx/sites-available/tech_work_hit.expomap.ru' |
|
||||||
nginx_conf = '/etc/nginx/sites-available/hit.expomap.ru' |
|
||||||
apache2_conf = '/etc/apache2/sites-available/proj.com' |
|
||||||
settings_conf = join(REMOTE_HOME_DIR, 'proj/settings.py') |
|
||||||
services = ['nginx', 'apache2'] |
|
||||||
|
|
||||||
stages = {} |
|
||||||
tickets = {} |
|
||||||
commands = {} |
|
||||||
|
|
||||||
def stage(stage_num): |
|
||||||
def add_func(func): |
|
||||||
if not callable(func): |
|
||||||
raise NotImplementedError('func must be a callable') |
|
||||||
func = ticket(func) |
|
||||||
stages.setdefault(stage_num, OrderedDict()).update({func.__name__: func}) |
|
||||||
return func |
|
||||||
return add_func |
|
||||||
|
|
||||||
|
|
||||||
def ticket(func): |
|
||||||
if not callable(func): |
|
||||||
raise NotImplementedError('func must be a callable') |
|
||||||
# stages.setdefault(stage_num, OrderedDict()).update({func.__name__: func}) |
|
||||||
tickets.update({func.__name__: func}) |
|
||||||
return func |
|
||||||
|
|
||||||
|
|
||||||
# command_pattern |
|
||||||
# cp = re.compile('^python manage.py (?P<command>\w+)$') |
|
||||||
cp = re.compile('^(?P<command>\w+)$') |
|
||||||
|
|
||||||
def register_command(command_string): |
|
||||||
command = cp.match(command_string).group('command') |
|
||||||
if not command: |
|
||||||
raise ValueError('Invalid command string {command_string}'.format(command_string=command_string)) |
|
||||||
def func(): |
|
||||||
with cd(REMOTE_HOME_DIR): |
|
||||||
run('python manage.py ' + command) |
|
||||||
commands.update({command: func}) |
|
||||||
|
|
||||||
# run command |
|
||||||
def rc(command): |
|
||||||
if command in commands and callable(commands[command]): |
|
||||||
commands[command]() |
|
||||||
else: |
|
||||||
raise ValueError('Command {command} is not callable'.format(command=command)) |
|
||||||
|
|
||||||
def set_host(host): |
|
||||||
env.hosts = env.roledefs.get(host) |
|
||||||
env.role = host |
|
||||||
|
|
||||||
def dev(): |
|
||||||
set_host('dev') |
|
||||||
|
|
||||||
def prod(): |
|
||||||
set_host('prod') |
|
||||||
|
|
||||||
def get_configs(): |
|
||||||
localdir = join(LOCAL_HOME_DIR, 'support/', env.role) |
|
||||||
get(nginx_conf, localdir) |
|
||||||
get(apache2_conf, localdir) |
|
||||||
get(join(REMOTE_HOME_DIR, 'schema.xml'), localdir) |
|
||||||
get(settings_conf, localdir) |
|
||||||
|
|
||||||
|
|
||||||
def put_configs(): |
|
||||||
localdir = join(LOCAL_HOME_DIR, 'support/', env.role) |
|
||||||
# nginx |
|
||||||
# put(join(localdir, basename(nginx_conf)), |
|
||||||
# nginx_conf) |
|
||||||
# # apache2 |
|
||||||
# put(join(localdir, basename(apache2_conf)), |
|
||||||
# apache2_conf) |
|
||||||
# settings |
|
||||||
put(join(localdir, basename(settings_conf)), |
|
||||||
settings_conf) |
|
||||||
|
|
||||||
|
|
||||||
def newsletters_media(): |
|
||||||
with cd(join(REMOTE_HOME_DIR, 'media')): |
|
||||||
run('mkdir -p newsletter') |
|
||||||
put( |
|
||||||
join(LOCAL_HOME_DIR, 'media/newsletter'), |
|
||||||
join(REMOTE_HOME_DIR, 'media') |
|
||||||
) |
|
||||||
|
|
||||||
|
|
||||||
def call_state(state, only=None): |
|
||||||
if only is not None and only in services: |
|
||||||
run('service {only} {state}'.format(only=only, state=state)) |
|
||||||
return |
|
||||||
for service in services: |
|
||||||
run('service {service} {state}'.format(service=service, state=state)) |
|
||||||
|
|
||||||
|
|
||||||
def chown(): |
|
||||||
with cd(REMOTE_HOME_DIR): |
|
||||||
run('chown -Rv www-data:www-data .') |
|
||||||
|
|
||||||
|
|
||||||
def pull(with_configs=False, func=None): |
|
||||||
with cd(REMOTE_HOME_DIR): |
|
||||||
call_state('stop', only='apache2') |
|
||||||
run('git pull') |
|
||||||
if with_configs: |
|
||||||
put_configs() |
|
||||||
if func is not None and func in tickets and callable(tickets[func]): |
|
||||||
tickets[func]() |
|
||||||
run('python manage.py migrate') |
|
||||||
call_state('start', only='apache2') |
|
||||||
|
|
||||||
|
|
||||||
def stage_init(stage_num): |
|
||||||
with cd(REMOTE_HOME_DIR): |
|
||||||
call_state('stop', only='apache2') |
|
||||||
run('git fetch') |
|
||||||
run('git checkout stage{stage_num}'.format(stage_num=stage_num)) |
|
||||||
run('git pull') |
|
||||||
# stage_num = int(stage_num) |
|
||||||
# if stage_num in stages and isinstance(stages[stage_num], dict): |
|
||||||
# for func_name, func in stages[stage_num].iteritems(): |
|
||||||
# func() |
|
||||||
# call_state('start', only='apache2') |
|
||||||
|
|
||||||
|
|
||||||
def migrate(app_name): |
|
||||||
with cd(REMOTE_HOME_DIR): |
|
||||||
run('python manage.py migrate {app_name}'.format(app_name=app_name)) |
|
||||||
|
|
||||||
|
|
||||||
def devmode(state=True): |
|
||||||
localdir = join(LOCAL_HOME_DIR, 'support/', env.role) |
|
||||||
# nginx |
|
||||||
conf = nginx_conf_tech if state == True else nginx_conf |
|
||||||
put(join(localdir, basename(conf)), nginx_conf) |
|
||||||
run('/etc/init.d/nginx reload') |
|
||||||
|
|
||||||
|
|
||||||
@stage(5) |
|
||||||
def t1451(): |
|
||||||
with cd(REMOTE_HOME_DIR): |
|
||||||
run('python manage.py migrate expobanner') |
|
||||||
|
|
||||||
# temporary |
|
||||||
register_command('banner_log_update_old') |
|
||||||
register_command('banner_log_update') |
|
||||||
# |
|
||||||
|
|
||||||
@stage(5) |
|
||||||
def t1458(): |
|
||||||
with cd(REMOTE_HOME_DIR): |
|
||||||
run('python manage.py migrate service 0001 --fake') |
|
||||||
run('python manage.py migrate service') |
|
||||||
run('python manage.py set_events_services') |
|
||||||
|
|
||||||
register_command('set_events_services') |
|
||||||
|
|
||||||
|
|
||||||
@stage(5) |
|
||||||
def t1456(): |
|
||||||
with cd(REMOTE_HOME_DIR): |
|
||||||
run('python manage.py migrate expobanner') |
|
||||||
|
|
||||||
|
|
||||||
@stage(5) |
|
||||||
def t1463(): |
|
||||||
with cd(REMOTE_HOME_DIR): |
|
||||||
run('python manage.py migrate newsletter') |
|
||||||
run('pip install pymorphy2[fast]') |
|
||||||
run('pip install -U pymorphy2-dicts-ru') |
|
||||||
|
|
||||||
|
|
||||||
@stage(5) |
|
||||||
def t1460(): |
|
||||||
with cd(REMOTE_HOME_DIR): |
|
||||||
run('python manage.py migrate newsletter') |
|
||||||
|
|
||||||
|
|
||||||
@ticket |
|
||||||
def update_crontab(): |
|
||||||
with cd(REMOTE_HOME_DIR): |
|
||||||
run('python manage.py crontab remove') |
|
||||||
run('python manage.py crontab add') |
|
||||||
|
|
||||||
|
|
||||||
@stage(5) |
|
||||||
def t1461(): |
|
||||||
with cd(REMOTE_HOME_DIR): |
|
||||||
run('pip install chainmap==1.0.2') |
|
||||||
run('pip install suds==0.4') |
|
||||||
run('python manage.py migrate conference') |
|
||||||
run('python manage.py migrate exposition') |
|
||||||
run('python manage.py update_events_filter_fields') |
|
||||||
|
|
||||||
|
|
||||||
@ticket |
|
||||||
def switch_to_stage4(): |
|
||||||
with cd(REMOTE_HOME_DIR): |
|
||||||
call_state('stop', only='apache2') |
|
||||||
run('git fetch') |
|
||||||
run('git checkout stage4') |
|
||||||
run('git pull') |
|
||||||
call_state('start', only='apache2') |
|
||||||
|
|
||||||
@ticket |
|
||||||
def switch_to_stage5(): |
|
||||||
with cd(REMOTE_HOME_DIR): |
|
||||||
call_state('stop', only='apache2') |
|
||||||
run('git fetch') |
|
||||||
run('git checkout staget5') |
|
||||||
run('git pull') |
|
||||||
call_state('start', only='apache2') |
|
||||||
|
|
||||||
@ticket |
|
||||||
def t1580(): |
|
||||||
with cd(REMOTE_HOME_DIR): |
|
||||||
run('python manage.py migrate') |
|
||||||
run('python manage.py users_to_mailinglist') |
|
||||||
|
|
||||||
@ticket |
|
||||||
def mailing(): |
|
||||||
with cd(REMOTE_HOME_DIR): |
|
||||||
run('python manage.py migrate newsletter 0010') |
|
||||||
run('python manage.py migrate newsletter 0011 --fake') |
|
||||||
run('python manage.py migrate newsletter') |
|
||||||
run('python manage.py migrate newsletter 0010 --fake') |
|
||||||
run('python manage.py migrate newsletter 0011') |
|
||||||
run('python manage.py migrate newsletter --fake') |
|
||||||
run('python manage.py migrate') |
|
||||||
run('python manage.py newsletter_create_dailymail') |
|
||||||
|
|
||||||
@ticket |
|
||||||
def mailing2(): |
|
||||||
with cd(REMOTE_HOME_DIR): |
|
||||||
run('python manage.py migrate newsletter 0010 --fake') |
|
||||||
run('python manage.py migrate newsletter 0011') |
|
||||||
run('python manage.py migrate newsletter --fake') |
|
||||||
|
|
||||||
@ticket |
|
||||||
def t1609(): |
|
||||||
with cd(REMOTE_HOME_DIR): |
|
||||||
files = ['media/cache/3b/8e/3b8ee5e07a982562d873a69550dd47c9.jpg'] |
|
||||||
for file in files: |
|
||||||
put( |
|
||||||
join(LOCAL_HOME_DIR, file), |
|
||||||
join(REMOTE_HOME_DIR, file) |
|
||||||
) |
|
||||||
|
|
||||||
# def stage3_pre_final(): |
|
||||||
# with cd(REMOTE_HOME_DIR): |
|
||||||
# run('pip install pandas') |
|
||||||
# run('pip install django-rosetta==0.7.6') |
|
||||||
# run('git checkout master') |
|
||||||
# run('git pull') |
|
||||||
# call_state('stop') |
|
||||||
# put_configs() |
|
||||||
# run('python manage.py migrate conference 0001 --fake') |
|
||||||
# run('python manage.py migrate conference') |
|
||||||
# run('python manage.py migrate expobanner') |
|
||||||
# run('python manage.py migrate theme 0001 --fake') |
|
||||||
# run('python manage.py migrate theme 0002') |
|
||||||
# run('python manage.py migrate article 0001 --fake') |
|
||||||
# run('python manage.py migrate article 0002') |
|
||||||
# run('python manage.py migrate stats_collector') |
|
||||||
# run('python manage.py crontab remove') |
|
||||||
# run('python manage.py crontab add') |
|
||||||
# chown() |
|
||||||
# call_state('start') |
|
||||||
|
|
||||||
|
|
||||||
# def stage3_release(): |
|
||||||
# call_state('stop') |
|
||||||
# with cd(REMOTE_HOME_DIR): |
|
||||||
# # run('python manage.py themeblog_to_blog') |
|
||||||
# run('git fetch') |
|
||||||
# run('git checkout stage3_release') |
|
||||||
# run('git pull') |
|
||||||
# # run('python manage.py migrate settings 0002 --fake') |
|
||||||
# run('python manage.py migrate settings') |
|
||||||
# run('python manage.py migrate article 0003') |
|
||||||
# chown() |
|
||||||
# call_state('start') |
|
||||||
|
|
||||||
|
|
||||||
# def c_fix(): |
|
||||||
# with cd(REMOTE_HOME_DIR): |
|
||||||
# call_state('stop', only='apache2') |
|
||||||
# run('git pull') |
|
||||||
# run('python manage.py migrate expobanner') |
|
||||||
# call_state('start', only='apache2') |
|
||||||
|
|
||||||
|
|
||||||
# def stage4_firstrun(): |
|
||||||
# with cd(REMOTE_HOME_DIR): |
|
||||||
# call_state('stop') |
|
||||||
# run('git fetch') |
|
||||||
# run('git checkout stage4') |
|
||||||
# # run('git checkout -- proj/settings.py') |
|
||||||
# pull(with_configs=True) |
|
||||||
# run('python manage.py syncdb') |
|
||||||
# ticket1374() |
|
||||||
# ticket1393() |
|
||||||
# ticket1392() |
|
||||||
# ticket1384() |
|
||||||
# ticket1395() |
|
||||||
# ticket1384_p1() |
|
||||||
# ticket1384_p2() |
|
||||||
# t1443() |
|
||||||
# call_state('start') |
|
||||||
|
|
||||||
|
|
||||||
# @ticket |
|
||||||
# def ticket1395(): |
|
||||||
# with cd(REMOTE_HOME_DIR): |
|
||||||
# run('python manage.py accounts_check_url') |
|
||||||
|
|
||||||
|
|
||||||
# @ticket |
|
||||||
# def ticket1374(): |
|
||||||
# with cd(REMOTE_HOME_DIR): |
|
||||||
# run('python manage.py migrate theme') |
|
||||||
|
|
||||||
|
|
||||||
# @ticket |
|
||||||
# def ticket1393(): |
|
||||||
# with cd(REMOTE_HOME_DIR): |
|
||||||
# run('python manage.py migrate newsletter 0001 --fake') |
|
||||||
# run('python manage.py migrate newsletter') |
|
||||||
|
|
||||||
|
|
||||||
# @ticket |
|
||||||
# def ticket1392(): |
|
||||||
# with cd(REMOTE_HOME_DIR): |
|
||||||
# run('python manage.py migrate newsletter') |
|
||||||
|
|
||||||
|
|
||||||
# @ticket |
|
||||||
# def ticket1384(): |
|
||||||
# with cd(REMOTE_HOME_DIR): |
|
||||||
# run('python manage.py migrate exposition 0001 --fake') |
|
||||||
# run('python manage.py migrate exposition') |
|
||||||
# run('python manage.py migrate conference') |
|
||||||
|
|
||||||
|
|
||||||
# @ticket |
|
||||||
# def ticket1384_p1(): |
|
||||||
# with cd(REMOTE_HOME_DIR): |
|
||||||
# run('python manage.py check_url') |
|
||||||
|
|
||||||
|
|
||||||
# @ticket |
|
||||||
# def ticket1384_p2(): |
|
||||||
# with cd(REMOTE_HOME_DIR): |
|
||||||
# run('python manage.py check_translation') |
|
||||||
|
|
||||||
|
|
||||||
# @ticket |
|
||||||
# def t1443(): |
|
||||||
# with cd(REMOTE_HOME_DIR): |
|
||||||
# run('chown -Rv www-data:www-data locale') |
|
||||||
Binary file not shown.
@ -1,16 +0,0 @@ |
|||||||
# -*- coding: utf-8 -*- |
|
||||||
# Django local settings |
|
||||||
DEBUG = False |
|
||||||
|
|
||||||
ALLOWED_HOSTS = ['hit.expomap.ru', '195.66.79.152', '195.66.79.145', 'expomap.ru'] |
|
||||||
|
|
||||||
DATABASES = { |
|
||||||
'default': { |
|
||||||
'ENGINE': 'django.db.backends.mysql', |
|
||||||
'NAME': 'test2', |
|
||||||
'USER': 'kotzilla', |
|
||||||
'PASSWORD': 'qazedc', |
|
||||||
'HOST': '', |
|
||||||
'PORT': '', |
|
||||||
} |
|
||||||
} |
|
||||||
File diff suppressed because one or more lines are too long
@ -1 +0,0 @@ |
|||||||
postoffice-4885b11a73674eb6d54593c1d7efd758821e5ee79b8132feecaba10560f0123a |
|
||||||
@ -1,5 +1,5 @@ |
|||||||
<VirtualHost 127.0.0.1:8080> |
<VirtualHost 127.0.0.1:8080> |
||||||
WSGIDaemonProcess www-data display-name=%{GROUP} processes=8 threads=2 |
WSGIDaemonProcess www-data display-name=%{GROUP} processes=2 threads=2 |
||||||
WSGIProcessGroup www-data |
WSGIProcessGroup www-data |
||||||
WSGIScriptAlias / "/home/www/proj/project.wsgi" |
WSGIScriptAlias / "/home/www/proj/project.wsgi" |
||||||
ServerName 176.121.11.165 |
ServerName 176.121.11.165 |
||||||
@ -1,629 +0,0 @@ |
|||||||
# -*- coding: utf-8 -*- |
|
||||||
# Django settings for proj project. |
|
||||||
import os |
|
||||||
import django |
|
||||||
from django.utils.translation import ugettext_lazy as _ |
|
||||||
from ConfigParser import ConfigParser |
|
||||||
|
|
||||||
|
|
||||||
DJANGO_ROOT = os.path.dirname(os.path.realpath(django.__file__)) |
|
||||||
SITE_ROOT = os.path.split(os.path.dirname(os.path.realpath(__file__)))[0] |
|
||||||
|
|
||||||
DEBUG = True |
|
||||||
|
|
||||||
|
|
||||||
ADMINS = ( |
|
||||||
# ('Your Name', 'your_email@example.com'), |
|
||||||
) |
|
||||||
|
|
||||||
MANAGERS = ADMINS |
|
||||||
|
|
||||||
DATABASES = { |
|
||||||
'default': { |
|
||||||
'ENGINE': 'django.db.backends.mysql', |
|
||||||
'NAME': 'expomap', |
|
||||||
'USER': 'kotzilla', |
|
||||||
'PASSWORD': 'qazedc', |
|
||||||
'HOST': '', |
|
||||||
'PORT': '', |
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
|
|
||||||
CACHES = { |
|
||||||
"default": { |
|
||||||
"BACKEND": "redis_cache.cache.RedisCache", |
|
||||||
"LOCATION": "/tmp/redis.sock", |
|
||||||
"OPTIONS": { |
|
||||||
"CLIENT_CLASS": "redis_cache.client.DefaultClient", |
|
||||||
}, |
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
|
|
||||||
# Hosts/domain names that are valid for this site; required if DEBUG is False |
|
||||||
# See https://docs.djangoproject.com/en/1.5/ref/settings/#allowed-hosts |
|
||||||
ALLOWED_HOSTS = ['hit.expomap.ru', '195.66.79.152', '195.66.79.145', 'expomap.ru', '195.66.79.148'] |
|
||||||
DEFAULT_HTTP_SCHEME = 'http' |
|
||||||
|
|
||||||
# Local time zone for this installation. Choices can be found here: |
|
||||||
# http://en.wikipedia.org/wiki/List_of_tz_zones_by_name |
|
||||||
# although not all choices may be available on all operating systems. |
|
||||||
# In a Windows environment this must be set to your system time zone. |
|
||||||
TIME_ZONE = 'UTC' |
|
||||||
|
|
||||||
# Language code for this installation. All choices can be found here: |
|
||||||
# http://www.i18nguy.com/unicode/language-identifiers.html |
|
||||||
LANGUAGE_CODE = 'ru' |
|
||||||
|
|
||||||
DEFAULT_LANGUAGE = 'ru' |
|
||||||
|
|
||||||
LANGUAGES = ( |
|
||||||
('ru', _('Russian')), |
|
||||||
('en', _('English')), |
|
||||||
) |
|
||||||
|
|
||||||
LOCALE_PATHS = ( |
|
||||||
os.path.join(SITE_ROOT, 'locale'), |
|
||||||
) |
|
||||||
|
|
||||||
DEFAULT_CHARSET = 'utf-8' |
|
||||||
|
|
||||||
SITE_ID = 1 |
|
||||||
|
|
||||||
# If you set this to False, Django will make some optimizations so as not |
|
||||||
# to load the internationalization machinery. |
|
||||||
USE_I18N = True |
|
||||||
|
|
||||||
# If you set this to False, Django will not format dates, numbers and |
|
||||||
# calendars according to the current locale. |
|
||||||
USE_L10N = False |
|
||||||
|
|
||||||
# If you set this to False, Django will not use timezone-aware datetimes. |
|
||||||
USE_TZ = False |
|
||||||
|
|
||||||
|
|
||||||
MEDIA_ROOT = os.path.join(SITE_ROOT, 'media/') |
|
||||||
CKEDITOR_UPLOAD_PATH = os.path.join(SITE_ROOT, 'media/upload') |
|
||||||
|
|
||||||
|
|
||||||
CKEDITOR_CONFIGS = { |
|
||||||
'default': { |
|
||||||
'toolbar': 'standart', |
|
||||||
'height': 200, |
|
||||||
'width': 565, |
|
||||||
'resize_enabled' : True, |
|
||||||
'autoGrow_onStartup' : False, |
|
||||||
'autoGrow_bottomSpace' : 300, |
|
||||||
'fillEmptyBlocks' : False, |
|
||||||
'autoParagraph' : False, |
|
||||||
}, |
|
||||||
'newsletters': { |
|
||||||
'toolbar': 'standart', |
|
||||||
'height': 600, |
|
||||||
'width': 750, |
|
||||||
'resize_enabled' : True, |
|
||||||
'autoGrow_onStartup' : False, |
|
||||||
'autoGrow_bottomSpace' : 300, |
|
||||||
'fillEmptyBlocks' : False, |
|
||||||
'autoParagraph' : False, |
|
||||||
}, |
|
||||||
|
|
||||||
} |
|
||||||
|
|
||||||
MEDIA_URL = '/media/' |
|
||||||
|
|
||||||
# STATIC_ROOT = os.path.join(SITE_ROOT, 'static') |
|
||||||
STATIC_URL = '/static/' |
|
||||||
STATICFILES_DIRS = ( |
|
||||||
os.path.join(SITE_ROOT, 'static'), |
|
||||||
) |
|
||||||
|
|
||||||
STATICFILES_FINDERS = ( |
|
||||||
'django.contrib.staticfiles.finders.FileSystemFinder', |
|
||||||
'django.contrib.staticfiles.finders.AppDirectoriesFinder', |
|
||||||
#'django.contrib.staticfiles.finders.DefaultStorageFinder', |
|
||||||
) |
|
||||||
|
|
||||||
# Make this unique, and don't share it with anybody. |
|
||||||
SECRET_KEY = '=yz1@ko%1s8bmel)c84#s*xpxn%4(1e+smdnh*@rdm*5%v!mln' |
|
||||||
|
|
||||||
|
|
||||||
TEMPLATE_CONTEXT_PROCESSORS = ( |
|
||||||
"django.contrib.auth.context_processors.auth", |
|
||||||
"django.core.context_processors.debug", |
|
||||||
"django.core.context_processors.i18n", |
|
||||||
"django.core.context_processors.media", |
|
||||||
"django.core.context_processors.static", |
|
||||||
"django.core.context_processors.tz", |
|
||||||
"django.contrib.messages.context_processors.messages", |
|
||||||
"django.core.context_processors.request", |
|
||||||
'social.apps.django_app.context_processors.backends', |
|
||||||
'social.apps.django_app.context_processors.login_redirect', |
|
||||||
'django_messages.context_processors.inbox', |
|
||||||
"proj.views.expo_context" |
|
||||||
) |
|
||||||
#LOGIN_REDIRECT_URL = '/' |
|
||||||
|
|
||||||
MIDDLEWARE_CLASSES = ( |
|
||||||
# 'django.middleware.cache.UpdateCacheMiddleware', |
|
||||||
'django.contrib.sessions.middleware.SessionMiddleware', |
|
||||||
'solid_i18n.middleware.SolidLocaleMiddleware', |
|
||||||
'django.middleware.common.CommonMiddleware', |
|
||||||
'django.middleware.csrf.CsrfViewMiddleware', |
|
||||||
'django.contrib.auth.middleware.AuthenticationMiddleware', |
|
||||||
'django.contrib.messages.middleware.MessageMiddleware', |
|
||||||
'social.apps.django_app.middleware.SocialAuthExceptionMiddleware', |
|
||||||
# 'django.middleware.cache.FetchFromCacheMiddleware', |
|
||||||
'django.middleware.clickjacking.XFrameOptionsMiddleware', |
|
||||||
'proj.middleware.Referer', |
|
||||||
'django.contrib.redirects.middleware.RedirectFallbackMiddleware', |
|
||||||
'proj.middleware.ExpoRedirectFallbackMiddleware', |
|
||||||
'proj.middleware.SpacelessMiddleware', |
|
||||||
|
|
||||||
) |
|
||||||
|
|
||||||
|
|
||||||
ROOT_URLCONF = 'proj.urls' |
|
||||||
|
|
||||||
# Python dotted path to the WSGI application used by Django's runserver. |
|
||||||
WSGI_APPLICATION = 'proj.wsgi.application' |
|
||||||
|
|
||||||
TEMPLATE_DIRS = ( |
|
||||||
# Put strings here, like "/home/html/django_templates" or "C:/www/django/templates". |
|
||||||
# Always use forward slashes, even on Windows. |
|
||||||
# Don't forget to use absolute paths, not relative paths. |
|
||||||
# os.path.join(SITE_ROOT, 'templates/debug_toolbar'), |
|
||||||
os.path.join(SITE_ROOT, 'templates/c_admin'), |
|
||||||
os.path.join(SITE_ROOT, 'templates/c_admin/accounts'), |
|
||||||
os.path.join(SITE_ROOT, 'templates/c_admin/article'), |
|
||||||
os.path.join(SITE_ROOT, 'templates/c_admin/country'), |
|
||||||
os.path.join(SITE_ROOT, 'templates/c_admin/city'), |
|
||||||
os.path.join(SITE_ROOT, 'templates/c_admin/company'), |
|
||||||
os.path.join(SITE_ROOT, 'templates/c_admin/conference'), |
|
||||||
os.path.join(SITE_ROOT, 'templates/c_admin/directories'), |
|
||||||
os.path.join(SITE_ROOT, 'templates/c_admin/exposition'), |
|
||||||
os.path.join(SITE_ROOT, 'templates/c_admin/forms'), |
|
||||||
os.path.join(SITE_ROOT, 'templates/c_admin/import templates'), |
|
||||||
os.path.join(SITE_ROOT, 'templates/c_admin/news'), |
|
||||||
os.path.join(SITE_ROOT, 'templates/c_admin/organiser'), |
|
||||||
os.path.join(SITE_ROOT, 'templates/c_admin/place_conference'), |
|
||||||
os.path.join(SITE_ROOT, 'templates/c_admin/place_exposition'), |
|
||||||
os.path.join(SITE_ROOT, 'templates/c_admin/page'), |
|
||||||
os.path.join(SITE_ROOT, 'templates/c_admin/photoreport'), |
|
||||||
os.path.join(SITE_ROOT, 'templates/c_admin/settings'), |
|
||||||
os.path.join(SITE_ROOT, 'templates/c_admin/seminar'), |
|
||||||
os.path.join(SITE_ROOT, 'templates/c_admin/service'), |
|
||||||
os.path.join(SITE_ROOT, 'templates/c_admin/theme'), |
|
||||||
os.path.join(SITE_ROOT, 'templates/c_admin/translator'), |
|
||||||
os.path.join(SITE_ROOT, 'templates/c_admin/webinar'), |
|
||||||
|
|
||||||
os.path.join(SITE_ROOT, 'templates/client'), |
|
||||||
os.path.join(SITE_ROOT, 'templates/client/exposition'), |
|
||||||
os.path.join(SITE_ROOT, 'templates/client/photoreport'), |
|
||||||
os.path.join(SITE_ROOT, 'templates/client/includes'), |
|
||||||
os.path.join(SITE_ROOT, 'templates'), |
|
||||||
#os.path.join(SITE_ROOT, 'templates/client/popups'), |
|
||||||
) |
|
||||||
|
|
||||||
AUTH_USER_MODEL = 'accounts.User' |
|
||||||
LOGIN_URL='/' |
|
||||||
#registration info |
|
||||||
ACCOUNT_ACTIVATION_DAYS=2 |
|
||||||
# mail settings |
|
||||||
EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend' |
|
||||||
EMAIL_HOST = 'localhost' |
|
||||||
EMAIL_HOST_USER = '' |
|
||||||
EMAIL_HOST_PASSWORD = '' |
|
||||||
EMAIL_USE_TLS = True |
|
||||||
EMAIL_PORT = 25 |
|
||||||
DEFAULT_FROM_EMAIL = "expomap.ru" |
|
||||||
|
|
||||||
|
|
||||||
AUTHENTICATION_BACKENDS = ( |
|
||||||
'social.backends.open_id.OpenIdAuth', |
|
||||||
'social.backends.vk.VKOAuth2', |
|
||||||
'social.backends.facebook.FacebookOAuth2', |
|
||||||
'social.backends.twitter.TwitterOAuth', |
|
||||||
'social.backends.google.GoogleOAuth', |
|
||||||
'social.backends.linkedin.LinkedinOAuth', |
|
||||||
'social.backends.odnoklassniki.OdnoklassnikiOAuth2', |
|
||||||
'social.backends.mailru.MailruOAuth2', |
|
||||||
'django.contrib.auth.backends.ModelBackend', |
|
||||||
) |
|
||||||
|
|
||||||
SOCIAL_AUTH_LOGIN_URL = '/' |
|
||||||
SOCIAL_AUTH_USER_MODEL = 'accounts.User' |
|
||||||
SOCIAL_AUTH_LOGIN_REDIRECT_URL = '/logged-in/' |
|
||||||
# The user will be redirected to this URL when a social account is disconnected |
|
||||||
SOCIAL_AUTH_INACTIVE_USER_URL = '/inactive-user/' |
|
||||||
# #Used to redirect the user once the auth process ended successfully. The value of ?next=/foo is used if it was present |
|
||||||
# SOCIAL_AUTH_LOGIN_ERROR_URL = '/login-error/' |
|
||||||
# #URL where the user will be redirected in case of an error |
|
||||||
# SOCIAL_AUTH_LOGIN_URL = '/login-url/' |
|
||||||
# #Is used as a fallback for LOGIN_ERROR_URL |
|
||||||
# SOCIAL_AUTH_NEW_USER_REDIRECT_URL = '/new-users-redirect-url/' |
|
||||||
# # Used to redirect new registered users, will be used in place of SOCIAL_AUTH_LOGIN_REDIRECT_URL if defined. |
|
||||||
# Note that ?next=/foo is appended if present, if you want new users to go to next, you’ll need to do it yourself. |
|
||||||
# SOCIAL_AUTH_NEW_ASSOCIATION_REDIRECT_URL = '/new-association-redirect-url/' |
|
||||||
# # Like SOCIAL_AUTH_NEW_USER_REDIRECT_URL but for new associated accounts (user is already logged in). |
|
||||||
# Used in place of SOCIAL_AUTH_LOGIN_REDIRECT_URL |
|
||||||
# SOCIAL_AUTH_DISCONNECT_REDIRECT_URL = '/account-disconnected-redirect-url/' |
|
||||||
|
|
||||||
# Inactive users can be redirected to this URL when trying to authenticate. |
|
||||||
# SOCIAL_AUTH_UID_LENGTH = <int> |
|
||||||
# SOCIAL_AUTH_NONCE_SERVER_URL_LENGTH = <int> |
|
||||||
# SOCIAL_AUTH_ASSOCIATION_SERVER_URL_LENGTH = <int> |
|
||||||
# SOCIAL_AUTH_FORCE_EMAIL_VALIDATION = True |
|
||||||
|
|
||||||
SOCIAL_AUTH_USERNAME_IS_FULL_EMAIL = True |
|
||||||
|
|
||||||
SOCIAL_AUTH_PIPELINE = ( |
|
||||||
'social.pipeline.social_auth.social_details', |
|
||||||
'social.pipeline.social_auth.social_uid', |
|
||||||
'functions.pipeline.get_email', # vk |
|
||||||
'functions.pipeline.load_user', |
|
||||||
'social.pipeline.social_auth.auth_allowed', |
|
||||||
'functions.pipeline.social_user', |
|
||||||
# 'social.pipeline.social_auth.social_user', |
|
||||||
'social.pipeline.social_auth.load_extra_data', |
|
||||||
'social.pipeline.user.get_username', |
|
||||||
'functions.pipeline.require_email', |
|
||||||
#'social.pipeline.mail.mail_validation', |
|
||||||
'functions.pipeline.create_user', |
|
||||||
#'social.pipeline.user.create_user', |
|
||||||
'social.pipeline.social_auth.associate_by_email', |
|
||||||
'social.pipeline.social_auth.associate_user', |
|
||||||
# 'social.pipeline.user.user_details' |
|
||||||
'functions.pipeline.user_details', |
|
||||||
|
|
||||||
) |
|
||||||
|
|
||||||
REQUIRES_EMAIL_VALIDATION = True |
|
||||||
SOCIAL_AUTH_EMAIL_VALIDATION_FUNCTION = 'functions.pipeline.SendVerificationEmail' |
|
||||||
SOCIAL_AUTH_EMAIL_VALIDATION_URL = '/email_verify_sent/' |
|
||||||
|
|
||||||
|
|
||||||
SOCIAL_AUTH_VK_OAUTH2_KEY = '3393841' |
|
||||||
SOCIAL_AUTH_VK_OAUTH2_SECRET = '2P19EBUEpLZifaabbREv' |
|
||||||
SOCIAL_AUTH_VK_OAUTH2_SCOPE =['email'] |
|
||||||
SOCIAL_AUTH_VK_OAUTH2_PROFILE_EXTRA_PARAMS = { |
|
||||||
'fields': 'email' |
|
||||||
} |
|
||||||
|
|
||||||
SOCIAL_AUTH_FACEBOOK_KEY = '133775720059470' |
|
||||||
SOCIAL_AUTH_FACEBOOK_SECRET = '434edf89c24a290497646a739df656c6' |
|
||||||
SOCIAL_AUTH_FACEBOOK_SCOPE = ['email', 'publish_actions'] |
|
||||||
|
|
||||||
SOCIAL_AUTH_TWITTER_KEY = 'S6NX33FazTcWuqnXQhlOdg' |
|
||||||
SOCIAL_AUTH_TWITTER_SECRET = 'MxUGfySQmLI5kvqSoAtWsGje2eAHQL7Jo8mXuIZ4D0' |
|
||||||
SOCIAL_AUTH_TWITTER_SCOPE = ['email'] |
|
||||||
|
|
||||||
SOCIAL_AUTH_GOOGLE_OAUTH_KEY = '1044044901114.apps.googleusercontent.com' |
|
||||||
SOCIAL_AUTH_GOOGLE_OAUTH_SECRET = 'j_McErlPPof88eNrmOXI-ZXI' |
|
||||||
SOCIAL_AUTH_GOOGLE_OAUTH_SCOPE = ['email'] |
|
||||||
|
|
||||||
SOCIAL_AUTH_MAILRU_OAUTH2_KEY = '697945' |
|
||||||
SOCIAL_AUTH_MAILRU_OAUTH2_SECRET = '343581b9e31961b334532cc1880066e8' |
|
||||||
SOCIAL_AUTH_MAILRU_OAUTH2_SCOPE = ['email'] |
|
||||||
|
|
||||||
SOCIAL_AUTH_ODNOKLASSNIKI_OAUTH2_KEY = '1249032192' |
|
||||||
SOCIAL_AUTH_ODNOKLASSNIKI_OAUTH2_SECRET = '87A7A1B964D2C73B9861BF76' |
|
||||||
SOCIAL_AUTH_ODNOKLASSNIKI_OAUTH2_PUBLIC_NAME = 'CBAJLDHLEBABABABA' |
|
||||||
SOCIAL_AUTH_ODNOKLASSNIKI_OAUTH2_SCOPE = ['GET_EMAIL'] |
|
||||||
|
|
||||||
SOCIAL_AUTH_LINKEDIN_KEY = 'jt9xwquj1fkd' |
|
||||||
SOCIAL_AUTH_LINKEDIN_SECRET = 'GvM2xQCNADaBfiMy' |
|
||||||
SOCIAL_AUTH_LINKEDIN_SCOPE = ['email'] |
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
INSTALLED_APPS = ( |
|
||||||
'modeltranslation', |
|
||||||
'django.contrib.admin', |
|
||||||
'django.contrib.auth', |
|
||||||
'django.contrib.contenttypes', |
|
||||||
'django.contrib.sessions', |
|
||||||
'django.contrib.sites', |
|
||||||
'django.contrib.redirects', |
|
||||||
'django.contrib.messages', |
|
||||||
'django.contrib.staticfiles', |
|
||||||
'django.contrib.humanize', |
|
||||||
'django.contrib.sitemaps', |
|
||||||
'haystack', |
|
||||||
#custom modules |
|
||||||
'redirects', |
|
||||||
'stats_collector', |
|
||||||
'emencia.django.newsletter', |
|
||||||
'accounts', |
|
||||||
'article', |
|
||||||
'comments', |
|
||||||
'city', |
|
||||||
'company', |
|
||||||
'conference', |
|
||||||
'core', |
|
||||||
'country', |
|
||||||
'directories', |
|
||||||
'expobanner', |
|
||||||
'exposition', |
|
||||||
'file', |
|
||||||
'import_xls', |
|
||||||
'news', |
|
||||||
'note', |
|
||||||
'organiser', |
|
||||||
'place_conference', |
|
||||||
'place_exposition', |
|
||||||
'photoreport', |
|
||||||
'registration', |
|
||||||
'review', |
|
||||||
'seminar', |
|
||||||
'service', |
|
||||||
'settings', |
|
||||||
'theme', |
|
||||||
'translator', |
|
||||||
'webinar', |
|
||||||
'meta', |
|
||||||
'events', |
|
||||||
#django modules |
|
||||||
'django_crontab', |
|
||||||
'sorl.thumbnail', # for logos |
|
||||||
'photologue', # photogallery |
|
||||||
'sortedm2m', # photologue dependence |
|
||||||
'hvad', # |
|
||||||
'tinymce', # ??? |
|
||||||
'ckeditor', # wysiwig editor in admin |
|
||||||
'django_messages', # messages |
|
||||||
'bitfield', |
|
||||||
'djutils', # ?? |
|
||||||
'pytils', # ?? |
|
||||||
'pymorphy', # ?? |
|
||||||
'password_reset', # reset password |
|
||||||
'social.apps.django_app.default', # social auth |
|
||||||
'core', |
|
||||||
'specialist_catalog', |
|
||||||
'south', |
|
||||||
'rosetta', |
|
||||||
'widget_tweaks', |
|
||||||
|
|
||||||
) |
|
||||||
|
|
||||||
CRONJOBS = [ |
|
||||||
('8 * * * *', 'django.core.management.call_command', ['send_newsletter']), |
|
||||||
|
|
||||||
('0 * * * *', 'django.core.management.call_command', ['update_index', 'conference', '--remove', '--age=6']), |
|
||||||
('5 * * * *', 'django.core.management.call_command', ['update_index', 'exposition', '--remove', '--age=6']), |
|
||||||
('0 1,13 * * *', 'django.core.management.call_command', ['update_index', 'place_exposition', '--remove', '--age=24']), |
|
||||||
('0 3 * * *', 'django.core.management.call_command', ['update_index', 'company', '--remove', '--age=48']), |
|
||||||
('0 4 * * *', 'django.core.management.call_command', ['update_index', 'theme', '--remove', '--age=48']), |
|
||||||
('0 5 * * * ', 'django.core.management.call_command', ['update_index', 'tag', '--remove', '--age=48']), |
|
||||||
('0 6 * * *', 'django.core.management.call_command', ['update_index', 'country', '--remove', '--age=48']), |
|
||||||
('0 7 * * *', 'django.core.management.call_command', ['update_index', 'city', '--remove', '--age=48']), |
|
||||||
|
|
||||||
('10 * * * *', 'django.core.management.call_command', ['banner_log_update']), |
|
||||||
('20 2,14 * * *', 'django.core.management.call_command', ['banner_log_check_previous_day']), |
|
||||||
('*/5 * * * *', 'django.core.management.call_command', ['update_views_cache']), |
|
||||||
|
|
||||||
('40 6 * * * ', 'django.core.management.call_command', ['newsletter_contacts_remove_notactivated']), |
|
||||||
# ('41 5 * * *', 'django.core.management.call_command', ['newsletter_create_announce']), |
|
||||||
|
|
||||||
('12 4 * * *', 'django.core.management.call_command', ['stats_daily']), |
|
||||||
('5 10 * * *', 'django.core.management.call_command', ['update_events_filter_fields']), |
|
||||||
] |
|
||||||
|
|
||||||
PYMORPHY_DICTS = { |
|
||||||
'ru': { 'dir': os.path.join(SITE_ROOT, 'settings/russian_dicts')} #'/home/www/proj/settings/russian_dicts' }, |
|
||||||
} |
|
||||||
|
|
||||||
# search backend |
|
||||||
HAYSTACK_CONNECTIONS = { |
|
||||||
'default': { |
|
||||||
'ENGINE': 'haystack.backends.solr_backend.SolrEngine', |
|
||||||
'URL': 'http://localhost:8983/solr' |
|
||||||
# ...or for multicore... |
|
||||||
# 'URL': 'http://127.0.0.1:8983/solr/mysite', |
|
||||||
}, |
|
||||||
} |
|
||||||
|
|
||||||
|
|
||||||
# A sample logging configuration. The only tangible logging |
|
||||||
# performed by this configuration is to send an email to |
|
||||||
# the site admins on every HTTP 500 error when DEBUG=False. |
|
||||||
# See http://docs.djangoproject.com/en/dev/topics/logging for |
|
||||||
# more details on how to customize your logging configuration. |
|
||||||
LOGGING = { |
|
||||||
'version': 1, |
|
||||||
'disable_existing_loggers': False, |
|
||||||
'filters': { |
|
||||||
'require_debug_false': { |
|
||||||
'()': 'django.utils.log.RequireDebugFalse' |
|
||||||
} |
|
||||||
}, |
|
||||||
'handlers': { |
|
||||||
'mail_admins': { |
|
||||||
'level': 'ERROR', |
|
||||||
'filters': ['require_debug_false'], |
|
||||||
'class': 'django.utils.log.AdminEmailHandler' |
|
||||||
} |
|
||||||
}, |
|
||||||
'loggers': { |
|
||||||
'django.request': { |
|
||||||
'handlers': ['mail_admins'], |
|
||||||
'level': 'ERROR', |
|
||||||
'propagate': True, |
|
||||||
}, |
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
# TODO automate crons |
|
||||||
""" |
|
||||||
# update search indexes |
|
||||||
0 * * * * /usr/bin/python /var/www/proj/manage.py update_index conference --remove --age=6 |
|
||||||
0 * * * * /usr/bin/python /var/www/proj/manage.py update_index exposition --remove --age=6 |
|
||||||
0 1,13 * * * /usr/bin/python /var/www/proj/manage.py update_index place_exposition --remove --age=24 |
|
||||||
0 3 * * * /usr/bin/python /var/www/proj/manage.py update_index company --remove --age=48 |
|
||||||
0 4 * * * /usr/bin/python /var/www/proj/manage.py update_index theme --remove --age=48 |
|
||||||
0 5 * * * /usr/bin/python /var/www/proj/manage.py update_index tag --remove --age=48 |
|
||||||
0 6 * * * /usr/bin/python /var/www/proj/manage.py update_index country --remove --age=48 |
|
||||||
0 7 * * * /usr/bin/python /var/www/proj/manage.py update_index city --remove --age=48 |
|
||||||
# update banner logs |
|
||||||
10 * * * * /usr/bin/python /var/www/proj/manage.py banner_log_update |
|
||||||
20 2,14 * * * /usr/bin/python /var/www/proj/manage.py banner_log_check_previous_day |
|
||||||
# update hotels prices |
|
||||||
20 1 * * 6 /usr/bin/python /var/www/proj/manage.py update_hotels_price |
|
||||||
# newsletter |
|
||||||
20 * * * * /usr/bin/python /var/www/proj/manage.py send_newsletter |
|
||||||
40 6 * * * /usr/bin/python /var/www/proj/manage.py newsletter_contacts_remove_notactivated |
|
||||||
|
|
||||||
""" |
|
||||||
|
|
||||||
THUMBNAIL_DEBUG = DEBUG |
|
||||||
THUMBNAIL_ENGINE = "proj.sorlengine.SorlEngine" |
|
||||||
THUMBNAIL_FORMAT = "PNG" |
|
||||||
|
|
||||||
CALLBACK_EMAIL = 'kotzilla@ukr.net' |
|
||||||
|
|
||||||
BOOKING_AID = '333667' |
|
||||||
try: |
|
||||||
from functions.overrides import SeoPaginator as Paginator |
|
||||||
except ImportError: |
|
||||||
from django.core.paginator import Paginator |
|
||||||
DEFAULT_PAGINATOR = Paginator |
|
||||||
ADMIN_PAGINATION = 20 |
|
||||||
CLIENT_PAGINATION = 25 |
|
||||||
|
|
||||||
TEMPLATE_DEBUG = DEBUG |
|
||||||
NO_LOGO = '/static/client/img/no-logo.png' |
|
||||||
|
|
||||||
# events settings |
|
||||||
CURRENCY = ('RUB', 'USD', 'EUR', 'RMB', 'GBP', 'AED', 'SGD', 'TRY', 'CZK', 'CHF', 'SEK', 'LKR', 'UAH', 'IDR', 'PLN','JPY') |
|
||||||
BIT_AUDIENCE = (('experts', _(u'Специалисты')), ('experts and consumers', _(u'Специалисты и потребители')), |
|
||||||
('general public', _(u'Широкая публика'))) |
|
||||||
|
|
||||||
MONTHES = {'jan': {'value': 1, 'name': _(u'Январь')}, 'feb': {'value': 2, 'name': _(u'Февраль')}, |
|
||||||
'mar': {'value': 3, 'name': _(u'Март')}, 'apr': {'value': 4, 'name': _(u'Апрель')}, |
|
||||||
'may': {'value': 5, 'name': _(u'Май')}, 'jun': {'value': 6, 'name': _(u'Июнь')}, |
|
||||||
'jul': {'value': 7, 'name': _(u'Июль')}, 'aug': {'value': 8, 'name': _(u'Август')}, |
|
||||||
'sep': {'value': 9, 'name': _(u'Сентябрь')}, 'oct': {'value': 10, 'name': _(u'Октябрь')}, |
|
||||||
'nov': {'value': 11, 'name': _(u'Ноябрь')}, 'dec': {'value': 12, 'name': _(u'Декабрь')}} |
|
||||||
|
|
||||||
SNG_COUNTRIES = [159, 186, 31, 6, 99, 13, 189, 64] |
|
||||||
RUSSIA_PK = 159 |
|
||||||
MOSCOW_PK = -2960561 |
|
||||||
SPB_PK = -2996338 |
|
||||||
|
|
||||||
|
|
||||||
CLIENT_DATE_FORMAT = ["%d.%m.%Y"] |
|
||||||
|
|
||||||
# cache pages in random seconds. random in this range |
|
||||||
CACHE_RANGE = [60, 120] |
|
||||||
|
|
||||||
DEFAULT_POPUP_COOKIE = 'expo_b_default_popup' |
|
||||||
|
|
||||||
INI_CONFIG_PATH = os.path.join(SITE_ROOT, 'proj/config.ini') |
|
||||||
INI_CONFIG = ConfigParser() |
|
||||||
INI_CONFIG.read(INI_CONFIG_PATH) |
|
||||||
C_CITY_CATALOG_KEY = 'conf_city_catalog' |
|
||||||
C_COUNTRY_CATALOG_KEY = 'conf_country_catalog' |
|
||||||
E_CITY_CATALOG_KEY = 'expo_city_catalog' |
|
||||||
E_COUNTRY_CATALOG_KEY = 'expo_country_catalog' |
|
||||||
DEFAULT_DESCRIPTION = { |
|
||||||
'e_description_ru': 'templates/client/includes/conference/default_description_ru.html', |
|
||||||
'e_description_en': 'templates/client/includes/conference/default_description_en.html', |
|
||||||
'c_description_ru': 'templates/client/includes/exposition/default_description_ru.html', |
|
||||||
'c_description_en': 'templates/client/includes/exposition/default_description_en.html', |
|
||||||
} |
|
||||||
PERIODIC = { |
|
||||||
0: '', |
|
||||||
1: _(u'Ежегодно'), |
|
||||||
2: _(u'2 раза в год'), |
|
||||||
3: _(u'3 раза в год'), |
|
||||||
4: _(u'4 раза в год'), |
|
||||||
5: _(u'5 раз в год'), |
|
||||||
6: _(u'Раз в 2 года'), |
|
||||||
7: _(u'Раз в 3 года'), |
|
||||||
8: _(u'Раз в 4 года'), |
|
||||||
9: _(u'Раз в 5 лет') |
|
||||||
} |
|
||||||
try: |
|
||||||
from local import * |
|
||||||
except ImportError, e: |
|
||||||
pass |
|
||||||
# save sessions in redis |
|
||||||
SESSION_ENGINE = 'django.contrib.sessions.backends.cache' |
|
||||||
if not DEBUG: |
|
||||||
# cache template loading |
|
||||||
TEMPLATE_LOADERS = ( |
|
||||||
('django.template.loaders.cached.Loader', ( |
|
||||||
'django.template.loaders.filesystem.Loader', |
|
||||||
'django.template.loaders.app_directories.Loader', |
|
||||||
)), |
|
||||||
) |
|
||||||
else: |
|
||||||
TEMPLATE_LOADERS = ( |
|
||||||
'django.template.loaders.filesystem.Loader', |
|
||||||
'django.template.loaders.app_directories.Loader', |
|
||||||
) |
|
||||||
|
|
||||||
# debug_toolbar settings |
|
||||||
|
|
||||||
if DEBUG: |
|
||||||
DEBUG_TOOLBAR_PATCH_SETTINGS = False |
|
||||||
INTERNAL_IPS = ('127.0.0.1','176.121.5.82', '176.121.11.162', '77.123.47.46') |
|
||||||
|
|
||||||
MIDDLEWARE_CLASSES += ( |
|
||||||
'debug_toolbar.middleware.DebugToolbarMiddleware', |
|
||||||
) |
|
||||||
|
|
||||||
INSTALLED_APPS += ( |
|
||||||
'debug_toolbar', |
|
||||||
) |
|
||||||
JQUERY_URL = os.path.join(SITE_ROOT, 'static/client/js/jquery-ui-1.10.4.custom.min.js'), |
|
||||||
DEBUG_TOOLBAR_PANELS = [ |
|
||||||
#'debug_toolbar.panels.versions.VersionsPanel', |
|
||||||
'debug_toolbar.panels.timer.TimerPanel', |
|
||||||
'debug_toolbar.panels.settings.SettingsPanel', |
|
||||||
'debug_toolbar.panels.headers.HeadersPanel', |
|
||||||
'debug_toolbar.panels.request.RequestPanel', |
|
||||||
'debug_toolbar.panels.sql.SQLPanel', |
|
||||||
'debug_toolbar.panels.staticfiles.StaticFilesPanel', |
|
||||||
'debug_toolbar.panels.templates.TemplatesPanel', |
|
||||||
'debug_toolbar.panels.cache.CachePanel', |
|
||||||
'debug_toolbar.panels.signals.SignalsPanel', |
|
||||||
'debug_toolbar.panels.logging.LoggingPanel', |
|
||||||
'debug_toolbar.panels.redirects.RedirectsPanel', |
|
||||||
] |
|
||||||
|
|
||||||
|
|
||||||
# logging |
|
||||||
U_LOGFILE_SIZE = 1 * 1024 * 1024 |
|
||||||
U_LOGFILE_COUNT = 2 |
|
||||||
DEFAULT_LOGGER_NAME = 'django' |
|
||||||
LOGGING = { |
|
||||||
'version': 1, |
|
||||||
'disable_existing_loggers': False, |
|
||||||
'formatters': { |
|
||||||
'verbose': { |
|
||||||
'format': '%(levelname)s %(asctime)s %(module)s %(process)d %(thread)d %(message)s \n' |
|
||||||
}, |
|
||||||
'simple': { |
|
||||||
'format': '%(levelname)s %(message)s' |
|
||||||
}, |
|
||||||
}, |
|
||||||
'handlers': { |
|
||||||
'file': { |
|
||||||
'level': 'INFO', |
|
||||||
'filename': os.path.join(SITE_ROOT, 'logs/django.log'), |
|
||||||
'formatter': 'verbose', |
|
||||||
'class':'logging.handlers.RotatingFileHandler', |
|
||||||
'maxBytes': U_LOGFILE_SIZE, |
|
||||||
'backupCount': U_LOGFILE_COUNT, |
|
||||||
}, |
|
||||||
}, |
|
||||||
'loggers': { |
|
||||||
'django': { |
|
||||||
'handlers': ['file'], |
|
||||||
'propagate': True, |
|
||||||
'level': 'DEBUG', |
|
||||||
}, |
|
||||||
} |
|
||||||
} |
|
||||||
@ -1 +0,0 @@ |
|||||||
dev:$apr1$51bqElVf$/.SfDBWGSjAauaw82Drbo1 |
|
||||||
@ -1,201 +0,0 @@ |
|||||||
<?xml version="1.0" ?> |
|
||||||
<!-- |
|
||||||
Licensed to the Apache Software Foundation (ASF) under one or more |
|
||||||
contributor license agreements. See the NOTICE file distributed with |
|
||||||
this work for additional information regarding copyright ownership. |
|
||||||
The ASF licenses this file to You under the Apache License, Version 2.0 |
|
||||||
(the "License"); you may not use this file except in compliance with |
|
||||||
the License. You may obtain a copy of the License at |
|
||||||
|
|
||||||
http://www.apache.org/licenses/LICENSE-2.0 |
|
||||||
|
|
||||||
Unless required by applicable law or agreed to in writing, software |
|
||||||
distributed under the License is distributed on an "AS IS" BASIS, |
|
||||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
|
||||||
See the License for the specific language governing permissions and |
|
||||||
limitations under the License. |
|
||||||
--> |
|
||||||
|
|
||||||
<schema name="default" version="1.4"> |
|
||||||
<types> |
|
||||||
<fieldtype name="string" class="solr.StrField" sortMissingLast="true" omitNorms="true"/> |
|
||||||
<fieldType name="boolean" class="solr.BoolField" sortMissingLast="true" omitNorms="true"/> |
|
||||||
<fieldtype name="binary" class="solr.BinaryField"/> |
|
||||||
|
|
||||||
<!-- Numeric field types that manipulate the value into |
|
||||||
a string value that isn't human-readable in its internal form, |
|
||||||
but with a lexicographic ordering the same as the numeric ordering, |
|
||||||
so that range queries work correctly. --> |
|
||||||
<fieldType name="int" class="solr.TrieIntField" precisionStep="0" omitNorms="true" sortMissingLast="true" positionIncrementGap="0"/> |
|
||||||
<fieldType name="float" class="solr.TrieFloatField" precisionStep="0" omitNorms="true" sortMissingLast="true" positionIncrementGap="0"/> |
|
||||||
<fieldType name="long" class="solr.TrieLongField" precisionStep="0" omitNorms="true" sortMissingLast="true" positionIncrementGap="0"/> |
|
||||||
<fieldType name="double" class="solr.TrieDoubleField" precisionStep="0" omitNorms="true" sortMissingLast="true" positionIncrementGap="0"/> |
|
||||||
|
|
||||||
<fieldType name="tint" class="solr.TrieIntField" precisionStep="8" omitNorms="true" positionIncrementGap="0"/> |
|
||||||
<fieldType name="tfloat" class="solr.TrieFloatField" precisionStep="8" omitNorms="true" positionIncrementGap="0"/> |
|
||||||
<fieldType name="tlong" class="solr.TrieLongField" precisionStep="8" omitNorms="true" positionIncrementGap="0"/> |
|
||||||
<fieldType name="tdouble" class="solr.TrieDoubleField" precisionStep="8" omitNorms="true" positionIncrementGap="0"/> |
|
||||||
|
|
||||||
<fieldType name="date" class="solr.TrieDateField" omitNorms="true" precisionStep="0" positionIncrementGap="0"/> |
|
||||||
<!-- A Trie based date field for faster date range queries and date faceting. --> |
|
||||||
<fieldType name="tdate" class="solr.TrieDateField" omitNorms="true" precisionStep="6" positionIncrementGap="0"/> |
|
||||||
|
|
||||||
<fieldType name="point" class="solr.PointType" dimension="2" subFieldSuffix="_d"/> |
|
||||||
<fieldType name="location" class="solr.LatLonType" subFieldSuffix="_coordinate"/> |
|
||||||
<fieldtype name="geohash" class="solr.GeoHashField"/> |
|
||||||
|
|
||||||
<fieldType name="text_general" class="solr.TextField" positionIncrementGap="100"> |
|
||||||
<analyzer type="index"> |
|
||||||
<tokenizer class="solr.StandardTokenizerFactory"/> |
|
||||||
<filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" enablePositionIncrements="true" /> |
|
||||||
<!-- in this example, we will only use synonyms at query time |
|
||||||
<filter class="solr.SynonymFilterFactory" synonyms="index_synonyms.txt" ignoreCase="true" expand="false"/> |
|
||||||
--> |
|
||||||
<filter class="solr.LowerCaseFilterFactory"/> |
|
||||||
</analyzer> |
|
||||||
<analyzer type="query"> |
|
||||||
<tokenizer class="solr.StandardTokenizerFactory"/> |
|
||||||
<filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" enablePositionIncrements="true" /> |
|
||||||
<filter class="solr.SynonymFilterFactory" synonyms="synonyms.txt" ignoreCase="true" expand="true"/> |
|
||||||
<filter class="solr.LowerCaseFilterFactory"/> |
|
||||||
</analyzer> |
|
||||||
</fieldType> |
|
||||||
|
|
||||||
<fieldType name="text_en" class="solr.TextField" positionIncrementGap="100"> |
|
||||||
<analyzer type="index"> |
|
||||||
<tokenizer class="solr.StandardTokenizerFactory"/> |
|
||||||
<filter class="solr.StopFilterFactory" |
|
||||||
ignoreCase="true" |
|
||||||
words="stopwords_en.txt" |
|
||||||
enablePositionIncrements="true" |
|
||||||
/> |
|
||||||
<filter class="solr.LowerCaseFilterFactory"/> |
|
||||||
<filter class="solr.EnglishPossessiveFilterFactory"/> |
|
||||||
<filter class="solr.KeywordMarkerFilterFactory" protected="protwords.txt"/> |
|
||||||
<!-- Optionally you may want to use this less aggressive stemmer instead of PorterStemFilterFactory: |
|
||||||
<filter class="solr.EnglishMinimalStemFilterFactory"/> |
|
||||||
--> |
|
||||||
<filter class="solr.PorterStemFilterFactory"/> |
|
||||||
</analyzer> |
|
||||||
<analyzer type="query"> |
|
||||||
<tokenizer class="solr.StandardTokenizerFactory"/> |
|
||||||
<filter class="solr.SynonymFilterFactory" synonyms="synonyms.txt" ignoreCase="true" expand="true"/> |
|
||||||
<filter class="solr.StopFilterFactory" |
|
||||||
ignoreCase="true" |
|
||||||
words="stopwords_en.txt" |
|
||||||
enablePositionIncrements="true" |
|
||||||
/> |
|
||||||
<filter class="solr.LowerCaseFilterFactory"/> |
|
||||||
<filter class="solr.EnglishPossessiveFilterFactory"/> |
|
||||||
<filter class="solr.KeywordMarkerFilterFactory" protected="protwords.txt"/> |
|
||||||
<!-- Optionally you may want to use this less aggressive stemmer instead of PorterStemFilterFactory: |
|
||||||
<filter class="solr.EnglishMinimalStemFilterFactory"/> |
|
||||||
--> |
|
||||||
<filter class="solr.PorterStemFilterFactory"/> |
|
||||||
</analyzer> |
|
||||||
</fieldType> |
|
||||||
|
|
||||||
<fieldType name="text_ws" class="solr.TextField" positionIncrementGap="100"> |
|
||||||
<analyzer> |
|
||||||
<tokenizer class="solr.WhitespaceTokenizerFactory"/> |
|
||||||
</analyzer> |
|
||||||
</fieldType> |
|
||||||
|
|
||||||
<fieldType name="ngram" class="solr.TextField" > |
|
||||||
<analyzer type="index"> |
|
||||||
<tokenizer class="solr.KeywordTokenizerFactory"/> |
|
||||||
<filter class="solr.LowerCaseFilterFactory"/> |
|
||||||
<filter class="solr.NGramFilterFactory" minGramSize="3" maxGramSize="15" /> |
|
||||||
</analyzer> |
|
||||||
<analyzer type="query"> |
|
||||||
<tokenizer class="solr.KeywordTokenizerFactory"/> |
|
||||||
<filter class="solr.LowerCaseFilterFactory"/> |
|
||||||
</analyzer> |
|
||||||
</fieldType> |
|
||||||
|
|
||||||
<fieldType name="edge_ngram" class="solr.TextField" positionIncrementGap="1"> |
|
||||||
<analyzer type="index"> |
|
||||||
<tokenizer class="solr.WhitespaceTokenizerFactory" /> |
|
||||||
<filter class="solr.LowerCaseFilterFactory" /> |
|
||||||
<filter class="solr.WordDelimiterFilterFactory" generateWordParts="1" generateNumberParts="1" catenateWords="0" catenateNumbers="0" catenateAll="0" splitOnCaseChange="1"/> |
|
||||||
<filter class="solr.EdgeNGramFilterFactory" minGramSize="2" maxGramSize="15" side="front" /> |
|
||||||
</analyzer> |
|
||||||
<analyzer type="query"> |
|
||||||
<tokenizer class="solr.WhitespaceTokenizerFactory" /> |
|
||||||
<filter class="solr.LowerCaseFilterFactory" /> |
|
||||||
<filter class="solr.WordDelimiterFilterFactory" generateWordParts="1" generateNumberParts="1" catenateWords="0" catenateNumbers="0" catenateAll="0" splitOnCaseChange="1"/> |
|
||||||
</analyzer> |
|
||||||
</fieldType> |
|
||||||
</types> |
|
||||||
|
|
||||||
<fields> |
|
||||||
<!-- general --> |
|
||||||
<field name="id" type="string" indexed="true" stored="true" multiValued="false" required="true"/> |
|
||||||
<field name="django_ct" type="string" indexed="true" stored="true" multiValued="false"/> |
|
||||||
<field name="django_id" type="string" indexed="true" stored="true" multiValued="false"/> |
|
||||||
<field name="_version_" type="long" indexed="true" stored="true"/> |
|
||||||
|
|
||||||
<dynamicField name="*_i" type="int" indexed="true" stored="true"/> |
|
||||||
<dynamicField name="*_s" type="string" indexed="true" stored="true"/> |
|
||||||
<dynamicField name="*_l" type="long" indexed="true" stored="true"/> |
|
||||||
<dynamicField name="*_t" type="text_en" indexed="true" stored="true"/> |
|
||||||
<dynamicField name="*_b" type="boolean" indexed="true" stored="true"/> |
|
||||||
<dynamicField name="*_f" type="float" indexed="true" stored="true"/> |
|
||||||
<dynamicField name="*_d" type="double" indexed="true" stored="true"/> |
|
||||||
<dynamicField name="*_dt" type="date" indexed="true" stored="true"/> |
|
||||||
<dynamicField name="*_p" type="location" indexed="true" stored="true"/> |
|
||||||
<dynamicField name="*_coordinate" type="tdouble" indexed="true" stored="false"/> |
|
||||||
|
|
||||||
|
|
||||||
<field name="name_ru" type="text_en" indexed="true" stored="true" multiValued="false" /> |
|
||||||
|
|
||||||
<field name="url" type="text_en" indexed="true" stored="true" multiValued="false" /> |
|
||||||
|
|
||||||
<field name="text" type="text_en" indexed="true" stored="true" multiValued="false" /> |
|
||||||
|
|
||||||
<field name="catalog_name_ru" type="text_en" indexed="true" stored="true" multiValued="false" /> |
|
||||||
|
|
||||||
<field name="catalog_name_en" type="text_en" indexed="true" stored="true" multiValued="false" /> |
|
||||||
|
|
||||||
<field name="content_auto" type="edge_ngram" indexed="true" stored="true" multiValued="false" /> |
|
||||||
|
|
||||||
<field name="form_name" type="text_en" indexed="true" stored="true" multiValued="false" /> |
|
||||||
|
|
||||||
<field name="name_en" type="text_en" indexed="true" stored="true" multiValued="false" /> |
|
||||||
|
|
||||||
<field name="area_id" type="long" indexed="true" stored="true" multiValued="false" /> |
|
||||||
|
|
||||||
<field name="city_id" type="long" indexed="true" stored="true" multiValued="false" /> |
|
||||||
|
|
||||||
<field name="country_id" type="long" indexed="true" stored="true" multiValued="false" /> |
|
||||||
|
|
||||||
<field name="theme" type="text_en" indexed="true" stored="true" multiValued="true" /> |
|
||||||
|
|
||||||
<field name="tag" type="text_en" indexed="true" stored="true" multiValued="true" /> |
|
||||||
|
|
||||||
<field name="where" type="text_en" indexed="true" stored="true" multiValued="true" /> |
|
||||||
|
|
||||||
<field name="data_end" type="date" indexed="true" stored="true" multiValued="false" /> |
|
||||||
|
|
||||||
<field name="data_begin" type="date" indexed="true" stored="true" multiValued="false" /> |
|
||||||
|
|
||||||
<field name="city" type="text_en" indexed="true" stored="true" multiValued="false" /> |
|
||||||
|
|
||||||
<field name="country" type="text_en" indexed="true" stored="true" multiValued="false" /> |
|
||||||
|
|
||||||
<field name="parent_en" type="text_en" indexed="true" stored="true" multiValued="false" /> |
|
||||||
|
|
||||||
<field name="parent_ru" type="text_en" indexed="true" stored="true" multiValued="false" /> |
|
||||||
|
|
||||||
</fields> |
|
||||||
|
|
||||||
<!-- field to use to determine and enforce document uniqueness. --> |
|
||||||
<uniqueKey>id</uniqueKey> |
|
||||||
|
|
||||||
<!-- field for the QueryParser to use when an explicit fieldname is absent --> |
|
||||||
<defaultSearchField>text</defaultSearchField> |
|
||||||
|
|
||||||
<!-- SolrQueryParser configuration: defaultOperator="AND|OR" --> |
|
||||||
<solrQueryParser defaultOperator="AND"/> |
|
||||||
</schema> |
|
||||||
|
|
||||||
@ -1,89 +0,0 @@ |
|||||||
server { |
|
||||||
# server_name 176.121.11.165 expomap.ru www.expomap.ru dev.expomap.ru; |
|
||||||
listen 80; |
|
||||||
return 301 https://$host$request_uri; |
|
||||||
} |
|
||||||
|
|
||||||
geo $maintenance { |
|
||||||
default yes; |
|
||||||
127.0.0.1/32 no; |
|
||||||
31.43.24.170/24 no; |
|
||||||
} |
|
||||||
|
|
||||||
server { |
|
||||||
listen 443; |
|
||||||
server_name 176.121.11.165 www.expomap.ru expomap.ru dev.expomap.ru; |
|
||||||
#ssl_stapling on; |
|
||||||
ssl on; |
|
||||||
ssl_certificate /etc/nginx/ssl/expomap.ru.crt; |
|
||||||
ssl_certificate_key /etc/nginx/ssl/expomap.ru.key; |
|
||||||
ssl_dhparam /etc/nginx/ssl/dhparam.pem; |
|
||||||
ssl_session_timeout 24h; |
|
||||||
ssl_session_cache shared:SSL:25m; |
|
||||||
ssl_protocols TLSv1 TLSv1.1 TLSv1.2; |
|
||||||
ssl_ciphers kEECDH+AES128:kEECDH:kEDH:-3DES:kRSA+AES128:kEDH+3DES:DES-CBC3-SHA:!RC4:!aNULL:!eNULL:!MD5:!EXPORT:!LOW:!SEED:!CAMELLIA:!IDEA:!PSK:!SRP:!SSLv2; |
|
||||||
ssl_prefer_server_ciphers on; |
|
||||||
add_header Strict-Transport-Security "max-age=31536000;"; |
|
||||||
add_header Content-Security-Policy-Report-Only "default-src https:; script-src https: 'unsafe-eval' 'unsafe-inline'; style-src https: 'unsafe-inline'; img-src https: data:; font-src https: data:"; |
|
||||||
|
|
||||||
client_header_timeout 360s; |
|
||||||
|
|
||||||
error_page 503 /dev_work.html; |
|
||||||
|
|
||||||
location / { |
|
||||||
if ($maintenance = yes) { |
|
||||||
return 503; |
|
||||||
} |
|
||||||
auth_basic "Unauthorized"; |
|
||||||
auth_basic_user_file /home/www/proj/.htpasswd; |
|
||||||
proxy_pass http://127.0.0.1:8080/; |
|
||||||
proxy_redirect off; |
|
||||||
proxy_set_header Host $host; |
|
||||||
proxy_set_header X-Real-IP $remote_addr; |
|
||||||
proxy_set_header X-Forwarded-For $remote_addr; |
|
||||||
|
|
||||||
include /etc/nginx/geoip_proxy.conf; |
|
||||||
|
|
||||||
client_max_body_size 100m; |
|
||||||
client_body_buffer_size 128k; |
|
||||||
|
|
||||||
proxy_connect_timeout 90; |
|
||||||
proxy_send_timeout 90; |
|
||||||
proxy_read_timeout 90; |
|
||||||
proxy_buffer_size 16k; |
|
||||||
proxy_buffers 256 8k; |
|
||||||
proxy_busy_buffers_size 2000k; |
|
||||||
proxy_temp_file_write_size 2048k; |
|
||||||
} |
|
||||||
|
|
||||||
|
|
||||||
location /965E1EE7949FD639CA0124C8D8C57774.txt { |
|
||||||
root /home/www/proj/; |
|
||||||
} |
|
||||||
|
|
||||||
location /4885b11a73674eb6d54593c1d7efd758821e5ee79b8132feecaba10560f0123a.html { |
|
||||||
root /home/www/proj/support; |
|
||||||
} |
|
||||||
|
|
||||||
|
|
||||||
location /static { |
|
||||||
root /home/www/proj; |
|
||||||
} |
|
||||||
location /media { |
|
||||||
root /home/www/proj; |
|
||||||
} |
|
||||||
|
|
||||||
location /templates { |
|
||||||
root /home/www/proj/static; |
|
||||||
} |
|
||||||
location /subdmn { |
|
||||||
root /home/old_files; |
|
||||||
} |
|
||||||
|
|
||||||
location = /dev_work.html { |
|
||||||
root /home/www/proj/support/; |
|
||||||
internal; |
|
||||||
} |
|
||||||
|
|
||||||
} |
|
||||||
|
|
||||||
@ -1,25 +0,0 @@ |
|||||||
<html> |
|
||||||
<head> |
|
||||||
<title>Извините, идут технические работы</title> |
|
||||||
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> |
|
||||||
<meta http-equiv="Pragma" content="no-cache"> |
|
||||||
<style> |
|
||||||
body{ |
|
||||||
margin:0px; |
|
||||||
font-family:Arial; |
|
||||||
} |
|
||||||
.head{ |
|
||||||
height:70px; |
|
||||||
background-color:#c7d9f0; |
|
||||||
} |
|
||||||
.body{ |
|
||||||
padding-top:70px; |
|
||||||
text-align:center; |
|
||||||
} |
|
||||||
</style> |
|
||||||
</head> |
|
||||||
<body style="margin:0;"> |
|
||||||
<div class="head"></div> |
|
||||||
<div class="body">Извините, идут технические работы.</div> |
|
||||||
</body> |
|
||||||
</html> |
|
||||||
@ -1,84 +0,0 @@ |
|||||||
server { |
|
||||||
server_name expomap.ru www.expomap.ru; |
|
||||||
# listen 80; |
|
||||||
return 301 https://expomap.ru$request_uri; |
|
||||||
} |
|
||||||
|
|
||||||
server { |
|
||||||
listen 176.121.11.162:443 ssl; |
|
||||||
server_name www.expomap.ru; |
|
||||||
# ssl on; |
|
||||||
# ssl_certificate /etc/nginx/ssl/expomap.ru.crt; |
|
||||||
# ssl_certificate_key /etc/nginx/ssl/expomap.ru.key; |
|
||||||
return 301 https://expomap.ru$request_uri; |
|
||||||
} |
|
||||||
|
|
||||||
server { |
|
||||||
listen 176.121.11.162:443 ssl default_server ; |
|
||||||
server_name expomap.ru ; |
|
||||||
# ssl_stapling on; |
|
||||||
ssl on; |
|
||||||
ssl_certificate /etc/nginx/ssl/expomap.ru.crt; |
|
||||||
ssl_certificate_key /etc/nginx/ssl/expomap.ru.key; |
|
||||||
ssl_dhparam /etc/nginx/ssl/dhparam.pem; |
|
||||||
ssl_session_timeout 24h; |
|
||||||
ssl_session_cache shared:SSL:25m; |
|
||||||
ssl_protocols TLSv1 TLSv1.1 TLSv1.2; |
|
||||||
ssl_ciphers kEECDH+AES128:kEECDH:kEDH:-3DES:kRSA+AES128:kEDH+3DES:DES-CBC3-SHA:!RC4:!aNULL:!eNULL:!MD5:!EXPORT:!LOW:!SEED:!CAMELLIA:!IDEA:!PSK:!SRP:!SSLv2; |
|
||||||
ssl_prefer_server_ciphers on; |
|
||||||
add_header Strict-Transport-Security "max-age=31536000;"; |
|
||||||
add_header Content-Security-Policy-Report-Only "default-src https:; script-src https: 'unsafe-eval' 'unsafe-inline'; style-src https: 'unsafe-inline'; img-src https: data:; font-src https: data:"; |
|
||||||
|
|
||||||
client_header_timeout 360s; |
|
||||||
location / { |
|
||||||
# auth_basic "Unauthorized"; |
|
||||||
# auth_basic_user_file /home/www/proj/.htpasswd; |
|
||||||
proxy_pass http://127.0.0.1:8080; |
|
||||||
proxy_redirect off; |
|
||||||
proxy_set_header Host $host; |
|
||||||
proxy_set_header X-Real-IP $remote_addr; |
|
||||||
proxy_set_header X-Forwarded-For $remote_addr; |
|
||||||
include /etc/nginx/geoip_proxy.conf; |
|
||||||
client_max_body_size 100m; |
|
||||||
client_body_buffer_size 128k; |
|
||||||
proxy_connect_timeout 90; |
|
||||||
proxy_send_timeout 90; |
|
||||||
proxy_read_timeout 90; |
|
||||||
proxy_buffer_size 16k; |
|
||||||
proxy_buffers 256 8k; |
|
||||||
proxy_busy_buffers_size 2000k; |
|
||||||
proxy_temp_file_write_size 2048k; |
|
||||||
} |
|
||||||
|
|
||||||
location /965E1EE7949FD639CA0124C8D8C57774.txt { |
|
||||||
root /home/www/proj/; |
|
||||||
} |
|
||||||
|
|
||||||
location /4885b11a73674eb6d54593c1d7efd758821e5ee79b8132feecaba10560f0123a.html { |
|
||||||
root /home/www/proj/support; |
|
||||||
} |
|
||||||
|
|
||||||
location /static { |
|
||||||
access_log off; |
|
||||||
expires max; |
|
||||||
root /home/www/proj; |
|
||||||
} |
|
||||||
|
|
||||||
location /media { |
|
||||||
access_log off; |
|
||||||
expires max; |
|
||||||
root /home/www/proj; |
|
||||||
} |
|
||||||
|
|
||||||
location /templates { |
|
||||||
access_log off; |
|
||||||
expires max; |
|
||||||
root /home/www/proj/static; |
|
||||||
} |
|
||||||
|
|
||||||
location /subdmn { |
|
||||||
root /home/old_files; |
|
||||||
} |
|
||||||
|
|
||||||
} |
|
||||||
|
|
||||||
@ -1,31 +0,0 @@ |
|||||||
<VirtualHost 127.0.0.1:8080> |
|
||||||
WSGIDaemonProcess www-data display-name=%{GROUP} processes=16 threads=1 |
|
||||||
WSGIProcessGroup www-data |
|
||||||
WSGIScriptAlias / "/home/www/proj/project.wsgi" |
|
||||||
ServerName hit.expomap.ru |
|
||||||
<Directory "/home/www/proj/"> |
|
||||||
Order allow,deny |
|
||||||
Options Indexes FollowSymLinks |
|
||||||
Allow from all |
|
||||||
IndexOptions FancyIndexing |
|
||||||
</Directory> |
|
||||||
|
|
||||||
Alias /media "/home/www/proj/media/" |
|
||||||
Alias /static "/home/www/proj/static/" |
|
||||||
|
|
||||||
|
|
||||||
<Directory "/home/www/proj/media"> |
|
||||||
Order allow,deny |
|
||||||
Options Indexes FollowSymLinks |
|
||||||
Allow from all |
|
||||||
IndexOptions FancyIndexing |
|
||||||
</Directory> |
|
||||||
<Directory "/home/www/proj/static"> |
|
||||||
Order allow,deny |
|
||||||
Options Indexes FollowSymLinks |
|
||||||
Allow from all |
|
||||||
IndexOptions FancyIndexing |
|
||||||
</Directory> |
|
||||||
|
|
||||||
ErrorLog /var/log/apache2/expo.error.log |
|
||||||
</VirtualHost> |
|
||||||
@ -1,201 +0,0 @@ |
|||||||
<?xml version="1.0" ?> |
|
||||||
<!-- |
|
||||||
Licensed to the Apache Software Foundation (ASF) under one or more |
|
||||||
contributor license agreements. See the NOTICE file distributed with |
|
||||||
this work for additional information regarding copyright ownership. |
|
||||||
The ASF licenses this file to You under the Apache License, Version 2.0 |
|
||||||
(the "License"); you may not use this file except in compliance with |
|
||||||
the License. You may obtain a copy of the License at |
|
||||||
|
|
||||||
http://www.apache.org/licenses/LICENSE-2.0 |
|
||||||
|
|
||||||
Unless required by applicable law or agreed to in writing, software |
|
||||||
distributed under the License is distributed on an "AS IS" BASIS, |
|
||||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
|
||||||
See the License for the specific language governing permissions and |
|
||||||
limitations under the License. |
|
||||||
--> |
|
||||||
|
|
||||||
<schema name="default" version="1.4"> |
|
||||||
<types> |
|
||||||
<fieldtype name="string" class="solr.StrField" sortMissingLast="true" omitNorms="true"/> |
|
||||||
<fieldType name="boolean" class="solr.BoolField" sortMissingLast="true" omitNorms="true"/> |
|
||||||
<fieldtype name="binary" class="solr.BinaryField"/> |
|
||||||
|
|
||||||
<!-- Numeric field types that manipulate the value into |
|
||||||
a string value that isn't human-readable in its internal form, |
|
||||||
but with a lexicographic ordering the same as the numeric ordering, |
|
||||||
so that range queries work correctly. --> |
|
||||||
<fieldType name="int" class="solr.TrieIntField" precisionStep="0" omitNorms="true" sortMissingLast="true" positionIncrementGap="0"/> |
|
||||||
<fieldType name="float" class="solr.TrieFloatField" precisionStep="0" omitNorms="true" sortMissingLast="true" positionIncrementGap="0"/> |
|
||||||
<fieldType name="long" class="solr.TrieLongField" precisionStep="0" omitNorms="true" sortMissingLast="true" positionIncrementGap="0"/> |
|
||||||
<fieldType name="double" class="solr.TrieDoubleField" precisionStep="0" omitNorms="true" sortMissingLast="true" positionIncrementGap="0"/> |
|
||||||
|
|
||||||
<fieldType name="tint" class="solr.TrieIntField" precisionStep="8" omitNorms="true" positionIncrementGap="0"/> |
|
||||||
<fieldType name="tfloat" class="solr.TrieFloatField" precisionStep="8" omitNorms="true" positionIncrementGap="0"/> |
|
||||||
<fieldType name="tlong" class="solr.TrieLongField" precisionStep="8" omitNorms="true" positionIncrementGap="0"/> |
|
||||||
<fieldType name="tdouble" class="solr.TrieDoubleField" precisionStep="8" omitNorms="true" positionIncrementGap="0"/> |
|
||||||
|
|
||||||
<fieldType name="date" class="solr.TrieDateField" omitNorms="true" precisionStep="0" positionIncrementGap="0"/> |
|
||||||
<!-- A Trie based date field for faster date range queries and date faceting. --> |
|
||||||
<fieldType name="tdate" class="solr.TrieDateField" omitNorms="true" precisionStep="6" positionIncrementGap="0"/> |
|
||||||
|
|
||||||
<fieldType name="point" class="solr.PointType" dimension="2" subFieldSuffix="_d"/> |
|
||||||
<fieldType name="location" class="solr.LatLonType" subFieldSuffix="_coordinate"/> |
|
||||||
<fieldtype name="geohash" class="solr.GeoHashField"/> |
|
||||||
|
|
||||||
<fieldType name="text_general" class="solr.TextField" positionIncrementGap="100"> |
|
||||||
<analyzer type="index"> |
|
||||||
<tokenizer class="solr.StandardTokenizerFactory"/> |
|
||||||
<filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" enablePositionIncrements="true" /> |
|
||||||
<!-- in this example, we will only use synonyms at query time |
|
||||||
<filter class="solr.SynonymFilterFactory" synonyms="index_synonyms.txt" ignoreCase="true" expand="false"/> |
|
||||||
--> |
|
||||||
<filter class="solr.LowerCaseFilterFactory"/> |
|
||||||
</analyzer> |
|
||||||
<analyzer type="query"> |
|
||||||
<tokenizer class="solr.StandardTokenizerFactory"/> |
|
||||||
<filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" enablePositionIncrements="true" /> |
|
||||||
<filter class="solr.SynonymFilterFactory" synonyms="synonyms.txt" ignoreCase="true" expand="true"/> |
|
||||||
<filter class="solr.LowerCaseFilterFactory"/> |
|
||||||
</analyzer> |
|
||||||
</fieldType> |
|
||||||
|
|
||||||
<fieldType name="text_en" class="solr.TextField" positionIncrementGap="100"> |
|
||||||
<analyzer type="index"> |
|
||||||
<tokenizer class="solr.StandardTokenizerFactory"/> |
|
||||||
<filter class="solr.StopFilterFactory" |
|
||||||
ignoreCase="true" |
|
||||||
words="stopwords_en.txt" |
|
||||||
enablePositionIncrements="true" |
|
||||||
/> |
|
||||||
<filter class="solr.LowerCaseFilterFactory"/> |
|
||||||
<filter class="solr.EnglishPossessiveFilterFactory"/> |
|
||||||
<filter class="solr.KeywordMarkerFilterFactory" protected="protwords.txt"/> |
|
||||||
<!-- Optionally you may want to use this less aggressive stemmer instead of PorterStemFilterFactory: |
|
||||||
<filter class="solr.EnglishMinimalStemFilterFactory"/> |
|
||||||
--> |
|
||||||
<filter class="solr.PorterStemFilterFactory"/> |
|
||||||
</analyzer> |
|
||||||
<analyzer type="query"> |
|
||||||
<tokenizer class="solr.StandardTokenizerFactory"/> |
|
||||||
<filter class="solr.SynonymFilterFactory" synonyms="synonyms.txt" ignoreCase="true" expand="true"/> |
|
||||||
<filter class="solr.StopFilterFactory" |
|
||||||
ignoreCase="true" |
|
||||||
words="stopwords_en.txt" |
|
||||||
enablePositionIncrements="true" |
|
||||||
/> |
|
||||||
<filter class="solr.LowerCaseFilterFactory"/> |
|
||||||
<filter class="solr.EnglishPossessiveFilterFactory"/> |
|
||||||
<filter class="solr.KeywordMarkerFilterFactory" protected="protwords.txt"/> |
|
||||||
<!-- Optionally you may want to use this less aggressive stemmer instead of PorterStemFilterFactory: |
|
||||||
<filter class="solr.EnglishMinimalStemFilterFactory"/> |
|
||||||
--> |
|
||||||
<filter class="solr.PorterStemFilterFactory"/> |
|
||||||
</analyzer> |
|
||||||
</fieldType> |
|
||||||
|
|
||||||
<fieldType name="text_ws" class="solr.TextField" positionIncrementGap="100"> |
|
||||||
<analyzer> |
|
||||||
<tokenizer class="solr.WhitespaceTokenizerFactory"/> |
|
||||||
</analyzer> |
|
||||||
</fieldType> |
|
||||||
|
|
||||||
<fieldType name="ngram" class="solr.TextField" > |
|
||||||
<analyzer type="index"> |
|
||||||
<tokenizer class="solr.KeywordTokenizerFactory"/> |
|
||||||
<filter class="solr.LowerCaseFilterFactory"/> |
|
||||||
<filter class="solr.NGramFilterFactory" minGramSize="3" maxGramSize="15" /> |
|
||||||
</analyzer> |
|
||||||
<analyzer type="query"> |
|
||||||
<tokenizer class="solr.KeywordTokenizerFactory"/> |
|
||||||
<filter class="solr.LowerCaseFilterFactory"/> |
|
||||||
</analyzer> |
|
||||||
</fieldType> |
|
||||||
|
|
||||||
<fieldType name="edge_ngram" class="solr.TextField" positionIncrementGap="1"> |
|
||||||
<analyzer type="index"> |
|
||||||
<tokenizer class="solr.WhitespaceTokenizerFactory" /> |
|
||||||
<filter class="solr.LowerCaseFilterFactory" /> |
|
||||||
<filter class="solr.WordDelimiterFilterFactory" generateWordParts="1" generateNumberParts="1" catenateWords="0" catenateNumbers="0" catenateAll="0" splitOnCaseChange="1"/> |
|
||||||
<filter class="solr.EdgeNGramFilterFactory" minGramSize="2" maxGramSize="15" side="front" /> |
|
||||||
</analyzer> |
|
||||||
<analyzer type="query"> |
|
||||||
<tokenizer class="solr.WhitespaceTokenizerFactory" /> |
|
||||||
<filter class="solr.LowerCaseFilterFactory" /> |
|
||||||
<filter class="solr.WordDelimiterFilterFactory" generateWordParts="1" generateNumberParts="1" catenateWords="0" catenateNumbers="0" catenateAll="0" splitOnCaseChange="1"/> |
|
||||||
</analyzer> |
|
||||||
</fieldType> |
|
||||||
</types> |
|
||||||
|
|
||||||
<fields> |
|
||||||
<!-- general --> |
|
||||||
<field name="id" type="string" indexed="true" stored="true" multiValued="false" required="true"/> |
|
||||||
<field name="django_ct" type="string" indexed="true" stored="true" multiValued="false"/> |
|
||||||
<field name="django_id" type="string" indexed="true" stored="true" multiValued="false"/> |
|
||||||
<field name="_version_" type="long" indexed="true" stored="true"/> |
|
||||||
|
|
||||||
<dynamicField name="*_i" type="int" indexed="true" stored="true"/> |
|
||||||
<dynamicField name="*_s" type="string" indexed="true" stored="true"/> |
|
||||||
<dynamicField name="*_l" type="long" indexed="true" stored="true"/> |
|
||||||
<dynamicField name="*_t" type="text_en" indexed="true" stored="true"/> |
|
||||||
<dynamicField name="*_b" type="boolean" indexed="true" stored="true"/> |
|
||||||
<dynamicField name="*_f" type="float" indexed="true" stored="true"/> |
|
||||||
<dynamicField name="*_d" type="double" indexed="true" stored="true"/> |
|
||||||
<dynamicField name="*_dt" type="date" indexed="true" stored="true"/> |
|
||||||
<dynamicField name="*_p" type="location" indexed="true" stored="true"/> |
|
||||||
<dynamicField name="*_coordinate" type="tdouble" indexed="true" stored="false"/> |
|
||||||
|
|
||||||
|
|
||||||
<field name="name_ru" type="text_en" indexed="true" stored="true" multiValued="false" /> |
|
||||||
|
|
||||||
<field name="url" type="text_en" indexed="true" stored="true" multiValued="false" /> |
|
||||||
|
|
||||||
<field name="text" type="text_en" indexed="true" stored="true" multiValued="false" /> |
|
||||||
|
|
||||||
<field name="catalog_name_ru" type="text_en" indexed="true" stored="true" multiValued="false" /> |
|
||||||
|
|
||||||
<field name="catalog_name_en" type="text_en" indexed="true" stored="true" multiValued="false" /> |
|
||||||
|
|
||||||
<field name="content_auto" type="edge_ngram" indexed="true" stored="true" multiValued="false" /> |
|
||||||
|
|
||||||
<field name="form_name" type="text_en" indexed="true" stored="true" multiValued="false" /> |
|
||||||
|
|
||||||
<field name="name_en" type="text_en" indexed="true" stored="true" multiValued="false" /> |
|
||||||
|
|
||||||
<field name="area_id" type="long" indexed="true" stored="true" multiValued="false" /> |
|
||||||
|
|
||||||
<field name="city_id" type="long" indexed="true" stored="true" multiValued="false" /> |
|
||||||
|
|
||||||
<field name="country_id" type="long" indexed="true" stored="true" multiValued="false" /> |
|
||||||
|
|
||||||
<field name="theme" type="text_en" indexed="true" stored="true" multiValued="true" /> |
|
||||||
|
|
||||||
<field name="tag" type="text_en" indexed="true" stored="true" multiValued="true" /> |
|
||||||
|
|
||||||
<field name="where" type="text_en" indexed="true" stored="true" multiValued="true" /> |
|
||||||
|
|
||||||
<field name="data_end" type="date" indexed="true" stored="true" multiValued="false" /> |
|
||||||
|
|
||||||
<field name="data_begin" type="date" indexed="true" stored="true" multiValued="false" /> |
|
||||||
|
|
||||||
<field name="city" type="text_en" indexed="true" stored="true" multiValued="false" /> |
|
||||||
|
|
||||||
<field name="country" type="text_en" indexed="true" stored="true" multiValued="false" /> |
|
||||||
|
|
||||||
<field name="parent_en" type="text_en" indexed="true" stored="true" multiValued="false" /> |
|
||||||
|
|
||||||
<field name="parent_ru" type="text_en" indexed="true" stored="true" multiValued="false" /> |
|
||||||
|
|
||||||
</fields> |
|
||||||
|
|
||||||
<!-- field to use to determine and enforce document uniqueness. --> |
|
||||||
<uniqueKey>id</uniqueKey> |
|
||||||
|
|
||||||
<!-- field for the QueryParser to use when an explicit fieldname is absent --> |
|
||||||
<defaultSearchField>text</defaultSearchField> |
|
||||||
|
|
||||||
<!-- SolrQueryParser configuration: defaultOperator="AND|OR" --> |
|
||||||
<solrQueryParser defaultOperator="AND"/> |
|
||||||
</schema> |
|
||||||
|
|
||||||
@ -1,627 +0,0 @@ |
|||||||
# -*- coding: utf-8 -*- |
|
||||||
# Django settings for proj project. |
|
||||||
import os |
|
||||||
import django |
|
||||||
from django.utils.translation import ugettext_lazy as _ |
|
||||||
from ConfigParser import ConfigParser |
|
||||||
|
|
||||||
|
|
||||||
DJANGO_ROOT = os.path.dirname(os.path.realpath(django.__file__)) |
|
||||||
SITE_ROOT = os.path.split(os.path.dirname(os.path.realpath(__file__)))[0] |
|
||||||
|
|
||||||
DEBUG = False |
|
||||||
|
|
||||||
|
|
||||||
ADMINS = ( |
|
||||||
# ('Your Name', 'your_email@example.com'), |
|
||||||
) |
|
||||||
|
|
||||||
MANAGERS = ADMINS |
|
||||||
|
|
||||||
DATABASES = { |
|
||||||
'default': { |
|
||||||
'ENGINE': 'django.db.backends.mysql', |
|
||||||
'NAME': 'expomap', |
|
||||||
'USER': 'kotzilla', |
|
||||||
'PASSWORD': 'qazedc', |
|
||||||
'HOST': '', |
|
||||||
'PORT': '', |
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
|
|
||||||
CACHES = { |
|
||||||
"default": { |
|
||||||
"BACKEND": "redis_cache.cache.RedisCache", |
|
||||||
"LOCATION": "/tmp/redis.sock", |
|
||||||
"OPTIONS": { |
|
||||||
"CLIENT_CLASS": "redis_cache.client.DefaultClient", |
|
||||||
}, |
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
|
|
||||||
# Hosts/domain names that are valid for this site; required if DEBUG is False |
|
||||||
# See https://docs.djangoproject.com/en/1.5/ref/settings/#allowed-hosts |
|
||||||
ALLOWED_HOSTS = ['hit.expomap.ru', '195.66.79.152', '195.66.79.145', 'expomap.ru', '195.66.79.148'] |
|
||||||
DEFAULT_HTTP_SCHEME = 'https' |
|
||||||
|
|
||||||
# Local time zone for this installation. Choices can be found here: |
|
||||||
# http://en.wikipedia.org/wiki/List_of_tz_zones_by_name |
|
||||||
# although not all choices may be available on all operating systems. |
|
||||||
# In a Windows environment this must be set to your system time zone. |
|
||||||
TIME_ZONE = 'UTC' |
|
||||||
|
|
||||||
# Language code for this installation. All choices can be found here: |
|
||||||
# http://www.i18nguy.com/unicode/language-identifiers.html |
|
||||||
LANGUAGE_CODE = 'ru' |
|
||||||
|
|
||||||
DEFAULT_LANGUAGE = 'ru' |
|
||||||
|
|
||||||
LANGUAGES = ( |
|
||||||
('ru', _('Russian')), |
|
||||||
('en', _('English')), |
|
||||||
) |
|
||||||
|
|
||||||
LOCALE_PATHS = ( |
|
||||||
os.path.join(SITE_ROOT, 'locale'), |
|
||||||
) |
|
||||||
|
|
||||||
DEFAULT_CHARSET = 'utf-8' |
|
||||||
|
|
||||||
SITE_ID = 1 |
|
||||||
|
|
||||||
# If you set this to False, Django will make some optimizations so as not |
|
||||||
# to load the internationalization machinery. |
|
||||||
USE_I18N = True |
|
||||||
|
|
||||||
# If you set this to False, Django will not format dates, numbers and |
|
||||||
# calendars according to the current locale. |
|
||||||
USE_L10N = False |
|
||||||
|
|
||||||
# If you set this to False, Django will not use timezone-aware datetimes. |
|
||||||
USE_TZ = False |
|
||||||
|
|
||||||
|
|
||||||
MEDIA_ROOT = os.path.join(SITE_ROOT, 'media/') |
|
||||||
CKEDITOR_UPLOAD_PATH = os.path.join(SITE_ROOT, 'media/upload') |
|
||||||
|
|
||||||
|
|
||||||
CKEDITOR_CONFIGS = { |
|
||||||
'default': { |
|
||||||
'toolbar': 'standart', |
|
||||||
'height': 200, |
|
||||||
'width': 565, |
|
||||||
'resize_enabled' : True, |
|
||||||
'autoGrow_onStartup' : False, |
|
||||||
'autoGrow_bottomSpace' : 300, |
|
||||||
'fillEmptyBlocks' : False, |
|
||||||
'autoParagraph' : False, |
|
||||||
}, |
|
||||||
'newsletters': { |
|
||||||
'toolbar': 'standart', |
|
||||||
'height': 600, |
|
||||||
'width': 750, |
|
||||||
'resize_enabled' : True, |
|
||||||
'autoGrow_onStartup' : False, |
|
||||||
'autoGrow_bottomSpace' : 300, |
|
||||||
'fillEmptyBlocks' : False, |
|
||||||
'autoParagraph' : False, |
|
||||||
}, |
|
||||||
|
|
||||||
} |
|
||||||
|
|
||||||
MEDIA_URL = '/media/' |
|
||||||
|
|
||||||
STATIC_ROOT = os.path.join(SITE_ROOT, 'static') |
|
||||||
STATIC_URL = '/static/' |
|
||||||
|
|
||||||
STATICFILES_FINDERS = ( |
|
||||||
'django.contrib.staticfiles.finders.FileSystemFinder', |
|
||||||
'django.contrib.staticfiles.finders.AppDirectoriesFinder', |
|
||||||
#'django.contrib.staticfiles.finders.DefaultStorageFinder', |
|
||||||
) |
|
||||||
|
|
||||||
# Make this unique, and don't share it with anybody. |
|
||||||
SECRET_KEY = '=yz1@ko%1s8bmel)c84#s*xpxn%4(1e+smdnh*@rdm*5%v!mln' |
|
||||||
|
|
||||||
|
|
||||||
TEMPLATE_CONTEXT_PROCESSORS = ( |
|
||||||
"django.contrib.auth.context_processors.auth", |
|
||||||
"django.core.context_processors.debug", |
|
||||||
"django.core.context_processors.i18n", |
|
||||||
"django.core.context_processors.media", |
|
||||||
"django.core.context_processors.static", |
|
||||||
"django.core.context_processors.tz", |
|
||||||
"django.contrib.messages.context_processors.messages", |
|
||||||
"django.core.context_processors.request", |
|
||||||
'social.apps.django_app.context_processors.backends', |
|
||||||
'social.apps.django_app.context_processors.login_redirect', |
|
||||||
'django_messages.context_processors.inbox', |
|
||||||
"proj.views.expo_context" |
|
||||||
) |
|
||||||
#LOGIN_REDIRECT_URL = '/' |
|
||||||
|
|
||||||
MIDDLEWARE_CLASSES = ( |
|
||||||
# 'django.middleware.cache.UpdateCacheMiddleware', |
|
||||||
'django.contrib.sessions.middleware.SessionMiddleware', |
|
||||||
'solid_i18n.middleware.SolidLocaleMiddleware', |
|
||||||
'django.middleware.common.CommonMiddleware', |
|
||||||
'django.middleware.csrf.CsrfViewMiddleware', |
|
||||||
'django.contrib.auth.middleware.AuthenticationMiddleware', |
|
||||||
'django.contrib.messages.middleware.MessageMiddleware', |
|
||||||
'social.apps.django_app.middleware.SocialAuthExceptionMiddleware', |
|
||||||
# 'django.middleware.cache.FetchFromCacheMiddleware', |
|
||||||
'django.middleware.clickjacking.XFrameOptionsMiddleware', |
|
||||||
'proj.middleware.Referer', |
|
||||||
'django.contrib.redirects.middleware.RedirectFallbackMiddleware', |
|
||||||
'proj.middleware.ExpoRedirectFallbackMiddleware', |
|
||||||
'proj.middleware.SpacelessMiddleware', |
|
||||||
|
|
||||||
) |
|
||||||
|
|
||||||
|
|
||||||
ROOT_URLCONF = 'proj.urls' |
|
||||||
|
|
||||||
# Python dotted path to the WSGI application used by Django's runserver. |
|
||||||
WSGI_APPLICATION = 'proj.wsgi.application' |
|
||||||
|
|
||||||
TEMPLATE_DIRS = ( |
|
||||||
# Put strings here, like "/home/html/django_templates" or "C:/www/django/templates". |
|
||||||
# Always use forward slashes, even on Windows. |
|
||||||
# Don't forget to use absolute paths, not relative paths. |
|
||||||
# os.path.join(SITE_ROOT, 'templates/debug_toolbar'), |
|
||||||
os.path.join(SITE_ROOT, 'templates/c_admin'), |
|
||||||
os.path.join(SITE_ROOT, 'templates/c_admin/accounts'), |
|
||||||
os.path.join(SITE_ROOT, 'templates/c_admin/article'), |
|
||||||
os.path.join(SITE_ROOT, 'templates/c_admin/country'), |
|
||||||
os.path.join(SITE_ROOT, 'templates/c_admin/city'), |
|
||||||
os.path.join(SITE_ROOT, 'templates/c_admin/company'), |
|
||||||
os.path.join(SITE_ROOT, 'templates/c_admin/conference'), |
|
||||||
os.path.join(SITE_ROOT, 'templates/c_admin/directories'), |
|
||||||
os.path.join(SITE_ROOT, 'templates/c_admin/exposition'), |
|
||||||
os.path.join(SITE_ROOT, 'templates/c_admin/forms'), |
|
||||||
os.path.join(SITE_ROOT, 'templates/c_admin/import templates'), |
|
||||||
os.path.join(SITE_ROOT, 'templates/c_admin/news'), |
|
||||||
os.path.join(SITE_ROOT, 'templates/c_admin/organiser'), |
|
||||||
os.path.join(SITE_ROOT, 'templates/c_admin/place_conference'), |
|
||||||
os.path.join(SITE_ROOT, 'templates/c_admin/place_exposition'), |
|
||||||
os.path.join(SITE_ROOT, 'templates/c_admin/page'), |
|
||||||
os.path.join(SITE_ROOT, 'templates/c_admin/photoreport'), |
|
||||||
os.path.join(SITE_ROOT, 'templates/c_admin/settings'), |
|
||||||
os.path.join(SITE_ROOT, 'templates/c_admin/seminar'), |
|
||||||
os.path.join(SITE_ROOT, 'templates/c_admin/service'), |
|
||||||
os.path.join(SITE_ROOT, 'templates/c_admin/theme'), |
|
||||||
os.path.join(SITE_ROOT, 'templates/c_admin/translator'), |
|
||||||
os.path.join(SITE_ROOT, 'templates/c_admin/webinar'), |
|
||||||
|
|
||||||
os.path.join(SITE_ROOT, 'templates/client'), |
|
||||||
os.path.join(SITE_ROOT, 'templates/client/exposition'), |
|
||||||
os.path.join(SITE_ROOT, 'templates/client/photoreport'), |
|
||||||
os.path.join(SITE_ROOT, 'templates/client/includes'), |
|
||||||
os.path.join(SITE_ROOT, 'templates'), |
|
||||||
#os.path.join(SITE_ROOT, 'templates/client/popups'), |
|
||||||
) |
|
||||||
|
|
||||||
AUTH_USER_MODEL = 'accounts.User' |
|
||||||
LOGIN_URL='/' |
|
||||||
#registration info |
|
||||||
ACCOUNT_ACTIVATION_DAYS=2 |
|
||||||
# mail settings |
|
||||||
EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend' |
|
||||||
EMAIL_HOST = 'localhost' |
|
||||||
EMAIL_HOST_USER = '' |
|
||||||
EMAIL_HOST_PASSWORD = '' |
|
||||||
EMAIL_USE_TLS = True |
|
||||||
EMAIL_PORT = 25 |
|
||||||
DEFAULT_FROM_EMAIL = "expomap.ru" |
|
||||||
|
|
||||||
|
|
||||||
AUTHENTICATION_BACKENDS = ( |
|
||||||
'social.backends.open_id.OpenIdAuth', |
|
||||||
'social.backends.vk.VKOAuth2', |
|
||||||
'social.backends.facebook.FacebookOAuth2', |
|
||||||
'social.backends.twitter.TwitterOAuth', |
|
||||||
'social.backends.google.GoogleOAuth', |
|
||||||
'social.backends.linkedin.LinkedinOAuth', |
|
||||||
'social.backends.odnoklassniki.OdnoklassnikiOAuth2', |
|
||||||
'social.backends.mailru.MailruOAuth2', |
|
||||||
'django.contrib.auth.backends.ModelBackend', |
|
||||||
) |
|
||||||
|
|
||||||
SOCIAL_AUTH_LOGIN_URL = '/' |
|
||||||
SOCIAL_AUTH_USER_MODEL = 'accounts.User' |
|
||||||
SOCIAL_AUTH_LOGIN_REDIRECT_URL = '/logged-in/' |
|
||||||
# The user will be redirected to this URL when a social account is disconnected |
|
||||||
SOCIAL_AUTH_INACTIVE_USER_URL = '/inactive-user/' |
|
||||||
# #Used to redirect the user once the auth process ended successfully. The value of ?next=/foo is used if it was present |
|
||||||
# SOCIAL_AUTH_LOGIN_ERROR_URL = '/login-error/' |
|
||||||
# #URL where the user will be redirected in case of an error |
|
||||||
# SOCIAL_AUTH_LOGIN_URL = '/login-url/' |
|
||||||
# #Is used as a fallback for LOGIN_ERROR_URL |
|
||||||
# SOCIAL_AUTH_NEW_USER_REDIRECT_URL = '/new-users-redirect-url/' |
|
||||||
# # Used to redirect new registered users, will be used in place of SOCIAL_AUTH_LOGIN_REDIRECT_URL if defined. |
|
||||||
# Note that ?next=/foo is appended if present, if you want new users to go to next, you’ll need to do it yourself. |
|
||||||
# SOCIAL_AUTH_NEW_ASSOCIATION_REDIRECT_URL = '/new-association-redirect-url/' |
|
||||||
# # Like SOCIAL_AUTH_NEW_USER_REDIRECT_URL but for new associated accounts (user is already logged in). |
|
||||||
# Used in place of SOCIAL_AUTH_LOGIN_REDIRECT_URL |
|
||||||
# SOCIAL_AUTH_DISCONNECT_REDIRECT_URL = '/account-disconnected-redirect-url/' |
|
||||||
|
|
||||||
# Inactive users can be redirected to this URL when trying to authenticate. |
|
||||||
# SOCIAL_AUTH_UID_LENGTH = <int> |
|
||||||
# SOCIAL_AUTH_NONCE_SERVER_URL_LENGTH = <int> |
|
||||||
# SOCIAL_AUTH_ASSOCIATION_SERVER_URL_LENGTH = <int> |
|
||||||
# SOCIAL_AUTH_FORCE_EMAIL_VALIDATION = True |
|
||||||
|
|
||||||
SOCIAL_AUTH_USERNAME_IS_FULL_EMAIL = True |
|
||||||
|
|
||||||
SOCIAL_AUTH_PIPELINE = ( |
|
||||||
'social.pipeline.social_auth.social_details', |
|
||||||
'social.pipeline.social_auth.social_uid', |
|
||||||
'functions.pipeline.get_email', # vk |
|
||||||
'functions.pipeline.load_user', |
|
||||||
'social.pipeline.social_auth.auth_allowed', |
|
||||||
'functions.pipeline.social_user', |
|
||||||
# 'social.pipeline.social_auth.social_user', |
|
||||||
'social.pipeline.social_auth.load_extra_data', |
|
||||||
'social.pipeline.user.get_username', |
|
||||||
'functions.pipeline.require_email', |
|
||||||
#'social.pipeline.mail.mail_validation', |
|
||||||
'functions.pipeline.create_user', |
|
||||||
#'social.pipeline.user.create_user', |
|
||||||
'social.pipeline.social_auth.associate_by_email', |
|
||||||
'social.pipeline.social_auth.associate_user', |
|
||||||
# 'social.pipeline.user.user_details' |
|
||||||
'functions.pipeline.user_details', |
|
||||||
|
|
||||||
) |
|
||||||
|
|
||||||
REQUIRES_EMAIL_VALIDATION = True |
|
||||||
SOCIAL_AUTH_EMAIL_VALIDATION_FUNCTION = 'functions.pipeline.SendVerificationEmail' |
|
||||||
SOCIAL_AUTH_EMAIL_VALIDATION_URL = '/email_verify_sent/' |
|
||||||
|
|
||||||
|
|
||||||
SOCIAL_AUTH_VK_OAUTH2_KEY = '3393841' |
|
||||||
SOCIAL_AUTH_VK_OAUTH2_SECRET = '2P19EBUEpLZifaabbREv' |
|
||||||
SOCIAL_AUTH_VK_OAUTH2_SCOPE =['email'] |
|
||||||
SOCIAL_AUTH_VK_OAUTH2_PROFILE_EXTRA_PARAMS = { |
|
||||||
'fields': 'email' |
|
||||||
} |
|
||||||
SOCIAL_AUTH_VK_OAUTH2_EXTRA_DATA = ['email'] |
|
||||||
|
|
||||||
SOCIAL_AUTH_FACEBOOK_KEY = '133775720059470' |
|
||||||
SOCIAL_AUTH_FACEBOOK_SECRET = '434edf89c24a290497646a739df656c6' |
|
||||||
SOCIAL_AUTH_FACEBOOK_SCOPE = ['email', 'publish_actions'] |
|
||||||
|
|
||||||
SOCIAL_AUTH_TWITTER_KEY = 'S6NX33FazTcWuqnXQhlOdg' |
|
||||||
SOCIAL_AUTH_TWITTER_SECRET = 'MxUGfySQmLI5kvqSoAtWsGje2eAHQL7Jo8mXuIZ4D0' |
|
||||||
SOCIAL_AUTH_TWITTER_SCOPE = ['email'] |
|
||||||
|
|
||||||
SOCIAL_AUTH_GOOGLE_OAUTH_KEY = '1044044901114.apps.googleusercontent.com' |
|
||||||
SOCIAL_AUTH_GOOGLE_OAUTH_SECRET = 'j_McErlPPof88eNrmOXI-ZXI' |
|
||||||
SOCIAL_AUTH_GOOGLE_OAUTH_SCOPE = ['email'] |
|
||||||
|
|
||||||
SOCIAL_AUTH_MAILRU_OAUTH2_KEY = '697945' |
|
||||||
SOCIAL_AUTH_MAILRU_OAUTH2_SECRET = '343581b9e31961b334532cc1880066e8' |
|
||||||
SOCIAL_AUTH_MAILRU_OAUTH2_SCOPE = ['email'] |
|
||||||
|
|
||||||
SOCIAL_AUTH_ODNOKLASSNIKI_OAUTH2_KEY = '1249032192' |
|
||||||
SOCIAL_AUTH_ODNOKLASSNIKI_OAUTH2_SECRET = '87A7A1B964D2C73B9861BF76' |
|
||||||
SOCIAL_AUTH_ODNOKLASSNIKI_OAUTH2_PUBLIC_NAME = 'CBAJLDHLEBABABABA' |
|
||||||
SOCIAL_AUTH_ODNOKLASSNIKI_OAUTH2_SCOPE = ['GET_EMAIL'] |
|
||||||
|
|
||||||
SOCIAL_AUTH_LINKEDIN_KEY = 'jt9xwquj1fkd' |
|
||||||
SOCIAL_AUTH_LINKEDIN_SECRET = 'GvM2xQCNADaBfiMy' |
|
||||||
SOCIAL_AUTH_LINKEDIN_SCOPE = ['email'] |
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
INSTALLED_APPS = ( |
|
||||||
'modeltranslation', |
|
||||||
'django.contrib.admin', |
|
||||||
'django.contrib.auth', |
|
||||||
'django.contrib.contenttypes', |
|
||||||
'django.contrib.sessions', |
|
||||||
'django.contrib.sites', |
|
||||||
'django.contrib.redirects', |
|
||||||
'django.contrib.messages', |
|
||||||
'django.contrib.staticfiles', |
|
||||||
'django.contrib.humanize', |
|
||||||
'django.contrib.sitemaps', |
|
||||||
'haystack', |
|
||||||
#custom modules |
|
||||||
'redirects', |
|
||||||
'stats_collector', |
|
||||||
'emencia.django.newsletter', |
|
||||||
'accounts', |
|
||||||
'article', |
|
||||||
'comments', |
|
||||||
'city', |
|
||||||
'company', |
|
||||||
'conference', |
|
||||||
'core', |
|
||||||
'country', |
|
||||||
'directories', |
|
||||||
'expobanner', |
|
||||||
'exposition', |
|
||||||
'file', |
|
||||||
'import_xls', |
|
||||||
'news', |
|
||||||
'note', |
|
||||||
'organiser', |
|
||||||
'place_conference', |
|
||||||
'place_exposition', |
|
||||||
'photoreport', |
|
||||||
'registration', |
|
||||||
'review', |
|
||||||
'seminar', |
|
||||||
'service', |
|
||||||
'settings', |
|
||||||
'theme', |
|
||||||
'translator', |
|
||||||
'webinar', |
|
||||||
'meta', |
|
||||||
'events', |
|
||||||
#django modules |
|
||||||
'django_crontab', |
|
||||||
'sorl.thumbnail', # for logos |
|
||||||
'photologue', # photogallery |
|
||||||
'sortedm2m', # photologue dependence |
|
||||||
'hvad', # |
|
||||||
'tinymce', # ??? |
|
||||||
'ckeditor', # wysiwig editor in admin |
|
||||||
'django_messages', # messages |
|
||||||
'bitfield', |
|
||||||
'djutils', # ?? |
|
||||||
'pytils', # ?? |
|
||||||
'pymorphy', # ?? |
|
||||||
'password_reset', # reset password |
|
||||||
'social.apps.django_app.default', # social auth |
|
||||||
'core', |
|
||||||
'specialist_catalog', |
|
||||||
'south', |
|
||||||
'rosetta', |
|
||||||
'widget_tweaks', |
|
||||||
|
|
||||||
) |
|
||||||
|
|
||||||
CRONJOBS = [ |
|
||||||
('8 * * * *', 'django.core.management.call_command', ['send_newsletter']), |
|
||||||
|
|
||||||
('0 * * * *', 'django.core.management.call_command', ['update_index', 'conference', '--remove', '--age=6']), |
|
||||||
('5 * * * *', 'django.core.management.call_command', ['update_index', 'exposition', '--remove', '--age=6']), |
|
||||||
('0 1,13 * * *', 'django.core.management.call_command', ['update_index', 'place_exposition', '--remove', '--age=24']), |
|
||||||
('0 3 * * *', 'django.core.management.call_command', ['update_index', 'company', '--remove', '--age=48']), |
|
||||||
('0 4 * * *', 'django.core.management.call_command', ['update_index', 'theme', '--remove', '--age=48']), |
|
||||||
('0 5 * * * ', 'django.core.management.call_command', ['update_index', 'tag', '--remove', '--age=48']), |
|
||||||
('0 6 * * *', 'django.core.management.call_command', ['update_index', 'country', '--remove', '--age=48']), |
|
||||||
('0 7 * * *', 'django.core.management.call_command', ['update_index', 'city', '--remove', '--age=48']), |
|
||||||
|
|
||||||
('10 * * * *', 'django.core.management.call_command', ['banner_log_update']), |
|
||||||
('20 2,14 * * *', 'django.core.management.call_command', ['banner_log_check_previous_day']), |
|
||||||
('*/5 * * * *', 'django.core.management.call_command', ['update_views_cache']), |
|
||||||
|
|
||||||
('40 6 * * * ', 'django.core.management.call_command', ['newsletter_contacts_remove_notactivated']), |
|
||||||
('41 5 * * *', 'django.core.management.call_command', ['newsletter_create_announce']), |
|
||||||
|
|
||||||
('12 4 * * *', 'django.core.management.call_command', ['stats_daily']), |
|
||||||
('5 10 * * *', 'django.core.management.call_command', ['update_events_filter_fields']), |
|
||||||
] |
|
||||||
|
|
||||||
PYMORPHY_DICTS = { |
|
||||||
'ru': { 'dir': os.path.join(SITE_ROOT, 'settings/russian_dicts')} #'/home/www/proj/settings/russian_dicts' }, |
|
||||||
} |
|
||||||
|
|
||||||
# search backend |
|
||||||
HAYSTACK_CONNECTIONS = { |
|
||||||
'default': { |
|
||||||
'ENGINE': 'haystack.backends.solr_backend.SolrEngine', |
|
||||||
'URL': 'http://localhost:8983/solr' |
|
||||||
# ...or for multicore... |
|
||||||
# 'URL': 'http://127.0.0.1:8983/solr/mysite', |
|
||||||
}, |
|
||||||
} |
|
||||||
|
|
||||||
|
|
||||||
# A sample logging configuration. The only tangible logging |
|
||||||
# performed by this configuration is to send an email to |
|
||||||
# the site admins on every HTTP 500 error when DEBUG=False. |
|
||||||
# See http://docs.djangoproject.com/en/dev/topics/logging for |
|
||||||
# more details on how to customize your logging configuration. |
|
||||||
LOGGING = { |
|
||||||
'version': 1, |
|
||||||
'disable_existing_loggers': False, |
|
||||||
'filters': { |
|
||||||
'require_debug_false': { |
|
||||||
'()': 'django.utils.log.RequireDebugFalse' |
|
||||||
} |
|
||||||
}, |
|
||||||
'handlers': { |
|
||||||
'mail_admins': { |
|
||||||
'level': 'ERROR', |
|
||||||
'filters': ['require_debug_false'], |
|
||||||
'class': 'django.utils.log.AdminEmailHandler' |
|
||||||
} |
|
||||||
}, |
|
||||||
'loggers': { |
|
||||||
'django.request': { |
|
||||||
'handlers': ['mail_admins'], |
|
||||||
'level': 'ERROR', |
|
||||||
'propagate': True, |
|
||||||
}, |
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
# TODO automate crons |
|
||||||
""" |
|
||||||
# update search indexes |
|
||||||
0 * * * * /usr/bin/python /var/www/proj/manage.py update_index conference --remove --age=6 |
|
||||||
0 * * * * /usr/bin/python /var/www/proj/manage.py update_index exposition --remove --age=6 |
|
||||||
0 1,13 * * * /usr/bin/python /var/www/proj/manage.py update_index place_exposition --remove --age=24 |
|
||||||
0 3 * * * /usr/bin/python /var/www/proj/manage.py update_index company --remove --age=48 |
|
||||||
0 4 * * * /usr/bin/python /var/www/proj/manage.py update_index theme --remove --age=48 |
|
||||||
0 5 * * * /usr/bin/python /var/www/proj/manage.py update_index tag --remove --age=48 |
|
||||||
0 6 * * * /usr/bin/python /var/www/proj/manage.py update_index country --remove --age=48 |
|
||||||
0 7 * * * /usr/bin/python /var/www/proj/manage.py update_index city --remove --age=48 |
|
||||||
# update banner logs |
|
||||||
10 * * * * /usr/bin/python /var/www/proj/manage.py banner_log_update |
|
||||||
20 2,14 * * * /usr/bin/python /var/www/proj/manage.py banner_log_check_previous_day |
|
||||||
# update hotels prices |
|
||||||
20 1 * * 6 /usr/bin/python /var/www/proj/manage.py update_hotels_price |
|
||||||
# newsletter |
|
||||||
20 * * * * /usr/bin/python /var/www/proj/manage.py send_newsletter |
|
||||||
40 6 * * * /usr/bin/python /var/www/proj/manage.py newsletter_contacts_remove_notactivated |
|
||||||
|
|
||||||
""" |
|
||||||
|
|
||||||
THUMBNAIL_DEBUG = DEBUG |
|
||||||
THUMBNAIL_ENGINE = "proj.sorlengine.SorlEngine" |
|
||||||
THUMBNAIL_FORMAT = "PNG" |
|
||||||
|
|
||||||
CALLBACK_EMAIL = 'kotzilla@ukr.net' |
|
||||||
|
|
||||||
BOOKING_AID = '333667' |
|
||||||
try: |
|
||||||
from functions.overrides import SeoPaginator as Paginator |
|
||||||
except ImportError: |
|
||||||
from django.core.paginator import Paginator |
|
||||||
DEFAULT_PAGINATOR = Paginator |
|
||||||
ADMIN_PAGINATION = 20 |
|
||||||
CLIENT_PAGINATION = 25 |
|
||||||
|
|
||||||
TEMPLATE_DEBUG = DEBUG |
|
||||||
NO_LOGO = '/static/client/img/no-logo.png' |
|
||||||
|
|
||||||
# events settings |
|
||||||
CURRENCY = ('RUB', 'USD', 'EUR', 'RMB', 'GBP', 'AED', 'SGD', 'TRY', 'CZK', 'CHF', 'SEK', 'LKR', 'UAH', 'IDR', 'PLN','JPY') |
|
||||||
BIT_AUDIENCE = (('experts', _(u'Специалисты')), ('experts and consumers', _(u'Специалисты и потребители')), |
|
||||||
('general public', _(u'Широкая публика'))) |
|
||||||
|
|
||||||
MONTHES = {'jan': {'value': 1, 'name': _(u'Январь')}, 'feb': {'value': 2, 'name': _(u'Февраль')}, |
|
||||||
'mar': {'value': 3, 'name': _(u'Март')}, 'apr': {'value': 4, 'name': _(u'Апрель')}, |
|
||||||
'may': {'value': 5, 'name': _(u'Май')}, 'jun': {'value': 6, 'name': _(u'Июнь')}, |
|
||||||
'jul': {'value': 7, 'name': _(u'Июль')}, 'aug': {'value': 8, 'name': _(u'Август')}, |
|
||||||
'sep': {'value': 9, 'name': _(u'Сентябрь')}, 'oct': {'value': 10, 'name': _(u'Октябрь')}, |
|
||||||
'nov': {'value': 11, 'name': _(u'Ноябрь')}, 'dec': {'value': 12, 'name': _(u'Декабрь')}} |
|
||||||
|
|
||||||
SNG_COUNTRIES = [159, 186, 31, 6, 99, 13, 189, 64] |
|
||||||
RUSSIA_PK = 159 |
|
||||||
MOSCOW_PK = -2960561 |
|
||||||
SPB_PK = -2996338 |
|
||||||
|
|
||||||
|
|
||||||
CLIENT_DATE_FORMAT = ["%d.%m.%Y"] |
|
||||||
|
|
||||||
# cache pages in random seconds. random in this range |
|
||||||
CACHE_RANGE = [60, 120] |
|
||||||
|
|
||||||
DEFAULT_POPUP_COOKIE = 'expo_b_default_popup' |
|
||||||
|
|
||||||
INI_CONFIG_PATH = os.path.join(SITE_ROOT, 'proj/config.ini') |
|
||||||
INI_CONFIG = ConfigParser() |
|
||||||
INI_CONFIG.read(INI_CONFIG_PATH) |
|
||||||
C_CITY_CATALOG_KEY = 'conf_city_catalog' |
|
||||||
C_COUNTRY_CATALOG_KEY = 'conf_country_catalog' |
|
||||||
E_CITY_CATALOG_KEY = 'expo_city_catalog' |
|
||||||
E_COUNTRY_CATALOG_KEY = 'expo_country_catalog' |
|
||||||
DEFAULT_DESCRIPTION = { |
|
||||||
'e_description_ru': 'templates/client/includes/conference/default_description_ru.html', |
|
||||||
'e_description_en': 'templates/client/includes/conference/default_description_en.html', |
|
||||||
'c_description_ru': 'templates/client/includes/exposition/default_description_ru.html', |
|
||||||
'c_description_en': 'templates/client/includes/exposition/default_description_en.html', |
|
||||||
} |
|
||||||
PERIODIC = { |
|
||||||
0: '', |
|
||||||
1: _(u'Ежегодно'), |
|
||||||
2: _(u'2 раза в год'), |
|
||||||
3: _(u'3 раза в год'), |
|
||||||
4: _(u'4 раза в год'), |
|
||||||
5: _(u'5 раз в год'), |
|
||||||
6: _(u'Раз в 2 года'), |
|
||||||
7: _(u'Раз в 3 года'), |
|
||||||
8: _(u'Раз в 4 года'), |
|
||||||
9: _(u'Раз в 5 лет') |
|
||||||
} |
|
||||||
try: |
|
||||||
from local import * |
|
||||||
except ImportError, e: |
|
||||||
pass |
|
||||||
# save sessions in redis |
|
||||||
SESSION_ENGINE = 'django.contrib.sessions.backends.cache' |
|
||||||
if not DEBUG: |
|
||||||
# cache template loading |
|
||||||
TEMPLATE_LOADERS = ( |
|
||||||
('django.template.loaders.cached.Loader', ( |
|
||||||
'django.template.loaders.filesystem.Loader', |
|
||||||
'django.template.loaders.app_directories.Loader', |
|
||||||
)), |
|
||||||
) |
|
||||||
else: |
|
||||||
TEMPLATE_LOADERS = ( |
|
||||||
'django.template.loaders.filesystem.Loader', |
|
||||||
'django.template.loaders.app_directories.Loader', |
|
||||||
) |
|
||||||
|
|
||||||
# debug_toolbar settings |
|
||||||
|
|
||||||
if DEBUG: |
|
||||||
DEBUG_TOOLBAR_PATCH_SETTINGS = False |
|
||||||
INTERNAL_IPS = ('127.0.0.1','176.121.5.82', '176.121.11.162', '77.123.47.46') |
|
||||||
|
|
||||||
MIDDLEWARE_CLASSES += ( |
|
||||||
'debug_toolbar.middleware.DebugToolbarMiddleware', |
|
||||||
) |
|
||||||
|
|
||||||
INSTALLED_APPS += ( |
|
||||||
'debug_toolbar', |
|
||||||
) |
|
||||||
JQUERY_URL = os.path.join(SITE_ROOT, 'static/client/js/jquery-ui-1.10.4.custom.min.js'), |
|
||||||
DEBUG_TOOLBAR_PANELS = [ |
|
||||||
#'debug_toolbar.panels.versions.VersionsPanel', |
|
||||||
'debug_toolbar.panels.timer.TimerPanel', |
|
||||||
'debug_toolbar.panels.settings.SettingsPanel', |
|
||||||
'debug_toolbar.panels.headers.HeadersPanel', |
|
||||||
'debug_toolbar.panels.request.RequestPanel', |
|
||||||
'debug_toolbar.panels.sql.SQLPanel', |
|
||||||
'debug_toolbar.panels.staticfiles.StaticFilesPanel', |
|
||||||
'debug_toolbar.panels.templates.TemplatesPanel', |
|
||||||
'debug_toolbar.panels.cache.CachePanel', |
|
||||||
'debug_toolbar.panels.signals.SignalsPanel', |
|
||||||
'debug_toolbar.panels.logging.LoggingPanel', |
|
||||||
'debug_toolbar.panels.redirects.RedirectsPanel', |
|
||||||
] |
|
||||||
|
|
||||||
|
|
||||||
# logging |
|
||||||
U_LOGFILE_SIZE = 1 * 1024 * 1024 |
|
||||||
U_LOGFILE_COUNT = 2 |
|
||||||
DEFAULT_LOGGER_NAME = 'django' |
|
||||||
LOGGING = { |
|
||||||
'version': 1, |
|
||||||
'disable_existing_loggers': False, |
|
||||||
'formatters': { |
|
||||||
'verbose': { |
|
||||||
'format': '%(levelname)s %(asctime)s %(module)s %(process)d %(thread)d %(message)s \n' |
|
||||||
}, |
|
||||||
'simple': { |
|
||||||
'format': '%(levelname)s %(message)s' |
|
||||||
}, |
|
||||||
}, |
|
||||||
'handlers': { |
|
||||||
'file': { |
|
||||||
'level': 'INFO', |
|
||||||
'filename': os.path.join(SITE_ROOT, 'logs/django.log'), |
|
||||||
'formatter': 'verbose', |
|
||||||
'class':'logging.handlers.RotatingFileHandler', |
|
||||||
'maxBytes': U_LOGFILE_SIZE, |
|
||||||
'backupCount': U_LOGFILE_COUNT, |
|
||||||
}, |
|
||||||
}, |
|
||||||
'loggers': { |
|
||||||
'django': { |
|
||||||
'handlers': ['file'], |
|
||||||
'propagate': True, |
|
||||||
'level': 'DEBUG', |
|
||||||
}, |
|
||||||
} |
|
||||||
} |
|
||||||
@ -1,97 +0,0 @@ |
|||||||
server { |
|
||||||
server_name expomap.ru www.expomap.ru; |
|
||||||
# listen 80; |
|
||||||
|
|
||||||
return 301 https://expomap.ru$request_uri; |
|
||||||
} |
|
||||||
|
|
||||||
geo $maintenance { |
|
||||||
default yes; |
|
||||||
127.0.0.1/32 no; |
|
||||||
31.43.24.170/24 no; |
|
||||||
} |
|
||||||
|
|
||||||
server { |
|
||||||
listen 176.121.11.162:443 ssl; |
|
||||||
server_name www.expomap.ru; |
|
||||||
|
|
||||||
# ssl on; |
|
||||||
# ssl_certificate /etc/nginx/ssl/expomap.ru.crt; |
|
||||||
# ssl_certificate_key /etc/nginx/ssl/expomap.ru.key; |
|
||||||
|
|
||||||
return 301 https://expomap.ru$request_uri; |
|
||||||
} |
|
||||||
|
|
||||||
server { |
|
||||||
listen 176.121.11.162:443 ssl default_server ; |
|
||||||
server_name expomap.ru ; |
|
||||||
# ssl_stapling on; |
|
||||||
ssl on; |
|
||||||
ssl_certificate /etc/nginx/ssl/expomap.ru.crt; |
|
||||||
ssl_certificate_key /etc/nginx/ssl/expomap.ru.key; |
|
||||||
ssl_dhparam /etc/nginx/ssl/dhparam.pem; |
|
||||||
ssl_session_timeout 24h; |
|
||||||
ssl_session_cache shared:SSL:25m; |
|
||||||
ssl_protocols TLSv1 TLSv1.1 TLSv1.2; |
|
||||||
ssl_ciphers kEECDH+AES128:kEECDH:kEDH:-3DES:kRSA+AES128:kEDH+3DES:DES-CBC3-SHA:!RC4:!aNULL:!eNULL:!MD5:!EXPORT:!LOW:!SEED:!CAMELLIA:!IDEA:!PSK:!SRP:!SSLv2; |
|
||||||
ssl_prefer_server_ciphers on; |
|
||||||
add_header Strict-Transport-Security "max-age=31536000;"; |
|
||||||
add_header Content-Security-Policy-Report-Only "default-src https:; script-src https: 'unsafe-eval' 'unsafe-inline'; style-src https: 'unsafe-inline'; img-src https: data:; font-src https: data:"; |
|
||||||
|
|
||||||
client_header_timeout 360s; |
|
||||||
|
|
||||||
error_page 503 /dev_work.html; |
|
||||||
|
|
||||||
location / { |
|
||||||
# auth_basic "Unauthorized"; |
|
||||||
# auth_basic_user_file /home/www/proj/.htpasswd; |
|
||||||
|
|
||||||
if ($maintenance = yes) { |
|
||||||
return 503; |
|
||||||
} |
|
||||||
|
|
||||||
proxy_pass http://127.0.0.1:8080; |
|
||||||
proxy_redirect off; |
|
||||||
proxy_set_header Host $host; |
|
||||||
proxy_set_header X-Real-IP $remote_addr; |
|
||||||
proxy_set_header X-Forwarded-For $remote_addr; |
|
||||||
include /etc/nginx/geoip_proxy.conf; |
|
||||||
|
|
||||||
client_max_body_size 100m; |
|
||||||
client_body_buffer_size 128k; |
|
||||||
|
|
||||||
proxy_connect_timeout 90; |
|
||||||
proxy_send_timeout 90; |
|
||||||
proxy_read_timeout 90; |
|
||||||
proxy_buffer_size 16k; |
|
||||||
proxy_buffers 256 8k; |
|
||||||
proxy_busy_buffers_size 2000k; |
|
||||||
proxy_temp_file_write_size 2048k; |
|
||||||
} |
|
||||||
|
|
||||||
|
|
||||||
location /965E1EE7949FD639CA0124C8D8C57774.txt { |
|
||||||
root /home/www/proj/; |
|
||||||
} |
|
||||||
|
|
||||||
location /4885b11a73674eb6d54593c1d7efd758821e5ee79b8132feecaba10560f0123a.html { |
|
||||||
root /home/www/proj/support; |
|
||||||
} |
|
||||||
|
|
||||||
location /static { |
|
||||||
root /home/www/proj; |
|
||||||
} |
|
||||||
location /media { |
|
||||||
root /home/www/proj; |
|
||||||
} |
|
||||||
|
|
||||||
location /templates { |
|
||||||
root /home/www/proj/static; |
|
||||||
} |
|
||||||
location /subdmn { |
|
||||||
root /home/old_files; |
|
||||||
} |
|
||||||
|
|
||||||
|
|
||||||
} |
|
||||||
|
|
||||||
Loading…
Reference in new issue