Development environment for Laravel with Vue-JS: Unterschied zwischen den Versionen

Aus Froggis Wissenssammlung
Wechseln zu:Navigation, Suche
Markierung: 2017-Quelltext-Bearbeitung
Zeile 1: Zeile 1:
{{tocleft}}
 
 
<div style="text-align:center;">Install apache2, php 7.4, mariadb, phpmyadmin, composer, Laravel and VueJS on Linux Mint</div>
 
<div style="text-align:center;">Install apache2, php 7.4, mariadb, phpmyadmin, composer, Laravel and VueJS on Linux Mint</div>
  
 
<sub>August 2020</sub>
 
<sub>August 2020</sub>
  
= 1. Apache2 =
+
=1. Apache2=
  
== 1.1 Installation ==
+
==1.1 Installation==
  
 
As the Apache-webserver is part of the most distributions repositories install it with:
 
As the Apache-webserver is part of the most distributions repositories install it with:
Zeile 12: Zeile 11:
 
   sudo apt install apache2
 
   sudo apt install apache2
  
== 1.2 Check successful installation ==
+
==1.2 Check successful installation==
  
 
   sudo systemctl status apache2
 
   sudo systemctl status apache2
= 2. PHP 7.4 =
+
=2. PHP 7.4=
  
 
As some parts need PHP 7.3 or higher we will use PHP 7.4 which is the highes stable vesrion at the moment.
 
As some parts need PHP 7.3 or higher we will use PHP 7.4 which is the highes stable vesrion at the moment.
  
== 2.1 PHP PPA ==
+
==2.1 PHP PPA==
  
 
PHP 7.3 and PHP 7.4 are not available from the repositories of the distributions. So we will use a PPA (Private Public Archive). Be aware of possible security issues when using PPA's.
 
PHP 7.3 and PHP 7.4 are not available from the repositories of the distributions. So we will use a PPA (Private Public Archive). Be aware of possible security issues when using PPA's.
Zeile 29: Zeile 28:
 
   sudo apt update
 
   sudo apt update
  
== 2.2 Install PHP 7.4 ==
+
==2.2 Install PHP 7.4==
  
 
   sudo apt install php7.4
 
   sudo apt install php7.4
Zeile 39: Zeile 38:
 
It should show version 7.4
 
It should show version 7.4
  
= 3. MariaDB =
+
=3. MariaDB=
  
== 3.1 Install MariaDB server ==
+
==3.1 Install MariaDB server==
  
 
For the installation see also the repository configuration page of MariaDB at:
 
