-
Notifications
You must be signed in to change notification settings - Fork 39
/
Vagrantfile
141 lines (115 loc) · 5.29 KB
/
Vagrantfile
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
# -*- mode: ruby -*-
# vi: set ft=ruby :
# The most common configuration options are documented and commented below.
# For a complete reference, please see the online documentation at
# https://docs.vagrantup.com.
Vagrant.configure(2) do |config|
if Vagrant.has_plugin?("vagrant-vbguest")
config.vbguest.auto_update = false
end
BOX = "treehouses/buster64"
BOX_VERSION = "0.13.3"
# production VM
config.vm.define "prod" do |prod|
prod.vm.box = BOX
prod.vm.box_version = BOX_VERSION
prod.vm.hostname = "planet"
prod.vm.provider "virtualbox" do |vb|
vb.name = "planet"
end
prod.vm.provider "virtualbox" do |vb|
vb.memory = "666"
end
# Port expose for docker inside vagrant (2300:2300 = CouchDB 3100:3100 = App)
prod.vm.network "forwarded_port", guest: 80, host: 80, auto_correct: true
prod.vm.network "forwarded_port", guest: 80, host: 3100, auto_correct: true
prod.vm.network "forwarded_port", guest: 80, host: 8080, auto_correct: true
prod.vm.network "forwarded_port", guest: 2200, host: 2300, auto_correct: true
prod.vm.network "forwarded_port", guest: 2200, host: 5984, auto_correct: true
prod.vm.network "forwarded_port", guest: 2400, host: 2400, auto_correct: true
prod.vm.network "forwarded_port", guest: 3200, host: 3200, auto_correct: true
prod.vm.network "forwarded_port", guest: 22, host: 2223, host_ip: "0.0.0.0", id: "ssh", auto_correct: true
# Prevent TTY Errors (copied from laravel/homestead: "homestead.rb" file)... By default this is "bash -l".
prod.ssh.shell = "bash -c 'BASH_ENV=/etc/profile exec bash'"
prod.vm.provision "shell", inline: <<-SHELL
# docker-compose in install mode ... ?
SHELL
# Start docker on every startup
prod.vm.provision "shell", run: "always", inline: <<-SHELL
if [ ! -f /srv/starthub ]; then
echo "false" > /srv/starthub
chmod 0666 /srv/starthub
fi
/vagrant/prod-docker.sh -u
if [ -f /srv/starthub ] && [ $(cat /srv/starthub) == "true" ]; then
/vagrant/prod-docker.sh -hu
fi
SHELL
end
# development VM
config.vm.define "dev", autostart: false do |dev|
dev.vm.box = BOX
dev.vm.box_version = BOX_VERSION
dev.vm.hostname = "dev"
dev.vm.provider "virtualbox" do |vb|
vb.name = "dev"
end
dev.vm.provider "virtualbox" do |vb|
vb.memory = "1111"
end
# Port expose for dev server (5984:2200 = CouchDB 3000:3000 = App)
dev.vm.network "forwarded_port", guest: 5984, host: 2200, auto_correct: true
dev.vm.network "forwarded_port", guest: 3000, host: 3000, auto_correct: true
# Port expose for unit tests (Karma)
dev.vm.network "forwarded_port", guest: 9876, host: 9876, auto_correct: true
dev.vm.network "forwarded_port", guest: 22, host: 2222, host_ip: "0.0.0.0", id: "ssh", auto_correct: true
# Prevent TTY Errors (copied from laravel/homestead: "homestead.rb" file)... By default this is "bash -l".
dev.ssh.shell = "bash -c 'BASH_ENV=/etc/profile exec bash'"
dev.vm.provision "shell", inline: <<-SHELL
# Add CouchDB Docker
sudo docker run -d -p 5984:5984 --name planet \
-v /srv/planet/conf:/opt/couchdb/etc/local.d \
-v /srv/planet/data:/opt/couchdb/data \
-v /srv/planet/log:/opt/couchdb/var/log/ \
treehouses/couchdb:2.3.1
# Add CORS to CouchDB so app has access to databases
#git clone https://github.com/pouchdb/add-cors-to-couchdb.git
#cd add-cors-to-couchdb
#npm install
cd add-cors-to-couchdb
while ! curl -X GET http://127.0.0.1:5984/_all_dbs ; do sleep 1; done
node bin.js http://localhost:5984
cd /vagrant
# End add CORS to CouchDB
curl -X PUT http://localhost:5984/_node/nonode@nohost/_config/log/file -d '"/opt/couchdb/var/log/couch.log"'
curl -X PUT http://localhost:5984/_node/nonode@nohost/_config/log/writer -d '"file"'
curl -X PUT http://localhost:5984/_node/nonode@nohost/_config/chttpd/authentication_handlers -d '"{chttpd_auth, cookie_authentication_handler}, {chttpd_auth, proxy_authentication_handler}, {chttpd_auth, default_authentication_handler}"'
docker restart planet
# node_modules folder breaks when setting up in Windows, so use binding to fix
#echo "Preparing local node_modules folder…"
#mkdir -p /vagrant_node_modules
mkdir -p /vagrant/node_modules
chown vagrant:vagrant /vagrant_node_modules
mount --bind /vagrant_node_modules /vagrant/node_modules
npm i --unsafe-perm
#sudo npm run webdriver-set-version
# End node_modules fix
# Add initial Couch databases here
chmod +x couchdb-setup.sh
. couchdb-setup.sh -p 5984 -i
# End Couch database addition
SHELL
# Run binding on each startup make sure the mount is available on VM restart
dev.vm.provision "shell", run: "always", inline: <<-SHELL
if [ $(docker inspect -f '{{.State.Running}}' planet) = "false" ]; then
docker start planet
while ! curl -X GET http://127.0.0.1:5984/_all_dbs ; do sleep 1; done
cd /vagrant
. couchdb-setup.sh -p 5984 -x
fi
mount --bind /vagrant_node_modules /vagrant/node_modules
# Starts the app in a screen (virtual terminal)
sudo -u vagrant screen -dmS build bash -c 'cd /vagrant; ng serve'
SHELL
end
end