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