-
Notifications
You must be signed in to change notification settings - Fork 0
/
setup.sh
194 lines (154 loc) · 5.41 KB
/
setup.sh
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
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
#!/bin/bash
# Devbox setup, yo
export DEBIAN_FRONTEND=noninteractive
# Quiet
qu() {
"$@" &> /dev/null;
}
echo "Getting Started. This will take a while..."
# Update
echo "Updates..."
qu sudo apt-get -y update
# Add Ondrej repo
echo "Ondrej repo..."
qu sudo add-apt-repository ppa:ondrej/php
echo "Update..."
qu sudo apt-get -y update
# Suppress dpkg errors by preventing debconf
echo "Suppress dpkg errors..."
sudo ex +"%s@DPkg@//DPkg" -cwq /etc/apt/apt.conf.d/70debconf
sudo dpkg-reconfigure debconf -f noninteractive -p critical
# Silly Git
echo "Git latest version..."
qu sudo apt-add-repository ppa:git-core/ppa
qu sudo apt-get update
qu sudo apt-get -y install git
# Basic tings
echo "Install basic tools..."
qu sudo apt-get -y install build-essential curl unzip imagemagick
# Incredible Bongo Band
echo "Michael Viner's Incredible Bongo Band presents..."
qu sudo apt-get -y install apache2
sudo a2enmod rewrite
# Rename webroot
echo "Configuring Web Root..."
sudo rm -r /var/www/html
sudo touch /etc/apache2/conf-enabled/000-default.conf
sudo cat >> /etc/apache2/conf-enabled/000-default.conf <<EOT
<VirtualHost *:80>
ServerAdmin webmaster@localhost
DocumentRoot /var/www/public
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>
<Directory /var/www/>
Options Indexes FollowSymLinks
AllowOverride All
Require all granted
</Directory>
EOT
# Set permissions on the web root
echo "Setting Web Root permissions..."
sudo chown www-data -R /var/www/public/
# Install MariaDB
echo "I've just met a girl named MariaDB..."
qu sudo apt-get -y install mariadb-server mariadb-client
# Set up root user
mysql -u root <<-EOF
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' WITH GRANT OPTION;
UPDATE mysql.user SET Password=PASSWORD('root') WHERE User='root';
DELETE FROM mysql.user WHERE User='';
DELETE FROM mysql.db WHERE Db='test' OR Db='test_%';
FLUSH PRIVILEGES;
EOF
# Enable remote mysql access by commenting out relevant lines
sudo sed -i '/skip-external-locking/s/^/#/' /etc/mysql/mariadb.conf.d/50-server.cnf
sudo sed -i '/bind-address/s/^/#/' /etc/mysql/mariadb.conf.d/50-server.cnf
sudo service mysql restart
# Mongo like candy
echo "MongoDB like candy..."
sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv 0C49F3730359A14518585931BC711F9BA15703C6
echo "deb [ arch=amd64,arm64 ] http://repo.mongodb.org/apt/ubuntu xenial/mongodb-org/3.4 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-3.4.list
qu sudo apt-get -y update
qu sudo apt-get install -y mongodb-org
sudo cat >> /etc/systemd/system/mongodb.service <<EOT
[Unit]
Description=High-performance, schema-free document-oriented database
After=network.target
[Service]
User=mongodb
ExecStart=/usr/bin/mongod --quiet --config /etc/mongod.conf
[Install]
WantedBy=multi-user.target
EOT
sudo systemctl start mongodb
sudo systemctl enable mongodb
# Php and ting
echo "PHP 7 and extensions..."
qu sudo apt-get -y install php
qu sudo apt-get -y install php-fpm php-mysql libapache2-mod-php php-cli php-json php-xmlrpc php-opcache php-zip php-imap php-curl php-xml php-gd php-mbstring php-dev php-pear php-imagick php-mongodb php-intl php-soap php-bcmath
# Wagner or Verdi
echo "Composer..."
curl -sS https://getcomposer.org/installer -o composer-setup.php
sudo php composer-setup.php --install-dir=/usr/local/bin --filename=composer
sudo rm composer-setup.php
composer -V
# Testy-eye
echo "PhpUnit..."
qu sudo wget https://phar.phpunit.de/phpunit-7.phar
sudo chmod +x phpunit-7.phar
sudo mv phpunit-7.phar /usr/local/bin/phpunit
phpunit --version
# Node ftw
echo "Node 8 LTS..."
curl -sL https://deb.nodesource.com/setup_8.x | qu sudo -E bash -
qu sudo apt-get install -y nodejs
## Spinning a yarn
echo "Yarn..."
curl -sS https://dl.yarnpkg.com/debian/pubkey.gpg | sudo apt-key add -
echo "deb https://dl.yarnpkg.com/debian/ stable main" | sudo tee /etc/apt/sources.list.d/yarn.list
qu sudo apt-get -y update && qu sudo apt-get -y install yarn
## Gulp it down
echo "Gulp..."
sudo npm install gulp-cli -g
## Browserify
echo "Browserify..."
sudo npm install -g browserify
## Micro ('cos Slap seems to be abandoned)
echo "Micro editor..."
sudo snap install micro --classic
sudo git config --global core.editor "micro"
# Restart Michael Viner
echo "Restart Apache..."
sudo service apache2 restart
# Upgrades
echo "Final upgrades..."
qu sudo apt-get -y dist-upgrade
qu sudo apt-get -y upgrade
# Welcome splash
echo "Setting up welcome splash..."
sudo cat > /etc/update-motd.d/00-header <<'EOF'
#!/bin/sh
[ -r /etc/lsb-release ] && . /etc/lsb-release
if [ -z "$DISTRIB_DESCRIPTION" ] && [ -x /usr/bin/lsb_release ]; then
# Fall back to using the very slow lsb_release utility
DISTRIB_DESCRIPTION=$(lsb_release -s -d)
fi
printf '
_ _
__| | _____ _| |__ _____ __
/ _` |/ _ \ \ / / _ \ / _ \ \/ /
| (_| | __/\ V /| |_) | (_) > <
\__,_|\___| \_/ |_.__/ \___/_/\_\
'
printf "\n\r"
printf "Built on %s (%s %s %s)\n" "$DISTRIB_DESCRIPTION" "$(uname -o)" "$(uname -r)" "$(uname -m)"
EOF
sudo cat > /etc/update-motd.d/10-help-text <<'EOF'
#!/bin/sh
printf "\n"
printf " * A LAMP stack with MariaDB, PHP7 plus a bunch of extensions\n"
printf " * Also Git, MongoDB, Node, Yarn, Gulp, Composer, PhpUnit, Micro and more\n"
printf " * More info at https://github.com/moussaclarke/devbox\n"
EOF
echo "And we're done... Try '$ vagrant ssh' or visiting http://192.168.33.10 in your browser"