Merge remote-tracking branch 'origin/master'

This commit is contained in:
상희 김 2015-09-09 22:55:54 +02:00
commit 5b7c9584db
19 changed files with 773 additions and 361 deletions

4
.gitignore vendored
View File

@ -19,3 +19,7 @@ static/
\#*#
.\#*
*~*
static/
secret-key

View File

@ -18,7 +18,7 @@ collectstatic:
$(PY?) $(BASEDIR)/manage.py collectstatic
rsync_upload:
rsync -P -rvzc -e "ssh -p $(SSH_PORT)" --exclude dynamicweb/local/local_settings.py --exclude .git --exclude .ropeproject --exclude __pycache__ --exclude *.pyc --exclude *~ --exclude *.psd $(BASEDIR) $(SSH_USER)@$(SSH_HOST):$(SSH_TARGET_DIR) --cvs-exclude
rsync -P -rvzc -e "ssh -p $(SSH_PORT)" --exclude dynamicweb/local/local_settings.py --exclude .git --exclude .ropeproject --exclude __pycache__ --exclude *.pyc --exclude *~ --exclude *.psd $(BASEDIR)/* $(SSH_USER)@$(SSH_HOST):$(SSH_TARGET_DIR) --cvs-exclude
install_debian_packages:
apt-get update && cat $(BASEDIR)/requirements.debian.txt | xargs apt-get install -y --no-install-recommends

View File

@ -1,2 +1,4 @@
Ungleich
ungleich
========
Website for ungleich GmbH

View File

@ -11,7 +11,7 @@
<meta name="description" content="">
<meta name="author" content="">
<title>Digital.Glarus - {% block title %}Welcome{% endblock %}</title>
<title>Digital Glarus - {% block title %}Welcome{% endblock %}</title>
<!-- Bootstrap Core CSS -->
<link href="{% static 'digitalglarus/css/bootstrap.min.css' %}" rel="stylesheet">
@ -43,7 +43,7 @@
<body>
<div class="brand">Digital.Glarus</div>
<div class="brand">Digital Glarus</div>
<div class="address-bar">#1 IT Valley of Switzerland | Luchsingen, 8775 GL Switzerland | From 2015.12.25</div>
<!-- Navigation -->
@ -58,7 +58,7 @@
<span class="icon-bar"></span>
</button>
<!-- navbar-brand is hidden on larger screens, but visible when the menu is collapsed -->
<a class="navbar-brand" href="index.html">digital.Glarus</a>
<a class="navbar-brand" href="index.html">Digital Glarus</a>
</div>
<!-- Collect the nav links, forms, and other content for toggling -->
<div class="collapse navbar-collapse" id="bs-example-navbar-collapse-1">

View File

@ -8,7 +8,7 @@
<div class="col-lg-12">
<hr>
<h2 class="intro-text text-center">Contact
<strong>DIGITAL.GLARUS</strong>
<strong>DIGITAL GLARUS</strong>
</h2>
<hr>
</div>
@ -21,7 +21,7 @@
<strong>+41 (0) 44 534 66 22</strong>
</p>
<p>Email:
<strong><a href="mailto:digital.glarus@ungleich.ch">digital.glarus@ungleich.ch</a></strong>
<strong><a href="mailto:join@digitalglarus.ch">join@digitalglarus.ch</a></strong>
</p>
<p>Address:
<strong>Hauptstrasse 14, 8775 Luchsingen<br>

View File

@ -1,105 +0,0 @@
{% extends "digitalglarus/base.html" %}
{% load staticfiles %}
{% block content %}
<div class="row">
<div class="box">
<div class="col-lg-12 text-center">
<div id="carousel-example-generic" class="carousel slide">
<!-- Indicators --><!-- Wrapper for slides -->
<div class="carousel-inner">
<div class="item active">
<img class="img-responsive img-full" src="{% static 'digitalglarus/img/slide-1.jpg' %}" alt="">
</div>
<div class="item">
<img class="img-responsive img-full" src="{% static 'digitalglarus/img/slide-2.jpg' %}" alt="">
</div>
<div class="item">
<img class="img-responsive img-full" src="{% static 'digitalglarus/img/slide-3.jpg' %}" alt="">
</div>
</div>
<!-- Controls -->
<a class="left carousel-control" href="#carousel-example-generic" data-slide="prev">
<span class="icon-prev"></span>
</a>
<a class="right carousel-control" href="#carousel-example-generic" data-slide="next">
<span class="icon-next"></span>
</a>
</div>
<h2 class="brand-before">
<small>Welcome to</small>
</h2>
<h1 class="brand-name">digital.Glarus</h1>
<hr class="tagline-divider">
<h2>
<small>By
<strong>ungleich gmbh</strong>
</small>
</h2>
</div>
</div>
</div>
<div class="row">
<div class="box">
<div class="col-lg-12">
<hr>
<h2 class="intro-text text-center">Build a tech valley <strong>in the heart of switzerland</strong></h2>
<hr>
<img class="img-responsive img-border img-left" src="{% static 'digitalglarus/img/intro-pic.jpg' %}" alt="">
<hr class="visible-xs">
<p>Digital Glarus, this is how we call the new home for high tech companies. Located south of Zurich, it has unique features you can not find anywhere else in Switzerland.</p>
<p> The combination of beautiful landscape, recreational areas as well as having high speed Internet connections and huge variety of great food offers forms what we call "Digital Glarus".</p>
<p>The valley also knows as "Glarnerland" is featured by many gorgeous, eye-catching buildings from former industrial area.</p>
<p>In fact, Glarnerland may be the valley to contain most well preserved antique houses equipped with fitting high quality old age furniture (those you always look at in expensive shops, but never buy - this is how people live here).</p>
<p>&nbsp;</p>
</div>
</div>
</div>
<div class="row">
<div class="box">
<div class="col-lg-12">
<hr>
<h2 class="intro-text text-center">a new <strong>area</strong>
</h2>
<hr>
<p>While you can imagine that the old factories, many of them being weaving mills, are not business anymore, their heritage suits exactly what the tech society of Switzerland requires: Great and affordable place for computer scientists.</p>
<p>Instead of having the old falling apart, we are thinking of building the new tech centre of Switzerland by converting old, abandoned factory halls into attractive working places.</p>
<p>But what is attractive to a computer scientist? Pizza, Coke and fast Internet? The latter is a still true, though computer scientists in Switzerland are more orientated on living healthy, which is exactly what Glarnerland can provide.</p>
</div>
</div>
</div>
<div class="row">
<div class="box">
<div class="col-lg-12">
<hr>
<h2 class="intro-text text-center">Why would anyone be <strong>interested</strong> in it?</h2>
<hr>
<p>The current de-facto tech centre of Switzerland, Zurich, is overpopulated with an average of less than 0.1% free apartments. Furthermore it is expensive and loud. Although the high concentration of people may be helpful to find customers, most tech companies are making their business in the Internet and are not affected by the change. While you can imagine that the old factories, many of them being weaving mills, are not business anymore, their heritage suits exactly what the tech society of Switzerland requires: Great and affordable place for computer scientists.</p>
<p>In fact development is hampered by the costs companies and developers have to carry, distracting them from the real work they plan to do.</p>
<p>While some investment is required to be attractive to tech companies, given the potential of reuse of infrastructure, the costs are estimated to be low and can be a key factor in the development of the Canton Glarus.</p>
</div>
</div>
</div>
<div class="row">
<div class="box">
<div class="col-lg-12">
<hr>
<h2 class="intro-text text-center">how to <strong>realize</strong></h2>
<hr>
<p>At the moment we at <a href="http://www.ungleich.ch"> ungleich</a> are talking to authorities and  sponsors. It is crucial to build up some basic infrastructure and  attract early adopters. Building a community (<a href=meetup.ch>meetup</a> alike)  can be helpful, but competitive pricing as well as superior infrastructure are crucial for success.</p>
<p>Have you become interested in the project?
<p>Contact us at<br>
<br>
<a href="mailto:digital.glarus@ungleich.ch">digital.glarus@ungleich.ch</a> // <a href="tel:%2B41%20%280%29%2044%20534%2066%2022" value="+41445346622">+41 (0) 44 534 66 22</a>
</p>
</p>
<p>&nbsp;</p>
</div>
</div>
</div>
{% endblock %}

View File

@ -1,214 +0,0 @@
{% load staticfiles %}
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta name="description" content="">
<meta name="author" content="">
<title>Digital.Glarus - {% block title %}Welcome{% endblock %}</title>
<!-- Bootstrap Core CSS -->
<link href="{% static 'digitalglarus/css/bootstrap.min.css' %}" rel="stylesheet">
<!-- Custom CSS -->
<link href="{% static 'digitalglarus/css/business-casual.css' %}" rel="stylesheet">
<!-- Fonts -->
<link href="http://fonts.googleapis.com/css?family=Open+Sans:300italic,400italic,600italic,700italic,800italic,400,300,600,700,800" rel="stylesheet" type="text/css">
<link href="http://fonts.googleapis.com/css?family=Josefin+Slab:100,300,400,600,700,100italic,300italic,400italic,600italic,700italic" rel="stylesheet" type="text/css">
<!-- HTML5 Shim and Respond.js IE8 support of HTML5 elements and media queries -->
<!-- WARNING: Respond.js doesn't work if you view the page via file:// -->
<!--[if lt IE 9]>
<script src="https://oss.maxcdn.com/libs/html5shiv/3.7.0/html5shiv.js"></script>
<script src="https://oss.maxcdn.com/libs/respond.js/1.4.2/respond.min.js"></script>
<![endif]-->
<script>
(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
})(window,document,'script','//www.google-analytics.com/analytics.js','ga');
ga('create', 'UA-62285904-2', 'auto');
ga('send', 'pageview');
</script>
</head>
<body>
<div class="brand">Digital.Glarus</div>
<div class="address-bar">#1 IT Valley of Switzerland | Luchsingen, 8775 GL Switzerland | From 2015.12.25</div>
<!-- Navigation -->
<nav class="navbar navbar-default" role="navigation">
<div class="container">
<!-- Brand and toggle get grouped for better mobile display -->
<div class="navbar-header">
<button type="button" class="navbar-toggle" data-toggle="collapse" data-target="#bs-example-navbar-collapse-1">
<span class="sr-only">Toggle navigation</span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
</button>
<!-- navbar-brand is hidden on larger screens, but visible when the menu is collapsed -->
<a class="navbar-brand" href="index.html">digital.Glarus</a>
</div>
<!-- Collect the nav links, forms, and other content for toggling -->
<div class="collapse navbar-collapse" id="bs-example-navbar-collapse-1">
<ul class="nav navbar-nav">
<li>
<a href="{% url 'digitalglarus:index' %}">Home</a>
</li>
<li>
<a href="{% url 'digitalglarus:index' %}">About</a>
</li>
<li>
<a href="{% url 'digitalglarus:index' %}">Contact</a>
</li>
</ul>
</div>
<!-- /.navbar-collapse -->
</div>
<!-- /.container -->
</nav>
<div class="container">
<div class="row">
<div class="box">
<div class="col-lg-12 text-center">
<div id="carousel-example-generic" class="carousel slide">
<!-- Indicators --><!-- Wrapper for slides -->
<div class="carousel-inner">
<div class="item active">
<img class="img-responsive img-full" src="{% static 'digitalglarus/img/slide-1.jpg' %}" alt="">
</div>
<div class="item">
<img class="img-responsive img-full" src="{% static 'digitalglarus/img/slide-2.jpg' %}" alt="">
</div>
<div class="item">
<img class="img-responsive img-full" src="{% static 'digitalglarus/img/slide-3.jpg' %}" alt="">
</div>
</div>
<!-- Controls -->
<a class="left carousel-control" href="#carousel-example-generic" data-slide="prev">
<span class="icon-prev"></span>
</a>
<a class="right carousel-control" href="#carousel-example-generic" data-slide="next">
<span class="icon-next"></span>
</a>
</div>
<h2 class="brand-before">
<small>Welcome to</small>
</h2>
<h1 class="brand-name">digital.Glarus</h1>
<hr class="tagline-divider">
<h2>
<small>By
<strong>ungleich gmbh</strong>
</small>
</h2>
</div>
</div>
</div>
<div class="row">
<div class="box">
<div class="col-lg-12">
<hr>
<h2 class="intro-text text-center">Build a tech valley <strong>in the heart of switzerland</strong></h2>
<hr>
<img class="img-responsive img-border img-left" src="{% static 'digitalglarus/img/intro-pic.jpg' %}" alt="">
<hr class="visible-xs">
<p>Digital Glarus, this is how we call the new home for high tech companies. Located south of Zurich, it has unique features you can not find anywhere else in Switzerland.</p>
<p> The combination of beautiful landscape, recreational areas as well as having high speed Internet connections and huge variety of great food offers forms what we call "Digital Glarus".</p>
<p>The valley also knows as "Glarnerland" is featured by many gorgeous, eye-catching buildings from former industrial area.</p>
<p>In fact, Glarnerland may be the valley to contain most well preserved antique houses equipped with fitting high quality old age furniture (those you always look at in expensive shops, but never buy - this is how people live here).</p>
<p>&nbsp;</p>
</div>
</div>
</div>
<div class="row">
<div class="box">
<div class="col-lg-12">
<hr>
<h2 class="intro-text text-center">a new <strong>area</strong>
</h2>
<hr>
<p>While you can imagine that the old factories, many of them being weaving mills, are not business anymore, their heritage suits exactly what the tech society of Switzerland requires: Great and affordable place for computer scientists.</p>
<p>Instead of having the old falling apart, we are thinking of building the new tech centre of Switzerland by converting old, abandoned factory halls into attractive working places.</p>
<p>But what is attractive to a computer scientist? Pizza, Coke and fast Internet? The latter is a still true, though computer scientists in Switzerland are more orientated on living healthy, which is exactly what Glarnerland can provide.</p>
</div>
</div>
</div>
<div class="row">
<div class="box">
<div class="col-lg-12">
<hr>
<h2 class="intro-text text-center">Why would anyone be <strong>interested</strong> in it?</h2>
<hr>
<p>The current de-facto tech centre of Switzerland, Zurich, is overpopulated with an average of less than 0.1% free apartments. Furthermore it is expensive and loud. Although the high concentration of people may be helpful to find customers, most tech companies are making their business in the Internet and are not affected by the change. While you can imagine that the old factories, many of them being weaving mills, are not business anymore, their heritage suits exactly what the tech society of Switzerland requires: Great and affordable place for computer scientists.</p>
<p>In fact development is hampered by the costs companies and developers have to carry, distracting them from the real work they plan to do.</p>
<p>While some investment is required to be attractive to tech companies, given the potential of reuse of infrastructure, the costs are estimated to be low and can be a key factor in the development of the Canton Glarus.</p>
</div>
</div>
</div>
<div class="row">
<div class="box">
<div class="col-lg-12">
<hr>
<h2 class="intro-text text-center">how to <strong>realize</strong></h2>
<hr>
<p>At the moment we at <a href="www.ungleich.ch"> ungleich</a> are talking to authorities and  sponsors. It is crucial to build up some basic infrastructure and  attract early adopters. Building a community (<a href=meetup.ch>meetup</a> alike)  can be helpful, but competitive pricing as well as superior infrastructure are crucial for success.</p>
<p>Have you become interested in the project?
<p>Contact us at<br>
<br>
<a href="mailto:digital.glarus@ungleich.ch">digital.glarus@ungleich.ch</a> // <a href="tel:%2B41%20%280%29%2044%20534%2066%2022" value="+41445346622">+41 (0) 44 534 66 22</a>
</p>
</p>
<p>&nbsp;</p>
</div>
</div>
</div>
</div>
<!-- /.container -->
<footer>
<div class="container">
<div class="row">
<div class="col-lg-12 text-center">
<p>Copyright &copy; <a href="http://www.ungleich.ch">ungleich GmbH 2015</a></p>
</div>
</div>
</div>
</footer>
<!-- jQuery -->
<script src="js/jquery.js"></script>
<!-- Bootstrap Core JavaScript -->
<script src="js/bootstrap.min.js"></script>
<!-- Script to Activate the Carousel -->
<script>
$('.carousel').carousel({
interval: 5000 //changes the speed
})
</script>
</body>
</html>

View File

@ -1,23 +0,0 @@
{% extends "base.html" %}
{% if error_message %}<p><strong>{{ error_message }}</strong></p>{% endif %}
<form action="{% url 'digitalglarus:index' %}" method="post">
{% csrf_token %}
{{ form }}
<input type="submit" value="Send Message" />
</form>
{% if message_list %}
<ul>
{% for message in message_list %}
<li><a href="/digital.glarus/{{ message.id }}/">{{ message }}</a></li>
{% endfor %}
</ul>
{% else %}
<p>No messages are available.</p>
{% endif %}

View File

@ -0,0 +1,193 @@
=====================================
Ungleich Hosting WebApp Specification
=====================================
Author: Raul Ascencio
Contact: raul.ascencio@ungleich.ch
Version: 0.1
Date: 2015-06-11
Copyright © ungleich GmbH 2015
-----
Terms
-----
User
The end-user, person/entity who books/use one or more vm's.
Ungleich
The company agents/users the creators and admins ofr the ungleich hosting
webapp.
--------
Overview
--------
Ungleich hosting is a Plataform as a Service (PaaS) for multiple application
stack, offers multiple languages (ruby, python, javascript {node,io}.js),
application servers and databases.
Ungleich hosting let the user focus on being more productive, without having
to worry about the complexities of maintaining a production enviroment.
**This spec is not complete**, in fact it hasn't even be reviewed once, it
probably needs a couple of revisions to be accepted.
What the ungleich plataform offers:
- Stack management.
- Monitoring and alerting.
- High availability.
- Automatic aplication deployment.
- Ready to use stacks.
- Automated Management.
- User Access Management [?].
- Production Ready Services (Postgresql, Memcached, Redis...).
- Backups and redundancy.
- Full management and support for stack-related issues [?]
Avilable stacks:
**Ruby Stack**
- Load balancers:
- HAProxy
- Frameworks:
- Ruby on Rails
- ...
- Web Servers:
- NGINX
- ...
- Application Servers:
- Unicorn
- Passenger
- Puma [?]
- Databases:
- Postgresql
- Mysql [?]
- Mongodb [?]
- Caching:
- Memcached [?]
- Redis (people often use it for other things and it's nice to have) [?]
- Misc:
- Preinstalled gems (sidekiq/resque, )
**Python Stack**
- << Inserts Ruby Stack and replace:
- Application Servers:
- Gunicorn
- uWSGI
- Frameworks:
- Django
- ...
- Misc:
- Celery/Gearman
- ...
**Node Stack**
- << Inserts Ruby Stack and replace:
- Frameworks:
- Express
- Meteor
- Hoodie
- Databases:
- ...
- Couchdb (Hoodie)
- Misc:
- npm
- pm2
- browserify/requirejs/webpack
- ...
Brief summary of how it works:
1. The *User* goes to an Ungleich Hosting website to register.
2. Once logged in, the *User* get asked for his/her billing information to start
booking machines.
3. After the *User* inserts a 'valid' credit card he books a VM.
4. When a VM is booked the *User* is subscribed to a 'plan' that it's related
with the VM specs.
a. User can be asked for a public SSH key, this key can be used to access
to the server.
5. The subscription gets confirmed, *Ugleich* deploy the requested infrastructure
and stack.
6. *User* is notified that the new VM is ready to use.
7. The *User* access the new VM and deploys the Application.
-----------------------
Ungleich Hosting - Goal
-----------------------
As ungleich, we want to offer "Application Hosting" - pre-configured VMs plus
support for the technologies running on them, the VMs should be "clickable"
as in self service mid term.
--------------------------
Ungleich Hosting - Phase 0
--------------------------
This phase will deliver a fully functional webpage for railshosting, without the
capabilities of the 'ungleich hosting app', except from selecting an stack
ordering it by email and the user being subscribed to a plan (billing).
This phase will
Where this phase come from:
+ ...for the moment, it is enough if we generate a mail for every order
+ get rails-hosting.ch running so that somebody can order a VM including
payment
*********
Non Goals
*********
+ The VMs should be "clickable" as in self service.
+ End-User interface to manage their VMs.
************
Requirements
************
#. Feature
Description
1. *Ungleich* provides a service overview page
2. *Ungleich* provides a sign up page for users who want to
try the private beta of the service
3. *Ungleich* let *Users* upload their public SSHs keys
4. *Users* can subscribe to their choosen hosting plan.
5. Notify *Users* when their VMs are ready.
6. *Users* can access to their VMs using the uploaded SSHs keys.
7. *Users* can view their billing history.
8. *Users* are capable of canceling their plans.
9. *Users* are notified every time a new invoice is sucefully charged.
10. *Users* are notified every time their invoices fail to charge.
11. *Users* can add credit cards to their accounts.
12. *Users* can see a detail of every invoice.
13. *Users* can create multiple VMs.
14. *Users* can choose what SSHs keys will use for every VM.
15. *Users* can see the recent history of access to their VMs [?]
16. *Users* can edit their profiles.
17. *Users* can submit tickets to *Ungleich*
18. *Users* can configure DNS settings.
19. *Ungleich* can see the list of *Users*.
20. *Ungleich* can browse the VMs of all *Users*.
21. *Ungleich* is notified everytime an invoice fail to charge.
22. *Ungleich* provide help pages for every section of the site.
*******
Details
*******
...
--------------------------
Ungleich Hosting - Phase 1
--------------------------
This phase will deliver the foundations for most of the ungleich hosting app capabilities.
for the moment, it is enough if we generate a mail for every order

View File

@ -27,15 +27,20 @@ LOGIN_URL = None
LOGOUT_URL = None
LOGIN_REDIRECT_URL = None
# SECURITY WARNING: keep the secret key used in production secret!
SECRET_KEY = 'xlhyv_l5-z6e8_@q6)n0up1a0$5-aad7d)om2t8g$bi6*@q44i'
EMAIL_HOST="localhost"
EMAIL_PORT=25
SECRET_KEY_FILE = os.path.join(BASE_DIR, "secret-key")
with open(SECRET_KEY_FILE, "r") as f:
SECRET_KEY = f.read().strip()
# SECURITY WARNING: don't run with debug turned on in production!
DEBUG = False
ALLOWED_HOSTS = [
".ungleich.ch",
"digital.glarus.ungleich.ch" ]
"digital.glarus.ungleich.ch" ,
]
# Application definition
@ -88,6 +93,7 @@ INSTALLED_APPS = (
'ungleich',
'railshosting',
'digitalglarus',
'djangocms_page_meta',
)
MIDDLEWARE_CLASSES = (
@ -226,7 +232,25 @@ CMS_PLACEHOLDER_CONF = {
}
}
],
}
},
'content': {
'name' : _('Content'),
'default_plugins':[
{
'plugin_type':'TextPlugin',
'values':{'body':'<p></p>'},
},
]
},
'post_content': {
'name' : _('Content'),
'default_plugins':[
{
'plugin_type':'TextPlugin',
'values':{'body':'<p></p>'},
},
]
},
}
CACHES = {
@ -250,8 +274,6 @@ if LOGOUT_URL is None:
if LOGIN_REDIRECT_URL is None:
LOGIN_REDIRECT_URL = APP_ROOT_ENDPOINT
# Static files (CSS, JavaScript, Images)
# https://docs.djangoproject.com/en/1.7/howto/static-files/
@ -319,6 +341,89 @@ TEXT_SAVE_IMAGE_FUNCTION='cmsplugin_filer_image.integrations.ckeditor.create_ima
TEXT_ADDITIONAL_TAGS = ('iframe',)
TEXT_ADDITIONAL_ATTRIBUTES = ('scrolling', 'allowfullscreen', 'frameborder')
USE_X_FORWARDED_HOST = True
# Django Bootstrap - Settings
# Added Configuration for bootstrap static files to load over https.
BOOTSTRAP3 = {
# The URL to the jQuery JavaScript file
'jquery_url': '//code.jquery.com/jquery.min.js',
# The Bootstrap base URL
'base_url': '//maxcdn.bootstrapcdn.com/bootstrap/3.3.4/',
# The complete URL to the Bootstrap CSS file (None means derive it from base_url)
'css_url': None,
# The complete URL to the Bootstrap CSS file (None means no theme)
'theme_url': None,
# The complete URL to the Bootstrap JavaScript file (None means derive it from base_url)
'javascript_url': None,
# Put JavaScript in the HEAD section of the HTML document (only relevant if you use bootstrap3.html)
'javascript_in_head': False,
# Include jQuery with Bootstrap JavaScript (affects django-bootstrap3 template tags)
'include_jquery': False,
# Label class to use in horizontal forms
'horizontal_label_class': 'col-md-3',
# Field class to use in horizontal forms
'horizontal_field_class': 'col-md-9',
# Set HTML required attribute on required fields
'set_required': True,
# Set HTML disabled attribute on disabled fields
'set_disabled': False,
# Set placeholder attributes to label if no placeholder is provided
'set_placeholder': True,
# Class to indicate required (better to set this in your Django form)
'required_css_class': '',
# Class to indicate error (better to set this in your Django form)
'error_css_class': 'has-error',
# Class to indicate success, meaning the field has valid input (better to set this in your Django form)
'success_css_class': 'has-success',
# Renderers (only set these if you have studied the source and understand the inner workings)
'formset_renderers':{
'default': 'bootstrap3.renderers.FormsetRenderer',
},
'form_renderers': {
'default': 'bootstrap3.renderers.FormRenderer',
},
'field_renderers': {
'default': 'bootstrap3.renderers.FieldRenderer',
'inline': 'bootstrap3.renderers.InlineFieldRenderer',
},
}
# djangocms_blog config
BLOG_ENABLE_COMMENTS = False
BLOG_USE_PLACEHOLDER = True
BLOG_IMAGE_THUMBNAIL_SIZE = {'size': '120x120', 'crop': True,'upscale': False}
BLOG_IMAGE_FULL_SIZE = {'size': '640x120', 'crop': True,'upscale': False}
BLOG_PAGINATION = 4
BLOG_LATEST_POSTS = BLOG_PAGINATION
BLOG_POSTS_LIST_TRUNCWORDS_COUNT = 100
BLOG_MULTISITE = True
BLOG_AUTHOR_DEFAULT = True
#django-meta
META_SITE_PROTOCOL = "https"
META_SITE_DOMAIN = "ungleich.ch"
META_SITE_TYPE = "website"
META_SITE_NAME = "ungleich"
META_INCLUDE_KEYWORDS = ["ungleich", "hosting", "switzerland", "Schweiz", "Swiss", "cdist"]
META_USE_SITES = True
try:
from .local.local_settings import *
except ImportError as e:

View File

@ -0,0 +1,6 @@
@charset "UTF-8";
/* CSS Document */
.intro-header {
background: url(../img/django-intro-bg.png) no-repeat center center;
}

