Code Monkey home page Code Monkey logo

configuration's Introduction

Configuration Management

DEPRECATION WARNING

This repository is Deprecated and is planned to be archived after the Redwood Cut (Late April 2024). See openedx/public-engineering#51 for more details and up-to-date information.

Description

This repository is a collection of tools and scripts that edx.org uses to deploy openedx. The purpose of this repository is to share portions of our toolchain with the community. This repository is not the best way to get started running openedx. For that, please look at Open EdX Installation options, which contains links to the recommended paths for new installations.

Important: The Open edX configuration scripts need to be run as root on your servers and will make changes to service configurations including, but not limited to, sshd, dhclient, sudo, apparmor and syslogd. Our scripts are made available as we use them and they implement our best practices. We strongly recommend that you review everything that these scripts will do before running them against your servers. We also recommend against running them against servers that are hosting other applications. No warranty is expressed or implied.

For more information including installation instructions please see the OpenEdX Wiki.

For info on any large recent changes please see the change log.

What is in this Repo?

  • playbooks: This directory contains ansible playbooks that can be used to configure individual services in the openedx platform. See Open EdX Installation options before trying to use any of the scripts in this directory.
  • docker: This directory contains dockerfiles that can be used to test that playbooks execute cleanly. See Makefiles for Documentation on how to run these containers.
  • requirements : inputs for pip-compile Update files in this directory and then run make upgrade to update requirements.txt
  • tests: scripts used by travis-ci to test changes to this repo
  • util: one-off scripts or tools used to perform certain functions related to openedx management.
  • vagrant: vagrant tooling for testing changes to this repo.

Roadmap

This repository is in sustained status. The goal is to deprecate this codebase and move the deployment code into the repos with the application code.

With the adoption of containerized application platforms like Kubernetes, the tools in this repository are complex and inappropriate for building small single purpose containers.

At edx.org, we are focusing on deployment of applications using Terraform and Kubernetes. We hope to provide open source tooling for this soon.

Contributing

  • Bugfixes: If you would like to contribute a bugfix to this codebase, please open a pull request. A bot will automatically walk your contribution through the Open Source Contribution process.

configuration's People

Contributors

arbabnazar avatar carsongee avatar clintonb avatar coryleeio avatar cpennington avatar dianakhuang avatar e0d avatar estute avatar feanil avatar fredsmith avatar hkim823 avatar jarv avatar jdmulloy avatar jibsheet avatar jmbowman avatar jrbl avatar macdiesel avatar maxrothman avatar michaelroytman avatar mulby avatar nadeemshahzad avatar nedbat avatar pomegranited avatar rgraber avatar sefk avatar singingwolfboy avatar srwang avatar syed-awais-ali avatar syedimranhassan avatar tuchfarber avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

configuration's Issues

TASK: [gather lms static assets with rake]

TASK: [check if django can update cms templates] ******************************
failed: [localhost] => {"changed": true, "cmd": "SERVICE_VARIANT=cms django-admin.py help update_templates --pythonpath=/opt/wwc/edx-platform --settings=cms.envs.aws ", "delta": "0:00:00.272350", "end": "2013-08-22            10:08:23.039531", "item": "", "rc": 1, "start": "2013-08-22 10:08:22.767181"}
stderr: Unknown command: 'update_templates'
Type 'django-admin.py help' for usage.
...ignoring

TASK: [gather lms static assets with rake] ************************************
failed: [localhost] => {"changed": true, "cmd": " SERVICE_VARIANT=lms rake lms:gather_assets:aws ", "delta":     "0:00:00.007348", "end": "2013-08-22 10:08:23.203290", "item": "", "rc": 1, "start": "2013-08-22 10:08:23.195942"}
stderr: /opt/www/.rbenv/shims/ruby: line 21: /root/.rbenv/libexec/rbenv: Permission denied

FATAL: all hosts have already failed -- aborting

Okay, if TASK: [gather lms static assets with rake] ignoring, but what the problem with permissions

Error on TASK: [stop edxapp services]

In reference to issue #196, the first error (regarding file permissions) was resolved after merging pull requests 199 and 200.

It still doesn't deploy as another error has shown up.

TASK: [stop edxapp services] ************************************************** 
failed: [localhost] => {"failed": true, "item": ""}
msg: stop: Job has already been stopped: edxapp


FATAL: all hosts have already failed -- aborting

PLAY RECAP ******************************************************************** 
           to retry, use: --limit @/var/tmp/ansible/edx_sandbox.retry

localhost                  : ok=98   changed=25   unreachable=0    failed=1  

When i try to access lms or studio, i get this error:

502 Bad Gateway
___________________________________
nginx/1.1.19

Error on [TASK: gather lms static assets with rake]

I did a test deploy of edx using ansible today, and discovered errors at three points which were okay, previously.
Most likely broken by some of the new changes.

TASK: [check if django can collect lms static data] *************************** 
failed: [localhost] => {"changed": true, "cmd": "SERVICE_VARIANT=lms django-admin.py help collectstatic --pythonpath=/opt/wwc/edx-platform --settings=lms.envs.aws ", "delta": "0:00:00.400344", "end": "2013-07-31 23:27:31.311594", "item": "", "rc": 1, "start": "2013-07-31 23:27:30.911250"}
stderr: Unknown command: 'collectstatic'
Type 'django-admin.py help' for usage.
...ignoring

TASK: [check if django can collect cms static data] *************************** 
failed: [localhost] => {"changed": true, "cmd": "SERVICE_VARIANT=lms django-admin.py help collectstatic --pythonpath=/opt/wwc/edx-platform --settings=cms.envs.aws ", "delta": "0:00:00.233741", "end": "2013-07-31 23:27:31.890674", "item": "", "rc": 1, "start": "2013-07-31 23:27:31.656933"}
stderr: Unknown command: 'collectstatic'
Type 'django-admin.py help' for usage.
...ignoring

TASK: [check if django can update cms templates] ****************************** 
failed: [localhost] => {"changed": true, "cmd": "SERVICE_VARIANT=cms django-admin.py help update_templates --pythonpath=/opt/wwc/edx-platform --settings=cms.envs.aws ", "delta": "0:00:00.231082", "end": "2013-07-31 23:27:32.450945", "item": "", "rc": 1, "start": "2013-07-31 23:27:32.219863"}
stderr: Unknown command: 'update_templates'
Type 'django-admin.py help' for usage.
...ignoring

TASK: [gather lms static assets with rake] ************************************ 
failed: [localhost] => {"changed": true, "cmd": " SERVICE_VARIANT=lms rake lms:gather_assets:aws ", "delta": "0:00:08.639905", "end": "2013-07-31 23:27:41.432361", "item": "", "rc": 1, "start": "2013-07-31 23:27:32.792456"}
stderr: mkdir -p /opt/wwc/edx-platform/.ws_migrations_complete
./manage.py lms --settings aws preprocess_assets --traceback 
xmodule_assets common/static/xmodule
Traceback (most recent call last):
  File "/opt/edx/bin/xmodule_assets", line 5, in <module>
    from pkg_resources import load_entry_point
  File "/opt/edx/local/lib/python2.7/site-packages/pkg_resources.py", line 2897, in <module>
    add_activation_listener(lambda dist: dist.activate())
  File "/opt/edx/local/lib/python2.7/site-packages/pkg_resources.py", line 712, in subscribe
    callback(dist)
  File "/opt/edx/local/lib/python2.7/site-packages/pkg_resources.py", line 2897, in <lambda>
    add_activation_listener(lambda dist: dist.activate())
  File "/opt/edx/local/lib/python2.7/site-packages/pkg_resources.py", line 2329, in activate
    self.insert_on(path)
  File "/opt/edx/local/lib/python2.7/site-packages/pkg_resources.py", line 2436, in insert_on
    self.check_version_conflict()
  File "/opt/edx/local/lib/python2.7/site-packages/pkg_resources.py", line 2475, in check_version_conflict
    for modname in self._get_metadata('top_level.txt'):
  File "/opt/edx/local/lib/python2.7/site-packages/pkg_resources.py", line 2323, in _get_metadata
    for line in self.get_metadata_lines(name):
  File "/opt/edx/local/lib/python2.7/site-packages/pkg_resources.py", line 1246, in get_metadata_lines
    return yield_lines(self.get_metadata(name))
  File "/opt/edx/local/lib/python2.7/site-packages/pkg_resources.py", line 1238, in get_metadata
    return self._get(self._fn(self.egg_info,name))
  File "/opt/edx/local/lib/python2.7/site-packages/pkg_resources.py", line 1353, in _get
    stream = open(path, 'rb')
