move app to client

master
Dmitriy Shesterkin 8 years ago
commit 4e4210e87a
  1. 19
      .gitignore
  2. 102
      Dockerfile
  3. 1
      README
  4. 4
      conf/crontab
  5. 259
      conf/djapian-patch/resultset.py
  6. 15
      conf/docker/entrypoint_prod.sh
  7. 44
      conf/gunicorn_logging.ini
  8. 67
      conf/gunicorn_prod.py
  9. 278
      conf/nginx.conf
  10. 20
      conf/nginx_vds.conf
  11. 29
      conf/nginx_vds_ssl.conf
  12. 40
      conf/supervisor.conf
  13. 1
      data/PG_VERSION
  14. BIN
      data/base/1/112
  15. BIN
      data/base/1/113
  16. BIN
      data/base/1/12242
  17. BIN
      data/base/1/12242_fsm
  18. BIN
      data/base/1/12242_vm
  19. 0
      data/base/1/12244
  20. BIN
      data/base/1/12246
  21. BIN
      data/base/1/12247
  22. BIN
      data/base/1/12247_fsm
  23. BIN
      data/base/1/12247_vm
  24. 0
      data/base/1/12249
  25. BIN
      data/base/1/12251
  26. BIN
      data/base/1/12252
  27. BIN
      data/base/1/12252_fsm
  28. BIN
      data/base/1/12252_vm
  29. 0
      data/base/1/12254
  30. BIN
      data/base/1/12256
  31. BIN
      data/base/1/12257
  32. BIN
      data/base/1/12257_fsm
  33. BIN
      data/base/1/12257_vm
  34. 0
      data/base/1/12259
  35. BIN
      data/base/1/12261
  36. BIN
      data/base/1/12262
  37. BIN
      data/base/1/12262_fsm
  38. BIN
      data/base/1/12262_vm
  39. 0
      data/base/1/12264
  40. BIN
      data/base/1/12266
  41. BIN
      data/base/1/12267
  42. BIN
      data/base/1/12267_fsm
  43. BIN
      data/base/1/12267_vm
  44. 0
      data/base/1/12269
  45. BIN
      data/base/1/12271
  46. 0
      data/base/1/12272
  47. 0
      data/base/1/12274
  48. BIN
      data/base/1/12276
  49. BIN
      data/base/1/1247
  50. BIN
      data/base/1/1247_fsm
  51. BIN
      data/base/1/1247_vm
  52. BIN
      data/base/1/1249
  53. BIN
      data/base/1/1249_fsm
  54. BIN
      data/base/1/1249_vm
  55. BIN
      data/base/1/1255
  56. BIN
      data/base/1/1255_fsm
  57. BIN
      data/base/1/1255_vm
  58. BIN
      data/base/1/1259
  59. BIN
      data/base/1/1259_fsm
  60. BIN
      data/base/1/1259_vm
  61. 0
      data/base/1/1417
  62. 0
      data/base/1/1417_vm
  63. 0
      data/base/1/1418
  64. 0
      data/base/1/1418_vm
  65. BIN
      data/base/1/174
  66. BIN
      data/base/1/175
  67. BIN
      data/base/1/2187
  68. 0
      data/base/1/2328
  69. 0
      data/base/1/2328_vm
  70. 0
      data/base/1/2336
  71. 0
      data/base/1/2336_vm
  72. BIN
      data/base/1/2337
  73. BIN
      data/base/1/2600
  74. BIN
      data/base/1/2600_fsm
  75. BIN
      data/base/1/2600_vm
  76. BIN
      data/base/1/2601
  77. BIN
      data/base/1/2601_fsm
  78. BIN
      data/base/1/2601_vm
  79. BIN
      data/base/1/2602
  80. BIN
      data/base/1/2602_fsm
  81. BIN
      data/base/1/2602_vm
  82. BIN
      data/base/1/2603
  83. BIN
      data/base/1/2603_fsm
  84. BIN
      data/base/1/2603_vm
  85. 0
      data/base/1/2604
  86. 0
      data/base/1/2604_vm
  87. BIN
      data/base/1/2605
  88. BIN
      data/base/1/2605_fsm
  89. BIN
      data/base/1/2605_vm
  90. BIN
      data/base/1/2606
  91. BIN
      data/base/1/2606_fsm
  92. BIN
      data/base/1/2606_vm
  93. BIN
      data/base/1/2607
  94. BIN
      data/base/1/2607_fsm
  95. BIN
      data/base/1/2607_vm
  96. BIN
      data/base/1/2608
  97. BIN
      data/base/1/2608_fsm
  98. BIN
      data/base/1/2608_vm
  99. BIN
      data/base/1/2609
  100. BIN
      data/base/1/2609_fsm
  101. Some files were not shown because too many files have changed in this diff Show More

