Author: rgardler Date: Thu Aug 13 22:18:27 2015 New Revision: 1695791 URL: http://svn.apache.org/r1695791 Log: add some initial docs on working without docker, plus some small web app docs improvmenets
Modified: comdev/tools/readme.md Modified: comdev/tools/readme.md URL: http://svn.apache.org/viewvc/comdev/tools/readme.md?rev=1695791&r1=1695790&r2=1695791&view=diff ============================================================================== --- comdev/tools/readme.md (original) +++ comdev/tools/readme.md Thu Aug 13 22:18:27 2015 @@ -3,9 +3,9 @@ development. # Features # -Currently we have a Command Line Interface and a Web Interface. The -CLI is easy to use but very simple. The web application has more -features but is more complex to use (and is in rapid development). +Currently we have a Command Line Interface and a Web Interface. At the +time of writing the CLI provides three output formats whereas the web +interface focusses on better data management. ## Command Line Features ## @@ -20,43 +20,13 @@ application. ## Web Application Features## -Basic features (mimicking the CLI): - - 1) Visit http://yourhost.com/events - 2) View the meetups that have been imported already (if any) - 3) [OPTIONAL] Click the "actions" dropdown in the top right and select "Import Meetups" to import any new meetups (be patient) - 4) Click the "actions" dropdown in the top right and select "Upcoming (Markdown)" - -Now you have your markdown file like the one generated in the -CLI. we've not implemented the email or twitter files yet. But will -gladly do so if you actually use them - let us know. - -Now for the additional features (there is more than this, poke around, -I just enumerate the ones I think you will find useful)... - -We can define multiple search terms we want to include. It's currently -set up for "Apache" only but we could add "Hadoop" for -example. Duplicate events will be removed. - -When viewing the events at http://yourhost.com/events you can click -"Mark Event N/A" and this will hide the event from view (and from the -markdown export). Better yet you can click "Mark Group N/A" this will -mark all meetups organized by this group in the database as N/A -(including ones that are subsequently imported). In other words make -the "Apache Junction" group as N/A and you'll never see a meetup from -them again. - -Click on a specific meetup and you are given a summary of the -event. On this page there is a "Later" button. Create yourself a -Hootsuite account and you can use this to schedule tweets at a -convenient time. - -There is more to the application than this but the above are the -things that most people find useful from the start. We welcome your -feature requests (preferably via the ComDev issue tracker). We welcome -contributions even more and are happy to help you figure out where to -put them if you want to do it yourself. - + * Import new meetups from meetups.com + * Export a markdown formated list of events in the next two weeks + * Schedule tweets via Hootsuite + * Mark events as not applicable (will no longer appear in event lists) + * Mark groups as not applicable (their events will never appear in event lists) + * Import members of groups + # Python CLI Script # To run the application as a Python script simply execyte get_meetups @@ -74,24 +44,40 @@ command line menu allowing you to work w Note that these are POSSIBLY Apache-related. Typically, there's around a 50% false positive rate, what with hiking trails, native American -dance enthusiasts, and helicopter fans. These lists MUST be manually +dance enthusiasts, and heilcopter fans. These lists MUST be manually filtered before they are used anywhere publicly. -See above for a description of a feture in the webapp version that -helps immensly with this filtering. - If you use this script be respectful of the included API key. -# Webapp # +# Development # -The webapp is a Dockerized application, the easiest way to get going -is to read the development section below. +ALthough not required it is recommended that you use Docker to manage +your development and deployment environment as this will automatically +configure your environment for you, though it does require you to have +installed Docker. + +## Without Docker ## + +To work without Docker (untested please improve these docs if you go this route): + + * [Install Python 2.7.x](https://www.python.org/downloads/) + * [Install Django and PostgreSQL](https://docs.djangoproject.com/en/1.8/topics/install/) + + * pip install -r requirements + * python manage.py makemigrations + * python manage.py migrate + * python manage.py runserver + +You should now have a copy running localy on port 8000. + +For more information on how the application is built you need to +understadn Django. A great starting point is the [Django +tutorial](https://docs.djangoproject.com/en/1.8/intro/tutorial01/) -# Development # ## Docker Prerequisites ## -If you are using Windows as your client mhine then it is a good idea +If you are using Windows as your client machine then it is a good idea to install Git for Windows from http://msysgit.github.io/. This will provide both Git and a Bash shell. We will use the Bash shell as a convenience since the scripts we have built are Bash scripts. @@ -112,36 +98,32 @@ Machine on other platforms see: http://d ### Docker Hosts ### -We provide a number of convenience scripts for working with the -application in the form of docker containers. In order to use these -scripts you will need to do the following: - - $ cp scripts/config.tmpl scripts/config.sh - -As a minimum you will need a Docker host for development. By default -this is called "dev" (you can change this name in the config.sh file -you just created). You'll most likely want this to be on your local -machine. So run the following command (as an administrator): +As a minimum you will need a Docker host for development. You'll most likely +want this to be on your local machine. So run the following command (as an +administrator): - $ docker-machine create -d hyper-v dev + $ docker-machine create -d hyper-v comdev Note the "-d hyper-v" is for Windows machines, you may want to use a different provider if you are developing on a different platform. -If you want to use a cloud provideor for your staging server then -create a machine on the appropriate cloud using docker-machine and -edit config.sh to point to the right machine name. +You'll also need to ensure that your docker client is using this +machine. Run the following command: + + $ eval "$(docker-machine env comdev)" #### Share your project code with the Docker Host #### You need to ensure your project directory is available on the Docker Host. On Windows you will need to share it explicitly. We've provided -a helper script to do this. +a helper script to do this. First, create a confiduration file: + + $ cp scripts/config.tmpl scripts/config.sh -You will need to edit the 'config.sh' file, paying close attention to -the section on Windows share configuration. +Edit the 'config.sh' file, paying close attention to the section on +Windows share configuration. -Now run: +No run: $ scripts/configHyper-v.sh @@ -158,96 +140,52 @@ containers during development. Your loca will be mapped into /project on the container, thus local edits will be available in your development container immediately. -We have provided a script that will setup a development environment -for you. To setup a clean environment (i.e. no starting data) on -either your dev or staging server using the command: - - $ scripts/push.sh - -NOTE: this command kills any running containers and restarts them -(see below for less destructive scripts). This will remove any data -that has been changed during the most recent development -activity. Only run this command if you are prepared to go back to a -clean dev state. - -Note that while this will start your development environment it does -not provide any starting data. Log in to your admin interface -(http:://yourhost.com/admin) and enter at least one -"hashtag". Hashtags are search terms used when searching meetups.com. - -## Migrating to a new DB version on the Dev machine +The first time you run the container you will need to configure the +database. Subsequent runs will just require standard Django commands +to be run. -If, rather than creating a clean development environment, you want to -migrate the database in a running instance of the application to a new -version of the application use the following command to generate any -migrations and execute them): +### First Run ### - $ script/migrateDev.sh +As with all Docker containers the first time you build and run them +the images and corresponding layers need to be downloaded. This can +take a few minutes. After the first run everything is very quick. -TODO: make the migration scripts work on staging servers not just dev -servers +Ensure you are in the project root and then start the postgres +database container: -NOTE: This will only work if each new field has defaults provided. The -system will report errors if no defaults are defined. If you do not -want to have a default in the final version of the database simply add -a default, run the migration, then remove the default and run the -migration again. + $ docker run -d -v //home/docker/project:/project -p 5432:5432 --name comdev_db postgres -## Backup and Restore +Build the application container: -In order to backup your data run the following command on the -meetups_app container (as root): + $ docker build -t comdev . - docker exec meetups_app python manage.py dumpscript > /home/project/comdev/tools/fixtures/events_list_data.py +Configure the application and the database: -This will use the docker_extensions command -"[dumpscript](http://django-extensions.readthedocs.org/en/latest/dumpscript.html)" -to create a script that can be used for rebuilding the database to -it's current state. + $ docker run --rm -v //home/docker/project:/project --link comdev_db:db comdev python manage.py makemigrations events_list + $ docker run --rm -v //home/docker/project:/project --link comdev_db:db comdev python manage.py migrate -When running in production it is recommended that you run this script -via a cron job or similar. However, note that depending on your setup -this may result in the backup data being saved to an ephemeral disk - -not ideal for a data backup. It is your responsbibility to ensure the -data is securely backed up from within the container. +Now, run the application: -### Interim backup solution + $ docker run --rm -v //home/docker/project:/project --link comdev_db:db -p 80:8000 --name comdev_app comdev python manage.py runserver 0.0.0.0:8000 -One way to backup the data, since it is just a text file, is to put it -in SVN along with the project code. This will be handled automatically -for you if you add a second argument "commit". +Now you can visit the app at http://docker.host -However, for this to work the script needs to be run by a user with -commit access to the repository. Also note that there is a danger that -users will overwrite the data with there own data from a local -instance of the application. - -Despite these drawbacks this is a good temporary workaround since you -will always have SVN history to revert to. - -TODO: implement a restore script - -## Running Django Commands on your Application Server ### +### Running Django Commands ### From this point development is just like any other Django application, but to run Django commands in the app container you will need to open a terminal on that machine. To do this run: - $ docker exec -it meetups_app bash + $ docker exec -it comdev_app bash -To run individual commands rather than entering an interactive shell: - - $ docker exec meetups_app python manage.py COMMAND - -## Using the Admin Interface ## +### Using the Admin Interface ### To access the admin interface of the application you need an admin -user account. If you used the push.sh script you will have defined an -admin user during initial deployment of the application. - -If you need to create another admin user then run the following -command: +user account. Assuming you are starting from a clean development +container (i.e. with no data in the database) you will need to create +an admin user. To do this run the following command in your Django +terminal. - $ docker exec -it meetups_app python manage.py createsuperuser + $ python manage.py createsuperuser Now you can log into the admin app at http://docker.host/admin