IOError: [Errno 13] Permission denied: '/opt/edx/lib/python2.7/site-packages/httplib2-0.8-py2.7.egg-info/top_level.txt'
node_modules/.bin/coffee --compile  .
rake aborted!
Command failed with status (1): [xmodule_assets common/static/xmodule...]
/opt/www/.gem/gems/rake-10.0.4/lib/rake/file_utils.rb:53:in `block in create_shell_runner'
/opt/www/.gem/gems/rake-10.0.4/lib/rake/file_utils.rb:45:in `call'
/opt/www/.gem/gems/rake-10.0.4/lib/rake/file_utils.rb:45:in `sh'
/opt/www/.gem/gems/rake-10.0.4/lib/rake/file_utils_ext.rb:37:in `sh'
/opt/wwc/edx-platform/rakelib/assets.rake:82:in `block (3 levels) in <top (required)>'
/opt/www/.gem/gems/rake-10.0.4/lib/rake/task.rb:246:in `call'
/opt/www/.gem/gems/rake-10.0.4/lib/rake/task.rb:246:in `block in execute'
/opt/www/.gem/gems/rake-10.0.4/lib/rake/task.rb:241:in `each'
/opt/www/.gem/gems/rake-10.0.4/lib/rake/task.rb:241:in `execute'
/opt/www/.gem/gems/rake-10.0.4/lib/rake/task.rb:184:in `block in invoke_with_call_chain'
/opt/www/.gem/gems/rake-10.0.4/lib/rake/task.rb:177:in `invoke_with_call_chain'
/opt/www/.gem/gems/rake-10.0.4/lib/rake/task.rb:215:in `block (2 levels) in invoke_prerequisites_concurrently'
/opt/www/.gem/gems/rake-10.0.4/lib/rake/promise.rb:63:in `call'
/opt/www/.gem/gems/rake-10.0.4/lib/rake/promise.rb:63:in `chore'
/opt/www/.gem/gems/rake-10.0.4/lib/rake/promise.rb:45:in `work'
/opt/www/.gem/gems/rake-10.0.4/lib/rake/thread_pool.rb:103:in `process_queue_item'
/opt/www/.gem/gems/rake-10.0.4/lib/rake/thread_pool.rb:117:in `block (2 levels) in start_thread'
Tasks: TOP => gather_assets => assets => assets:all => assets:xmodule
(See full trace by running task with --trace)
Unknown command: 'preprocess_assets'
Type 'manage.py help' for usage.
stdout: phantomjs not found on path. Set $PHANTOMJS_PATH. Using browser for jasmine tests

FATAL: all hosts have already failed -- aborting

PLAY RECAP ******************************************************************** 
           to retry, use: --limit @/var/tmp/ansible/edx_sandbox.retry

localhost                  : ok=124  changed=113  unreachable=0    failed=1 

Estimated AWS Cost

The description of the edX configuration mentions that "this template will build quite a number of AWS resources that cost money, so please consider this before you start."

I realize that you pay for what you use with AWS, but seeing as I haven't used it yet, can anyone provide me an estimate of AWS costs when using edX?

Thanks!

Problem With Server Certificate "arn:aws:iam::372153017832:server-certificate/dummy"

Cloud formation stack creation breaks with the following error

Server Certificate not found for the key: arn:aws:iam::372153017832:server- certificate/dummy

Other services report the following status

Deletion complete

While others seem to be permanently stuck on the following Creating

I tried to setup the stack after the merged with Feanil Patel's code.

In the cloudformation reference template Is the 'environment' tag necessary?

Since there is already a cloudformation stack name tag is the environment tag necessary in the cloudformation template? It's obviously not doing any harm but we may want to default it to something else if it's not going to be used typically for targeting machines for deployment.

For example to target my lms instances I'll do something like this:
hosts: tag_aws_cloudformation_stack-name_continuous-integration:&tag_group_edxapp

Creating and accessing an edx instance on aws

Hello guys,

We've finished the whole instructions for configuring servers on aws. Could you please point us out to next steps i.e. how do we actually deploy and get the code to run?

Thanks so much,

Max

TASK: [gather lms static assets with rake]

failed: [localhost] => {"changed": true, "cmd": " SERVICE_VARIANT=lms rake     lms:gather_assets:aws ", "delta": "0:00:08.257899", "end": "2013-09-14 14:34:49.368114",     "item": "", "rc": 1, "start": "2013-09-14 14:34:41.110215"}
stderr: mkdir -p /opt/wwc/edx-platform/.ws_migrations_complete
./manage.py lms --settings aws preprocess_assets --traceback 
xmodule_assets common/static/xmodule
Traceback (most recent call last):
  File "./manage.py", line 95, in <module>
execute_from_command_line([sys.argv[0]] + django_args)
  File "/opt/edx/local/lib/python2.7/site-packages/django/core/management/__init__.py", line 443, in execute_from_command_line
utility.execute()
  File "/opt/edx/local/lib/python2.7/site-packages/django/core/management/__init__.py", line 382, in execute
self.fetch_command(subcommand).run_from_argv(self.argv)
  File "/opt/edx/local/lib/python2.7/site-packages/django/core/management/base.py", line 196, in run_from_argv
self.execute(*args, **options.__dict__)
  File "/opt/edx/local/lib/python2.7/site-packages/django/core/management/base.py", line 231, in execute
self.validate()
  File "/opt/edx/local/lib/python2.7/site-packages/django/core/management/base.py", line 266, in validate
num_errors = get_validation_errors(s, app)
  File "/opt/edx/local/lib/python2.7/site-packages/django/core/management/validation.py", line 30, in get_validation_errors
for (app_name, error) in get_app_errors().items():
  File "/opt/edx/local/lib/python2.7/site-packages/django/db/models/loading.py", line 158, in get_app_errors
self._populate()
  File "/opt/edx/local/lib/python2.7/site-packages/django/db/models/loading.py", line 64, in _populate
self.load_app(app_name, True)
  File "/opt/edx/local/lib/python2.7/site-packages/django/db/models/loading.py", line 88, in load_app
models = import_module('.models', app_name)
  File "/opt/edx/local/lib/python2.7/site-packages/django/utils/importlib.py", line 35, in import_module
__import__(name)
  File "/opt/wwc/edx-platform/lms/djangoapps/shoppingcart/models.py", line 22, in <module>
from verify_student.models import SoftwareSecurePhotoVerification
  File "/opt/wwc/edx-platform/lms/djangoapps/verify_student/models.py", line 75, in <module>
class PhotoVerification(StatusModel):
  File "/opt/wwc/edx-platform/lms/djangoapps/verify_student/models.py", line 116, in PhotoVerification
DAYS_GOOD_FOR = settings.VERIFY_STUDENT["DAYS_GOOD_FOR"]
TypeError: string indices must be integers, not str
asset preprocessing failed!
node_modules/.bin/coffee --compile `find . -name *.coffee` 

FATAL: all hosts have already failed -- aborting

PLAY RECAP ******************************************************************** 
           to retry, use: --limit @/root/edx_sandbox.retry

localhost                  : ok=114  changed=23   unreachable=0    failed=1   

This mkdir -p /opt/wwc/edx-platform/.ws_migrations_complete folder exist, so maybe i need to install some requirements ?
Thanks

/opt/wwc/edx-platform//manage.py lms --settings aws preprocess_assets --traceback

``/opt/wwc/edx-platform//manage.py lms --settings aws preprocess_assets --traceback
Traceback (most recent call last):
File "/opt/wwc/edx-platform//manage.py", line 90, in
startup = importlib.import_module(edx_args.startup)
File "/usr/lib/python2.7/importlib/init.py", line 37, in import_module
import(name)
File "/opt/wwc/edx-platform/lms/startup.py", line 9, in
settings.INSTALLED_APPS # pylint: disable=W0104
File "/usr/local/lib/python2.7/dist-packages/django/utils/functional.py", line 184, in inner
self._setup()
File "/usr/local/lib/python2.7/dist-packages/django/conf/init.py", line 42, in _setup
self._wrapped = Settings(settings_module)
File "/usr/local/lib/python2.7/dist-packages/django/conf/init.py", line 95, in init
raise ImportError("Could not import settings '%s' (Is it on sys.path?): %s" % (self.SETTINGS_MODULE, e))
ImportError: Could not import settings 'lms.envs.aws' (Is it on sys.path?): No module named xblock.fields`
In file /usr/local/lib/python2.7/dist-packages/django/conf/init.py```

 self.SETTINGS_MODULE = settings_module
try:
     93             mod = importlib.import_module(self.SETTINGS_MODULE)
     94         except ImportError, e:
     95             raise ImportError("Could not import settings '%s' (Is it on sys.path?): %s" % (self.SETTINGS_MODULE, e))```

asimble-playbook crash and stop at this string, what i should do?

Problem With Sinatra - Timeout when waiting for 127.0.0.1:4567