19
.gitignore vendored

@ -0,0 +1,19 @@
*.*~
*.pyc
.DS_Store
._*
pip-log.txt
ENV/
.idea/
local_settings.py
Thumbs.db
distribute-*.tar.gz
*.bak
public_html/*
log/*
djapian_spaces/*
*.swp
*.swa
*.swo

@ -0,0 +1,102 @@
FROM python:2
ENV PYTHONUNBUFFERED 1
ENV NGINX_VERSION="1.12.0" \
NGINX_OPTS="--with-http_ssl_module \
--with-http_gzip_static_module \
--prefix=/usr/share/nginx \
--sbin-path=/usr/sbin/nginx \
--conf-path=/etc/nginx/nginx.conf \
--pid-path=/var/run/nginx.pid \
--http-log-path=/var/log/nginx/access.log \
--error-log-path=/var/log/nginx/error.log \
--user=www-data \
--group=www-data \
--add-module=/tmp/modules/nginx_requestid-master"
ENV XAPIAN_VERSION="1.2.21"
COPY requirements.txt /opt/app/requirements.txt
RUN apt-get update -y && \
apt-get upgrade -y && \
apt-get install -y --no-install-recommends apt-utils \
libxml2 \
xz-utils \
uuid-dev \
python-xapian \
memcached \
supervisor \
cron \
php5 \
php5-fpm \
make && \
apt-get clean && \
rm -rf /var/lib/apt/lists/* && \
pip install --upgrade pip && \
pip install --no-cache-dir --no-deps -r /opt/app/requirements.txt && \
# Download additional nginx modules
mkdir -p /tmp/modules && \
cd /tmp/modules && \
wget -O nginx-requestid.tar.gz https://github.com/hhru/nginx_requestid/archive/master.tar.gz && \
tar xvzf nginx-requestid.tar.gz && \
# Download and compile nginx
cd /tmp && \
curl -fSL http://nginx.org/download/nginx-${NGINX_VERSION}.tar.gz -o nginx-${NGINX_VERSION}.tar.gz && \
tar xzvf nginx-${NGINX_VERSION}.tar.gz && \
cd nginx-${NGINX_VERSION} && \
./configure ${NGINX_OPTS} && \
make && \
make install && \
# Delete build dependencies after use
cd /tmp \
&& rm -rf \
modules \
nginx-${NGINX_VERSION} \
nginx-${NGINX_VERSION}.tar.gz \
/var/cache/apt/* \
/root/.cache \
# Patch Djapian
&& rm /usr/local/lib/python2.7/site-packages/djapian/resultset.py
COPY conf/djapian-patch/resultset.py /usr/local/lib/python2.7/site-packages/djapian/resultset.py
# Install xapian from source
RUN cd /tmp && \
curl -O https://oligarchy.co.uk/xapian/${XAPIAN_VERSION}/xapian-core-${XAPIAN_VERSION}.tar.xz && \
tar -xvf xapian-core-${XAPIAN_VERSION}.tar.xz && \
cd xapian-core-${XAPIAN_VERSION} && \
./configure && \
make && \
make install && \
cd /tmp && \
curl -O https://oligarchy.co.uk/xapian/${XAPIAN_VERSION}/xapian-bindings-${XAPIAN_VERSION}.tar.xz && \
tar -xvf xapian-bindings-${XAPIAN_VERSION}.tar.xz && \
cd xapian-bindings-${XAPIAN_VERSION} && \
./configure --with-python && \
make && \
make install && \
rm -rf xapian-*
ADD . /opt/app
VOLUME ["/opt/app/public_html"]
WORKDIR /opt/app
# Nginx config
RUN rm -v /etc/nginx/nginx.conf
ADD /conf/nginx.conf /etc/nginx/
# Add crontab file in the cron directory
ADD /conf/crontab /etc/cron.d/penfond-cron
# Give execution rights on the cron job
RUN chmod 0644 /etc/cron.d/penfond-cron
EXPOSE 80
CMD ["conf/docker/entrypoint_prod.sh"]

@ -0,0 +1 @@
Пенсионный фонд

@ -0,0 +1,4 @@
*/24 * * * * root python manage.py index # доиндексация
34 */3 * * * root python manage.py index --rebuild # переиндексация
*/15 * * * * root python manage.py clear_path_teasers # удаление старых тизеров
# An empty line is required at the end of this file for a valid cron file.

