You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@allura.apache.org by je...@apache.org on 2015/05/30 14:39:07 UTC

[04/14] allura git commit: [#7806] ticket:773 Basic docker containers for Allura web and mongo

[#7806] ticket:773 Basic docker containers for Allura web and mongo


Project: http://git-wip-us.apache.org/repos/asf/allura/repo
Commit: http://git-wip-us.apache.org/repos/asf/allura/commit/740bd700
Tree: http://git-wip-us.apache.org/repos/asf/allura/tree/740bd700
Diff: http://git-wip-us.apache.org/repos/asf/allura/diff/740bd700

Branch: refs/heads/ib/7806
Commit: 740bd7007c696b17aff3fd055b66d3bd22f628ad
Parents: 7579435
Author: Igor Bondarenko <je...@gmail.com>
Authored: Thu May 21 15:03:35 2015 +0300
Committer: Igor Bondarenko <je...@gmail.com>
Committed: Sat May 30 11:17:16 2015 +0300

----------------------------------------------------------------------
 Allura/docker-dev.ini | 588 +++++++++++++++++++++++++++++++++++++++++++++
 Dockerfile            |  18 ++
 docker-compose.yml    |  16 ++
 3 files changed, 622 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/allura/blob/740bd700/Allura/docker-dev.ini
----------------------------------------------------------------------
diff --git a/Allura/docker-dev.ini b/Allura/docker-dev.ini
new file mode 100644
index 0000000..0343dd3
--- /dev/null
+++ b/Allura/docker-dev.ini
@@ -0,0 +1,588 @@
+;       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.
+
+
+;
+; Allura configuration
+;
+; Default config values are shown in this file.
+; Commented-out configurations are examples that you can use if you want.
+;
+; Logging configuration is at the end of the file (starting at [loggers])
+;
+; There are many settings you should change for your site (name, domain, secret keys, etc)
+; More settings should be changed for good performance in a production site (no autoreload, no debugging, etc)
+;
+; You may copy this file to make a new configuration file (e.g. production.ini)
+; Or inherit from this file by starting your .ini file like this:
+;    [app:main]
+;    use = config:development.ini#main
+; Then just use the new file name instead of development.ini for any paster commands you run.
+
+
+[DEFAULT]
+; this section is for a few settings that are shared with error handling middleware
+
+; WARNING: *THE LINE BELOW MUST BE CHANGED ON A PRODUCTION ENVIRONMENT*
+; Debug mode will enable the interactive debugging tool, allowing ANYONE to
+; execute malicious code after an exception is raised.
+debug = true
+; If you want to receive an email for every unhandled HTTP 500 error, set your email address here:
+;email_to = you@yourdomain.com
+error_email_from = paste@localhost
+
+; SMTP settings for outgoing mail
+smtp_tls = false
+smtp_ssl = false
+;smtp_user = some_user
+;smtp_password = some_password
+smtp_timeout = 10
+smtp_server = localhost
+smtp_port = 8826
+; Reply-To and From address often used in email notifications:
+forgemail.return_path = noreply@localhost
+
+
+;
+; Settings for `paster serve` command
+;
+[server:main]
+use = egg:Paste#http
+host = 0.0.0.0
+port = 8080
+
+
+;
+; The main allura settings
+;
+[app:main]
+use = egg:Allura
+full_stack = true
+
+; Change this to your website's name
+site_name = Allura
+; Change these to your website's domain
+domain = localhost
+; Change this to your website's full URL
+base_url = http://localhost:8080
+; This should be the same as base_url
+forgemail.url = http://localhost:8080
+
+; Used to uniquify references to static resources, can be a timestamp or any unique value
+; This should be updated each time you deploy (or make significant changes, like new tools, new css)
+build_key=1276635823
+
+; Used by Turbogears / Pylons in some cases.  Not particularly relevant for Allura.
+cache_dir = %(here)s/data
+
+; Cache Neighborhood objects for N seconds (speeds up requests).
+; Set to 0 to disable (the default).
+;neighborhood.cache.duration = 0
+
+; Template cache settings
+; See http://jinja.pocoo.org/docs/api/#jinja2.Environment
+jinja_cache_size = -1
+;jinja_bytecode_cache_type = filesystem
+;jinja_bytecode_cache_type = memcached
+;memcached_host =
+
+; Docs at http://beaker.readthedocs.org/en/latest/configuration.html#session-options
+; and http://beaker.readthedocs.org/en/latest/modules/session.html#beaker.session.CookieSession
+beaker.session.key = allura
+beaker.session.type = cookie
+beaker.session.httponly = true
+; set this to true if you use HTTPS.  If you use force_ssl.logged_in, this will be set automatically when logged in and not when not.
+beaker.session.secure = false
+; CHANGE THIS VALUE FOR YOUR SITE
+beaker.session.validate_key = 714bfe3612c42390726f
+
+; Google Analytics account for tracking
+;ga.account = UA-XXXXX-X
+
+; Project registration system.  Only local is available, unless you write a custom one for custom integration.
+registration.method = local
+theme = allura
+
+; For LDAP see https://forge-allura.apache.org/docs/getting_started/installation.html#using-ldap
+;auth.method = ldap
+auth.method = local
+auth.remember_for = 365  ; in days, for the "remember me" checkbox on login
+
+; Customize login/logout URLs only if you have some custom authentication set up.
+auth.login_url = /auth/
+auth.logout_url = /auth/logout
+; the login fragement URL shows just the form, not a whole page.  It is used within a login overlay on some pages
+auth.login_fragment_url = /auth/login_fragment/
+auth.post_logout_url = /
+
+auth.min_password_len = 6
+auth.max_password_len = 30
+
+; password expiration options (disabled if neither is set)
+;auth.pwdexpire.days = 1
+;auth.pwdexpire.before = 1401949912  ; unix timestamp
+
+; if using LDAP, also run `pip install python-ldap` in your Allura environment
+
+auth.ldap.server = ldaps://localhost/
+auth.ldap.suffix = ou=people,dc=localdomain
+auth.ldap.admin_dn = cn=admin,dc=localdomain
+auth.ldap.admin_password = secret
+auth.ldap.schroot_name = scm
+auth.ldap.use_schroot = false
+auth.ldap.password.algorithm = 6
+auth.ldap.password.rounds = 6000
+auth.ldap.password.salt_len = 16
+; "autoregister" allows users to log in to Allura with an existing LDAP account
+; If using ldap, with autoregister, you should also set "allow_user_registration"
+; to false below.
+; Set "autoregister" to false to require user to register in Allura to create
+; the LDAP record and Allura record for the user.
+auth.ldap.autoregister = true
+
+auth.allow_user_registration = true
+auth.allow_user_to_disable_account = true
+auth.allow_edit_prefs = true
+auth.allow_password_change = true
+auth.allow_upload_ssh_key = false
+auth.allow_user_messages_config = true
+auth.allow_birth_date = true
+auth.allow_non_primary_email_password_reset = true
+auth.require_email_addr = true
+; List of social network options to use on user account settings
+socialnetworks = Facebook, Linkedin, Twitter, Google+
+
+; In seconds
+auth.recovery_hash_expiry_period = 600
+
+user_prefs_storage.method = local
+; user_prefs_storage.method = ldap
+; If using ldap, you can specify which fields to use for a preference.
+; Any fields not specified here will be stored locally in mongo
+user_prefs_storage.ldap.fields.display_name = cn
+
+; Limit the number of emails a user can claim.
+user_prefs.maximum_claimed_emails = 20
+
+; Control the order of sections on the user profile page
+;user_profile_sections.order = activity, personal-data, skills
+
+; Site admins will be the same as the admins of this project:
+site_admin_project = allura
+site_admin_project_nbhd = Projects
+
+; Spam filtering service: mollom or akismet
+;spam.method = akismet
+; for akismet:
+;spam.key =
+; for mollom:
+;spam.public_key =
+;spam.private_key =
+
+; Webhook timeout in seconds
+webhook.timeout = 30
+; List of pauses between retries, if hook fails (in seconds)
+webhook.retry = 60 120 240
+; Limit rate of webhook firing (in seconds, default = 30)
+; Option format: webhook.<hook type>.limit,
+; all '-' in hook type must be changed to '_'
+; e.g. for repo-push webhook:
+webhook.repo_push.limit = 30
+; Limit max number of hooks that can be created for given project/app
+; Option name format: same as above.
+; Value format: json dict, where keys are app names (as appears in
+; `WebhookSender.triggered_by`) and values are actual limits (default=3), e.g.:
+webhook.repo_push.max_hooks = {"git": 3, "hg": 3, "svn": 3}
+
+; Additional fields for admin project/user search
+; Note: whitespace after comma is important!
+;search.project.additional_search_fields = private, url, title
+;search.user.additional_search_fields = email_addresses
+
+; Additional fields to show in the result of admin project/user search
+; Note: whitespace after comma is important!
+;search.project.additional_display_fields = private, url, title
+;search.user.additional_display_fields = email_addresses
+
+; To make all pages use ssl:   (also set beaker.session.secure above)
+;force_ssl.pattern = .
+; To use ssl if and only if a user is logged in:
+;force_ssl.logged_in = true
+; If you set force_ssl.logged_in, you probably want some URLs to be ssl when logged out:
+;force_ssl.pattern = ^/auth|^/[a-z0-9-]+/import_project/  ; import_project uses a login overlay
+; And to permit some URLs to be accessed over http anyway:
+;no_redirect.pattern = ^/nf/\d+/_(ew|static)_/|^/rest/|^/nf/tool_icon_css|^/auth/refresh_repo
+
+
+; Set the locations of some static resources.  ("ew" stands for EasyWidgets library)
+;  script_name is the path that is handled by the application
+;  url_base is the prefix that references to the static resources should have
+; If you use a CDN, put your CDN prefix in the url_base values
+ew.script_name = /nf/%(build_key)s/_ew_/
+ew.url_base = /nf/%(build_key)s/_ew_/
+static.script_name = /nf/%(build_key)s/_static_/
+static.url_base = /nf/%(build_key)s/_static_/
+
+; Expires header for "static" resources served through allura (e.g. icons, attachments, /nf/tool_icon_css)
+files_expires_header_secs = 1209600 ; 2 weeks
+
+ew.extra_headers = [ ('Access-Control-Allow-Origin', '*') ]
+
+; If your environment (e.g. behind a server-side proxy) needs to look at an http header to get the actual remote addr
+;ip_address_header = X-Forwarded-For
+
+; SCM settings for local development
+scm.host.ro.git = /srv/git$path
+scm.host.rw.git = /srv/git$path
+; remote access varies by configuration.  If you are using a vagrant VM, this should work:
+;scm.host.rw.git = ssh://vagrant@localhost:2222/srv/git$path
+scm.host.ro.hg = /srv/hg$path
+scm.host.rw.hg = /srv/hg$path
+scm.host.ro.svn = file:///srv/svn$path/
+scm.host.rw.svn = file:///srv/svn$path/
+
+; SCM settings for chroot + ldap configuration.  See Allura/docs/getting_started/scm_host.rst
+;scm.host.ro.git = git://git.localhost$path
+;scm.host.rw.git = ssh://$username@localhost:8022/scm-repo$path
+;scm.host.ro.hg = http://hg.localhost$path
+;scm.host.rw.hg = ssh://$username@localhost:8022/scm-repo$path
+;scm.host.ro.svn = http://svn.localhost$path/
+;scm.host.rw.svn = svn+ssh://localhost:8022/scm-repo$path/
+
+; SCM settings for https (sorry no docs for setting these up)
+; these settings are currently required by the template, no matter what
+scm.host.https.git = https://$username@localhost:8022/scm-repo$path
+scm.host.https_anon.git = https://localhost:8022/scm-repo$path
+scm.host.https.hg = https://$username@localhost:8022/scm-repo$path
+scm.host.https_anon.hg = https://localhost:8022/scm-repo$path
+scm.host.https.svn = https://localhost:8022/scm-repo$path/
+scm.host.https_anon.svn = https://localhost:8022/scm-repo$path/
+
+scm.clone.git = git clone $source_url $dest_path
+scm.clone.hg = hg clone $source_url $dest_path
+scm.clone.ro.svn = svn checkout $source_url $dest_path
+scm.clone.https_anon.svn = svn checkout $source_url $dest_path
+scm.clone.svn = svn checkout --username=$username $source_url $dest_path
+
+scm.repos.root = /srv
+scm.repos.tarball.enable = false
+scm.repos.tarball.root = /usr/share/nginx/www/
+scm.repos.tarball.url_prefix = http://localhost/
+scm.repos.tarball.zip_binary = /usr/bin/zip
+
+; SCM imports (currently just SVN) will retry if it fails
+; You can control the number of tries and delay between tries here:
+scm.import.retry_count = 50
+scm.import.retry_sleep_secs = 5
+
+; One-click merge is enabled by default, but can be turned off on for each type of repo
+scm.merge.git.disabled = false
+scm.merge.hg.disabled = false
+
+
+; bulk_export_enabled = true
+; If you keep bulk_export_enabled, you should set up your server to securely share bulk_export_path with users somehow
+bulk_export_path = /tmp/bulk_export/{nbhd}/{project}
+bulk_export_filename = {project}-backup-{date:%Y-%m-%d-%H%M%S}.zip
+; You will need to specify site-specific instructions here for accessing the exported files.
+bulk_export_download_instructions = Sample instructions for {project}
+
+importer_upload_path = /tmp/importer_upload/{nbhd}/{project}
+
+; To disable any plugin, tool, importer, etc from being available, you can use the disable_entry_points config option.
+; Specify the keys and values as they are declared in the tool's "setup.py" file.
+; Examples:
+;disable_entry_points.importers = google-code-tracker, google-code-repo
+;disable_entry_points.allura.project_importers = google-code
+
+; Importers specifically, can be left enabled but not linked to.  You have to know the URL to use it.  Example:
+;hidden_importers = trac-tickets
+
+; GitHub importer keys.  For github ticket import, it is best to set
+; up an app at https://github.com/settings/applications  Use the root URL
+; of your Allura instance for both URLs, and enter client values here:
+;github_importer.client_id =
+;github_importer.client_secret =
+
+; If your site has docs about specific importers, you can add them here and
+; they'll appear on the import forms
+;doc.url.importers.Google Code = http://...
+
+; List of oauth API keys permitted to use special forum import API
+; (should be converted to newer importer system)
+;oauth.can_import_forum = api-key-1234, fa832r0fdsafd, f23f80sdf32fd
+
+
+; space-separated list of tool names that are valid options
+; for project admins to set for their 'support_page' field
+; this field is not used by default in Allura, so this option
+; is disabled by default
+;support_tool_choices = wiki tickets discussion
+
+; Control how /categories URL can be accessed to edit trove categories (used in project categories and user skills)
+; Default: everyone
+trovecategories.enableediting = true
+; Nobody:
+;trovecategories.enableediting = false
+; Site admins only:
+;trovecategories.enableediting = admin
+
+; ActivityStream
+activitystream.master = mongodb://mongo:27017
+activitystream.database = activitystream
+activitystream.activity_collection = activities
+activitystream.node_collection = nodes
+activitystream.timeline_collection = timelines
+activitystream.enabled = true
+activitystream.recording.enabled = true
+
+; Ming setup
+; These don't necessarily have to be separate databases, they could
+; be all in the same database if desired
+ming.main.uri = mongodb://mongo:27017/allura
+ming.main.auto_ensure_indexes = False
+ming.project.uri = mongodb://mongo:27017/project-data
+ming.project.auto_ensure_indexes = False
+ming.task.uri = mongodb://mongo:27017/task
+ming.task.auto_ensure_indexes = False
+;ming.zarkov.uri = mongodb://127.0.0.1:27017/zarkov
+;ming.zarkov.auto_ensure_indexes = False
+
+; Zarkov host setting, requires the zarkov and gevent libraries.
+;zarkov.host = tcp://127.0.0.1:9000
+
+; A float from 0-1 representing a % of requests to measure timing on.
+; Sampled requests will have timing logged to stats.log (can change file in [handler_timermiddleware] logging section)
+stats.sample_rate = 1
+
+; Taskd setup
+; number of seconds to sleep between checking for new tasks
+monq.poll_interval=2
+
+; SOLR setup
+solr.server = http://localhost:8983/solr
+; Alternate server to use just for querying
+;solr.query_server =
+; Shorter timeout for search queries (longer timeout for saving to solr)
+solr.short_timeout = 10
+; commit on every add/delete?
+solr.commit = false
+; commit add operations within N ms
+solr.commitWithin = 10000
+; Use improved data types for labels and custom fields?
+; New Allura deployments should leave this set to true. Existing deployments
+; should set to false until existing data has been reindexed. Reindexing will
+; convert existing label and custom field data to more appropriate solr types.
+solr.use_new_types = true
+
+; Incoming email settings.  Used when you run: paster smtp_server development.ini
+; address to listen to
+forgemail.host = 0.0.0.0
+forgemail.port = 8825
+; domain suffix for your mail, change this.  You also need to route *.*.*.forgemail.domain to the above host/port via
+; your mail and DNS configuration
+forgemail.domain = .in.localhost
+
+; Specify the number of projects allowed to be created by a user
+; depending on the age of their user account.
+; Keys are number of seconds, values are max number of projects allowed
+; (including the default user-project, so you probably want to add 1)
+; This example allows for 1 project if the account is less than an hour old
+; and 5 projects if the account is less than a day old.  No limits after that
+;project.rate_limits = {"3600": 2, "86400": 6}
+
+; set this to "false" if you are deploying to production and want performance improvements
+auto_reload_templates = true
+
+; How frequently users can send messages, in seconds
+user_message.time_interval = 3600
+; Max number of messages that can be sent within that time interval.
+user_message.max_messages = 20
+
+; Default number of times to show a sitewide notification
+; See https://forge-allura.apache.org/docs/getting_started/administration.html#site-notifications
+site_notification.impressions = 0
+
+; When rendering discussion post Markdown to html, if the render takes longer
+; than `markdown_cache_threshold` (in seconds), the resulting html will be
+; cached and served from cache on subsequent requests. Set to 0 to cache all
+; posts. Remove entirely to cache nothing.
+markdown_cache_threshold = .1
+; markdown text longer than max length will not be converted to html
+markdown_render_max_length = 999999999
+; Don't add rel=nofollow to these domains when generating links from Markdown content
+;nofollow_exempt_domains =
+
+; Export control choices on the project admin overview page.
+show_export_control = false
+
+; By default project admins can soft-delete their projects.
+; A soft-deleted project will still be in the database and visible to admins, but not to others.
+allow_project_delete = true
+allow_project_undelete = true
+
+; Advanced settings for controlling "Last Commit Doc" algorithm used when visiting any repo browse page
+lcd_thread_chunk_size = 10
+lcd_timeout = 60
+
+
+;
+; Settings for the Blog tool
+;
+; Enable or disable external RSS feed importing in ForgeBlog tool.
+; Default is "false". This feature requires GPL library "html2text". Install it with following command:
+;   pip install -e git://github.com/brondsem/html2text.git#egg=html2text
+; You will also need to run `paster pull-rss-feeds development.ini` in a cron job to fetch them.
+forgeblog.exfeed = false
+
+;
+; Settings for the Chat tool
+;
+forgechat.host = irc.freenode.net
+forgechat.port = 6667
+ircbot.nick = allurabot
+
+;
+; Settings for ShortUrl tool
+;
+; Override this if you set up an additional shortening mechanism (e.g. custom short domain)
+short_url.url_pattern = {base_url}/{nbhd}/{project}/{mount_point}/{short_name}
+
+
+;
+; Settings for UserStats tool
+;
+userstats.count_lines_of_code = true
+
+
+;
+; Optional settings for profiling with https://pypi.python.org/pypi/keas.profile
+;
+[filter-app:profile]
+use=egg:keas.profile#profiler
+next=main
+
+
+;
+; setup for the taskd background daemon request controller
+;
+[app:task]
+use = main
+override_root = task ; TurboGears will use controllers/task.py as root controller
+
+
+
+;
+; Logging configuration
+;
+; Add additional loggers, handlers, formatters here
+; Uses python's logging config file format
+; https://docs.python.org/2/library/logging.config.html#configuration-file-format
+;
+[loggers]
+keys = root, allura, sqlalchemy, paste, pylons, taskdstatus, timermiddleware, tmw_details
+
+[handlers]
+keys = console, stats, taskdstatus, timermiddleware
+
+[formatters]
+keys = generic, stats, timermiddleware
+
+; If you create additional loggers, add them as a key to [loggers]
+[logger_root]
+level = INFO
+handlers = console, stats
+
+[logger_allura]
+level = INFO
+handlers =
+qualname = allura
+
+[logger_sqlalchemy]
+level = INFO
+handlers =
+qualname = sqlalchemy.engine
+; "level = INFO" logs SQL queries.
+; "level = DEBUG" logs SQL queries and results.
+; "level = WARN" logs neither.  (Recommended for production systems.)
+
+[logger_paste]
+level = INFO
+qualname = paste
+handlers =
+
+[logger_pylons]
+level = INFO
+qualname = pylons
+handlers =
+
+[logger_tmw_details]
+; DEBUG will include every instrumented call in our logging
+level = INFO
+qualname = timermiddleware
+handlers =
+
+[logger_taskdstatus]
+level = INFO
+qualname = taskdstatus
+handlers = taskdstatus
+
+[logger_timermiddleware]
+level = INFO
+handlers = timermiddleware
+qualname = stats
+propagate = 0
+
+; If you create additional handlers, add them as a key to [handlers]
+[handler_console]
+class = StreamHandler
+args = (sys.stderr,)
+level = NOTSET
+formatter = generic
+
+[handler_stats]
+class = allura.lib.utils.StatsHandler
+args = ('rtstats.log', 'allura', 1)
+level = NOTSET
+formatter = stats
+
+[handler_taskdstatus]
+class = handlers.WatchedFileHandler
+args = ('taskd_status.log', 'a')
+level = NOTSET
+formatter = generic
+
+[handler_timermiddleware]
+class = handlers.WatchedFileHandler
+; if you run 'paster serve' in allura/Allura/ then that's where this file will be
+; you may want to hard-code a specific directory here.
+args = ('stats.log', 'a')
+level = NOTSET
+formatter = timermiddleware
+
+; If you create additional formatters, add them as a key to [formatters]
+[formatter_generic]
+format = %(asctime)s,%(msecs)03d %(levelname)-5.5s [%(name)s] %(message)s
+datefmt = %H:%M:%S
+
+[formatter_stats]
+format = %(asctime)s %(created)d %(kwpairs)s
+datefmt = %d/%b/%Y:%H:%M:%S UTC
+
+[formatter_timermiddleware]
+format = {"time": "%(asctime)s,%(msecs)03d", "level": "%(levelname)-5.5s", "name": "%(name)s", "message": %(message)s}
+datefmt = %Y-%m-%d %H:%M:%S

http://git-wip-us.apache.org/repos/asf/allura/blob/740bd700/Dockerfile
----------------------------------------------------------------------
diff --git a/Dockerfile b/Dockerfile
new file mode 100644
index 0000000..1c8e06f
--- /dev/null
+++ b/Dockerfile
@@ -0,0 +1,18 @@
+FROM ubuntu:12.04
+
+RUN apt-get update && apt-get install -y \
+    python-dev \
+    libssl-dev \
+    libldap2-dev \
+    libsasl2-dev \
+    libjpeg8-dev \
+    zlib1g-dev \
+    python-pip
+
+ENV basedir /allura
+
+ADD . ${basedir}
+WORKDIR ${basedir}
+
+RUN pip install -r requirements.txt
+RUN ./rebuild-all.bash

http://git-wip-us.apache.org/repos/asf/allura/blob/740bd700/docker-compose.yml
----------------------------------------------------------------------
diff --git a/docker-compose.yml b/docker-compose.yml
new file mode 100644
index 0000000..8b7ac88
--- /dev/null
+++ b/docker-compose.yml
@@ -0,0 +1,16 @@
+web:
+  build: .
+  working_dir: ${basedir}
+  command: paster serve Allura/docker-dev.ini --reload
+  ports:
+    - "8080:8080"
+  volumes:
+    - .:/${basedir}
+  links:
+    - mongo
+mongo:
+  image: mongo:2.6
+  expose:
+    - "27017"
+  volumes:
+    - /allura-data/mongo:/data/db