After merging the latest pull reguest (#202), The following error showed up.
When i try to access studio or lms, i get the page not found message from the browser.

TASK: [forum | test that the required service are listening] ****************** 
failed: [localhost] => (item={'host': 'localhost', 'port': '4567', 'service': 'sinatra'}) =>     {"elapsed": 10, "failed": true, "item": {"host": "localhost", "port": "4567", "service":     "sinatra"}}
msg: Timeout when waiting for 127.0.0.1:4567
ok: [localhost] => (item={'host': u'localhost', 'port': '27017', 'service': 'mongo'})
ok: [localhost] => (item={'host': u'localhost', 'port': '28017', 'service': 'mongo'})
ok: [localhost] => (item={'host': u'localhost', 'port': '9200', 'service': 'elasticsearch'})
ok: [localhost] => (item={'host': u'localhost', 'port': '9300', 'service': 'elasticsearch'})

FATAL: all hosts have already failed -- aborting

Virtual appliance

Please build a virtual appliance for virtual box o vmware, is possible or give me support for build one in centos, why centos, cause is my linux preferred

Tnks

Configurations for sandbox environment

Hi there,

I have used the ubuntu 12.04 playbook to install the sandbox on a single server. I found the configuration for lms&cms is a bit confused. Do we have any documentation about the configuration ? Such as:
cms.env.json:
"COMMENTS_SERVICE_URL" : "" # the format is something like "http://127.0.0.1:4567"
"PREVIEW_LMS_BASE": "www.mysite.com" # is this the right way to do this? Although I have set this, it seems there are still some "View Live" link broken in cms.

and also many other configurations.

Or is there any fully configured files I can get some ideas about them ? especially for cms.env.json and lms.env.json

Email function with "Installing edX on a single Ubuntu 12.04 (Precise) server" documentation

Hi there,
I have tried the new documentation "Installing edX on a single Ubuntu 12.04 (Precise) server" on an EC2 instance. But the email function (by AWS SES) doesn't work. I have already added the AWS keys information in the auth file and also checked the configuration under /opt/wwc/edx-platform/{cms,lms}/{common.py, aws.py} to use SES backend. But the email function doesn't work.

I used the same method on the other server with an old version of edx-configuration, it worked then. Any new changes for the email configuration ?

Any suggestion is appreciated.

Thanks

Error Building with the AWS Console

I choice Upload a Template File and add file edx-reference-architecture.json and click button continue error occurred:

ValidateTemplate failed: Template error: resource RabbitMQScaleUpPolicy has missing or circular dependencies: RabbitMQServerASGroup.

Please help me. Thank you

TASK: [install python base-requirements] hangs.

I'm using a vanilla Ubuntu 12.04 (precise). All I did was

  1. Created a user and added it to sudoers
  2. apt-get update and upgrade
  3. Followed instructions on the edX/configuration page.

I tried this three times, it always hangs on TASK: [install python base-requirements].

Can someone confirm or comment?

Here's the output log:
./edx_sandbox.yml -i "localhost,"

PLAY [Configure instance(s)] **************************************************

GATHERING FACTS ***************************************************************
ok: [localhost]

TASK: [common | Create 'edx' users group] *************************************
changed: [localhost]

TASK: [common | Add user 'ubuntu' to 'edx' group] *****************************
changed: [localhost]

TASK: [common | Creating admin users] *****************************************
skipping: [localhost] => (item=admin_users)

TASK: [common | Copying ssh keys for admin users] *****************************
skipping: [localhost] => (item=admin_keys)

TASK: [common | Creating env users] *******************************************
skipping: [localhost] => (item=env_users)

TASK: [common | Copying ssh keys for env users] *******************************
skipping: [localhost] => (item=env_keys)

TASK: [common | Group adm passwordless sudo] **********************************
changed: [localhost]

TASK: [common | Add user www-data] ********************************************
ok: [localhost]

TASK: [common | Create application root] **************************************
changed: [localhost]

TASK: [common | Create upload directory] **************************************
changed: [localhost]

TASK: [common | Create data dir] **********************************************
changed: [localhost]

TASK: [common | Create staticfiles dir] ***************************************
changed: [localhost]

TASK: [common | Install role-independent useful system packages] **************
changed: [localhost]

TASK: [common | Create log directory] *****************************************
changed: [localhost]

TASK: [common | Create alias from app_base_dir to the log_base_dir] ***********
changed: [localhost]

TASK: [common | Create convenience link from log_base_dir to system logs] *****
changed: [localhost]

TASK: [common | Touch edx log file into place] ********************************
changed: [localhost]

TASK: [common | Set permissions on edx log file] ******************************
changed: [localhost]

TASK: [common | upload sudo config for key forwarding as root] ****************
changed: [localhost]

TASK: [common | Install python and pip] ***************************************
ok: [localhost] => (item=python2.7,python-pip,python2.7-dev)

TASK: [common | pip install virtualenv] ***************************************
changed: [localhost]

TASK: [common | pip install virtualenvwrapper] ********************************
changed: [localhost]

TASK: [common | create edx virtualenv directory] ******************************
changed: [localhost]

TASK: [common | create the edx virtualenv directory initial contents] *********
changed: [localhost]

TASK: [common | pip install gunicorn] ****************************************
changed: [localhost]

TASK: [common | Install rsyslog configuration for edX] ************************
changed: [localhost]

TASK: [common | Install logrotate configuration for edX] **********************
changed: [localhost]

TASK: [common | Touch tracking file into existence] ***************************
changed: [localhost]

TASK: [common | Set permissions on tracking file] *****************************
changed: [localhost]

TASK: [common | Install logrotate configuration for tracking file] ************
changed: [localhost]

TASK: [nginx | Install nginx] *************************************************
changed: [localhost]

TASK: [nginx | Copying nginx config edx-release] ******************************
skipping: [localhost]

TASK: [nginx | Creating nginx config link edx-release] ************************
skipping: [localhost]

TASK: [nginx | Copying nginx config basic-auth] *******************************
skipping: [localhost]

TASK: [nginx | Creating nginx config link basic-auth] *************************
skipping: [localhost]

TASK: [nginx | Write out default htpasswd file] *******************************
changed: [localhost]

TASK: [nginx | Create nginx log file location (just in case)] *****************
changed: [localhost]

TASK: [nginx | Removing default nginx config and restart (enabled)] ***********
changed: [localhost]

TASK: [nginx | Set up nginx access log rotation] ******************************
changed: [localhost]

TASK: [nginx | Set up nginx access log rotation] ******************************
changed: [localhost]

TASK: [nginx | Removing default nginx config (available)] *********************
changed: [localhost]

TASK: [nginx | Register the fact that nginx has run] **************************
changed: [localhost]

TASK: [nginx | make sure nginx has started] ***********************************
changed: [localhost]

TASK: [edxlocal | install python-pymongo (req for ansible)] *******************
changed: [localhost]

TASK: [edxlocal | install python-mysqldb (req for ansible)] *******************
changed: [localhost]

TASK: [edxlocal | install mysql server and recommends] ************************
changed: [localhost]

TASK: [edxlocal | create a database for edxapp] *******************************
changed: [localhost]

TASK: [edxlocal | create a database for xqueue] *******************************
changed: [localhost]

TASK: [edxlocal | create a database for ora] **********************************
changed: [localhost]

TASK: [edxlocal | install mongo server and recommends] ************************
changed: [localhost]

TASK: [edxlocal | stop mongo service] *****************************************
changed: [localhost]

TASK: [edxlocal | move mongodb to /mnt] ***************************************
changed: [localhost]

TASK: [edxlocal | create mongodb symlink] *************************************
changed: [localhost]

TASK: [edxlocal | start mongo service] ****************************************
changed: [localhost]

TASK: [edxlocal | wait for mongo server to start] *****************************
ok: [localhost]

TASK: [edxlocal | create a mongodb user for edxapp] ***************************
changed: [localhost]

TASK: [edxlocal | create a mongodb user for forums] ***************************
changed: [localhost]

TASK: [edxlocal | install memcached] ******************************************
changed: [localhost]

TASK: [Change permissions on datadir] *****************************************
changed: [localhost]

TASK: [Change owner on staticfiles] *******************************************
ok: [localhost]

TASK: [Create theming directory] **********************************************
changed: [localhost]

TASK: [install a bunch of system packages on which LMS and CMS rely] **********
changed: [localhost]

TASK: [create lms application config] *****************************************
changed: [localhost]

TASK: [create lms auth file] **************************************************
changed: [localhost]

TASK: [Create lms log target directory] ***************************************
changed: [localhost]

TASK: [nginx | Copying nginx config lms] **************************************
changed: [localhost]

TASK: [nginx | Creating nginx config link lms] ********************************
changed: [localhost]

TASK: [nginx | Copying nginx config lms-backend] ******************************
changed: [localhost]

TASK: [nginx | Creating nginx config link lms-backend] ************************
changed: [localhost]

TASK: [writing lms upstart script to /etc/init] *******************************
changed: [localhost]

TASK: [writing edx-worker-lms upstart script to /etc/init] ********************
skipping: [localhost]

TASK: [create lms-xml application config] *************************************
changed: [localhost]

TASK: [create lms-xml auth file] **********************************************
changed: [localhost]

TASK: [Create lms-xml log target directory] ***********************************
changed: [localhost]

TASK: [nginx | Copying nginx config lms-xml] **********************************
changed: [localhost]

TASK: [nginx | Creating nginx config link lms-xml] ****************************
changed: [localhost]

TASK: [nginx | Copying nginx config lms-xml-backend] **************************
changed: [localhost]

TASK: [nginx | Creating nginx config link lms-xml-backend] ********************
changed: [localhost]

TASK: [writing lms-xml upstart script to /etc/init] ***************************
changed: [localhost]

TASK: [writing edx-worker-lms-xml upstart script to /etc/init] ****************
skipping: [localhost]

TASK: [create cms application config] *****************************************
changed: [localhost]

TASK: [create cms auth file] **************************************************
changed: [localhost]

TASK: [nginx | Copying nginx config cms] **************************************
changed: [localhost]

TASK: [nginx | Creating nginx config link cms] ********************************
changed: [localhost]

TASK: [nginx | Copying nginx config cms-backend] ******************************
changed: [localhost]

TASK: [nginx | Creating nginx config link cms-backend] ************************
changed: [localhost]

TASK: [Create CMS log target directory] ***************************************
changed: [localhost]

TASK: [writing cms upstart script to /etc/init] *******************************
changed: [localhost]

TASK: [writing edx-worker-cms upstart script to /etc/init] ********************
skipping: [localhost]

TASK: [create lms application config] *****************************************
changed: [localhost]

TASK: [create lms auth file] **************************************************
changed: [localhost]

TASK: [Create lms-preview log target directory] *******************************
changed: [localhost]

TASK: [nginx | Copying nginx config lms-preview] ******************************
changed: [localhost]

TASK: [nginx | Creating nginx config link lms-preview] ************************
changed: [localhost]

TASK: [nginx | Copying nginx config lms-preview-backend] **********************
changed: [localhost]

TASK: [nginx | Creating nginx config link lms-preview-backend] ****************
changed: [localhost]

TASK: [writing lms-preview upstart script to /etc/init] ***********************
changed: [localhost]

TASK: [creating edxapp upstart script] ****************************************
changed: [localhost]

TASK: [create edx-workers upstart script] *************************************
skipping: [localhost]

TASK: [Install npm] ***********************************************************
ok: [localhost]

TASK: [Create 'www' user (replicating historical environment)] ****************
changed: [localhost]

TASK: [Create ruby base] ******************************************************
changed: [localhost]

TASK: [rbenv | install build depends] *****************************************
ok: [localhost] => (item=build-essential,git,libcurl4-openssl-dev,libmysqlclient-dev,libreadline-dev,libssl-dev,libxml2-dev,libxslt1-dev,zlib1g-dev)

TASK: [rbenv | update rbenv repo] *********************************************
changed: [localhost]

TASK: [rbenv | add rbenv to path] *********************************************
changed: [localhost]

TASK: [rbenv | add rbenv initialization to profile] ***************************
changed: [localhost]

TASK: [rbenv | check ruby-build installed] ************************************
failed: [localhost] => {"changed": true, "cmd": ["test", "-x", "/usr/local/bin/ruby-build"], "delta": "0:00:00.004445", "end": "2013-08-25 03:19:52.122206", "item": "", "rc": 1, "start": "2013-08-25 03:19:52.117761"}
...ignoring

TASK: [rbenv | create temporary directory] ************************************
changed: [localhost]

TASK: [rbenv | clone ruby-build repo] *****************************************
changed: [localhost]

TASK: [rbenv | install ruby-build] ********************************************
changed: [localhost]

TASK: [rbenv | remove temporary directory] ************************************
changed: [localhost]

TASK: [rbenv | check ruby 1.9.3-p374 installed] *******************************
failed: [localhost] => {"changed": true, "cmd": "RBENV_ROOT=/opt/www/.rbenv rbenv versions | grep 1.9.3-p374 ", "delta": "0:00:00.053208", "end": "2013-08-25 03:19:54.437263", "item": "", "rc": 1, "start": "2013-08-25 03:19:54.384055"}
...ignoring

TASK: [rbenv | install ruby 1.9.3-p374] ***************************************
changed: [localhost]

TASK: [rbenv | set global ruby 1.9.3-p374] ************************************
changed: [localhost]

TASK: [rbenv | rehash] ********************************************************
changed: [localhost]

TASK: [stop edxapp services] **************************************************
ok: [localhost]

TASK: [stop edx workers] ******************************************************
skipping: [localhost]

TASK: [git checkout edx-platform repo into $app_base_dir] *********************
changed: [localhost]

TASK: [create platform code dir] **********************************************
changed: [localhost]

TASK: [checkout theme] ********************************************************
skipping: [localhost]

TASK: [sets permissions on platform code dir and contents] ********************
changed: [localhost]

TASK: [gem | gem install bundler] *********************************************
changed: [localhost]

TASK: [bundle | bundle install] ***********************************************
changed: [localhost]

TASK: [Install edx-platform npm dependencies] *********************************
changed: [localhost]

TASK: [install python pre-requirements] ***************************************
changed: [localhost]

TASK: [install python base-requirements] **************************************

No sudo with common commands?

I am periodically merging master into my branch that configures the ml api, and the biggest issue is the removal of sudo in the common playbook. How is the lack of sudo working?

For example, this will fail:

- name: Create data dir
  file: path={{ app_base_dir }}/data state=directory owner=root group=root
  tags:
  - pre_install

This will succeed:

- name: Create data dir
  file: path={{ app_base_dir }}/data state=directory owner=root group=root
  sudo: True
  tags:
  - pre_install

Am I doing something wrong with users or the ansible command?

I am running:

ansible-playbook mlapi_sandbox.yml -i ./ec2.py -c ssh --user=ubuntu -v

This is happening in the aws-sandbox account, and the ansible command is bring run on a vpc.

top-level playbook organization

I think it probably still makes sense to check-in the top-level playbooks to playbooks/ where we will each have our own for production/staging configurations that include different roles.

It would be nice to be able to organize them into sub-directories or even a different repo but I am pretty sure roles are relative to the playbook that are run and it would probably start to get ugly with relative pathing.

Does something like {edx-east,edx-west}-<whatever>.yml sound like a decent convention for now?

Error xqueue | syncdb and migrate: KeyError: 'default'

I'm facing the following error on Ubuntu 12.04. Using instructions from the wiki (here), on a fresh server install.

TASK: [xqueue | syncdb and migrate] ******************************************* 
failed: [localhost] => {"changed": true, "cmd": "sudo -u xqueue SERVICE_VARIANT=xqueue /opt/xqueue/virtualenvs/xqueue/bin/django-admin.py syncdb --migrate --noinput --settings=xqueue.aws_settings --pythonpath=/opt/wwc/xqueue ", "delta": "0:00:00.224409", "end": "2013-09-28 01:06:03.675387", "item": "", "rc": 1, "start": "2013-09-28 01:06:03.450978"}
stderr: Traceback (most recent call last):
  File "/opt/xqueue/virtualenvs/xqueue/bin/django-admin.py", line 5, in <module>
    management.execute_from_command_line()
  File "/opt/xqueue/virtualenvs/xqueue/local/lib/python2.7/site-packages/django/core/management/__init__.py", line 443, in execute_from_command_line
    utility.execute()
  File "/opt/xqueue/virtualenvs/xqueue/local/lib/python2.7/site-packages/django/core/management/__init__.py", line 382, in execute
    self.fetch_command(subcommand).run_from_argv(self.argv)
  File "/opt/xqueue/virtualenvs/xqueue/local/lib/python2.7/site-packages/django/core/management/__init__.py", line 261, in fetch_command
    klass = load_command_class(app_name, subcommand)
  File "/opt/xqueue/virtualenvs/xqueue/local/lib/python2.7/site-packages/django/core/management/__init__.py", line 69, in load_command_class
    module = import_module('%s.management.commands.%s' % (app_name, name))
  File "/opt/xqueue/virtualenvs/xqueue/local/lib/python2.7/site-packages/django/utils/importlib.py", line 35, in import_module
    __import__(name)
  File "/opt/xqueue/virtualenvs/xqueue/local/lib/python2.7/site-packages/south/management/commands/__init__.py", line 13, in <module>
    from south.management.commands.syncdb import Command as SyncCommand
  File "/opt/xqueue/virtualenvs/xqueue/local/lib/python2.7/site-packages/south/management/commands/syncdb.py", line 17, in <module>
    from south.db import dbs
  File "/opt/xqueue/virtualenvs/xqueue/local/lib/python2.7/site-packages/south/db/__init__.py", line 81, in <module>
    db = dbs[DEFAULT_DB_ALIAS]
KeyError: 'default'

FATAL: all hosts have already failed -- aborting

PLAY RECAP ******************************************************************** 
           to retry, use: --limit @/root/edx_sandbox.retry

localhost                  : ok=217  changed=62   unreachable=0    failed=1   

Any clue?

Thanks in advance!

Error on TASK: [gather lms static assets with rake]

I’m trying to install open edX platform by following “Installing edX on a single Ubuntu 12.04 (Precise) server” in this page https://github.com/edx/configuration/wiki#installing-edx-on-a-single-ubuntu-1204-virtual-machine-with-vagrant
However, when I invoked the following command, I received the error:

Command

sudo ansible-playbook -c local --limit "localhost:127.0.0.1" /var/tmp/configuration/playbooks/edx_sandbox.yml \
-i "localhost," -e 'cms_nginx_port=80  lms_preview_nginx_port=80  c_lms_base=example.com \
c_preview_lms_base=preview.example.com'

Error:

TASK: [gather lms static assets with rake] ************************************ 
failed: [localhost] => {"changed": true, "cmd": " SERVICE_VARIANT=lms rake lms:gather_assets:aws ", "delta": "0:00:30.913455", "end": "2013-10-23 13:30:42.350326", "item": "", "rc": 1, "start": "2013-10-23 13:30:11.436871"}
stderr: mkdir -p /opt/wwc/edx-platform/.ws_migrations_complete
./manage.py lms --settings aws preprocess_assets --traceback 
xmodule_assets common/static/xmodule
2013-10-23 13:30:17,544 INFO 5041 [dd.dogapi] dog_stats_api.py:66 - Initializing dog api to use statsd: localhost, 8125
Traceback (most recent call last):
  File "./manage.py", line 91, in <module>
    startup.run()
  File "/opt/wwc/edx-platform/lms/startup.py", line 26, in run
    modulestore(store_name)
  File "/opt/wwc/edx-platform/common/lib/xmodule/xmodule/modulestore/django.py", line 113, in modulestore
    settings.MODULESTORE[name].get('OPTIONS', {})
  File "/opt/wwc/edx-platform/common/lib/xmodule/xmodule/modulestore/django.py", line 70, in create_modulestore_instance
    **_options
  File "/opt/wwc/edx-platform/common/lib/xmodule/xmodule/modulestore/mixed.py", line 37, in __init__
    store['OPTIONS']
  File "/opt/wwc/edx-platform/common/lib/xmodule/xmodule/modulestore/django.py", line 70, in create_modulestore_instance
    **_options
  File "/opt/wwc/edx-platform/common/lib/xmodule/xmodule/modulestore/mongo/base.py", line 287, in __init__
    do_connection(**doc_store_config)
TypeError: do_connection() takes at least 3 arguments (0 given)
asset preprocessing failed!
node_modules/.bin/coffee --compile `find . -name *.coffee` 

FATAL: all hosts have already failed -- aborting

line 261 In /opt/wwc/edx-platform/common/lib/xmodule/xmodule/modulestore/mongo/base.py explains as follows:

        :param doc_store_config: must have a host, db, and collection entries. Other common entries: port, tz_aware.

and line 271 to 273 has definition for do_connection() as follows.

        def do_connection(
            db, collection, host, port=27017, tz_aware=True, user=None, password=None, **kwargs
        ):

However, on line 287, do_connection() is called as follwos:

        do_connection(**doc_store_config)

any idea to avoid this error?

web installation problem

Hi, there

edx is now open source, and i had also brought aws services for that,

however, i have be struggled for the past 48hours, with no luck to build this thing on amazon.

so i am here to see if anyone has some experience for doing that?

as i dunno even where to start, to build the platform up. :(

SSH authentication failure when using ansible

I'm building the edx stack on a single server using there instructions
I run the instructions from within an ec2 instance running ubuntu 12.04 after making the following changes:

1. created a keypair and changed value of keypair to that name
2. changed instance_type to t1.micro

I then run the following command (i did this before the need to add secure_dir was taken away):

ansible-playbook  -vvv --user=ubuntu edx_sandbox.yml -i inventory.ini -e 'secure_dir=secure_example

Two ec2 instances were created as the command was running, but then it failed at some point when trying to ssh into one of the created instances.
But at the time, the two instances were not fully initialized

Here is a log of the output it gave with the error messages

PLAY [Create sandbox instance] ************************************************ 

TASK: [Launch instance] ******************************************************* 
<127.0.0.1> EXEC ['/bin/sh', '-c', 'mkdir -p $HOME/.ansible/tmp/ansible-1373366905.65-43573181039034 && chmod a+rx $HOME/.ansible/tmp/ansible-1373366905.65-43573181039034 && echo $HOME/.ansible/tmp/ansible-1373366905.65-43573181039034']
<127.0.0.1> REMOTE_MODULE ec2 image=ami-4ac9437a instance_tags='{"from_ansible": "true"}' keypair=cloud-front instance_type=t1.micro region=us-west-2 group=sandbox 
<127.0.0.1> PUT /tmp/tmpOHgl4E TO /home/ubuntu/.ansible/tmp/ansible-1373366905.65-43573181039034/ec2
<127.0.0.1> EXEC ['/bin/sh', '-c', '/usr/bin/python /home/ubuntu/.ansible/tmp/ansible-1373366905.65-43573181039034/ec2; rm -rf /home/ubuntu/.ansible/tmp/ansible-1373366905.65-43573181039034/ >/dev/null 2>&1']
changed: [127.0.0.1] => {"changed": true, "instance_ids": ["i-797b9f4d"], "instances": [{"ami_launch_index": "0", "architecture": "x86_64", "dns_name": "ec2-54-214-67-10.us-west-2.compute.amazonaws.com", "hypervisor": "xen", "id": "i-797b9f4d", "image_id": "ami-4ac9437a", "instance_type": "t1.micro", "kernel": "aki-fc37bacc", "key_name": "cloud-front", "launch_time": "2013-07-09T10:48:37.000Z", "placement": "us-west-2b", "private_dns_name": "ip-10-252-59-213.us-west-2.compute.internal", "private_ip": "10.252.59.213", "public_dns_name": "ec2-54-214-67-10.us-west-2.compute.amazonaws.com", "public_ip": "54.214.67.10", "ramdisk": null, "root_device_name": "/dev/sda1", "root_device_type": "ebs", "state": "running", "state_code": 16, "virtualization_type": "paravirtual"}], "item": ""}

TASK: [Add new instance to host group] **************************************** 
creating host via 'add_host': hostname=54.214.67.10
added host to group via add_host module: launched
ok: [127.0.0.1] => (item={u'ramdisk': None, u'kernel': u'aki-fc37bacc', u'placement': u'us-west-2b', u'private_dns_name': u'ip-10-252-59-213.us-west-2.compute.internal', u'ami_launch_index': u'0', u'instance_type': u't1.micro', u'dns_name': u'ec2-54-214-67-10.us-west-2.compute.amazonaws.com', u'launch_time': u'2013-07-09T10:48:37.000Z', u'architecture': u'x86_64', u'virtualization_type': u'paravirtual', u'public_ip': u'54.214.67.10', u'image_id': u'ami-4ac9437a', u'state': u'running', u'root_device_name': u'/dev/sda1', u'key_name': u'cloud-front', u'public_dns_name': u'ec2-54-214-67-10.us-west-2.compute.amazonaws.com', u'root_device_type': u'ebs', u'state_code': 16, u'hypervisor': u'xen', u'id': u'i-797b9f4d', u'private_ip': u'10.252.59.213'}) => {"item": {"ami_launch_index": "0", "architecture": "x86_64", "dns_name": "ec2-54-214-67-10.us-west-2.compute.amazonaws.com", "hypervisor": "xen", "id": "i-797b9f4d", "image_id": "ami-4ac9437a", "instance_type": "t1.micro", "kernel": "aki-fc37bacc", "key_name": "cloud-front", "launch_time": "2013-07-09T10:48:37.000Z", "placement": "us-west-2b", "private_dns_name": "ip-10-252-59-213.us-west-2.compute.internal", "private_ip": "10.252.59.213", "public_dns_name": "ec2-54-214-67-10.us-west-2.compute.amazonaws.com", "public_ip": "54.214.67.10", "ramdisk": null, "root_device_name": "/dev/sda1", "root_device_type": "ebs", "state": "running", "state_code": 16, "virtualization_type": "paravirtual"}, "new_groups": ["launched"], "new_host": "54.214.67.10"}

TASK: [Wait for SSH to come up] *********************************************** 
<127.0.0.1> EXEC ['/bin/sh', '-c', 'mkdir -p $HOME/.ansible/tmp/ansible-1373366932.25-54644188618224 && chmod a+rx $HOME/.ansible/tmp/ansible-1373366932.25-54644188618224 && echo $HOME/.ansible/tmp/ansible-1373366932.25-54644188618224']
<127.0.0.1> REMOTE_MODULE wait_for host=ec2-54-214-67-10.us-west-2.compute.amazonaws.com port=22 delay=60 timeout=320 state=started
<127.0.0.1> PUT /tmp/tmpwPtseq TO /home/ubuntu/.ansible/tmp/ansible-1373366932.25-54644188618224/wait_for
<127.0.0.1> EXEC ['/bin/sh', '-c', '/usr/bin/python /home/ubuntu/.ansible/tmp/ansible-1373366932.25-54644188618224/wait_for; rm -rf /home/ubuntu/.ansible/tmp/ansible-1373366932.25-54644188618224/ >/dev/null 2>&1']
ok: [127.0.0.1] => (item={u'ramdisk': None, u'kernel': u'aki-fc37bacc', u'placement': u'us-west-2b', u'private_dns_name': u'ip-10-252-59-213.us-west-2.compute.internal', u'ami_launch_index': u'0', u'instance_type': u't1.micro', u'dns_name': u'ec2-54-214-67-10.us-west-2.compute.amazonaws.com', u'launch_time': u'2013-07-09T10:48:37.000Z', u'architecture': u'x86_64', u'virtualization_type': u'paravirtual', u'public_ip': u'54.214.67.10', u'image_id': u'ami-4ac9437a', u'state': u'running', u'root_device_name': u'/dev/sda1', u'key_name': u'cloud-front', u'public_dns_name': u'ec2-54-214-67-10.us-west-2.compute.amazonaws.com', u'root_device_type': u'ebs', u'state_code': 16, u'hypervisor': u'xen', u'id': u'i-797b9f4d', u'private_ip': u'10.252.59.213'}) => {"changed": false, "elapsed": 61, "item": {"ami_launch_index": "0", "architecture": "x86_64", "dns_name": "ec2-54-214-67-10.us-west-2.compute.amazonaws.com", "hypervisor": "xen", "id": "i-797b9f4d", "image_id": "ami-4ac9437a", "instance_type": "t1.micro", "kernel": "aki-fc37bacc", "key_name": "cloud-front", "launch_time": "2013-07-09T10:48:37.000Z", "placement": "us-west-2b", "private_dns_name": "ip-10-252-59-213.us-west-2.compute.internal", "private_ip": "10.252.59.213", "public_dns_name": "ec2-54-214-67-10.us-west-2.compute.amazonaws.com", "public_ip": "54.214.67.10", "ramdisk": null, "root_device_name": "/dev/sda1", "root_device_type": "ebs", "state": "running", "state_code": 16, "virtualization_type": "paravirtual"}, "port": 22, "state": "started"}

PLAY [Configure instance(s)] ************************************************** 

GATHERING FACTS *************************************************************** 
<54.214.67.10> ESTABLISH CONNECTION FOR USER: ubuntu on PORT 22 TO 54.214.67.10
fatal: [54.214.67.10] => {'msg': 'FAILED: Authentication failed.', 'failed': True}

TASK: [Create 'edx' users group] ********************************************** 
FATAL: no hosts matched or all hosts have already failed -- aborting


PLAY RECAP ******************************************************************** 
           to retry, use: --limit @/var/tmp/ansible/edx_sandbox.retry

127.0.0.1                  : ok=3    changed=1    unreachable=0    failed=0   
54.214.67.10               : ok=0    changed=0    unreachable=1    failed=0   

After the command failed, i waited for the two instances to be fully initialized, then i tried to run the command again, thinking that this time ssh access would work since the instances were fully up.
But a new instance altogether was created and the command failed at the same point.

TASK: [git checkout edx-platform repo into $app_base_dir]

TASK: [git checkout edx-platform repo into $app_base_dir]
We have some proxy, and link like git:// cant work here, so where i can find source with this parameters or maybe someone change it in code to https, which work very well with htttps_proxy= on linux

Provisioning From Local Machine Instead of Amazon EC2

I'm new to edx.

The README.md says it's possible to separate provisioning and configuration, while the example is all about deploying the system on Amazon's EC2. My question is:
a) Is it possible to use this project to deploy edX on local machine?
b) Is there a walkthough example/manual for a)?
c) Is this the right place to ask question? Any mailing-list?

