From 2615c04e7f1b42874b31fb0a15eee50f84ead868 Mon Sep 17 00:00:00 2001 From: Bill Prin Date: Fri, 29 Jan 2016 16:26:13 -0800 Subject: [PATCH 1/2] Basic Kinto Example --- managed_vms/kinto/Dockerfile | 42 ++++++++++++++++++++++++++++++ managed_vms/kinto/app.yaml | 30 +++++++++++++++++++++ managed_vms/kinto/requirements.txt | 3 +++ 3 files changed, 75 insertions(+) create mode 100644 managed_vms/kinto/Dockerfile create mode 100644 managed_vms/kinto/app.yaml create mode 100644 managed_vms/kinto/requirements.txt diff --git a/managed_vms/kinto/Dockerfile b/managed_vms/kinto/Dockerfile new file mode 100644 index 00000000000..e439a97194c --- /dev/null +++ b/managed_vms/kinto/Dockerfile @@ -0,0 +1,42 @@ +# Copyright 2015 Google Inc. +# +# Licensed 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 + +# The Google App Engine python runtime is Debian Jessie with Python installed +# and various os-level packages to allow installation of popular Python +# libraries. The source is on github at: +# https://github.com/GoogleCloudPlatform/python-docker +FROM gcr.io/google_appengine/python + +# Create a virtualenv for the application dependencies. +# If you want to use Python 3, add the -p python3.4 flag. +RUN virtualenv /env + +# Set virtualenv environment variables. This is equivalent to running +# source /env/bin/activate. This ensures the application is executed within +# the context of the virtualenv and will have access to its dependencies. +ENV VIRTUAL_ENV /env +ENV PATH /env/bin:$PATH +ENV KINTO_INI /etc/kinto/kinto.ini + +# Install dependencies. +ADD requirements.txt /app/requirements.txt +RUN pip install -r /app/requirements.txt +RUN kinto --ini $KINTO_INI --backend=memory init && sed -i 's/8888/8080/g' $KINTO_INI + +# Add application code. +ADD . /app + +# Use Gunicorn to serve the application. +CMD kinto --ini $KINTO_INI migrate && kinto --ini $KINTO_INI start + diff --git a/managed_vms/kinto/app.yaml b/managed_vms/kinto/app.yaml new file mode 100644 index 00000000000..41e51d59e03 --- /dev/null +++ b/managed_vms/kinto/app.yaml @@ -0,0 +1,30 @@ +# Copyright 2015 Google Inc. +# +# Licensed 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. + +# This file specifies your Python application's runtime configuration. +# See https://cloud.google.com/appengine/docs/managed-vms/config for details. + +runtime: custom +vm: true +health_check: + enable_health_check: False +vm_health_check: + enable_health_check: False + +manual_scaling: + instances: 1 + +# Temporary setting to keep gcloud from uploading the virtualenv +skip_files: + - ^v?env$ diff --git a/managed_vms/kinto/requirements.txt b/managed_vms/kinto/requirements.txt new file mode 100644 index 00000000000..af58463399c --- /dev/null +++ b/managed_vms/kinto/requirements.txt @@ -0,0 +1,3 @@ +gunicorn==19.4.5 +oauth2client==1.5.2 +kinto From 9b97c28b0c5a4d1637728188be2a447b02025c10 Mon Sep 17 00:00:00 2001 From: Bill Prin Date: Fri, 29 Jan 2016 16:27:54 -0800 Subject: [PATCH 2/2] Basic Kinto Example --- managed_vms/kinto/Dockerfile | 8 ++++---- managed_vms/kinto/README.md | 18 ++++++++++++++++++ managed_vms/kinto/app.yaml | 6 ++++-- managed_vms/kinto/requirements.txt | 2 +- 4 files changed, 27 insertions(+), 7 deletions(-) create mode 100644 managed_vms/kinto/README.md diff --git a/managed_vms/kinto/Dockerfile b/managed_vms/kinto/Dockerfile index e439a97194c..ddb731ad2a3 100644 --- a/managed_vms/kinto/Dockerfile +++ b/managed_vms/kinto/Dockerfile @@ -27,16 +27,16 @@ RUN virtualenv /env # the context of the virtualenv and will have access to its dependencies. ENV VIRTUAL_ENV /env ENV PATH /env/bin:$PATH + +# Kinto config file ENV KINTO_INI /etc/kinto/kinto.ini # Install dependencies. ADD requirements.txt /app/requirements.txt RUN pip install -r /app/requirements.txt +#Create Kinto config file and replace 8888 with 8080 RUN kinto --ini $KINTO_INI --backend=memory init && sed -i 's/8888/8080/g' $KINTO_INI -# Add application code. -ADD . /app - -# Use Gunicorn to serve the application. +# Run the Kinto kickoff command CMD kinto --ini $KINTO_INI migrate && kinto --ini $KINTO_INI start diff --git a/managed_vms/kinto/README.md b/managed_vms/kinto/README.md new file mode 100644 index 00000000000..5483adbe349 --- /dev/null +++ b/managed_vms/kinto/README.md @@ -0,0 +1,18 @@ +# Kinto Example + +This is a basic example of running Mozillas [Kinto](https://github.com/Kinto/kinto/blob/master/docs/index.rst) +on Managed VMs. Kinto provides a framework to sync JSON data across many devices and provide push notifications. +Thius example uses a custom runtime to install Kinto and edit the config to run it on port 8080, which is the port that +the base Docker image is expecting. + +Since Kinto is being imported as a Python library and run as-is, no additional code is necessary. + +Note that this is using Kinto's basic in-memory backend. As such, the instances are tied to 1. A production +version of Kinto would use a PostgreSQL database and Redis cluster, which would allow scaling to many instances. + +If you are interested in seeing this example expanded to use PostgreSQL, you can file an Issue on the Issue +Tracker, or submit a Pull Request if you've accomplished it yourself. + + + + diff --git a/managed_vms/kinto/app.yaml b/managed_vms/kinto/app.yaml index 41e51d59e03..6819c1facc9 100644 --- a/managed_vms/kinto/app.yaml +++ b/managed_vms/kinto/app.yaml @@ -17,14 +17,16 @@ runtime: custom vm: true -health_check: - enable_health_check: False + +# Kinto does not respond 404 to /_ah/health (sends a redirect) vm_health_check: enable_health_check: False +# Using an in-memory backend so lock instances to 1 manual_scaling: instances: 1 + # Temporary setting to keep gcloud from uploading the virtualenv skip_files: - ^v?env$ diff --git a/managed_vms/kinto/requirements.txt b/managed_vms/kinto/requirements.txt index af58463399c..611c5c13e33 100644 --- a/managed_vms/kinto/requirements.txt +++ b/managed_vms/kinto/requirements.txt @@ -1,3 +1,3 @@ gunicorn==19.4.5 oauth2client==1.5.2 -kinto +kinto==1.11.2