@ -0,0 +1,259 @@
import xapian
import operator
from copy import deepcopy
from django.db.models import get_model
from django.utils.encoding import force_unicode
from djapian import utils, decider
class ResultSet(object):
def __init__(self, indexer, query_str, offset=0, limit=utils.DEFAULT_MAX_RESULTS,
order_by=None, prefetch=False, flags=None, stemming_lang=None,
filter=None, exclude=None, prefetch_select_related=False):
self._indexer = indexer
self._query_str = query_str
self._offset = offset
self._limit = limit
self._order_by = order_by
self._prefetch = prefetch
self._prefetch_select_related = prefetch_select_related
self._filter = filter or decider.X()
self._exclude = exclude or decider.X()
if flags is None:
flags = xapian.QueryParser.FLAG_PHRASE\
| xapian.QueryParser.FLAG_BOOLEAN\
| xapian.QueryParser.FLAG_LOVEHATE
self._flags = flags
self._stemming_lang = stemming_lang
self._resultset_cache = None
self._mset = None
self._query = None
self._query_parser = None
# Public methods that produce another ResultSet
def all(self):
return self._clone()
def spell_correction(self):
return self._clone(
flags=self._flags | xapian.QueryParser.FLAG_SPELLING_CORRECTION\
| xapian.QueryParser.FLAG_WILDCARD
)
def prefetch(self, select_related=False):
return self._clone(
prefetch=True,
prefetch_select_related=select_related
)
def order_by(self, field):
return self._clone(order_by=field)
def flags(self, flags):
return self._clone(flags=flags)
def stemming(self, lang):
return self._clone(stemming_lang=lang)
def count(self):
return self._clone()._do_count()
def get_corrected_query_string(self):
self._get_mset()
return self._query_parser.get_corrected_query_string()
def filter(self, *fields, **raw_fields):
clone = self._clone()
clone._add_filter_fields(fields, raw_fields)
return clone
def exclude(self, *fields, **raw_fields):
clone = self._clone()
clone._add_exclude_fields(fields, raw_fields)
return clone
# Private methods
def _prepare_fields(self, fields=None, raw_fields=None):
fields = fields and reduce(operator.and_, fields) or decider.X()
if raw_fields:
fields = fields & reduce(
operator.and_,
map(
lambda value: decider.X(**{value[0]: value[1]}),
raw_fields.iteritems()
)
)
self._check_fields(fields)
return fields
def _add_filter_fields(self, fields=None, raw_fields=None):
self._filter &= self._prepare_fields(fields, raw_fields)
def _add_exclude_fields(self, fields=None, raw_fields=None):
self._exclude &= self._prepare_fields(fields, raw_fields)
def _check_fields(self, fields):
known_fields = set([f.prefix for f in self._indexer.tags])
for field in fields.children:
if isinstance(field, decider.X):
self._check_fields(field)
else:
if field[0].split('__', 1)[0] not in known_fields:
raise ValueError("Unknown field '%s'" % field[0])
def _clone(self, **kwargs):
data = {
"indexer": self._indexer,
"query_str": self._query_str,
"offset": self._offset,
"limit": self._limit,
"order_by": self._order_by,
"prefetch": self._prefetch,
"prefetch_select_related": self._prefetch_select_related,
"flags": self._flags,
"stemming_lang": self._stemming_lang,
"filter": deepcopy(self._filter),
"exclude": deepcopy(self._exclude),
}
data.update(kwargs)
return ResultSet(**data)
def _do_count(self):
self._get_mset()
return self._mset.size()
def _do_prefetch(self):
model_map = {}
for hit in self._resultset_cache:
model_map.setdefault(hit.model, []).append(hit)
for model, hits in model_map.iteritems():
pks = [hit.pk for hit in hits]
instances = model._default_manager.all()
if self._prefetch_select_related:
instances = instances.select_related()
instances = instances.in_bulk(pks)
for hit in hits:
hit.instance = instances[hit.pk]
def _get_mset(self):
if self._mset is None:
self._mset, self._query, self._query_parser = self._indexer._do_search(
self._query_str,
self._offset,
self._limit,
self._order_by,
self._flags,
self._stemming_lang,
self._filter,
self._exclude,
)
def _fetch_results(self):
if self._resultset_cache is None:
self._get_mset()
self._parse_results()
return self._resultset_cache
def _parse_results(self):
self._resultset_cache = []
for match in self._mset:
doc = match.document
model = doc.get_value(2)
model = get_model(*model.split('.'))
pk = model._meta.pk.to_python(doc.get_value(1))
percent = match.percent
rank = match.rank
weight = match.weight
tags = dict([(tag.prefix, tag.extract(doc))\
for tag in self._indexer.tags])
self._resultset_cache.append(
Hit(pk, model, percent, rank, weight, tags)
)
if self._prefetch:
self._do_prefetch()
def __iter__(self):
self._fetch_results()
return iter(self._resultset_cache)
def __len__(self):
self._fetch_results()
return len(self._resultset_cache)
def __getitem__(self, k):
if not isinstance(k, (slice, int, long)):
raise TypeError
assert ((not isinstance(k, slice) and (k >= 0))
or (isinstance(k, slice) and (k.start is None or k.start >= 0)
and (k.stop is None or k.stop >= 0))), \
"Negative indexing is not supported."
if self._resultset_cache is not None:
return self._fetch_results()[k]
else:
if isinstance(k, slice):
start, stop = k.start, k.stop
if start is None:
start = 0
if stop is None:
kstop = utils.DEFAULT_MAX_RESULTS
return self._clone(
offset=start,
limit=stop - start
)
else:
return list(self._clone(
offset=k,
limit=1
))[k]
def __unicode__(self):
return u"<ResultSet: query=%s>" % force_unicode(self._query_str)
class Hit(object):
def __init__(self, pk, model, percent, rank, weight, tags):
self.pk = pk
self.model = model
self.percent = percent
self.rank = rank
self.weight = weight
self.tags = tags
self._instance = None
def get_instance(self):
if self._instance is None:
self._instance = self.model._default_manager.get(pk=self.pk)
return self._instance
def set_instance(self, instance):
self._instance = instance
instance = property(get_instance, set_instance)
def __repr__(self):
return "<Hit: model=%s pk=%s, percent=%s rank=%s weight=%s>" % (
utils.model_name(self.model), self.pk, self.percent, self.rank, self.weight
)

