From 7e3958e939775f019b26ff8ecb90364d8e894881 Mon Sep 17 00:00:00 2001 From: fefa4ka Date: Mon, 27 Jul 2015 17:29:22 +0300 Subject: [PATCH] lala deploy --- app/conf/uwsgi_zuykov.conf.template | 6 +- app/deploy/hosts.py | 4 +- app/deploy/tasks.py | 53 ++++++++++------- app/deploy/zuykov.py | 5 +- app/settings.py | 7 ++- requirements.txt | 9 +++ zsite/static/imgs/bill.png | Bin 0 -> 9610 bytes zsite/static/less/main.less | 4 ++ zsite/static/less/service.less | 14 +++++ zsite/static/less/theory.less | 18 ++++++ zsite/templates/base.html | 2 + zsite/templates/form_template/contacts.html | 60 ++++++++++++++++++++ 12 files changed, 150 insertions(+), 32 deletions(-) create mode 100644 zsite/static/imgs/bill.png create mode 100644 zsite/static/less/service.less create mode 100644 zsite/static/less/theory.less create mode 100644 zsite/templates/form_template/contacts.html diff --git a/app/conf/uwsgi_zuykov.conf.template b/app/conf/uwsgi_zuykov.conf.template index e7a9bb9..54d1752 100644 --- a/app/conf/uwsgi_zuykov.conf.template +++ b/app/conf/uwsgi_zuykov.conf.template @@ -3,12 +3,12 @@ uid=%(SERVER_USERNAME)s gid=%(SERVER_USERNAME)s chdir = /home/%(SERVER_USERNAME)s/%(PROJECT_NAME)s -module = app.wsgi_zuykov +module = app.wsgi home = /home/%(SERVER_USERNAME)s/%(PROJECT_NAME)s/env -eval = import newrelic.agent, wsgi_zuykov; application = newrelic.agent.wsgi_application()(wsgi_zuykov.application) +eval = import newrelic.agent, wsgi; application = newrelic.agent.wsgi_application()(wsgi.application) master = true processes = 4 -socket = /home/%(EC2_SERVER_USERNAME)s/%(PROJECT_NAME)s/app/wsgi_zuykov.sock +socket = /home/%(SERVER_USERNAME)s/%(PROJECT_NAME)s/app/wsgi.sock chmod-socket = 666 vacuum = true diff --git a/app/deploy/hosts.py b/app/deploy/hosts.py index cf3bbf7..fec0139 100644 --- a/app/deploy/hosts.py +++ b/app/deploy/hosts.py @@ -4,12 +4,10 @@ # Deploy from deployer.host import SSHHost -from zsite import settings - class WebHost(SSHHost): slug = 'web' - address = 'dev.zuykov.com' + address = '151.248.125.130' username = 'web' password = '9oijffDf2vi@D!' diff --git a/app/deploy/tasks.py b/app/deploy/tasks.py index d3d1ef1..5283a25 100644 --- a/app/deploy/tasks.py +++ b/app/deploy/tasks.py @@ -40,19 +40,35 @@ common_configure = [ # List of APT packages to install {"action": "apt", - "params": ["libpq-dev", "git", - "python-setuptools", "python-dev", "build-essential", "python-pip", "redis-server", - "libmysqlclient-dev", "subversion"], + "params": ["git", + "python-setuptools", "python-dev", "build-essential", "python-pip", "libmysqlclient-dev", + "mysql-server", "mysql-client"], "message":"Installing apt-get packages" }, + # {"action": "sudo", "params": "mysql_secure_installation", + # "message": "MYSQL Configuration" }, + + # {"action": "sudo", "params": "service mysqld start", + # "message": "MYSQL Starting" }, + + # {"action": "sudo", "params": "chkconfig mysqld on", + # "message": "MYSQL Configuration auto start" }, + + {"action": "run", "params": "mysqladmin -u %(MYSQL_USER)s -h localhost password '%(MYSQL_PASSWORD)s'", + "message": "MYSQL Create user" }, + + # {"action": "run", "params": "mysqladmin -u %(MYSQL_USER)s --password='%(MYSQL_PASSWORD)s' -h localhost '%(MYSQL_PASSWORD)s'", + # "message": "MYSQL Configuration" }, host + # List of pypi packages to install {"action": "pip", "params": ["virtualenv"], "message":"Installing virtualenv"}, #project directory + {"action": "run", "params": "mkdir -p ~/.ssh", "message": "Create ssh folder" }, {"action": "run", "params": "mkdir -p %(PROJECT_DIR)s", "message": "Create project folder" }, {"action": "run", "params": "mkdir -p %(LOGS_DIR)s", "message": "Create logs folder" }, - {"action": "sudo", "params": "chown -R %(SERVER_USERNAME)s: %(PROJECT_DIR)s"}, + {"action": "run", "params": "chown -R %(SERVER_USERNAME)s: %(PROJECT_DIR)s"}, # git setup {"action": "run", "params": "git config --global user.name '%(GIT_USERNAME)s'", @@ -78,7 +94,7 @@ common_configure = [ {"action": "run", "params": "virtualenv %(ENV_DIR)s", "message": "Configuring virtualenv" }, - {"action": "sudo", "params": "chown -R %(SERVER_USERNAME)s: %(ENV_DIR)s"}, + {"action": "run", "params": "chown -R %(SERVER_USERNAME)s: %(ENV_DIR)s"}, # {"action": "run", "params": # "echo 'expo WORKON_HOME=%(PRO_DIR)s' >> /home/%(SERVER_USERNAME)s/.profile"}, {"action": "run", "params": @@ -94,20 +110,16 @@ web_configure = [ {"action": "apt", "params": ["nginx", "uwsgi", "uwsgi-plugin-python", "nodejs", "npm"], "message":"Installing nginx, uwsgi, nodejs packages"}, - {"action": "sudo", "params": "npm install -g bower karma grunt grunt-cli"}, - # Костыль с нодой - {"action": "run", "params": "ln -s /usr/bin/nodejs %(ENV_DIR)s/bin/node"}, - {"action": "sudo", "params": "cd %(PROJECT_DIR)s/frontend/transcribe.ninja && npm install"}, - {"action": "sudo", "params": "cd %(PROJECT_DIR)s/frontend/stenograph.us && npm install"}, + {"action": "sudo", "params": "npm install -g bower"}, + # # Костыль с нодой + # {"action": "run", "params": "ln -s /usr/bin/nodejs %(ENV_DIR)s/bin/node"}, + # {"action": "sudo", "params": "cd %(PROJECT_DIR)s/frontend/transcribe.ninja && npm install"}, + # {"action": "sudo", "params": "cd %(PROJECT_DIR)s/frontend/stenograph.us && npm install"}, {"action": "sudo", "params": "rm -rf /etc/nginx/sites-enabled/default"}, - {"action": "sudo", "params": "rm -rf /etc/supervisor/conf.d/default"}, + # {"action": "sudo", "params": "rm -rf /etc/supervisor/conf.d/default"}, {"action": "sudo", "params": "rm -rf /etc/uwsgi/apps-enabled/default.ini"}, ] -npm_install = [ - {"action": "sudo", "params": "cd %(PROJECT_DIR)s/frontend/transcribe.ninja && npm install"}, - {"action": "sudo", "params": "cd %(PROJECT_DIR)s/frontend/stenograph.us && npm install"}, -] # nginx reload_nginx = [ @@ -124,16 +136,13 @@ create_nginx_links = [ create_uwsgi_links = [ {"action": "sudo", "params": - "ln -s /home/%(SERVER_USERNAME)s/%(PROJECT_NAME)s/app/conf/uwsgi_stenograph_us.conf /etc/uwsgi/apps-enabled/%(PROJECT_NAME)s_stenograph_us.ini"}, - {"action": "sudo", "params": - "ln -s /home/%(SERVER_USERNAME)s/%(PROJECT_NAME)s/app/conf/uwsgi_transcribe_ninja.conf /etc/uwsgi/apps-enabled/%(PROJECT_NAME)s_transcribe_ninja.ini"}, + "ln -s /home/%(SERVER_USERNAME)s/%(PROJECT_NAME)s/app/conf/uwsgi_zuykov.conf /etc/uwsgi/apps-enabled/%(PROJECT_NAME)s_zuykov.ini"}, ] reload_uwsgi = [ - {"action": "put_template", "params": {"template": "%(BASE_DIR)s/app/conf/uwsgi_stenograph_us.conf.template", - "destination": "/home/%(SERVER_USERNAME)s/%(PROJECT_NAME)s/app/conf/uwsgi_stenograph_us.conf"}}, - {"action": "put_template", "params": {"template": "%(BASE_DIR)s/app/conf/uwsgi_transcribe_ninja.conf.template", - "destination": "/home/%(SERVER_USERNAME)s/%(PROJECT_NAME)s/app/conf/uwsgi_transcribe_ninja.conf"}}, + {"action": "put_template", "params": {"template": "%(BASE_DIR)s/app/conf/uwsgi_zuykov.conf.template", + "destination": "/home/%(SERVER_USERNAME)s/%(PROJECT_NAME)s/app/conf/uwsgi_zuykov.conf"}}, + {"action": "sudo", "params": "service uwsgi restart", "message": "Restarting uwsgi"}, ] diff --git a/app/deploy/zuykov.py b/app/deploy/zuykov.py index c0c2fc5..53878cb 100644 --- a/app/deploy/zuykov.py +++ b/app/deploy/zuykov.py @@ -44,9 +44,10 @@ class ZuykovWebSystem(Node): class Application(DjangoDeployment): def configure_base(self): self._configure_instance(tasks.common_configure) + self._configure_instance(tasks.web_configure) - def hello(self): - self.hosts.run('echo hello world') + def restart(self): + self._configure_instance(tasks.create_uwsgi_links + tasks.reload_nginx + tasks.reload_uwsgi) def update(self): self.checkout() diff --git a/app/settings.py b/app/settings.py index afc5b77..2541bf2 100644 --- a/app/settings.py +++ b/app/settings.py @@ -52,9 +52,9 @@ GIT_KEY_NAME = 'github_rsa' -ROOT_URLCONF = 'zsite.urls' +ROOT_URLCONF = 'app.urls' -WSGI_APPLICATION = 'zsite.wsgi.application' +WSGI_APPLICATION = 'app.wsgi.application' # Database @@ -298,6 +298,9 @@ DATABASES = { {'ENGINE': 'django.db.backends.mysql', 'NAME': u'zuykov', 'HOST': u'localhost', 'USER': u'root', 'PASSWORD': '', 'PORT': ''} } +MYSQL_USER = DATABASES['default']['USER'] +MYSQL_PASSWORD = DATABASES['default']['PASSWORD'] + MIGRATION_MODULES = { 'djangocms_column': 'djangocms_column.migrations_django', 'djangocms_flash': 'djangocms_flash.migrations_django', diff --git a/requirements.txt b/requirements.txt index abd5f2d..e2f057a 100644 --- a/requirements.txt +++ b/requirements.txt @@ -21,4 +21,13 @@ django-pipeline django_debug_toolbar djangocms-forms django-multipleformwizard +newrelic +django-reversion +cmsplugin-filer +django-taggit +django-taggit-autosuggests +django-meta +django-meta-mixin +django-admin-enhancer +aldryn-apphooks-config #export C_INCLUDE_PATH=/usr/local/Cellar/libxml2/2.9.2/include/libxml2:$C_INCLUDE_PATH \ No newline at end of file diff --git a/zsite/static/imgs/bill.png b/zsite/static/imgs/bill.png new file mode 100644 index 0000000000000000000000000000000000000000..4163a0893253b811ac84b59347d8744c5ec666f6 GIT binary patch literal 9610 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 literal 0 HcmV?d00001 diff --git a/zsite/static/less/main.less b/zsite/static/less/main.less index bf93cb6..7723005 100644 --- a/zsite/static/less/main.less +++ b/zsite/static/less/main.less @@ -20,6 +20,10 @@ @import 'consultation.less'; +@import 'theory.less'; + +@import 'service.less'; + @import url(http://fonts.googleapis.com/css?family=PT+Sans:400,700,400italic,700italic|Roboto+Slab:700,400&subset=cyrillic-ext,latin); diff --git a/zsite/static/less/service.less b/zsite/static/less/service.less new file mode 100644 index 0000000..4a8765b --- /dev/null +++ b/zsite/static/less/service.less @@ -0,0 +1,14 @@ +.service-timeline { + h4 { + margin: 0 + } + + p { + opacity: .8; + } + + .arrow { + font-size: 33px; + vertical-align: text-bottom; + } +} \ No newline at end of file diff --git a/zsite/static/less/theory.less b/zsite/static/less/theory.less new file mode 100644 index 0000000..2e064ce --- /dev/null +++ b/zsite/static/less/theory.less @@ -0,0 +1,18 @@ +.theory { + background: #FFF0D8; + + padding: 5px 18px; + + h5 { + padding-left: 22px; + font-weight: 700; + } + + ul { + font-size: 12px; + + li { + margin-bottom: 5px; + } + } +} \ No newline at end of file diff --git a/zsite/templates/base.html b/zsite/templates/base.html index c8af3ea..b84e504 100644 --- a/zsite/templates/base.html +++ b/zsite/templates/base.html @@ -38,6 +38,8 @@ {% show_menu 0 1 100 100 "menu_header.html" %} + +
{% block content %}{% endblock content %} diff --git a/zsite/templates/form_template/contacts.html b/zsite/templates/form_template/contacts.html new file mode 100644 index 0000000..e47ff14 --- /dev/null +++ b/zsite/templates/form_template/contacts.html @@ -0,0 +1,60 @@ +{% load cms_tags djangocms_forms_tags i18n sekizai_tags staticfiles %} +
+ {% if instance.title %} +

{{ instance.title }}

+ {% endif %} + {% if instance.description %} +
+ {{ instance.description|safe }} +
+ {% endif %} +
+
+ + {% for field in form.visible_fields %} +
+ + {% if field|is_checkbox %} + {{ field }} + {% endif %} + + {% if not field|is_checkbox %} + {{ field }} + {% endif %} + {% if field.help_text %} +
{{ field.help_text|safe }}
+ {% endif %} +
+ {% endfor %} + {% csrf_token %} + {% for hidden in form.hidden_fields %} + {{ hidden }} + {% endfor %} +
+ +
+
+
+ +
+ +{% addtoblock "js" %} + + + +{% endaddtoblock %}