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