@ -0,0 +1,15 @@
#!/usr/bin/env bash
set -e
set -u
export ENV=prod
# Apply database migrations
echo "Apply database migrations"
python manage.py syncdb --noinput
python manage.py migrate --noinput
python manage.py collectstatic --noinput
supervisord -c /opt/app/conf/supervisor.conf

@ -0,0 +1,44 @@
[loggers]
keys=root,gunicorn.access,gunicorn.error
[logger_root]
level=INFO
handlers=root
[logger_gunicorn.access]
level=INFO
handlers=gunicorn.access
qualname=gunicorn.access
propagate=0
[logger_gunicorn.error]
level=INFO
handlers=gunicorn.error
qualname=gunicorn.error
propagate=0
[handlers]
keys=root,gunicorn.access,gunicorn.error
[handler_root]
class=logging.StreamHandler
formatter=default
args=(sys.stdout,)
[handler_gunicorn.access]
class=logging.StreamHandler
formatter=default
args=(sys.stdout,)
[handler_gunicorn.error]
class=logging.StreamHandler
formatter=default
args=(sys.stdout,)
[formatters]
keys=default
[formatter_default]
class=logging.Formatter
format=* %(asctime)s [%(levelname)s] {%(filename)s} - %(message)s
datefmt=%x %X

