| OLD | NEW |
| 1 # Copyright 2016 The Chromium Authors. All rights reserved. | 1 # Copyright 2016 The Chromium Authors. All rights reserved. |
| 2 # Use of this source code is governed by a BSD-style license that can be | 2 # Use of this source code is governed by a BSD-style license that can be |
| 3 # found in the LICENSE file. | 3 # found in the LICENSE file. |
| 4 | 4 |
| 5 # Script executed at instance startup. It installs the required dependencies, | 5 # Script executed at instance startup. It installs the required dependencies, |
| 6 # downloads the source code, and starts a web server. | 6 # downloads the source code, and starts a web server. |
| 7 | 7 |
| 8 set -v | 8 set -v |
| 9 | 9 |
| 10 get_instance_metadata() { | 10 get_instance_metadata() { |
| (...skipping 20 matching lines...) Expand all Loading... |
| 31 apt-get install -yq xvfb | 31 apt-get install -yq xvfb |
| 32 | 32 |
| 33 # Create a pythonapp user. The application will run as this user. | 33 # Create a pythonapp user. The application will run as this user. |
| 34 useradd -m -d /home/pythonapp pythonapp | 34 useradd -m -d /home/pythonapp pythonapp |
| 35 | 35 |
| 36 # pip from apt is out of date, so make it update itself and install virtualenv. | 36 # pip from apt is out of date, so make it update itself and install virtualenv. |
| 37 pip install --upgrade pip virtualenv | 37 pip install --upgrade pip virtualenv |
| 38 | 38 |
| 39 # Download the Clovis deployment from Google Cloud Storage and unzip it. | 39 # Download the Clovis deployment from Google Cloud Storage and unzip it. |
| 40 # It is expected that the contents of the deployment have been generated using | 40 # It is expected that the contents of the deployment have been generated using |
| 41 # the tools/android/loading/gce/deploy.sh script. | 41 # the tools/android/loading/cloud/backend/deploy.sh script. |
| 42 CLOUD_STORAGE_PATH=`get_instance_metadata cloud-storage-path` | 42 CLOUD_STORAGE_PATH=`get_instance_metadata cloud-storage-path` |
| 43 DEPLOYMENT_PATH=$CLOUD_STORAGE_PATH/deployment | 43 DEPLOYMENT_PATH=$CLOUD_STORAGE_PATH/deployment |
| 44 | 44 |
| 45 mkdir -p /opt/app/clovis | 45 mkdir -p /opt/app/clovis |
| 46 gsutil cp gs://$DEPLOYMENT_PATH/source/source.tgz /opt/app/clovis/source.tgz | 46 gsutil cp gs://$DEPLOYMENT_PATH/source/source.tgz /opt/app/clovis/source.tgz |
| 47 tar xvf /opt/app/clovis/source.tgz -C /opt/app/clovis | 47 tar xvf /opt/app/clovis/source.tgz -C /opt/app/clovis |
| 48 rm /opt/app/clovis/source.tgz | 48 rm /opt/app/clovis/source.tgz |
| 49 | 49 |
| 50 # Install app dependencies | 50 # Install app dependencies |
| 51 virtualenv /opt/app/clovis/env | 51 virtualenv /opt/app/clovis/env |
| 52 /opt/app/clovis/env/bin/pip install \ | 52 /opt/app/clovis/env/bin/pip install -r \ |
| 53 -r /opt/app/clovis/src/tools/android/loading/gce/pip_requirements.txt | 53 /opt/app/clovis/src/tools/android/loading/cloud/backend/pip_requirements.txt |
| 54 | 54 |
| 55 mkdir /opt/app/clovis/binaries | 55 mkdir /opt/app/clovis/binaries |
| 56 gsutil cp gs://$DEPLOYMENT_PATH/binaries/* /opt/app/clovis/binaries/ | 56 gsutil cp gs://$DEPLOYMENT_PATH/binaries/* /opt/app/clovis/binaries/ |
| 57 unzip /opt/app/clovis/binaries/linux.zip -d /opt/app/clovis/binaries/ | 57 unzip /opt/app/clovis/binaries/linux.zip -d /opt/app/clovis/binaries/ |
| 58 | 58 |
| 59 # Install the Chrome sandbox | 59 # Install the Chrome sandbox |
| 60 cp /opt/app/clovis/binaries/chrome_sandbox /usr/local/sbin/chrome-devel-sandbox | 60 cp /opt/app/clovis/binaries/chrome_sandbox /usr/local/sbin/chrome-devel-sandbox |
| 61 chown root:root /usr/local/sbin/chrome-devel-sandbox | 61 chown root:root /usr/local/sbin/chrome-devel-sandbox |
| 62 chmod 4755 /usr/local/sbin/chrome-devel-sandbox | 62 chmod 4755 /usr/local/sbin/chrome-devel-sandbox |
| 63 | 63 |
| 64 # Make sure the pythonapp user owns the application code | 64 # Make sure the pythonapp user owns the application code |
| 65 chown -R pythonapp:pythonapp /opt/app | 65 chown -R pythonapp:pythonapp /opt/app |
| 66 | 66 |
| 67 # Create the configuration file for this deployment. | 67 # Create the configuration file for this deployment. |
| 68 DEPLOYMENT_CONFIG_PATH=/opt/app/clovis/deployment_config.json | 68 DEPLOYMENT_CONFIG_PATH=/opt/app/clovis/deployment_config.json |
| 69 TASKQUEUE_TAG=`get_instance_metadata taskqueue_tag` |
| 69 cat >$DEPLOYMENT_CONFIG_PATH << EOF | 70 cat >$DEPLOYMENT_CONFIG_PATH << EOF |
| 70 { | 71 { |
| 71 "project_name" : "$PROJECTID", | 72 "project_name" : "$PROJECTID", |
| 72 "cloud_storage_path" : "$CLOUD_STORAGE_PATH", | 73 "cloud_storage_path" : "$CLOUD_STORAGE_PATH", |
| 73 "chrome_path" : "/opt/app/clovis/binaries/chrome", | 74 "chrome_path" : "/opt/app/clovis/binaries/chrome", |
| 74 "src_path" : "/opt/app/clovis/src" | 75 "src_path" : "/opt/app/clovis/src", |
| 76 "taskqueue_tag" : "$TASKQUEUE_TAG" |
| 75 } | 77 } |
| 76 EOF | 78 EOF |
| 77 | 79 |
| 78 # Check if auto-start is enabled | 80 # Check if auto-start is enabled |
| 79 AUTO_START=`get_instance_metadata auto-start` | 81 AUTO_START=`get_instance_metadata auto-start` |
| 80 | 82 |
| 81 # Exit early if auto start is not enabled. | 83 # Exit early if auto start is not enabled. |
| 82 if [ "$AUTO_START" != "true" ]; then | 84 if [ "$AUTO_START" == "false" ]; then |
| 83 exit 1 | 85 exit 1 |
| 84 fi | 86 fi |
| 85 | 87 |
| 86 # Configure supervisor to start gunicorn inside of our virtualenv and run the | 88 # Configure supervisor to start the worker inside of our virtualenv. |
| 87 # applicaiton. | |
| 88 cat >/etc/supervisor/conf.d/python-app.conf << EOF | 89 cat >/etc/supervisor/conf.d/python-app.conf << EOF |
| 89 [program:pythonapp] | 90 [program:pythonapp] |
| 90 directory=/opt/app/clovis/src/tools/android/loading/gce | 91 directory=/opt/app/clovis/src/tools/android/loading/cloud/backend |
| 91 command=/opt/app/clovis/env/bin/gunicorn --workers=1 --bind 0.0.0.0:8080 \ | 92 command=python worker.py --config $DEPLOYMENT_CONFIG_PATH |
| 92 'main:StartApp('\"$DEPLOYMENT_CONFIG_PATH\"')' | |
| 93 autostart=true | 93 autostart=true |
| 94 autorestart=true | 94 autorestart=true |
| 95 user=pythonapp | 95 user=pythonapp |
| 96 # Environment variables ensure that the application runs inside of the | 96 # Environment variables ensure that the application runs inside of the |
| 97 # configured virtualenv. | 97 # configured virtualenv. |
| 98 environment=VIRTUAL_ENV="/opt/app/clovis/env", \ | 98 environment=VIRTUAL_ENV="/opt/app/clovis/env", \ |
| 99 PATH="/opt/app/clovis/env/bin:/usr/bin", \ | 99 PATH="/opt/app/clovis/env/bin:/usr/bin", \ |
| 100 HOME="/home/pythonapp",USER="pythonapp", \ | 100 HOME="/home/pythonapp",USER="pythonapp", \ |
| 101 CHROME_DEVEL_SANDBOX="/usr/local/sbin/chrome-devel-sandbox" | 101 CHROME_DEVEL_SANDBOX="/usr/local/sbin/chrome-devel-sandbox" |
| 102 stdout_logfile=syslog | 102 stdout_logfile=syslog |
| 103 stderr_logfile=syslog | 103 stderr_logfile=syslog |
| 104 EOF | 104 EOF |
| 105 | 105 |
| 106 supervisorctl reread | 106 supervisorctl reread |
| 107 supervisorctl update | 107 supervisorctl update |
| 108 | 108 |
| OLD | NEW |