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