@ -0,0 +1,67 @@
# Settings http://docs.gunicorn.org/en/stable/settings.html
import os
bind = 'unix:/tmp/gunicorn.sock'
backlog = 2048 # The number of pending connections
preload = True # Load application code before the worker processes are forked
workers = 2
worker_class = 'sync'
worker_connections = 1000
threads = 1
timeout = 120
keepalive = 2
reload = False
spew = False
check_config = False
daemon = False
pidfile = None
umask = 0
user = None
group = None
tmp_upload_dir = None
proc_name = None
# Logging
# -------
logconfig = '/opt/app/conf/gunicorn_logging.ini'
def post_fork(server, worker):
server.log.info("Worker spawned (pid: %s)", worker.pid)
def pre_fork(server, worker):
pass
def pre_exec(server):
server.log.info("Forked child, re-executing.")
def when_ready(server):
server.log.info("Server is ready. Spawning workers")
def worker_int(worker):
worker.log.info("Worker received INT or QUIT signal")
## get traceback info
import threading, sys, traceback
id2name = dict([(th.ident, th.name) for th in threading.enumerate()])
code = []
for threadId, stack in sys._current_frames().items():
code.append("\n# Thread: %s(%d)" % (id2name.get(threadId,""),
threadId))
for filename, lineno, name, line in traceback.extract_stack(stack):
code.append('File: "%s", line %d, in %s' % (filename,
lineno, name))
if line:
code.append(" %s" % (line.strip()))
worker.log.debug("\n".join(code))
def worker_abort(worker):
worker.log.info("Worker received SIGABRT signal")