View File

@ -0,0 +1,387 @@
{% load staticfiles %}
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta name="description" content="">
<meta name="author" content="">
<title>{% block title %} {%endblock%} as easy as possible</title>
<!-- Bootstrap Core CSS -->
<link href="{% static 'railshosting/css/bootstrap.min.css' %}" rel="stylesheet">
<!-- Custom CSS -->
<link href="{% static 'railshosting/css/landing-page.css' %}" rel="stylesheet">
<!-- Custom Fonts -->
<link href='http://fonts.googleapis.com/css?family=Raleway' rel='stylesheet' type='text/css'>
<link href="{% static 'railshosting/font-awesome/css/font-awesome.min.css' %}" rel="stylesheet" type="text/css">
<link href="http://fonts.googleapis.com/css?family=Lato:300,400,700,300italic,400italic,700italic" rel="stylesheet" type="text/css">
<link rel="shortcut icon" href="{% static 'railshosting/img/favicon.ico' %}" type="image/x-icon" />
<!-- HTML5 Shim and Respond.js IE8 support of HTML5 elements and media queries -->
<!-- WARNING: Respond.js doesn't work if you view the page via file:// -->
<!--[if lt IE 9]>
<script src="https://oss.maxcdn.com/libs/html5shiv/3.7.0/html5shiv.js"></script>
<script src="https://oss.maxcdn.com/libs/respond.js/1.4.2/respond.min.js"></script>
<![endif]-->
{% block customcss %} {%endblock%}
<script>
(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
})(window,document,'script','//www.google-analytics.com/analytics.js','ga');
ga('create', 'UA-62285904-5', 'auto');
ga('send', 'pageview');
</script>
</head>
<body>
<!-- Navigation -->
<nav class="navbar navbar-default navbar-fixed-top topnav" role="navigation">
<div class="container topnav">
<!-- Brand and toggle get grouped for better mobile display -->
<div class="navbar-header">
<button type="button" class="navbar-toggle" data-toggle="collapse" data-target="#bs-example-navbar-collapse-1">
<span class="sr-only">Toggle navigation</span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
</button>
<a class="navbar-brand topnav" href="#"><img src="{% static 'railshosting/img/logo_black.svg' %}"></a>
</div>
<!-- Collect the nav links, forms, and other content for toggling -->
<div class="collapse navbar-collapse" id="bs-example-navbar-collapse-1">
<ul class="nav navbar-nav navbar-right">
<li>
<a href="#how">How it works</a>
</li>
<li>
<a href="#your">Your infrastructure</a>
</li>
<li>
<a href="#our">Our inftrastructure</a>
</li>
<li>
<a href="#price">Pricing</a>
</li>
<li>
<a href="#contact">Contact</a>
</li>
</ul>
</div>
<!-- /.navbar-collapse -->
</div>
<!-- /.container -->
</nav>
<!-- Header -->
<a name="about"></a>
<div class="intro-header">
<div class="container">
<div class="row">
<div class="col-lg-12">
<div class="intro-message">
<img class="responsive" src="{% static 'railshosting/img/Beta.png' %}">
<h1>{{ domain }}</h1>
<h3>{{ hosting_long }} as easy as possible</h3>
<hr class="intro-divider">
<ul class="list-inline intro-social-buttons">
<li>
<a href="#howitworks" class="btn btn-default btn-lg"><i class="#Services"></i> <span class="network-name">how it works</span></a>
</li>
<li>
<a href="#own" class="btn btn-default btn-lg page-scroll"><span class="network-name">Let me start</span></a>
</li>
</ul>
</div>
</div>
</div>
</div>
<!-- /.container -->
</div>
<!-- /.intro-header -->
<!-- Page Content -->
<a name="how"></a>
<div class="content-section-b">
<div class="container">
<div class="row">
<div class="col-lg-5 col-lg-offset-1 col-sm-push-6 col-sm-6">
<hr class="section-heading-spacer">
<div class="clearfix"></div>
<h2 class="section-heading">How it works : </h2> <ul class="fa-ul">
{% block specification %}
{% endblock %}
</ul>
</div>
<div class="col-lg-5 col-sm-pull-6 col-sm-6">
<img class="img-responsive" src="{% static 'railshosting/img/how3.png' %}" alt="">
</div>
</div>
</div>
<!-- /.container -->
<!-- /.option 1 -->
</div>
<a name="your"></a>
<div class="content-section-a" id="own">
<div class="container">
<div class="row">
<div class="col-lg-5 col-sm-6">
<hr class="section-heading-spacer">
<div class="clearfix"></div>
<h2 class="section-heading"> Option 1 : Your own infrastructure</h2>
<p class="lead">We configure your own infrastructure for {{ hosting_long }}. Keep the comfort and safety of being at your home, while we set things up for you.</p>
</div>
<div class="col-lg-5 col-lg-offset-2 col-sm-6">
<img class="img-responsive" src="{% static 'railshosting/img/home.png' %}" alt="">
</div>
</div>
</div>
<!-- /.container -->
</div>
<!-- /.option 2 -->
<!-- /.content-section-a -->
<!-- / pricing -->
<a name="our"></a>
<div class="content-section-b">
<div class="container">
<div class="row">
<div class="col-lg-5 col-lg-offset-1 col-sm-push-6 col-sm-6">
<hr class="section-heading-spacer">
<div class="clearfix"></div>
<h2 class="section-heading">Option 2 : Our infrastructure</h2>
<p class="lead">We take care of everything for you! You don't need your infrastructure. We give you everything you need in {{ hosting_long }}ls hosting. Full root access, 24x7 support.</p>
</div>
<div class="col-lg-5 col-sm-pull-6 col-sm-6">
<img class="img-responsive" src="{% static 'railshosting/img/dog.png' %}" alt="">
</div>
</div>
</div>
<!-- /.container -->
</div>
<!-- /.content-section-b -->
<a name="price"></a>
<div class="content-section-a">
<div class="container">
<div class="row">
<div class="col-lg-5 col-sm-6">
<hr class="section-heading-spacer">
<div class="clearfix"></div>
<h2 class="section-heading">Hosting Price Samples</h2>
<p class="lead">Here are samples of our {{ hosting_long }} hosting offers, suited for different projects. Our offer examples come in different size, speed, and storage. </p>
</div>
<!-- Title -->
<div class="row">
<div class="col-lg-12"></div>
</div>
<!-- /.row -->
<!-- Page Features -->
<div class="row text-center">
<div class="col-md-3 col-sm-6 hero-feature">
<div class="thumbnail">
<img class="relsonsive" src="{% static 'railshosting/img/economy.jpg' %}" alt="">
<div class="caption">
<h3>Economy </h3>
<p>Suited for smaller applications </p>
<p>1 core, </p>
<p>1 GiB RAM, </p>
<p>10 GiB system image (25 CHF)</p>
<p>
<a href="#" class="btn btn-primary">Buy Now!</a> <a href="#" class="btn btn-default">More Info</a> </p>
</div>
</div>
</div>
<div class="col-md-3 col-sm-6 hero-feature">
<div class="thumbnail">
<img class="relsonsive" src="{% static 'railshosting/img/standardroom.jpg' %}" alt="">
<div class="caption">
<h3>Standard</h3>
<p>Suited for standard {{ hosting_long }} applications</p>
<p>1 core, </p>
<p>2 GiB RAM,</p>
<p> 10 GiB system image (30 CHF)</p>
<p>
<a href="#" class="btn btn-primary">Buy Now!</a> <a href="#" class="btn btn-default">More Info</a>
</p>
</div>
</div>
</div>
<div class="col-md-3 col-sm-6 hero-feature">
<div class="thumbnail">
<img class="reponsive" src="{% static 'railshosting/img/deluxeroom.jpg' %}" alt="">
<div class="caption">
<h3>Deluxe</h3>
<p>Suited for performance critical project</p>
<p>2 cores,</p>
<p> 4 GiB Ram, </p>
<p>10 GiB system image (50 CHF) </p>
<p>
<a href="#" class="btn btn-primary">Buy Now!</a> <a href="#" class="btn btn-default">More Info</a> </p>
</div>
</div>
</div>
<div class="col-md-3 col-sm-6 hero-feature">
<div class="thumbnail">
<img class="responsive" src="{% static 'railshosting/img/presidentialroom.jpg' %}" alt="">
<div class="caption">
<h3>Presidential Premium</h3>
<p> Suited for performance critical &amp; </p>
<p>high storage demand projects</p>
<p>4 Cores, 8 GiB RAM, 10 GiB System image, </p>
<p>100 GiB Data image (190 CHF)</p>
<p>
<a href="#" class="btn btn-primary">Buy Now!</a> <a href="#" class="btn btn-default">More Info</a>
</p>
</div>
</div>
</div>
</div>
<!-- /.row -->
</div>
</div>
<!-- /.container -->
</div>
<!-- Configure -->
<a name="about"></a>
<div class="intro-header-1">
<div class="container">
<div class="row">
<div class="col-lg-12">
<div class="intro-message">
<h1>Let me try!</h1>
<p>&nbsp;</p>
<p>&nbsp;</p>
{% if error_message %}<p><strong>{{ error_message }}</strong></p>{% endif %}
{{ form.non_field_errors }}
{{ form.email.errors }}
<form action="{% url 'railshosting:index' %}" method="post" role="form" class="form-inline">
{% csrf_token %}
<div class="form-group">
<label class="sr-only" for="email">Email address</label>
<input type="email" name="email" class="form-control" id="id_email" placeholder="Enter email">
</div>
<button type="submit" class="btn btn-default">Request Beta Access</button>
</form>
</ul>
</div>
</div>
</div>
</div>
<!-- /.container -->
</div>
<!-- /.content-section-a -->
<!-- / contact section -->
<a name="contact"></a>
<div class="banner">
<div class="container">
<div class="row">
<div class="col-lg-6">
<h2>QUESTIONS? </h2>
<h2>CONTACT US! </h2>
<h3>ungleich GmbH </h3>
<p><i class="fa fa-envelope-o"></i> {{ email }}</p>
<p>14 Hauptstrasse Luchsingen 8775</p>
<p>Switzerland</p>
<button type="button" class="btn btn-default">
<a href="https://twitter.com/ungleich">
<i class="fa fa-twitter fa-fw"></i><span class="network-name">Twitter</span></a>
</button>
<button type="button" class="btn btn-default">
<a href="https://github.com/ungleich"><i class="fa fa-github fa-fw"></i><span class="network-name">Github</span></a></button>
</div>
</div>
</div>
<!-- /.container -->
</div>
<!-- /.banner -->
<!-- Footer -->
<footer>
<div class="container">
<div class="row">
<div class="col-lg-12">
<ul class="list-inline">
<li>
<a href="#">Home</a>
</li>
<li class="footer-menu-divider">&sdot;</li>
<li>
<a href="#about">How it works</a></li>
<li class="footer-menu-divider">&sdot;</li>
<li>
<a href="#about">Your infrastructure</a></li>
<li>&sdot;</li>
<li>
<a href="#about">Our infrastructure</a></li>
<li class="footer-menu-divider">&sdot;</li>
<li>
<a href="#services">Pricing</a>
</li>
<li class="footer-menu-divider">&sdot;</li>
<li>
<a href="#contact">Contact</a>
</li>
</ul>
<p class="copyright text-muted small">Copyright &copy; ungleich GmbH 2015. All Rights Reserved</p>
</div>
</div>
</div>
</footer>
<!-- jQuery -->
<script src="{% static 'railshosting/js/jquery.js' %}"></script>
<!-- Bootstrap Core JavaScript -->
<script src="{% static 'railshosting/js/bootstrap.min.js' %}"></script>
</body>
</html>