For the installation see also the repository configuration page of MariaDB at:
[https://downloads.mariadb.org/mariadb/repositories/ https://downloads.mariadb.org/mariadb/repositories/]
+
https://downloads.mariadb.org/mariadb/repositories/
  
 
   sudo apt-get install software-properties-common
 
   sudo apt-get install software-properties-common
Zeile 57: Zeile 56:
 
Note!: In my case the mirrorserver is at [ftp://ftp.nluug.nl/ ftp.nluug.nl]. In your case it may vary. So check the commands with the repository configuration page of MariaDB. See link above.
 
Note!: In my case the mirrorserver is at [ftp://ftp.nluug.nl/ ftp.nluug.nl]. In your case it may vary. So check the commands with the repository configuration page of MariaDB. See link above.
  
== 3.2 Securing MariaDB ==
+
==3.2 Securing MariaDB==
  
 
The secure (harden) your MariaDB installation use the following command:
 
The secure (harden) your MariaDB installation use the following command:
Zeile 65: Zeile 64:
 
and follow the instructions.
 
and follow the instructions.
  
== 3.3 Add user with admin privileges ==
+
==3.3 Add user with admin privileges==
  
 
Don’t use the root user at all. Via the command above remote access for root is prohibited. So you need another user with admin rights to allow remote login and administer your MariaDB installation.
 
Don’t use the root user at all. Via the command above remote access for root is prohibited. So you need another user with admin rights to allow remote login and administer your MariaDB installation.
  
=== 3.3.1 Log in MariaDB a last time as root with: ===
+
===3.3.1 Log in MariaDB a last time as root with:===
  
 
   mysql -u root -p
 
   mysql -u root -p
Zeile 75: Zeile 74:
 
Enter the above in part 3.2 created password.
 
Enter the above in part 3.2 created password.
  
=== 3.3.2 Add a user with: ===
+
===3.3.2 Add a user with:===
  
 
   CREATE USER IF NOT EXISTS 'username' IDENTIFIED BY 'password';
 
   CREATE USER IF NOT EXISTS 'username' IDENTIFIED BY 'password';
  
=== 3.3.3 Give all necessary rights / permissions to this user: ===
+
===3.3.3 Give all necessary rights / permissions to this user:===
  
 
   GRANT ALL PRIVILEGES ON *.* TO 'username' IDENTIFIED BY 'password' with grant option;
 
   GRANT ALL PRIVILEGES ON *.* TO 'username' IDENTIFIED BY 'password' with grant option;
  
=== 3.3.4 Make it active with: ===
+
===3.3.4 Make it active with:===
  
 
   FLUSH PRIVILEGES;
 
   FLUSH PRIVILEGES;
  
=== 3.3.5 Verify all is correct with: ===
+
===3.3.5 Verify all is correct with:===
  
 
   SHOW GRANTS FOR 'username';
 
   SHOW GRANTS FOR 'username';
Zeile 93: Zeile 92:
 
And log out as root and log in back as the new user. It should be successful.
 
And log out as root and log in back as the new user. It should be successful.
  
== 3.4 No remote access if installed on server ==
+
==3.4 No remote access if installed on server==
  
 
If you can not access mariadb from a remote client, it is possible that mariadb is only listening on 127.0.0.1. Security setting!
 
If you can not access mariadb from a remote client, it is possible that mariadb is only listening on 127.0.0.1. Security setting!
Zeile 99: Zeile 98:
 
<span style="color: darkgreen">TODO: To change that, further info is provided in the near future!</span>
 
<span style="color: darkgreen">TODO: To change that, further info is provided in the near future!</span>
  
= 4. PHPMyAdmin =
+
=4. PHPMyAdmin=
  
== 4.1 Install dependencies with: ==
+
==4.1 Install dependencies with:==
  
 
   sudo apt install php7.4-mysql php7.4-mbstring php7.4-zip unzip
 
   sudo apt install php7.4-mysql php7.4-mbstring php7.4-zip unzip
  
== 4.2 Activate the modules ==
+
==4.2 Activate the modules==
  
 
   sudo phpenmod mysqli mbstring zip
 
   sudo phpenmod mysqli mbstring zip
  
== 4.3 Download the latest stable version with ==
+
==4.3 Download the latest stable version with==
  
   wget [https://www.phpmyadmin.net/downloads/phpMyAdmin-latest-all-languages.zip https://www.phpmyadmin.net/downloads/phpMyAdmin-latest-all-languages.zip]
+
   wget https://www.phpmyadmin.net/downloads/phpMyAdmin-latest-all-languages.zip
  
 
unzip it:
 
unzip it:
Zeile 117: Zeile 116:
 
   unzip phpMyAdmin-latest-all-languages.zip
 
   unzip phpMyAdmin-latest-all-languages.zip
  
== 4.4 Make directory for PHPMyAdmin ==
+
==4.4 Make directory for PHPMyAdmin==
  
 
   sudo mkdir /var/www/phpmyadmin
 
   sudo mkdir /var/www/phpmyadmin
  
== 4.5 Copy files in place: ==
+
==4.5 Copy files in place:==
  
 
   sudo cp -r phpMyAdmin-*/* /var/www/phpmyadmin/
 
   sudo cp -r phpMyAdmin-*/* /var/www/phpmyadmin/
  
== 4.6 Allow access to apache ==
+
==4.6 Allow access to apache==
  
 
   sudo chown -R www-data:www-data /var/www/phpmyadmin
 
   sudo chown -R www-data:www-data /var/www/phpmyadmin
 
   sudo chmod -R 755 /var/www/phpmyadmin
 
   sudo chmod -R 755 /var/www/phpmyadmin
  
== 4.7 Tell Apache hat phpmyadmin exists ==
+
==4.7 Tell Apache hat phpmyadmin exists==
  
 
To access PHPMyAdmin at ''www.domain.com/phpmyadmin'' you have to tell apache to do so by adding a configuration.
 
To access PHPMyAdmin at ''www.domain.com/phpmyadmin'' you have to tell apache to do so by adding a configuration.
Zeile 148: Zeile 147:
 
   </Directory>
 
   </Directory>
  
== 4.8 Activate the configuration ==
+
==4.8 Activate the configuration==
  
 
   sudo a2enconf phpmyadmin
 
   sudo a2enconf phpmyadmin
 
   sudo systemctl reload apache2
 
   sudo systemctl reload apache2
  
== 4.9 Securing PHPMyAdmin ==
+
==4.9 Securing PHPMyAdmin==
  
 
For security reasons and in a production environment it is recommended to harden access to the phpmyadmin directory with an .htaccess file and password
 
For security reasons and in a production environment it is recommended to harden access to the phpmyadmin directory with an .htaccess file and password
  
=== 4.9.1 Create an .htaccess file with ===
+
===4.9.1 Create an .htaccess file with===
  
 
   sudo vi /var/www/phpmyadmin/.htaccess
 
   sudo vi /var/www/phpmyadmin/.htaccess
Zeile 172: Zeile 171:
 
   Require valid-user
 
   Require valid-user
  
=== 4.9.2 Create the .htpasswd file ===
+
===4.9.2 Create the .htpasswd file===
  
 
   sudo htpasswd -c /var/www/phpmyadmin/.htpasswd <username>
 
   sudo htpasswd -c /var/www/phpmyadmin/.htpasswd <username>
Zeile 180: Zeile 179:
 
When ready you should be prompted for a password when attempting to open phpmyadmin.
 
When ready you should be prompted for a password when attempting to open phpmyadmin.
  
== 4.10 Secret passphrase for cookie-authentication ==
+
==4.10 Secret passphrase for cookie-authentication==
  
 
After the installation and your first login in to phpMyAdmin you’ll see a warning about the missing secret passphrase.
 
After the installation and your first login in to phpMyAdmin you’ll see a warning about the missing secret passphrase.
Zeile 194: Zeile 193:
 
Change the line with  
 
Change the line with  
  
   $cfg['blowfish_secret'] = ''; /* YOU MUST FILL IN THIS FOR COOKIE AUTH! */
+
   $cfg['blowfish_secret'] = ''; /* YOU MUST FILL IN THIS FOR COOKIE AUTH! */''
  
 
to  
 
to  
Zeile 214: Zeile 213:
 
   lQjnenlFAaGbeBvFGNWotx2wuQwa80NphNZ7bETSlkY=
 
   lQjnenlFAaGbeBvFGNWotx2wuQwa80NphNZ7bETSlkY=
  
== 4.11 Warning about configuration storage ==
+
==4.11 Warning about configuration storage==
  
 
You may see this warning at the startscreen
 
You may see this warning at the startscreen
Zeile 223: Zeile 222:
 
To get rid of it click on the link. phpMyAdmin will show you a new message with a link ('Create'). Click on it and it should create all necessary settings and database table.
 
To get rid of it click on the link. phpMyAdmin will show you a new message with a link ('Create'). Click on it and it should create all necessary settings and database table.
  
= 5. Composer =
+
=5. Composer=
  
 
<span style="color: #8B0000 ;">'''Note: Do this in your homedir!'''</span>
 
<span style="color: #8B0000 ;">'''Note: Do this in your homedir!'''</span>
Zeile 242: Zeile 241:
 
   php -r "unlink('composer-setup.php');"
 
   php -r "unlink('composer-setup.php');"
  
= 6. NodeJS and NPM =
+
=6. NodeJS and NPM=
  
== 6.1 Official install instructions per version: ==
+
==6.1 Official install instructions per version:==
  
 
[https://github.com/nodesource/distributions#debinstall Install NodeJS instructions]
 
[https://github.com/nodesource/distributions#debinstall Install NodeJS instructions]
  
== 6.2 tl;dr ==
+
==6.2 tl;dr==
  
 
   curl -sL https://deb.nodesource.com/setup_12.x | sudo -E bash -
 
   curl -sL https://deb.nodesource.com/setup_12.x | sudo -E bash -
Zeile 254: Zeile 253:
 
   sudo apt-get install -y nodejs
 
   sudo apt-get install -y nodejs
  
== 6.3 Verify the version(s) ==
+
==6.3 Verify the version(s)==
  
 
   node -v
 
   node -v
Zeile 270: Zeile 269:
 
   6.14.6
 
   6.14.6
  
= 7. Laravel =
+
=7. Laravel=
  
== 7.1 Laravel installer ==
+
==7.1 Laravel installer==
  
 
Install it via composer.
 
Install it via composer.
Zeile 278: Zeile 277:
 
   composer global require laravel/installer
 
   composer global require laravel/installer
  
=== 7.1.1 Add the path to the laravel installer binary===
+
===7.1.1 Add the path to the laravel installer binary===
  
 
<span style="color: #8B0000">Note: If you decide to install it in an other place then your own bin, you must add the path to it in your $PATH envvariable.</span>
 
<span style="color: #8B0000">Note: If you decide to install it in an other place then your own bin, you must add the path to it in your $PATH envvariable.</span>
Zeile 326: Zeile 325:
 
   composer global about
 
   composer global about
  
=== 7.1.2 Activate the laravel installer ===
+
===7.1.2 Activate the laravel installer===
  
 
To get access to the binary the path must be known. As you added it into your .profile file it must be reread. To do so, relogin.
 
To get access to the binary the path must be known. As you added it into your .profile file it must be reread. To do so, relogin.
  
== 7.2 Create a new Laravel project ==
+
==7.2 Create a new Laravel project==
  
=== 7.2.1 PHP-dependencies ===
+
===7.2.1 PHP-dependencies===
  
 
The installer requires the php-xml dependency. So install it with:
 
The installer requires the php-xml dependency. So install it with:
Zeile 338: Zeile 337:
 
   sudo apt install php7.4-xml
 
   sudo apt install php7.4-xml
  
=== 7.2.2 Create new project ===
+
===7.2.2 Create new project===
  
 
Go to the location where your project should live and execute:
 
Go to the location where your project should live and execute:
Zeile 346: Zeile 345:
 
After that cd into the new project directory.
 
After that cd into the new project directory.
  
=== 7.2.3 Frontend Scaffolding aka get an UserInterface (UI) ===
+
===7.2.3 Frontend Scaffolding aka get an UserInterface (UI)===
  
 
<span style="color: #8B0000">Go to your projects root directory.</span>
 
<span style="color: #8B0000">Go to your projects root directory.</span>
  
==== 7.2.3.1 Install the laravel ui ====
+
====7.2.3.1 Install the laravel ui====
  
 
   composer require laravel/ui
 
   composer require laravel/ui
  
==== 7.2.3.2 Get the Vue-JS components ====
+
====7.2.3.2 Get the Vue-JS components====
 
    
 
    
 
   php artisan ui vue
 
   php artisan ui vue
  
==== 7.2.3.3 Bootstrap ====
+
====7.2.3.3 Bootstrap====
  
 
With the installation of the vue ui also Bootstrap is installed. Open package.json in the projects root folder to verify.  
 
With the installation of the vue ui also Bootstrap is installed. Open package.json in the projects root folder to verify.  
  
==== 7.2.3.4 Content package.json ====
+
====7.2.3.4 Content package.json====
  
 
   "devDependencies": {
 
   "devDependencies": {
Zeile 398: Zeile 397:
 
   npm install && npm run dev
 
   npm install && npm run dev
  
==== 7.2.3.5 Warnings ====
+
====7.2.3.5 Warnings====
  
 
A number of warnings can be shown. At the time of writing this, i get the following warnings
 
A number of warnings can be shown. At the time of writing this, i get the following warnings
Zeile 414: Zeile 413:
 
   npm install @popperjs/core --save
 
   npm install @popperjs/core --save
  
==== 7.2.3.6 Severity vulnarability ====
+
====7.2.3.6 Severity vulnarability====
  
 
You also will get this message
 
You also will get this message
Zeile 458: Zeile 457:
 
Until today there is no solution for this. The main cause seems laravel-mix which uses an older version of the yargs-parser. See also here: [https://github.com/JeffreyWay/laravel-mix/issues/2389 Issue on github]
 
Until today there is no solution for this. The main cause seems laravel-mix which uses an older version of the yargs-parser. See also here: [https://github.com/JeffreyWay/laravel-mix/issues/2389 Issue on github]
  
==== 7.2.3.7 BootstrapVue ====
+
====7.2.3.7 BootstrapVue====
  
 
To be written yet....
 
To be written yet....
  
=== 7.2.5 File and directory permissions ===
+
===7.2.5 File and directory permissions===
  
 
I assume that these settings are correct after the installation, but if not set them as follows:
 
I assume that these settings are correct after the installation, but if not set them as follows:
  
==== 7.2.5.1 Files ====
+
====7.2.5.1 Files====
  
 
   sudo find <laravel-rootdirectory> -type f -exec chmod 644 {} \;  
 
   sudo find <laravel-rootdirectory> -type f -exec chmod 644 {} \;  
  
==== 7.2.5.2 Directories ====
+
====7.2.5.2 Directories====
  
 
   sudo find <laravel-rootdirectory> -type d -exec chmod 755 {} \;
 
   sudo find <laravel-rootdirectory> -type d -exec chmod 755 {} \;
  
=== 7.2.7 Give apache the right to write to storage (upload, logs…) and cache ===
+
===7.2.7 Give apache the right to write to storage (upload, logs…) and cache===
  
 
Go to your projects root directory and execute the following commands:
 
Go to your projects root directory and execute the following commands:
Zeile 481: Zeile 480:
 
   sudo chmod -R ug+rwx storage bootstrap/cache
 
   sudo chmod -R ug+rwx storage bootstrap/cache
  
== 7.3 Create webconfiguration for this project ==
+
==7.3 Create webconfiguration for this project==
  
=== 7.3.1 Create a new config file with: ===
+
===7.3.1 Create a new config file with:===
  
 
   sudo vi /etc/apache2/sites-available/www.my-website.localhost.conf
 
   sudo vi /etc/apache2/sites-available/www.my-website.localhost.conf
Zeile 531: Zeile 530:
 
   sudo mkdir /var/log/apache/my-website
 
   sudo mkdir /var/log/apache/my-website
  
=== 7.3.2 Activate the new website and deactivate the default one ===
+
===7.3.2 Activate the new website and deactivate the default one===
  
 
   sudo a2ensite www.my-website.localhost.conf
 
   sudo a2ensite www.my-website.localhost.conf
Zeile 539: Zeile 538:
 
   sudo systemctl restart apache2
 
   sudo systemctl restart apache2
  
=== 7.3.3 Alias the website in your /etc/hosts for easy access vie your browser ===
+
===7.3.3 Alias the website in your /etc/hosts for easy access vie your browser===
  
 
Open the file with:
 
Open the file with:
Zeile 549: Zeile 548:
 
   127.0.0.1www.my-website.localhost
 
   127.0.0.1www.my-website.localhost
  
= 8. Create Database and User =
+
=8. Create Database and User=
  
== 8.1 Create Database in PHPMyAdmin ==
+
==8.1 Create Database in PHPMyAdmin==
  
 
Open PHPMyAdmin in your browser ([http://www.my-website.com/phpmyadmin www.my-website.com/phpmyadmin]) and click on New on the left panel or go to the databases tab and create there a new one.
 
Open PHPMyAdmin in your browser ([http://www.my-website.com/phpmyadmin www.my-website.com/phpmyadmin]) and click on New on the left panel or go to the databases tab and create there a new one.
Zeile 557: Zeile 556:
 
I prefer utf8mb4_unicode_ci as collation.
 
I prefer utf8mb4_unicode_ci as collation.
  
== 8.2 Create a User for this databases ==
+
==8.2 Create a User for this databases==
  
 
In PHPMyAdmin go to the Userstab. If you don’t see it (because you are on the databasetab for instance), first go back to the startpage.
 
In PHPMyAdmin go to the Userstab. If you don’t see it (because you are on the databasetab for instance), first go back to the startpage.
Zeile 563: Zeile 562:
 
Add a user by clicking on Add User. The new user can have only local access if app and database are on the same server / machine, but if not choose any host.
 
Add a user by clicking on Add User. The new user can have only local access if app and database are on the same server / machine, but if not choose any host.
  
== 8.3 Grant user rights to the databases ==
+
==8.3 Grant user rights to the databases==
  
 
In the user tab click on Edit privileges to go to the user preferences page.
 
In the user tab click on Edit privileges to go to the user preferences page.
Zeile 571: Zeile 570:
 
On the next screen grant rights to data and structure by checking the boxes and click ok.
 
On the next screen grant rights to data and structure by checking the boxes and click ok.
  
== 8.3 Verify the new username ==
+
==8.3 Verify the new username==
  
 
Log out of PHPMyAdmin and login again with the new created user and password. If successful you should only see the database you granted the permissions to.
 
Log out of PHPMyAdmin and login again with the new created user and password. If successful you should only see the database you granted the permissions to.
  
= 9. Give Laravel access to the databases =
+
=9. Give Laravel access to the databases=
  
== 9.1 Edit the .env file ==
+
==9.1 Edit the .env file==
  
 
Open the .env file in your editor of choice (I use Atom for development) and set the DB_ variables according the data you used to create the database and user.
 
Open the .env file in your editor of choice (I use Atom for development) and set the DB_ variables according the data you used to create the database and user.
Zeile 592: Zeile 591:
 
Save that changes.
 
Save that changes.
  
== 9.2 First migration ==
+
==9.2 First migration==
  
 
Go to projects root directory in your shell and execute the following command.
 
Go to projects root directory in your shell and execute the following command.
Zeile 617: Zeile 616:
 
   Migrated: 2019_08_19_000000_create_failed_jobs_table (0.01 seconds)
 
   Migrated: 2019_08_19_000000_create_failed_jobs_table (0.01 seconds)
  
= A. Extras =
+
=A. Extras=
  
 
Atom addons for developing Laravel projects
 
Atom addons for developing Laravel projects
  
* Language-blade
+
*Language-blade
* Blade-snippets
+
*Blade-snippets
* Blade spacer
+
*Blade spacer
  
* Language-vue
+
*Language-vue
* Vue-snippets
+
*Vue-snippets

Version vom 6. August 2020, 09:29 Uhr

Install apache2, php 7.4, mariadb, phpmyadmin, composer, Laravel and VueJS on Linux Mint

August 2020

Inhaltsverzeichnis

1. Apache2

1.1 Installation

As the Apache-webserver is part of the most distributions repositories install it with:

 sudo apt install apache2

1.2 Check successful installation

 sudo systemctl status apache2

2. PHP 7.4

As some parts need PHP 7.3 or higher we will use PHP 7.4 which is the highes stable vesrion at the moment.

2.1 PHP PPA

PHP 7.3 and PHP 7.4 are not available from the repositories of the distributions. So we will use a PPA (Private Public Archive). Be aware of possible security issues when using PPA's. The newest PHP versions as by now (August 2020) can be found at the PPA from Ondřej Surý.

So lets add that:

 sudo add-apt-repository ppa:ondrej/php
 sudo apt update

2.2 Install PHP 7.4

 sudo apt install php7.4

To check it enter

php -v

It should show version 7.4

3. MariaDB

3.1 Install MariaDB server

For the installation see also the repository configuration page of MariaDB at: https://downloads.mariadb.org/mariadb/repositories/

 sudo apt-get install software-properties-common
 sudo apt-key adv --fetch-keys 'https://mariadb.org/mariadb_release_signing_key.asc'
 sudo add-apt-repository 'deb [arch=amd64,arm64,ppc64el] http://ftp.nluug.nl/db/mariadb/repo/10.5/ubuntu bionic main'

Once this is ready get the MariaDB-server installed with:

 sudo apt update
 sudo apt install mariadb-server

Note!: In my case the mirrorserver is at ftp.nluug.nl. In your case it may vary. So check the commands with the repository configuration page of MariaDB. See link above.

3.2 Securing MariaDB

The secure (harden) your MariaDB installation use the following command:

 sudo mysql_secure_installation

and follow the instructions.

3.3 Add user with admin privileges

Don’t use the root user at all. Via the command above remote access for root is prohibited. So you need another user with admin rights to allow remote login and administer your MariaDB installation.

3.3.1 Log in MariaDB a last time as root with:

 mysql -u root -p

Enter the above in part 3.2 created password.

3.3.2 Add a user with:

 CREATE USER IF NOT EXISTS 'username' IDENTIFIED BY 'password';

3.3.3 Give all necessary rights / permissions to this user:

 GRANT ALL PRIVILEGES ON *.* TO 'username' IDENTIFIED BY 'password' with grant option;

3.3.4 Make it active with:

 FLUSH PRIVILEGES;

3.3.5 Verify all is correct with:

 SHOW GRANTS FOR 'username';

And log out as root and log in back as the new user. It should be successful.

3.4 No remote access if installed on server

If you can not access mariadb from a remote client, it is possible that mariadb is only listening on 127.0.0.1. Security setting!

TODO: To change that, further info is provided in the near future!

4. PHPMyAdmin

4.1 Install dependencies with:

 sudo apt install php7.4-mysql php7.4-mbstring php7.4-zip unzip

4.2 Activate the modules

 sudo phpenmod mysqli mbstring zip

4.3 Download the latest stable version with

 wget https://www.phpmyadmin.net/downloads/phpMyAdmin-latest-all-languages.zip

unzip it:

 unzip phpMyAdmin-latest-all-languages.zip

4.4 Make directory for PHPMyAdmin

 sudo mkdir /var/www/phpmyadmin

4.5 Copy files in place:

 sudo cp -r phpMyAdmin-*/* /var/www/phpmyadmin/

4.6 Allow access to apache

 sudo chown -R www-data:www-data /var/www/phpmyadmin
 sudo chmod -R 755 /var/www/phpmyadmin

4.7 Tell Apache hat phpmyadmin exists

To access PHPMyAdmin at www.domain.com/phpmyadmin you have to tell apache to do so by adding a configuration.

So create one with:

 sudo vi /etc/apache2/conf-available/phpmyadmin.conf

With this content:


 Alias /phpmyadmin /var/www/phpmyadmin/ 
 
 <Directory /var/www/phpmyadmin/> 
 
  AllowOverride all 
 
 </Directory>

4.8 Activate the configuration

 sudo a2enconf phpmyadmin
 sudo systemctl reload apache2

4.9 Securing PHPMyAdmin

For security reasons and in a production environment it is recommended to harden access to the phpmyadmin directory with an .htaccess file and password

4.9.1 Create an .htaccess file with

 sudo vi /var/www/phpmyadmin/.htaccess

with the following content:


 AuthType Basic
 
 AuthName "Restricted Files"
 
 AuthUserFile /var/www/phpmyadmin/.htpasswd
 
 Require valid-user

4.9.2 Create the .htpasswd file

 sudo htpasswd -c /var/www/phpmyadmin/.htpasswd <username>

Choose a password different then the passwords you use in MariaDB for extra security.

When ready you should be prompted for a password when attempting to open phpmyadmin.

4.10 Secret passphrase for cookie-authentication

After the installation and your first login in to phpMyAdmin you’ll see a warning about the missing secret passphrase.

Open config.inc.php. Rename config.sample.inc.php to config.inc.php if you haven’t done that yet.

 sudo vi /var/www/phpmyadmin/config.inc.php

or

 sudo mv /var/www/phpmyadmin/config.sample.inc.php /var/www/phpmyadmin/config.inc.php
 sudo vi /var/www/phpmyadmin/config.inc.php

Change the line with

 $cfg['blowfish_secret'] = ; /* YOU MUST FILL IN THIS FOR COOKIE AUTH! */

to

 $cfg['blowfish_secret'] = '<verysecretpassword>'; /* YOU MUST FILL IN THIS FOR COOKIE AUTH! */

where <verysecretpassword> must be 32 characters long.

You don’t have to remember this password, so I can be a happy mix of chars, numbers and special characters you like.

Never use a password you use in production.

A possible way to get a password is with openssl:

 openssl rand -base64 32

That will create an output like

 lQjnenlFAaGbeBvFGNWotx2wuQwa80NphNZ7bETSlkY=

4.11 Warning about configuration storage

You may see this warning at the startscreen

 The phpMyAdmin configuration storage is not completely configured,
 some extended features have been deactivated. To find out why click here.

To get rid of it click on the link. phpMyAdmin will show you a new message with a link ('Create'). Click on it and it should create all necessary settings and database table.

5. Composer

Note: Do this in your homedir!

Install composer on your system following the instructions on their website to get the latest: Install composer

Beware that this commands may change on new releases. Below is only an example.

For the actual installation instructions look at the composer website.

 php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');"
 
 php -r "if (hash_file('sha384', 'composer-setup.php') === 'e5325b19b381bfd88ce90a5ddb7823406b2a38cff6bb704b0acc289a09c8128d4a8ce2bbafcd1fcbdc38666422fe2806') { echo 'Installer verified'; } else { echo 'Installer corrupt'; unlink('composer-setup.php'); } echo PHP_EOL;"
 
 php composer-setup.php --install-dir=bin --filename=composer
 
 php -r "unlink('composer-setup.php');"

6. NodeJS and NPM

6.1 Official install instructions per version:

Install NodeJS instructions

6.2 tl;dr

 curl -sL https://deb.nodesource.com/setup_12.x | sudo -E bash -
 
 sudo apt-get install -y nodejs

6.3 Verify the version(s)

 node -v

should respond with something like

 v12.18.3

and

 npm -v

should respond with something like

 6.14.6

7. Laravel

7.1 Laravel installer

Install it via composer.

 composer global require laravel/installer

7.1.1 Add the path to the laravel installer binary

Note: If you decide to install it in an other place then your own bin, you must add the path to it in your $PATH envvariable.

Edit $HOME/.profile

Mine looks like this:

 # ~/.profile: executed by the command interpreter for login shells.
 # This file is not read by bash(1), if ~/.bash_profile or ~/.bash_login
 # exists.
 # see /usr/share/doc/bash/examples/startup-files for examples.
 # the files are located in the bash-doc package.
 
 # the default umask is set in /etc/profile; for setting the umask
 # for ssh logins, install and configure the libpam-umask package.
 #umask 022
 
 # if running bash
 if [ -n "$BASH_VERSION" ]; then
     # include .bashrc if it exists
     if [ -f "$HOME/.bashrc" ]; then
         . "$HOME/.bashrc"
     fi
 fi
 
 # set PATH so it includes user's private bin if it exists
 if [ -d "$HOME/bin" ] ; then
     PATH="$HOME/bin:$PATH"
 fi
 
 # set PATH so it includes user's private bin if it exists
 if [ -d "$HOME/.local/bin" ] ; then
     PATH="$HOME/.local/bin:$PATH"
 fi


Add the following to the end of the file:

 # set PATH so it includes the path to the composers binary if it exists
 if [ -d "$HOME/.config/composer/vendor/bin" ] ; then
     PATH="$HOME/.config/composer/vendor/bin:$PATH"
 fi

The exact location can be found by the following command:

 composer global about

7.1.2 Activate the laravel installer

To get access to the binary the path must be known. As you added it into your .profile file it must be reread. To do so, relogin.

7.2 Create a new Laravel project

7.2.1 PHP-dependencies

The installer requires the php-xml dependency. So install it with:

 sudo apt install php7.4-xml

7.2.2 Create new project

Go to the location where your project should live and execute:

 laravel new <projectsname>

After that cd into the new project directory.

7.2.3 Frontend Scaffolding aka get an UserInterface (UI)

Go to your projects root directory.

7.2.3.1 Install the laravel ui

 composer require laravel/ui

7.2.3.2 Get the Vue-JS components

 php artisan ui vue

7.2.3.3 Bootstrap

With the installation of the vue ui also Bootstrap is installed. Open package.json in the projects root folder to verify.

7.2.3.4 Content package.json

 "devDependencies": {
 
     "axios": "^0.19",
 
     "bootstrap": "^4.0.0", ← There it is!!!
 
     "cross-env": "^7.0",
 
     "jquery": "^3.2",
 
     "laravel-mix": "^5.0.1",
 
     "lodash": "^4.17.19",
 
     "popper.js": "^1.12",
 
     "resolve-url-loader": "^2.3.1",
 
     "sass": "^1.20.1",
 
     "sass-loader": "^8.0.0",
 
     "vue": "^2.5.17",
 
     "vue-template-compiler": "^2.6.10"
 
 }

So we can use it now.

You will see a notice on the terminalwindow to use npm to install everything needed.

 npm install && npm run dev

7.2.3.5 Warnings

A number of warnings can be shown. At the time of writing this, i get the following warnings

 npm WARN deprecated popper.js@1.16.1: You can find the new Popper v2 at @popperjs/core, this package is dedicated to the legacy v1
 npm WARN optional SKIPPING OPTIONAL DEPENDENCY: fsevents@2.1.3 (node_modules/watchpack/node_modules/fsevents):
 npm WARN notsup SKIPPING OPTIONAL DEPENDENCY: Unsupported platform for fsevents@2.1.3: wanted {"os":"darwin","arch":"any"} (current: {"os":"linux","arch":"x64"})
 npm WARN optional SKIPPING OPTIONAL DEPENDENCY: fsevents@1.2.13 (node_modules/fsevents):
 npm WARN notsup SKIPPING OPTIONAL DEPENDENCY: Unsupported platform for fsevents@1.2.13: wanted {"os":"darwin","arch":"any"} (current: {"os":"linux","arch":"x64"})

The warnings about fsevents can be ignored as it is indeed an unsupportde platform and fsevents will not be used anyway.

Update it with

 npm install @popperjs/core --save

7.2.3.6 Severity vulnarability

You also will get this message

 found 1 low severity vulnerability
   run `npm audit fix` to fix them, or `npm audit` for details

If you execute npm audit fix it will come with a message that it could not be automatically fixed

 fixed 0 of 1 vulnerability in 1093 scanned packages
   1 vulnerability required manual review and could not be updated

So lets look what is going on with

 npm audit

I get this

                        === npm audit security report ===                        
                                                                                 
 ┌──────────────────────────────────────────────────────────────────────────────┐
 │                                Manual Review                                 │
 │            Some vulnerabilities require your attention to resolve            │
 │                                                                              │
 │         Visit https://go.npm.me/audit-guide for additional guidance        │
 └──────────────────────────────────────────────────────────────────────────────┘
 ┌───────────────┬──────────────────────────────────────────────────────────────┐
 │ Low           │ Prototype Pollution                                          │
 ├───────────────┼──────────────────────────────────────────────────────────────┤
 │ Package       │ yargs-parser                                                 │
 ├───────────────┼──────────────────────────────────────────────────────────────┤
 │ Patched in    │ >=13.1.2 <14.0.0 || >=15.0.1 <16.0.0 || >=18.1.2             │
 ├───────────────┼──────────────────────────────────────────────────────────────┤
 │ Dependency of │ laravel-mix [dev]                                            │
 ├───────────────┼──────────────────────────────────────────────────────────────┤
 │ Path          │ laravel-mix > yargs > yargs-parser                           │
 ├───────────────┼──────────────────────────────────────────────────────────────┤
 │ More info     │ https://npmjs.com/advisories/1500                          │
 └───────────────┴──────────────────────────────────────────────────────────────┘
 found 1 low severity vulnerability in 1093 scanned packages
  1 vulnerability requires manual review. See the full report for details.

Until today there is no solution for this. The main cause seems laravel-mix which uses an older version of the yargs-parser. See also here: Issue on github

7.2.3.7 BootstrapVue

To be written yet....

7.2.5 File and directory permissions

I assume that these settings are correct after the installation, but if not set them as follows:

7.2.5.1 Files

 sudo find <laravel-rootdirectory> -type f -exec chmod 644 {} \; 

7.2.5.2 Directories

 sudo find <laravel-rootdirectory> -type d -exec chmod 755 {} \;

7.2.7 Give apache the right to write to storage (upload, logs…) and cache

Go to your projects root directory and execute the following commands:

 sudo chgrp -R www-data storage bootstrap/cache
 sudo chmod -R ug+rwx storage bootstrap/cache

7.3 Create webconfiguration for this project

7.3.1 Create a new config file with:

 sudo vi /etc/apache2/sites-available/www.my-website.localhost.conf

and insert this content:

 <VirtualHost *:80>
 
     ServerAdmin webmaster@localhost
 
     ServerName my-website.localhost
 
     ServerAlias www.my-website.localhost
 
     DocumentRoot /path/to/your/project/public/
 
     LogLevel debug
 
     ErrorLog ${APACHE_LOG_DIR}/error.log
 
     CustomLog ${APACHE_LOG_DIR}/access.log combined
 
     <Directory /path/to/your/project/public/>
         Options Indexes FollowSymLinks MultiViews
 
         AllowOverride All
 
         Order allow,deny
 
         allow from all
 
         Require all granted
 
     </Directory>
 </VirtualHost>

Where my-website.localhost should be your website name / address and the ServerAdmin email should be your actual email address for that website admin.

DocumentRoot should be the path to your website files.

If you decide to keep the logfiles apart for each website, for instance at

 ${APACHE_LOG_DIR}/my-website/error.log

don’t forget to add a subdirectory to /var/log/apache or apache won't start.

 sudo mkdir /var/log/apache/my-website

7.3.2 Activate the new website and deactivate the default one

 sudo a2ensite www.my-website.localhost.conf
 
 sudo a2dissite 000-default.conf
 
 sudo systemctl restart apache2

7.3.3 Alias the website in your /etc/hosts for easy access vie your browser

Open the file with:

 sudo vi /etc/hosts

and add

 127.0.0.1www.my-website.localhost

8. Create Database and User

8.1 Create Database in PHPMyAdmin

Open PHPMyAdmin in your browser (www.my-website.com/phpmyadmin) and click on New on the left panel or go to the databases tab and create there a new one.

I prefer utf8mb4_unicode_ci as collation.

8.2 Create a User for this databases

In PHPMyAdmin go to the Userstab. If you don’t see it (because you are on the databasetab for instance), first go back to the startpage.

Add a user by clicking on Add User. The new user can have only local access if app and database are on the same server / machine, but if not choose any host.

8.3 Grant user rights to the databases

In the user tab click on Edit privileges to go to the user preferences page.

There click on the database button and select the database your user should get the rights to and click ok.

On the next screen grant rights to data and structure by checking the boxes and click ok.

8.3 Verify the new username

Log out of PHPMyAdmin and login again with the new created user and password. If successful you should only see the database you granted the permissions to.

9. Give Laravel access to the databases

9.1 Edit the .env file

Open the .env file in your editor of choice (I use Atom for development) and set the DB_ variables according the data you used to create the database and user.

As an example

 DB_CONNECTION=mysql
 DB_HOST=127.0.0.1
 DB_PORT=3306
 DB_DATABASE=MyDB
 DB_USERNAME=MyDBUser
 DB_PASSWORD=MYDBPassword

Save that changes.

9.2 First migration

Go to projects root directory in your shell and execute the following command.

php artisan migrate:install

You should be answered with:

 Migration table created successfully.

In your database a new table migrations is created. Here all migrations will be stored.

Now execute

 php artisan migrate

The response will show that a user table, a password reset table and failed jobs table are created.

Migrating: 2014_10_12_000000_create_users_table
 Migrated: 2014_10_12_000000_create_users_table (0.02 seconds)
 Migrating: 2014_10_12_100000_create_password_resets_table
 Migrated: 2014_10_12_100000_create_password_resets_table (0.02 seconds)
 Migrating: 2019_08_19_000000_create_failed_jobs_table
 Migrated: 2019_08_19_000000_create_failed_jobs_table (0.01 seconds)

A. Extras

Atom addons for developing Laravel projects

  • Language-blade
  • Blade-snippets
  • Blade spacer
  • Language-vue
  • Vue-snippets