@ -0,0 +1,278 @@
worker_processes 1;
user www-data;
pid /var/run/nginx.pid;
error_log /var/log/nginx/error.log;
events {
worker_connections 1024;
accept_mutex off;
use epoll;
}
http {
sendfile on;
include /etc/nginx/mime.types;
default_type application/octet-stream;
keepalive_timeout 65;
upstream django {
server unix:/tmp/gunicorn.sock fail_timeout=0;
}
server {
listen 80;
server_name _;
charset utf-8;
keepalive_timeout 5;
client_max_body_size 64M;
access_log /var/log/nginx/access.log;
location / {
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Scheme $scheme;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
# we don't want nginx trying to do something clever with
# redirects, we set the Host: header above already.
proxy_redirect off;
proxy_connect_timeout 600;
proxy_send_timeout 600;
proxy_read_timeout 600;
send_timeout 600;
proxy_http_version 1.1;
proxy_pass http://django;
proxy_pass_header Server;
}
location /_1504785325778.php {
root /opt/app/public_html/leadia_proxy;
include /etc/nginx/fastcgi_params;
fastcgi_pass unix:/run/php5-fpm.sock;
fastcgi_param SCRIPT_FILENAME $document_root/$fastcgi_script_name;
break;
}
location = /robots.txt {
alias /opt/app/public_html/static/robots.txt;
}
location = /favicon.ico {
alias /opt/app/public_html/static/favicon.ico;
}
location /download/ {
rewrite ^/download/(.*)$ /$1 break;
root /opt/app/public_html/media/cms_page_media;
}
location /m/ {
rewrite ^/m/(.*)$ /$1 break;
root /opt/app/public_html/media;
}
location /s/ {
rewrite ^/s/(.*)$ /$1 break;
root /opt/app/public_html/static;
}
# 301 redirect urls
location /raschyot-pensij-s-2015-goda/ {
rewrite ^ https://$server_name/rasschet-pensij/s-2015-goda/? permanent;
}
location /spravochnaya-informaciya/monetizaciya-lgot-v-rossii/ {
rewrite ^ https://$server_name/lgoty/monetizaciya-lgot/? permanent;
}
location /poleznaya-informaciya/severnoe-nadbavki/ {
rewrite ^ https://$server_name/poleznaya-informaciya/severnye-nadbavki/? permanent;
}
location /pensii/indeksaciya-i-uvelichenie-pensij-v-2014-godu/ {
rewrite ^ https://$server_name/rasschet-pensij/indeksaciya-i-uvelichenie-pensij-v-2014-godu/? permanent;
}
location /pensii/pereraschyot-pensij-rabotayushim-pensioneram/ {
rewrite ^ https://$server_name/rasschet-pensij/pereraschyot-pensij-rabotayushim-pensioneram/? permanent;
}
location /rasschet-pensij/osobennosti-pensionnogo-obespecheniya-rabotayushih-grazhdan/ {
rewrite ^ https://$server_name/rasschet-pensij/rabotayushim-pensioneram/? permanent;
}
location /rasschet-pensij/kakie-vidy-deyatelnosti-zaschityvayutsya-v-strahovoj-trudovoj-st/ {
rewrite ^ https://$server_name/rasschet-pensij/strahovoj-trudovoj-stazh/? permanent;
}
location /materinskij-kapital/priobretenie-zhilya/ {
rewrite ^ https://$server_name/materinskij-kapital/pokupka-zhilya/? permanent;
}
location /materinskij-kapital/na-formirovanie-pensii/ {
rewrite ^ https://$server_name/materinskij-kapital/na-pensiu/? permanent;
}
location /lgoty/socialnye-programmy-v-rossijskoj-federacii/ {
rewrite ^ https://$server_name/lgoty/socialnye-programmy/? permanent;
}
location /lgoty/vyplaty-po-uhodu-za-netrudosposobnymi-grazhdanami/ {
rewrite ^ https://$server_name/lgoty/netrudosposobnym-grazhdanam/? permanent;
}
location /poleznaya-informaciya/strahovoe-svidetelstvo-obyazatelnogo-pensionnogo-strahovaniya/ {
rewrite ^ https://$server_name/poleznaya-informaciya/snils-i-pensionnoe-svidetelstvo/? permanent;
}
location /poleznaya-informaciya/vygodnye-vklady-dlya-pensionerov-v-rossijskih-banka/ {
rewrite ^ https://$server_name/poleznaya-informaciya/vklady-dlya-pensionerov/? permanent;
}
location /poleznaya-informaciya/personificirovannyj-uchet-grazhdan-v-pfr/ {
rewrite ^ https://$server_name/poleznaya-informaciya/personificirovannyj-uchet-v-pfr/? permanent;
}
location /rasschet-pensij/ {
rewrite ^ https://$server_name/raschet-pensij/? permanent;
}
location /materinskij-kapital/zajmy-i-kredity-pod-materinskij-kapital/ {
rewrite ^ https://$server_name/materinskij-kapital/zajmy-i-kredity/? permanent;
}
location /raschet-pensij/indeksaciya-i-uvelichenie-pensij-v-2014-godu/ {
rewrite ^ https://$server_name/poleznaya-informaciya/indeksaciya-i-uvelichenie-pensij-v-2014-godu/? permanent;
}
location /raschet-pensij/s-2015-goda/ {
rewrite ^ https://$server_name/raschet-pensij/? permanent;
}
location /otdeleniya-pensionnogo-fonda/ {
rewrite ^ https://$server_name/otdeleniya/? permanent;
}
location /negosudarstvennye-pensionnye-fondy/ {
rewrite ^ https://$server_name/npf/? permanent;
}
location /negosudarstvennye-pensionnye-fondy/negosudarstvennyj-pensionnyj-fond-blagosostoyanie/ {
rewrite ^ https://$server_name/npf/blagosostoyanie/? permanent;
}
location /negosudarstvennye-pensionnye-fondy/negosudarstvennyj-pensionnyj-fond-gazfond/ {
rewrite ^ https://$server_name/npf/gazfond/? permanent;
}
location /negosudarstvennye-pensionnye-fondy/negosudarstvennyj-pensionnyj-fond-elektroenergetiki/ {
rewrite ^ https://$server_name/npf/elektroenergetiki/? permanent;
}
location /negosudarstvennye-pensionnye-fondy/negosudarstvennyj-pensionnyj-fond-lukojl-garant/ {
rewrite ^ https://$server_name/npf/lukojl-garant/? permanent;
}
location /negosudarstvennye-pensionnye-fondy/negosudarstvennyj-pensionnyj-fond-promagrofond/ {
rewrite ^ https://$server_name/npf/promagrofond/? permanent;
}
location /negosudarstvennye-pensionnye-fondy/npf-neftegarant/ {
rewrite ^ https://$server_name/npf/neftegarant/? permanent;
}
location /negosudarstvennye-pensionnye-fondy/negosudarstvennyj-pensionnyj-fond-sberbanka/ {
rewrite ^ https://$server_name/npf/sberbank/? permanent;
}
location /negosudarstvennye-pensionnye-fondy/negosudarstvennyj-pensionnyj-fond-almaznaya-osen/ {
rewrite ^ https://$server_name/npf/almaznaya-osen/? permanent;
}
location /negosudarstvennye-pensionnye-fondy/negosudarstvennyj-pensionnyj-fond-telekom-soyuz/ {
rewrite ^ https://$server_name/npf/telekom-soyuz/? permanent;
}
location /negosudarstvennye-pensionnye-fondy/npf-evropejskij-pensionnyj-fond/ {
rewrite ^ https://$server_name/npf/evropejskij/? permanent;
}
location /negosudarstvennye-pensionnye-fondy/negosudarstvennyj-pensionnyj-fond-stalfond/ {
rewrite ^ https://$server_name/npf/stalfond/? permanent;
}
location /negosudarstvennye-pensionnye-fondy/negosudarstvennyj-pensionnyj-fond-vtb/ {
rewrite ^ https://$server_name/npf/vtb/? permanent;
}
location /negosudarstvennye-pensionnye-fondy/negosudarstvennyj-pensionnyj-fond-kit-finans/ {
rewrite ^ https://$server_name/npf/kit-finans/? permanent;
}
location /negosudarstvennye-pensionnye-fondy/negosudarstvennyj-pensionnyj-fond-metallurgov/ {
rewrite ^ https://$server_name/npf/metallurgov/? permanent;
}
location /materinskij-kapital/kak-obnalichit/ {
rewrite ^ https://$server_name/materinskij-kapital/? permanent;
}
location /poleznaya-informaciya/snils-i-pensionnoe-svidetelstvo/ {
rewrite ^ https://$server_name/poleznaya-informaciya/snils/? permanent;
}
location /raschet-pensij/strahovoj-trudovoj-stazh/ {
rewrite ^ https://$server_name/raschet-pensij/strahovoj-stazh/? permanent;
}
location /poleznaya-informaciya/ustanovlenie-pfv/ {
rewrite ^ https://$server_name/raschet-pensij/fiksirovannaya-vyplata/? permanent;
}
location /poleznaya-informaciya/pereezd-pensionerov-severa/ {
rewrite ^ https://$server_name/lgoty/pereezd-pensionerov-severa/? permanent;
}
location /otdeleniya/moskovskaya-oblast/schyolkovo/ {
rewrite ^ https://$server_name/otdeleniya/moskovskaya-oblast/schelkovo/? permanent;
}
location /otdeleniya/altajskij-kraj/krasnoschekovo/ {
rewrite ^ https://$server_name/otdeleniya/altajskij-kraj/krasnoschyokovo/? permanent;
}
location /otdeleniya/zabajkalskij-kraj/nova-chara/ {
rewrite ^ https://$server_name/otdeleniya/zabajkalskij-kraj/novaya-chara/? permanent;
}
location /otdeleniya/omskaya-oblast/znamenka/ {
rewrite ^ https://$server_name/otdeleniya/omskaya-oblast/znamenskoe/? permanent;
}
location /otdeleniya/omskaya-oblast/lyubino/ {
rewrite ^ https://$server_name/otdeleniya/omskaya-oblast/lyubinskij/? permanent;
}
# redirect whole subpath to single url
location ~ ^/otdeleniya/evrejskaya-ao/(.*) {
rewrite ^/otdeleniya/evrejskaya-ao/(.*) https://$server_name/otdeleniya/evrejskaya-avtonomnaya-oblast/? permanent;
}
location ~ ^/otdeleniya/chukotskij-ao/(.*) {
rewrite ^/otdeleniya/chukotskij-ao/(.*) https://$server_name/otdeleniya/chukotskij-avtonomnyj-okrug/? permanent;
}
location ~ ^/otdeleniya/kabardino-balkariya/(.*) {
rewrite ^/otdeleniya/kabardino-balkariya/(.*) https://$server_name/otdeleniya/kabardino-balkarskaya-respublika/? permanent;
}
location ~ ^/otdeleniya/yamalo-neneckij-ao/(.*) {
rewrite ^/otdeleniya/yamalo-neneckij-ao/(.*) https://$server_name/otdeleniya/yamalo-neneckij-avtonomnyj-okrug/? permanent;
}
}
}

