]> BookStack Code Mirror - devops/blob - scripts/installation-ubuntu-18.04.sh
Merge pull request #15 from aaronstuder/patch-1
[devops] / scripts / installation-ubuntu-18.04.sh
1 #!/bin/sh
2 # This script will install a new BookStack instance on a fresh Ubuntu 18.04 server.
3 # This script is experimental and does not ensure any security.
4
5 DOMAIN=$1
6 if [ -z $1 ]
7 then
8 echo ""
9 printf "Enter the domain you want to host BookStack and press [ENTER]\nExamples: my-site.com or docs.my-site.com\n"
10 read DOMAIN
11 fi
12
13 CURRENT_IP=$(ip addr | grep 'state UP' -A2 | tail -n1 | awk '{print $2}' | cut -f1  -d'/')
14
15 export DEBIAN_FRONTEND=noninteractive
16 add-apt-repository universe
17 apt update
18 apt install -y git apache2 curl php7.2-fpm php7.2-curl php7.2-mbstring php7.2-ldap \
19 php7.2-tidy php7.2-xml php7.2-zip php7.2-gd php7.2-mysql mysql-server-5.7 libapache2-mod-php7.2
20
21 # Set up database
22 DB_PASS="$(head /dev/urandom | tr -dc A-Za-z0-9 | head -c 13)"
23 mysql -u root --execute="CREATE DATABASE bookstack;"
24 mysql -u root --execute="CREATE USER 'bookstack'@'localhost' IDENTIFIED BY '$DB_PASS';"
25 mysql -u root --execute="GRANT ALL ON bookstack.* TO 'bookstack'@'localhost';FLUSH PRIVILEGES;"
26
27 # Download BookStack
28 cd /var/www
29 git clone https://github.com/BookStackApp/BookStack.git --branch release --single-branch bookstack
30 BOOKSTACK_DIR="/var/www/bookstack"
31 cd $BOOKSTACK_DIR
32
33 # Install composer
34 EXPECTED_SIGNATURE=$(wget https://composer.github.io/installer.sig -O - -q)
35 curl -s https://getcomposer.org/installer > composer-setup.php
36 ACTUAL_SIGNATURE=$(php -r "echo hash_file('SHA384', 'composer-setup.php');")
37
38 if [ "$EXPECTED_SIGNATURE" = "$ACTUAL_SIGNATURE" ]
39 then
40     php composer-setup.php --quiet
41     RESULT=$?
42     rm composer-setup.php
43 else
44     >&2 echo 'ERROR: Invalid composer installer signature'
45     rm composer-setup.php
46     exit 1
47 fi
48
49 # Install BookStack composer dependancies
50 php composer.phar install
51
52 # Copy and update BookStack environment variables
53 cp .env.example .env
54 sed -i.bak 's/DB_DATABASE=.*$/DB_DATABASE=bookstack/' .env
55 sed -i.bak 's/DB_USERNAME=.*$/DB_USERNAME=bookstack/' .env
56 sed -i.bak "s/DB_PASSWORD=.*\$/DB_PASSWORD=$DB_PASS/" .env
57 echo "APP_URL="
58 # Generate the application key
59 php artisan key:generate --no-interaction --force
60 # Migrate the databases
61 php artisan migrate --no-interaction --force
62
63 # Set file and folder permissions
64 chown www-data:www-data -R bootstrap/cache public/uploads storage && chmod -R 755 bootstrap/cache public/uploads storage
65
66 # Set up apache
67 a2enmod rewrite
68 a2enmod php7.2
69
70 cat >/etc/apache2/sites-available/bookstack.conf <<EOL
71 <VirtualHost *:80>
72         ServerName ${DOMAIN}
73
74         ServerAdmin webmaster@localhost
75         DocumentRoot /var/www/bookstack/public/
76
77     <Directory /var/www/bookstack/public/>
78         Options Indexes FollowSymLinks
79         AllowOverride None
80         Require all granted
81         <IfModule mod_rewrite.c>
82             <IfModule mod_negotiation.c>
83                 Options -MultiViews -Indexes
84             </IfModule>
85
86             RewriteEngine On
87
88             # Handle Authorization Header
89             RewriteCond %{HTTP:Authorization} .
90             RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
91
92             # Redirect Trailing Slashes If Not A Folder...
93             RewriteCond %{REQUEST_FILENAME} !-d
94             RewriteCond %{REQUEST_URI} (.+)/$
95             RewriteRule ^ %1 [L,R=301]
96
97             # Handle Front Controller...
98             RewriteCond %{REQUEST_FILENAME} !-d
99             RewriteCond %{REQUEST_FILENAME} !-f
100             RewriteRule ^ index.php [L]
101         </IfModule>
102     </Directory>
103
104         ErrorLog ${APACHE_LOG_DIR}/error.log
105         CustomLog ${APACHE_LOG_DIR}/access.log combined
106
107 </VirtualHost>
108 EOL
109
110 a2dissite 000-default.conf
111 a2ensite bookstack.conf
112
113 # Restart apache to load new config
114 systemctl restart apache2
115
116 echo ""
117 echo "Setup Finished, Your BookStack instance should now be installed."
118 echo "You can login with the email '[email protected]' and password of 'password'"
119 echo "MySQL was installed without a root password, It is recommended that you set a root MySQL password."
120 echo ""
121 echo "You can access your BookStack instance at: http://$CURRENT_IP/ or http://$DOMAIN/"