Thanks in advance.

Shi

One-liner install script

I made a small bash script which encapsulates the commands that are run on the server. https://gist.github.com/natea/6084836/raw/779c43a959e84948ff1d946898ac94e9556ab042/edx-install.sh

So now the entire install process can be executed with this one line from the client machine (no need to login to the server):

curl -O https://gist.github.com/natea/6084836/raw/779c43a959e84948ff1d946898ac94e9556ab042/edx-install.sh && ssh -i ~/.ssh/yourkey.pem [email protected] 'bash -s' < edx-install.sh

You need to replace yourkey.pem with whatever your private key is, and ec2-xxx-xxx-xxx with whatever your EC2 public hostname is.

LMS front page link issue

Hi there,

I found the links under "EXPLORE FREE COURSES FROM edX UNIVERSITIES" in the lms front page will be redirected to "Page Not Found". How can I make those links work ?

when registering a new account i get a server error

How can I use a different playbook?

"When registering a new account, I get a server error
You are probably using a playbook which got the "direct" entry removed in the 'MODULESTORE' for the cms.auth. Use a different playbook."

( https://github.com/edx/configuration/wiki/FAQ#when-registering-a-new-account-i-get-a-server-error )

note. I'm using https://github.com/edx/configuration/wiki#installing-edx-on-a-single-ubuntu-1204-precise-server

Thanks

Failure At TASK:[oraclejdk | install Oracle Java]

I have previously successfully deploy edx using ansible, but after restarting my instance on ec2, edx was no longer running and since i didn't know how to restart it, i decided to go through the entire process.

This time these errors came up, i suppose it's the result of new changes to the repo since i last tried?

Any ideas?

TASK: [oraclejdk | check for Oracle Java version jdk1.7.0_25] ***************** 
failed: [localhost] => {"changed": true, "cmd": ["test", "-d", "/usr/lib/jvm/jdk1.7.0_25"], "delta": "0:00:00.056229", "end": "2013-07-30 12:11:41.239289", "item": "", "rc": 1, "start": "2013-07-30 12:11:41.183060"}
...ignoring

TASK: [oraclejdk | download Oracle Java] ************************************** 
changed: [localhost]

TASK: [oraclejdk | install Oracle Java] *************************************** 
failed: [localhost] => {"changed": true, "cmd": "mkdir -p /usr/lib/jvm && tar -C /usr/lib/jvm -zxvf /var/tmp/jdk-7u25-linux-x64.tar.gz  exectuable=/bin/bash  ", "delta": "0:00:09.064907", "end": "2013-07-30 12:12:09.863898", "item": "", "rc": 2, "start": "2013-07-30 12:12:00.798991"}
stderr: tar: exectuable=/bin/bash: Not found in archive
tar: Exiting with failure status due to previous errors

FATAL: all hosts have already failed -- aborting

PLAY RECAP ******************************************************************** 
           to retry, use: --limit @/var/tmp/ansible/edx_sandbox.retry

localhost                  : ok=195  changed=151  unreachable=0    failed=1  

estimated cost for the shortstack EDX

thank you for your efforts in this great projet.

I wonder how does it cost to host EDX in Amazon CloudFormation ???

for the minmum requiremnts of resources, if I don't want to use redundant classes of servers for fault tolerance. I need just an estimation for 1k users in the beginning the cost to decide if my budget would be enough for EDX or not.

thank you again

configuration error elasticsearch failed on port 9200 9300

when i make
ansible-playbook -c local --limit "localhost:127.0.0.1"
./edx_sandbox.yml -i "localhost,"

have error

ok: [localhost] => (item={'host': 'localhost', 'port': '4567', 'service': 'sinatra'})
ok: [localhost] => (item={'host': u'localhost', 'port': '27017', 'service': 'mongo'})
ok: [localhost] => (item={'host': u'localhost', 'port': '28017', 'service': 'mongo'})

failed: [localhost] => (item={'host': u'localhost', 'port': '9200', 'service': 'elasticsearch'}) => {"elapsed": 10, "failed": true, "item": {"host": "localhost", "port": "9200", "service": "elasticsearch"}}
msg: Timeout when waiting for 127.0.0.1:9200
failed: [localhost] => (item={'host': u'localhost', 'port': '9300', 'service': 'elasticsearch'}) => {"elapsed": 10, "failed": true, "item": {"host": "localhost", "port": "9300", "service": "elasticsearch"}}
msg: Timeout when waiting for 127.0.0.1:9300

i look at issue https://github.com/edx/configuration/issues/204, but there problem start from with sinatra

Ansible Install fails on RabbitMQ

OS: Ubuntu 12.04 x64

TASK: [rabbitmq | remove guest user] ******************************************
failed: [localhost] => {"cmd": ["/usr/sbin/rabbitmqctl", "-q", "-n", "rabbit", "list_users"], "failed": true, "item": "", "rc": 2}
stderr: Error: unable to connect to node rabbit@localhost: nodedown

DIAGNOSTICS

nodes in question: [rabbit@localhost]

hosts, their running nodes and ports:

  • localhost: [{rabbit,39680},{rabbitmqctl26036,38523}]

current node details:

  • node name: rabbitmqctl26036@localhost
  • home dir: /var/lib/rabbitmq
  • cookie hash: /SlUT7vhXv2QW/B4ApbS5Q==

msg: Error: unable to connect to node rabbit@localhost: nodedown

DIAGNOSTICS

nodes in question: [rabbit@localhost]

hosts, their running nodes and ports:

  • localhost: [{rabbit,39680},{rabbitmqctl26036,38523}]

current node details:

  • node name: rabbitmqctl26036@localhost
  • home dir: /var/lib/rabbitmq
  • cookie hash: /SlUT7vhXv2QW/B4ApbS5Q==

FATAL: all hosts have already failed -- aborting

PLAY RECAP ********************************************************************
to retry, use: --limit @/root/edx_sandbox.retry

localhost : ok=132 changed=31 unreachable=0 failed=1

Restart LMS and Studio

Hi,
I set up edx on ec2, but i realised i was running out of disk space, and so i created a snapshot of my volume and used it to create a larger volume, after attaching it to the instance, i could no longer access lms and studio with my instance's ip.

I tried restarting gunicorn and nginx, but nothing changed.
I'm thinking of starting the whole process over, but surely, there's a better way to get this working.
Thanks.

How to set up edx server

I got edx-platform installed and my next concern is how to set up the web sever for it so that people can visit the edx on my server.

Customize signup emails and html

How can i customize the email messages sent out after registration.
Also i would like to update the homepage to the new one used by edx, it's there a recommended way of doing this?
Thanks

the -vvv option to anisble-playbook?

Hello,

A command in the README.md file, refers to a '-vvv' option to the ansible-playbook.

    $ git diff README.md 
    diff --git a/README.md b/README.md
    index ba1371d..46fe36a 100644
    --- a/README.md
    +++ b/README.md
    @@ -168,7 +168,7 @@ playbooks

       ```
       cd playbooks
    -  ansible-playbook  -vvv cloudformation.yml -i inventory.ini  -e 'region=<aws_region> key=<key_name> name=<st
    +  ansible-playbook cloudformation.yml -i inventory.ini  -e 'region=<aws_region> key=<key_name> name=<stack_na
       ```

     * _aws_region_: example: `us-east-1`. Which AWS EC2 region to build stack in.

Is this a typo? When I read the manage for this command for ansible 1.2, I didn't see it. If it is a typo or should it be '-v' or simply omitted?

-jk

Discern Role Missing Variable

I was trying to add the discern role to a vagrant build and got:
fatal: [192.168.33.10] => {'msg': 'Undefined is not JSON serializable', 'failed': True}
fatal: [192.168.33.10] => {'msg': 'Undefined is not JSON serializable', 'failed': True}

I greped the entire configuration tree and couldn't find the env_config variable asked for in the env.json.j2 template. Is this something that is supposed to be defined in the secure variables, and if so is there some guidance on what that should look like, or am I missing something obvious?

Thanks

Question - without virtenv for python and ruby

Hi everyone,

Is there a plan to configure/deploy edx without virtenv of python and ruby? In a real production environment, I would like to use system python/ruby environment. I am very interested in this project. Just need some suggestions to start with.

Thanks,
Gene

Couldn't install ElastiCache on AWS/AvailabilityZone Invalid Parameter

Hi all,

I followed the instructions https://github.com/edx/configuration/wiki/AWS-Installation and have successfully created an initial stack from CloudFormation. Then, I was trying to manually install ElastiCached, but got the following error:

$ aws elasticache create-cache-subnet-group --cache-subnet-group-name vpc-#zzzzzz-ElasticCacheSubnetGroup --cache-subnet-group-description 'VPC ElasticCache Subnet Group' --subnet-ids subnet-#xxxxxx subnet-#yyyyyy

A client error (InvalidParameterValue) occurred: Some input subnets in :[subnet-#xxxxxx, subnet-#yyyyyy] are invalid.

The values #xxxxxx and #yyyyyy are the values I got from the Outputs section.

I'm not really sure why input subsets are invalid.

One thing that might be the cause though, is the following. When I used the template without changing other fields that required changes, I got the error that:

Value (us-west-1a) for parameter availabilityZone is invalid. Subnets can currently only be created in the following availability zones: us-west-1b, us-west-1c.

So I changed "AvailabilityZone" from "AZone0" to "AZone1" and from those that were originally "AZone1" to "AZone2" and this fixed the problem.

Am I not supposed to do that?

Any help is really appreciated!

Thanks,
Tum

Starting ElasticSearch Server ... fail!

I did all steps at https://github.com/edx/configuration/wiki to install edX on a single Ubuntu 12.04 (Precise) server.

But at last step: sudo ansible-playbook -c local --limit "localhost:127.0.0.1"
./edx_sandbox.yml -i "localhost,"

it can not continue because of an error:

Task: [elasticsearch | Ensure elasticsearch is enabled and started]
failed: [localhost] => {"failed": true, "item": ""}
msg: * Starting ElasticSearch Server
... fail!
FATAL: all hosts have already failed -- aborting

I dont know why i get this error. It's a fresh installation of Ubuntu server 12.04 on VMware.

Plz help me fix that, tks!

When i run the "sudo ansible-playbook -c local --limit "localhost:127.0.0.1" \ ./edx_sandbox.yml -i "localhost,""

TASK: [xqueue | syncdb and migrate] *******************************************
failed: [localhost] => {"changed": true, "cmd": "sudo -u xqueue SERVICE_VARIANT=xqueue /opt/xqueue/virtualenvs/xqueue/bin/django-admin.py syncdb --migrate --noinput --settings=xqueue.aws_settings --pythonpath=/opt/wwc/xqueue ", "delta": "0:00:00.248935", "end": "2013-09-29 13:53:04.441978", "item": "", "rc": 1, "start": "2013-09-29 13:53:04.193043"}
stderr: Traceback (most recent call last):
File "/opt/xqueue/virtualenvs/xqueue/bin/django-admin.py", line 5, in
management.execute_from_command_line()
File "/opt/xqueue/virtualenvs/xqueue/local/lib/python2.7/site-packages/django/core/management/init.py", line 443, in execute_from_command_line
utility.execute()
File "/opt/xqueue/virtualenvs/xqueue/local/lib/python2.7/site-packages/django/core/management/init.py", line 382, in execute
self.fetch_command(subcommand).run_from_argv(self.argv)
File "/opt/xqueue/virtualenvs/xqueue/local/lib/python2.7/site-packages/django/core/management/init.py", line 261, in fetch_command
klass = load_command_class(app_name, subcommand)
File "/opt/xqueue/virtualenvs/xqueue/local/lib/python2.7/site-packages/django/core/management/init.py", line 69, in load_command_class
module = import_module('%s.management.commands.%s' % (app_name, name))
File "/opt/xqueue/virtualenvs/xqueue/local/lib/python2.7/site-packages/django/utils/importlib.py", line 35, in import_module
import(name)
File "/opt/xqueue/virtualenvs/xqueue/local/lib/python2.7/site-packages/south/management/commands/init.py", line 13, in
from south.management.commands.syncdb import Command as SyncCommand
File "/opt/xqueue/virtualenvs/xqueue/local/lib/python2.7/site-packages/south/management/commands/syncdb.py", line 17, in
from south.db import dbs
File "/opt/xqueue/virtualenvs/xqueue/local/lib/python2.7/site-packages/south/db/init.py", line 81, in
db = dbs[DEFAULT_DB_ALIAS]
KeyError: 'default'

FATAL: all hosts have already failed -- aborting

PLAY RECAP ********************************************************************
to retry, use: --limit @/root/edx_sandbox.retry

localhost : ok=217 changed=63 unreachable=0 failed=1

Owner of /opt/wwc/forum/.bashrc Changed

The owner of /opt/wwc/forum/.bashrc is changed from forum to root during a single run of ansible-playbook, and will cause a permission denied error in the second run.

TASK: [rbenv | ensure .bashrc exists] *****************************************
failed: [localhost] => {"changed": true, "cmd": "touch /opt/wwc/forum/.bashrc ", "delta": "0:00:00.029351", "end": "2013-08-16 10:57:59.306023", "item": "", "rc": 1, "start": "2013-08-16 10:57:59.276672"}
stderr: touch: cannot touch `/opt/wwc/forum/.bashrc': Permission denied

TASK: [gather lms static assets with rake] 2

``failed: [localhost] => {"changed": true, "cmd": " SERVICE_VARIANT=lms rake lms:gather_assets:aws ", "delta": "0:00:06.363841", "end": "2013-09-14 16:31:00.706506", "item": "", "rc": 1, "start": "2013-09-14 16:30:54.342665"}
stderr: mkdir -p /opt/wwc/edx-platform/.ws_migrations_complete
./manage.py lms --settings aws preprocess_assets --traceback
xmodule_assets common/static/xmodule
Traceback (most recent call last):
File "./manage.py", line 95, in
execute_from_command_line([sys.argv[0]] + django_args)
File "/opt/edx/local/lib/python2.7/site-packages/django/core/management/init.py", line 443, in execute_from_command_line
utility.execute()
File "/opt/edx/local/lib/python2.7/site-packages/django/core/management/init.py", line 382, in execute
self.fetch_command(subcommand).run_from_argv(self.argv)
File "/opt/edx/local/lib/python2.7/site-packages/django/core/management/base.py", line 196, in run_from_argv
self.execute(*args, **options.dict)
File "/opt/edx/local/lib/python2.7/site-packages/django/core/management/base.py", line 231, in execute
self.validate()
File "/opt/edx/local/lib/python2.7/site-packages/django/core/management/base.py", line 266, in validate
num_errors = get_validation_errors(s, app)
File "/opt/edx/local/lib/python2.7/site-packages/django/core/management/validation.py", line 30, in get_validation_errors
for (app_name, error) in get_app_errors().items():
File "/opt/edx/local/lib/python2.7/site-packages/django/db/models/loading.py", line 158, in get_app_errors
self._populate()
File "/opt/edx/local/lib/python2.7/site-packages/django/db/models/loading.py", line 64, in _populate
self.load_app(app_name, True)
File "/opt/edx/local/lib/python2.7/site-packages/django/db/models/loading.py", line 88, in load_app
models = import_module('.models', app_name)
File "/opt/edx/local/lib/python2.7/site-packages/django/utils/importlib.py", line 35, in import_module
import(name)
File "/opt/wwc/edx-platform/lms/djangoapps/shoppingcart/models.py", line 22, in
from verify_student.models import SoftwareSecurePhotoVerification
File "/opt/wwc/edx-platform/lms/djangoapps/verify_student/models.py", line 75, in
class PhotoVerification(StatusModel):
File "/opt/wwc/edx-platform/lms/djangoapps/verify_student/models.py", line 116, in PhotoVerification
DAYS_GOOD_FOR = settings.VERIFY_STUDENT["DAYS_GOOD_FOR"]
TypeError: string indices must be integers, not str
asset preprocessing failed!
node_modules/.bin/coffee --compile find . -name *.coffee

FATAL: all hosts have already failed -- aborting

command rake lms:gather_assets:aws witch i find at code work fine if i run it without asible but asible-playbook always give this error. What i can do ?

After I run the edx_sandbox.yml locally, the installation process stuck at TASK: [restart edxapp]

Hi, I am trying running the edx_sandbox.yml locally on an ec2 instance with command "/opt/ansible/bin/ansible-playbook -vvv --user=ubuntu edx_sandbox.yml -i inventory.ini -e 'secure_dir=secure_example' --connection=local". (Yeah, I already remove the cofniguration for create instance )

I came across several problems. First one is the script can not create 'wwc' database. the second one is it failed to change '/opt/edx/lib/python2.7/site-packages/django_openid_auth/models.py'. But these two problems can be manully fixed.

After running for a while, it stuck at:
TASK: [restart edxapp] ********************************************************

Does anyone know what's the problem with this ?

TASK: [gather lms static assets with rake] Fresh install

I download latest version of edx code and install on clean install Ubuntu 12.04
failed: [localhost] => {"changed": true, "cmd": " SERVICE_VARIANT=lms rake lms:gather_assets:aws ", "delta": "0:00:06.656451", "end": "2013-09-15 16:42:19.488543", "item": "", "rc": 1, "start": "2013-09-15 16:42:12.832092"}
stderr: mkdir -p /opt/wwc/edx-platform/.ws_migrations_complete
./manage.py lms --settings aws preprocess_assets --traceback
xmodule_assets common/static/xmodule
Traceback (most recent call last):
File "./manage.py", line 95, in
execute_from_command_line([sys.argv[0]] + django_args)
File "/opt/edx/local/lib/python2.7/site-packages/django/core/management/init.py", line 443, in execute_from_command_line
utility.execute()
File "/opt/edx/local/lib/python2.7/site-packages/django/core/management/init.py", line 382, in execute
self.fetch_command(subcommand).run_from_argv(self.argv)
File "/opt/edx/local/lib/python2.7/site-packages/django/core/management/base.py", line 196, in run_from_argv
self.execute(_args, *_options.dict)
File "/opt/edx/local/lib/python2.7/site-packages/django/core/management/base.py", line 231, in execute
self.validate()
File "/opt/edx/local/lib/python2.7/site-packages/django/core/management/base.py", line 266, in validate
num_errors = get_validation_errors(s, app)
File "/opt/edx/local/lib/python2.7/site-packages/django/core/management/validation.py", line 30, in get_validation_errors
for (app_name, error) in get_app_errors().items():
File "/opt/edx/local/lib/python2.7/site-packages/django/db/models/loading.py", line 158, in get_app_errors
self._populate()
File "/opt/edx/local/lib/python2.7/site-packages/django/db/models/loading.py", line 64, in _populate
self.load_app(app_name, True)
File "/opt/edx/local/lib/python2.7/site-packages/django/db/models/loading.py", line 88, in load_app
models = import_module('.models', app_name)
File "/opt/edx/local/lib/python2.7/site-packages/django/utils/importlib.py", line 35, in import_module
import(name)
File "/opt/wwc/edx-platform/lms/djangoapps/shoppingcart/models.py", line 22, in
from verify_student.models import SoftwareSecurePhotoVerification
File "/opt/wwc/edx-platform/lms/djangoapps/verify_student/models.py", line 75, in
class PhotoVerification(StatusModel):
File "/opt/wwc/edx-platform/lms/djangoapps/verify_student/models.py", line 116, in PhotoVerification
DAYS_GOOD_FOR = settings.VERIFY_STUDENT["DAYS_GOOD_FOR"]
TypeError: string indices must be integers, not str
asset preprocessing failed!
node_modules/.bin/coffee --compile find . -name *.coffee

FATAL: all hosts have already failed -- aborting

Can someone help with that problem.
I can only found that its, maybe, droped on rake lms.envs.aws config loading.
Thanks

lxml compile error when running ansible-playbook

I was following the "Install edX on a single Ubuntu 12.04 server" instructions on this wiki page: https://github.com/edx/configuration/wiki

And encountered this error when running the ansible-playbook command:

building 'lxml.etree' extension

creating build/temp.linux-x86_64-2.7

creating build/temp.linux-x86_64-2.7/src

creating build/temp.linux-x86_64-2.7/src/lxml

gcc -pthread -fno-strict-aliasing -DNDEBUG -g -fwrapv -O2 -Wall -Wstrict-prototypes -fPIC -I/usr/include/libxml2 -I/opt/edx/build/lxml/src/lxml/includes -I/usr/include/python2.7 -c src/lxml/lxml.etree.c -o build/temp.linux-x86_64-2.7/src/lxml/lxml.etree.o

src/lxml/lxml.etree.c: In function ‘__pyx_f_4lxml_5etree__getFilenameForFile’:

src/lxml/lxml.etree.c:26310:7: warning: variable ‘__pyx_clineno’ set but not used [-Wunused-but-set-variable]

src/lxml/lxml.etree.c:26309:15: warning: variable ‘__pyx_filename’ set but not used [-Wunused-but-set-variable]

src/lxml/lxml.etree.c:26308:7: warning: variable ‘__pyx_lineno’ set but not used [-Wunused-but-set-variable]

src/lxml/lxml.etree.c: In function ‘__pyx_pf_4lxml_5etree_4XSLT_18__call__’:

src/lxml/lxml.etree.c:132608:81: warning: passing argument 1 of ‘__pyx_f_4lxml_5etree_12_XSLTContext__copy’ from incompatible pointer type [enabled by default]

src/lxml/lxml.etree.c:130569:52: note: expected ‘struct __pyx_obj_4lxml_5etree__XSLTContext *’ but argument is of type ‘struct __pyx_obj_4lxml_5etree__BaseContext *’

src/lxml/lxml.etree.c: In function ‘__pyx_f_4lxml_5etree__copyXSLT’:

src/lxml/lxml.etree.c:133997:79: warning: passing argument 1 of ‘__pyx_f_4lxml_5etree_12_XSLTContext__copy’ from incompatible pointer type [enabled by default]

src/lxml/lxml.etree.c:130569:52: note: expected ‘struct __pyx_obj_4lxml_5etree__XSLTContext *’ but argument is of type ‘struct __pyx_obj_4lxml_5etree__BaseContext *’

src/lxml/lxml.etree.c: At top level:

src/lxml/lxml.etree.c:12128:13: warning: ‘__pyx_f_4lxml_5etree_displayNode’ defined but not used [-Wunused-function]

gcc: internal compiler error: Killed (program cc1)

Please submit a full bug report,

with preprocessed source if appropriate.

See <file:///usr/share/doc/gcc-4.6/README.Bugs> for instructions.

error: command 'gcc' failed with exit status 4

----------------------------------------
Cleaning up...
Command /opt/edx/bin/python -c "import setuptools;__file__='/opt/edx/build/lxml/setup.py';exec(compile(open(__file__).read().replace('\r\n', '\n'), __file__, 'exec'))" install --record /tmp/pip-789Kl5-record/install-record.txt --single-version-externally-managed --install-headers /opt/edx/include/site/python2.7 failed with error code 1 in /opt/edx/build/lxml

FATAL: all hosts have already failed -- aborting

PLAY RECAP ******************************************************************** 
           to retry, use: --limit @/var/tmp/ansible/edx_sandbox.retry

localhost                  : ok=115  changed=104  unreachable=0    failed=1   

Playbook fails on "'facter_processorcount' is undefined"

Running the edx-platform ansible playbook on a single server scenario (Ubuntu 12.04 on AWS) halts on the following error:

TASK: [writing lms upstart script to /etc/init] *******************************
fatal: [localhost] => {'msg': "'facter_processorcount' is undefined", 'failed': True}

Problem with ssh command in "Connecting to host in stack"

I am setting up the edx stack and have come to the point where i need to connect to host in the stack using ssh. Here's the url.
I added these lines to my ~/.ssh/config file:

Host *.us-west-1.compute-internal
  ProxyCommand ssh -W %h:%p vpc-us-west-1-jumpbox
  ForwardAgent yes

Host vpc-us-west-1-jumpbox
  HostName 54.236.202.101
  ForwardAgent yes

after modifying to this:

Host *.us-east-1.compute-internal
  ProxyCommand ssh -W %h:%p vpc-us-east-1-jumpbox
  ForwardAgent yes

Host vpc-us-east-1-jumpbox
  HostName 54.236.202.101
  ForwardAgent yes

I changed the region from us-west-1 to us-east-1
Because i realised the region for the instances created by the stack are in us east 1
I also changed the HostName to one of the elastic ips created by the stack

When i tried testing with the given command:

ssh ip-10-0-10-1.us-west-1.compute.internal

I had the following error:

ssh: Could not resolve hostname ip-10-0-10-1.us-west-1.compute.internal: No such file or directory

I realised that in the config file, we had something like compute-internal at the end of the hostname, while in the command, we had compute.internal. I wonder if this is the cause?

But i had the same error even after changing from dot to hyphen.
I am wondering if i made any unnecessary changes or overlooked any.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.