View File

@ -0,0 +1,18 @@
{% extends "railshosting/base.html" %}
{% load staticfiles %}
{% block title %}django hosting.ch - django hosting{%endblock%}
{%block customcss %}
<link href="{% static 'railshosting/css/djangohosting.css' %}" rel="stylesheet">
{%endblock%}
{%block specification %}
<li><i class="fa-li fa fa-check-square-o fa-lg"></i>
<p class="lead">Ubuntu 14.04 as the operating system, full root access!</p>
</li>
<li><i class="fa-li fa fa-check-square-o fa-lg"></i><p class="lead">nginx as the frontend Server (optional with SSL Support)</p></li>
<li><i class="fa-li fa fa-check-square-o fa-lg"></i><p class="lead">uwsgi to have your application talk to nginx and vice versa
<li><i class="fa-li fa fa-check-square-o fa-lg"></i><p class="lead">PostgreSQL as the database</p>
</li>
{%endblock%}

View File

@ -5,4 +5,5 @@ from . import views
urlpatterns = [
url(r'^$', views.index, name='index'),
url(r'beta$', views.beta, name='beta'),
url(r'djangohosting$', views.djangohosting, name='djangohosting'),
]

View File

@ -29,5 +29,28 @@ def index(request):
return render(request, 'railshosting/index.html', context)
def djangohosting(request):
context = {}
context["hosting"]="django"
context["hosting_long"]="Django"
context["domain"]="django-hosting.ch"
context["google_analytics"]="the right id"
context["email"]="info@django-hosting.ch"
return render(request, 'railshosting/django.html', context)
def railshosting(request):
context = {}
context["hosting"]="rails"
context["hosting_long"]="Ruby On Rails"
context["domain"]="rails-hosting.ch"
context["google_analytics"]="the right id"
context["email"]="info@rails-hosting.ch"
return render(request, 'railshosting/rails.html', context)
def beta(request):
return render(request, 'railshosting/beta.html')

