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