@ -0,0 +1,20 @@
upstream pensfond {
server localhost:32770;
}
server {
client_max_body_size 175M;
listen 0.0.0.0:80;
server_name p-fond.ru www.p-fond.ru;
location / {
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
proxy_set_header X-NginX-Proxy true;
proxy_pass http://pensfond/;
proxy_redirect off;
}
}

@ -0,0 +1,29 @@
upstream pensfond {
server localhost:32770;
}
server {
listen 80;
server_name p-fond.ru www.p-fond.ru;
return 301 https://$sqerver_name$request_uri;
}
server {
client_max_body_size 175M;
listen 0.0.0.0:443 ssl;
server_name p-fond.ru www.p-fond.ru;
ssl_certificate /opt/apps/pensfond/conf/ssl-keys/pensfond.org.crt;
ssl_certificate_key /opt/apps/pensfond/conf/ssl-keys/pensfond.org.key;
add_header Strict-Transport-Security 'max-age=604800';
location / {
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
proxy_set_header X-NginX-Proxy true;
proxy_pass http://mirmebeli/;
proxy_redirect off;
}
}

@ -0,0 +1,40 @@
[supervisord]
logfile=/var/log/supervisord.log
loglevel=debug
directory=/opt/app
pidfile=/tmp/supervisord.pid
nodaemon=true
minfds=65535
minprocs=200
environment=PATH="/opt/app"
user=root
[program:nginx]
command=/usr/sbin/nginx "-g" "daemon off;"
priority=1
autorestart=true
stdout_events_enabled=true
stderr_events_enabled=true
[program:gunicorn]
command=gunicorn project.wsgi:application -c /opt/app/conf/gunicorn_prod.py
directory=/opt/app
priority=2
stdout_logfile=/var/log/gunicorn.log
redirect_stderr=true
stdout_events_enabled=true
stderr_events_enabled=true
autorestart=true
[program:cron]
directory = /etc/cron.d/
command = /usr/sbin/cron -f
autorestart = true
stdout_logfile=/dev/stdout
stdout_logfile_maxbytes=0
redirect_stderr=true
; RQ requires the TERM signal to perform a warm shutdown. If RQ does not die
; within 10 seconds, supervisor will forcefully kill it
stopsignal=TERM

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Some files were not shown because too many files have changed in this diff Show More

Loading…
Cancel
Save