From 71d72fd62bc561e9b7c9692fa810670a20e747ff Mon Sep 17 00:00:00 2001 From: Sebastian Marcet Date: Thu, 13 Oct 2016 18:37:56 -0300 Subject: [PATCH] [smarcet] * added vagrant script * run vagrant up on root folder and a vm will be available on http://local.userstory.openstack.org/ * using apache2 as reverse proxy of API (port 3004) and the angular app (PORT 8080) --- .gitignore | 3 + Vagrantfile | 82 ++++++++++++++++++ dashboard-project-api/package.json | 2 +- dashboard-project-api/process.json | 8 ++ .../client/app/app.constant.js | 2 +- dashboard-project-app/client/app/app.js | 2 +- dashboard-project-app/process.json | 8 ++ .../server/config/environment/shared.js | 3 +- puppet/site.pp | 85 +++++++++++++++++++ puppet/templates/vhost.erb | 32 +++++++ scripts/bootstrap.sh | 9 ++ scripts/install_api.sh | 4 + scripts/install_app.sh | 17 ++++ scripts/run_apps.sh | 10 +++ 14 files changed, 263 insertions(+), 4 deletions(-) create mode 100644 .gitignore create mode 100644 Vagrantfile create mode 100644 dashboard-project-api/process.json create mode 100644 dashboard-project-app/process.json create mode 100644 puppet/site.pp create mode 100644 puppet/templates/vhost.erb create mode 100644 scripts/bootstrap.sh create mode 100644 scripts/install_api.sh create mode 100644 scripts/install_app.sh create mode 100644 scripts/run_apps.sh diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..66c9c2e --- /dev/null +++ b/.gitignore @@ -0,0 +1,3 @@ +.DS_Store +Thumbs.db +.vagrant diff --git a/Vagrantfile b/Vagrantfile new file mode 100644 index 0000000..9d1b721 --- /dev/null +++ b/Vagrantfile @@ -0,0 +1,82 @@ +# -*- mode: ruby -*- +# vi: set ft=ruby : + +required_plugins = %w( vagrant-vbguest vagrant-hosts vagrant-hostsupdater ) +required_plugins.each do |plugin| + system "vagrant plugin install #{plugin}" unless Vagrant.has_plugin? plugin +end + +# All Vagrant configuration is done below. The "2" in Vagrant.configure +# configures the configuration version (we support older styles for +# backwards compatibility). Please don't change it unless you know what +# you're doing. +Vagrant.configure(2) do |config| + # The most common configuration options are documented and commented below. + # For a complete reference, please see the online documentation at + # https://docs.vagrantup.com. + + # Every Vagrant development environment requires a box. You can search for + # boxes at https://atlas.hashicorp.com/search. + config.vm.box = "ubuntu/trusty64" + config.vm.box_url = "https://atlas.hashicorp.com/ubuntu/trusty64" + config.vm.hostname = "local.userstory.openstack.org" + + # Create a private network, which allows host-only access to the machine + # using a specific IP. + config.vm.network "private_network", ip: "192.168.33.10" + # Create a public network, which generally matched to bridged network. + # Bridged networks make the machine appear as another physical device on + # your network. + # config.vm.network "public_network" + + # Share an additional folder to the guest VM. The first argument is + # the path on the host to the actual folder. The second argument is + # the path on the guest to mount the folder. And the optional third + # argument is a set of non-required options. + # config.vm.synced_folder "../data", "/vagrant_data" + config.vm.synced_folder("puppet", "/etc/puppet/modules/site") + # Provider-specific configuration so you can fine-tune various + # backing providers for Vagrant. These expose provider-specific options. + # Example for VirtualBox: + # + config.vm.provider "virtualbox" do |vb| + vb.memory = "4096" + vb.name = "local.userstory.openstack.org" + vb.cpus = 2 + end + + # use https://github.com/oscar-stack/vagrant-hosts + # vagrant plugin install vagrant-hosts + config.vm.provision :hosts do |provisioner| + provisioner.add_host '127.0.0.1', ['local.userstory.openstack.org'] + end + + config.vm.provision "bootstrap", type:"shell" do |s| + s.path = "scripts/bootstrap.sh" + end + + config.vm.provision "puppetbuild", type: "puppet" do |puppet| + puppet.manifests_path = "puppet" + puppet.manifest_file = "site.pp" + #puppet.hiera_config_path = "puppet/hiera/hiera.yaml" + #puppet.working_directory = "/etc/puppet/data" + #puppet.options = "--verbose --debug" + end + + #config.vm.provision "install_mongo_db", type:"shell" do |s| + # s.path = "scripts/install_mongo_db.sh" + #end + + config.vm.provision "install_api", type:"shell" do |s| + s.path = "scripts/install_api.sh" + end + + config.vm.provision "install_app", type:"shell" do |s| + s.path = "scripts/install_app.sh" + end + + config.vm.provision "run_apps", type:"shell" do |s| + s.path = "scripts/run_apps.sh" + end + +end diff --git a/dashboard-project-api/package.json b/dashboard-project-api/package.json index 48c7a6e..a6e2523 100644 --- a/dashboard-project-api/package.json +++ b/dashboard-project-api/package.json @@ -4,7 +4,7 @@ "main": "server/server.js", "scripts": { "start": "node .", - "build-sdk": "mkdir js; lb-ng server/server.js js/lbServices.js", + "build-sdk": "mkdir -p js; lb-ng server/server.js js/lbServices.js", "pretest": "jshint .", "posttest": "nsp check" }, diff --git a/dashboard-project-api/process.json b/dashboard-project-api/process.json new file mode 100644 index 0000000..e7ff928 --- /dev/null +++ b/dashboard-project-api/process.json @@ -0,0 +1,8 @@ +{ + "name" : "dashboard-api", + "script" : "server/server.js", + "watch" : true, + "env_production" : { + "NODE_ENV": "production" + } +} diff --git a/dashboard-project-app/client/app/app.constant.js b/dashboard-project-app/client/app/app.constant.js index b239b30..0f1aab3 100755 --- a/dashboard-project-app/client/app/app.constant.js +++ b/dashboard-project-app/client/app/app.constant.js @@ -3,7 +3,7 @@ angular.module('dashboardProjectApp.constants', []) -.constant('appConfig', {userRoles:['guest','user','admin']}) +.constant('appConfig', {userRoles:['guest','user','admin'],apiBaseUrl:'http://local.userstory.openstack.org/api'}) ; })(angular); \ No newline at end of file diff --git a/dashboard-project-app/client/app/app.js b/dashboard-project-app/client/app/app.js index 99cb27f..375b728 100755 --- a/dashboard-project-app/client/app/app.js +++ b/dashboard-project-app/client/app/app.js @@ -10,7 +10,7 @@ angular.module('dashboardProjectApp', [ 'lbServices' ]) .config(function($urlRouterProvider, $locationProvider, LoopBackResourceProvider) { - LoopBackResourceProvider.setUrlBase('http://localhost:3004/api'); + LoopBackResourceProvider.setUrlBase('http://local.userstory.openstack.org/api'); //$urlRouterProvider.otherwise('/'); $locationProvider.html5Mode(true); diff --git a/dashboard-project-app/process.json b/dashboard-project-app/process.json new file mode 100644 index 0000000..5662c1b --- /dev/null +++ b/dashboard-project-app/process.json @@ -0,0 +1,8 @@ +{ + "name" : "dashboard-app", + "script" : "server/app.js", + "watch" : true, + "env_production" : { + "NODE_ENV": "production" + } +} diff --git a/dashboard-project-app/server/config/environment/shared.js b/dashboard-project-app/server/config/environment/shared.js index 64a5eab..03e7a32 100755 --- a/dashboard-project-app/server/config/environment/shared.js +++ b/dashboard-project-app/server/config/environment/shared.js @@ -2,5 +2,6 @@ exports = module.exports = { // List of user roles - userRoles: ['guest', 'user', 'admin'] + userRoles: ['guest', 'user', 'admin'], + apiBaseUrl: 'http://local.userstory.openstack.org/api', }; diff --git a/puppet/site.pp b/puppet/site.pp new file mode 100644 index 0000000..6cb47f3 --- /dev/null +++ b/puppet/site.pp @@ -0,0 +1,85 @@ +$main_packages = [ + 'curl', + 'wget', + 'build-essential', + 'git', + 'nodejs', + 'nodejs-legacy', + 'npm', +] + +exec { 'apt-get update': + command => '/usr/bin/apt-get update', + timeout => 0 +} + +package { $main_packages: + ensure => present, + require => [ + Exec['apt-get update'] + ], +} + +exec { 'install strongloop': + command => '/usr/bin/npm install -g strongloop', + timeout => 0, + require => [ + Package[$main_packages] + ], +} + +exec { 'install grunt-cli': + command => '/usr/bin/npm install -g grunt-cli', + timeout => 0, + require => [ + Package[$main_packages] + ], +} + +exec { 'install bower': + command => '/usr/bin/npm install -g bower', + timeout => 0, + require => [ + Package[$main_packages] + ], +} + +exec { 'install pm2': + command => '/usr/bin/npm install -g pm2', + timeout => 0, + require => [ + Package[$main_packages] + ], +} + +class {'::mongodb::server': + port => 27017, + verbose => true, + require => [ + Package[$main_packages] + ], +} + +#install apache2 + +class { '::apache': + default_vhost => false, +} + +::apache::listen { '80': } + +::apache::vhost::custom { 'local.userstory.openstack.org': + priority => '50', + content => template('site/vhost.erb'), + require => [ + Package[$main_packages] + ], +} + +class { '::apache::mod::ssl': } +class { '::apache::mod::rewrite': } +class { '::apache::mod::proxy': } +class { '::apache::mod::proxy_http': } +class { '::apache::mod::headers': } +class { '::apache::mod::expires': } +class { '::apache::mod::include': } diff --git a/puppet/templates/vhost.erb b/puppet/templates/vhost.erb new file mode 100644 index 0000000..169788d --- /dev/null +++ b/puppet/templates/vhost.erb @@ -0,0 +1,32 @@ + + ServerAdmin webmaster@localhost + ServerName local.userstory.openstack.org + + DocumentRoot /var/www/local.userstory.openstack.org + + + Options FollowSymLinks Includes ExecCGI + AllowOverride All + Order deny,allow + Allow from all + + + # angular application + ProxyRequests on + ProxyPass / http://localhost:8080/ + # api + + ProxyPass http://127.0.0.1:3004/api + ProxyPassReverse http://127.0.0.1:3004/api + + + ErrorLog ${APACHE_LOG_DIR}/error.log + + # Possible values include: debug, info, notice, warn, error, crit, + # alert, emerg. + LogLevel warn + + CustomLog ${APACHE_LOG_DIR}/access.log combined + + + diff --git a/scripts/bootstrap.sh b/scripts/bootstrap.sh new file mode 100644 index 0000000..3b9f134 --- /dev/null +++ b/scripts/bootstrap.sh @@ -0,0 +1,9 @@ +#!/bin/bash -xe + +mkdir -p /etc/puppet/modules; +puppet module install --force --module_repository https://forge.puppet.com puppetlabs-apt; +puppet module install --force --module_repository https://forge.puppet.com puppetlabs-stdlib; +puppet module install --force --module_repository https://forge.puppet.com puppetlabs-apache; +puppet module install --force --module_repository https://forge.puppet.com puppetlabs-concat; +puppet module install --force --module_repository https://forge.puppet.com puppetlabs-apache; +puppet module install --force --module_repository https://forge.puppet.com puppetlabs-mongodb; diff --git a/scripts/install_api.sh b/scripts/install_api.sh new file mode 100644 index 0000000..e2a2b42 --- /dev/null +++ b/scripts/install_api.sh @@ -0,0 +1,4 @@ +#!/bin/bash -xe +cd /vagrant/dashboard-project-api && npm install; +cd /vagrant/dashboard-project-api && npm run build-sdk; + diff --git a/scripts/install_app.sh b/scripts/install_app.sh new file mode 100644 index 0000000..604cef2 --- /dev/null +++ b/scripts/install_app.sh @@ -0,0 +1,17 @@ +#!/bin/bash -xe + +cd /vagrant/dashboard-project-app && npm install; +cd /vagrant/dashboard-project-app && bower install --allow-root; +mkdir -p /vagrant/dashboard-project-app/client/components/sdk; +cp /vagrant/dashboard-project-api/js/lbServices.js /vagrant/dashboard-project-app/client/components/sdk/ +cd /vagrant/dashboard-project-app && grunt build; +mkdir -p /var/www/local.userstory.openstack.org +sudo cp -a /vagrant/dashboard-project-app/dist/. /var/www/local.userstory.openstack.org/; +sudo cp -a /vagrant/dashboard-project-app/client/app/projectDetail/. /var/www/local.userstory.openstack.org/client/app/projectDetail; +sudo cp -a /vagrant/dashboard-project-app/node_modules/. /var/www/local.userstory.openstack.org/node_modules; +sudo cp -a /vagrant/dashboard-project-app/client/app/projectList/. /var/www/local.userstory.openstack.org/client/app/projectList; +sudo cp /vagrant/dashboard-project-app/process.json /var/www/local.userstory.openstack.org/process.json; +sudo chown www-data:www-data -R /var/www/local.userstory.openstack.org; + + + diff --git a/scripts/run_apps.sh b/scripts/run_apps.sh new file mode 100644 index 0000000..75c1e69 --- /dev/null +++ b/scripts/run_apps.sh @@ -0,0 +1,10 @@ +#!/bin/bash -xe + +echo "installing pm2 at startup"; +sudo su -c "env PATH=$PATH:/usr/bin pm2 startup ubuntu -u vagrant --hp /home/vagrant"; +echo "starting api"; +cd /vagrant/dashboard-project-api && pm2 start process.json --env production; +echo "starting app"; +cd /var/www/local.userstory.openstack.org && pm2 start process.json --env production; +echo "saving process ..."; +pm2 save;