View File

@ -50,3 +50,6 @@ circus-web
chaussette
meinheld
gevent
# djangocms-page-meta
djangocms-page-meta

View File

@ -45,10 +45,11 @@ djangocms-table==1.2
cmsplugin-filer==0.10.1
# production
circus==0.11.1
-e git+git@github.com:circus-tent/circus.git@dfdb72baf87fbd03941f730d1ef05f3d5b8e91e9#egg=circus-master
circus-web==0.5
chaussette==1.2
meinheld==0.5.7
gevent==1.0.2
## The following requirements were added by pip freeze:
aldryn-blog==0.4.6
aldryn-boilerplates==0.7

View File

@ -1,13 +1,18 @@
{% load cms_tags menu_tags sekizai_tags staticfiles bootstrap3 %}
<!doctype html>
<html>
<head>
<title>{% page_attribute "page_title" %}</title>
<title>
{% block title %}
{% page_attribute "page_title" %}
{% endblock %}
</title>
{% addtoblock "external-css" %}
{% bootstrap_css %}
<link href="http://maxcdn.bootstrapcdn.com/font-awesome/4.1.0/css/font-awesome.min.css" rel="stylesheet" type="text/css">
<link href='http://fonts.googleapis.com/css?family=Lora:400,700,400italic,700italic' rel='stylesheet' type='text/css'>
<link href='http://fonts.googleapis.com/css?family=Open+Sans:300italic,400italic,600italic,700italic,800italic,400,300,600,700,800'
<link href='//maxcdn.bootstrapcdn.com/font-awesome/4.1.0/css/font-awesome.min.css' rel="stylesheet" type="text/css">
<link href='//fonts.googleapis.com/css?family=Lora:400,700,400italic,700italic' rel='stylesheet' type='text/css'>
<link href='//fonts.googleapis.com/css?family=Open+Sans:300italic,400italic,600italic,700italic,800italic,400,300,600,700,800'
rel='stylesheet' type='text/css'>
<!-- HTML5 Shim and Respond.js IE8 support of HTML5 elements and media queries -->
@ -23,6 +28,12 @@
rel="stylesheet" medial="all" />
{% endaddtoblock %}
{% block meta %}
<meta charset="UTF-8">
<meta name="description" content="{% page_attribute 'meta_description' %}">
{% include 'meta.html' %}
{% endblock %}
{% render_block "external-css" %}
{% render_block "css" postprocessor "compressor.contrib.sekizai.compress" %}
</head>

View File

@ -5,7 +5,7 @@
{% block meta_description %}{{ post.meta_description }}{% endblock meta_description %}
{% block meta_keywords %}{{ post.meta_keywords }}{% endblock meta_keywords %}
{% block canonical_url %}<link rel="canonical" href="{{ SITE.domain }}{{ view.get_view_url }}"/>{% endblock canonical_url %}
{% block title %}{{ post.get_title }}{% endblock %}
{% block title %}{% page_attribute "page_title" %} - {{ post.get_title }}{% endblock %}
<!-- page header -->
{% block base_header %}
{% include "djangocms_blog/_header_post_detail.html" %}