---
title: How to setup webserver
tags: how-to, system administration
---
How to Setup a Webserver
===
Currently at this time the following are version used:
- CentOS 7
- MySQL 8
- Laravel 7.*
- nodejs 12.16.3
Installing Mysql
---
1. Select appropriate binary, in the following address:
`https://dev.mysql.com/downloads/repo/yum/`
2. Download selected binary by
`wget https://dev.mysql.com/get/mysql80-community-release-el7-3.noarch.rpm`
3. Check md5sum if download is not corrupted
`sudo md5sum mysql80-community-release-el7-3.noarch.rpm`
4. Add rpm package
`sudo rpm –ivh mysql80-community-release-el7-3.noarch.rpm`
5. Install MySQL Server
`sudo yum install mysql-server`
6. Check temporary password
`sudo grep 'temporary password' /var/log/mysqld.log`
7. Run Mysql Secure Installation
`mysql_secure_installation`
#### Below are optional setup for MySQL security
- Disabling Password Validation
-To uninstall password validation**
`mysql> UNINSTALL COMPONENT 'file://component_validate_password';`
To install it back again, the command is:
`mysql> INSTALL COMPONENT 'file://component_validate_password';`
**To change policy strictness**
```
SET GLOBAL validate_password.policy = 0; // For LOW
SET GLOBAL validate_password.policy = 1; // For MEDIUM
SET GLOBAL validate_password.policy = 2; // For HIGH
```
- Creating specific user for database management
1. `mysql> CREATE USER 'user_name'@'%' IDENTIFIED WITH mysql_native_password BY 'user_password';`
2. `mysql> CREATE GRANT ALL PRIVILEGES ON `database`.* TO 'user_name'@'%';`
----
Installing system requirements for laravel
---
**Installation steps based on Amazon Linux 2 AMI**
1. Install amazon-linux-extras if not yet already installed
``` sudo yum install -y amazon-linux-extras ```
2. Check for versions available
``` sudo amazon-linux-extras | grep php ```
3. Enable selected version
``` sudo amazon-linux-extras enable php7.4 ```
4. Install php
```
sudo yum clean metadata
sudo yum install php php-{pear,cgi,common,curl,mbstring,gd,mysqlnd,gettext,bcmath,json,xml,fpm,intl,zip,imap}
```
**Installation steps based on RHEL variant Distro**
By default CentOs is shipped with php 5.4.16 which we dont want.
1. Install system development tools and allow centos to install latest packages
```
sudo yum -y install epel-release
sudo yum install http://rpms.remirepo.net/enterprise/remi-release-7.rpm
sudo yum update
sudo yum install yum-utils
```
2. Set yum to install php73
```sudo yum-config-manager --enable remi-php73 ```
3. Install php
```
sudo yum install php php-cli php-gd php-json php-mysqlnd php-pdo php-perl-mcrypt php-mbstring php-xml php-opcache php-zip
```
Installing Nodejs
---
1. Download latest nodejs binary
`wget https://nodejs.org/dist/v14.15.4/node-v14.15.4-linux-x64.tar.xz`
2. Unzip the binary archive to any directory you wanna install Node, I use /usr/local/lib/nodejs
```
sudo mkdir -p /usr/local/lib/nodejs
sudo tar -xJvf node-v14.15.4-linux-x64.tar.xz -C /usr/local/lib/nodejs
```
3. Set the environment variable ~/.profile, add below to the end
```
export PATH=/usr/local/lib/nodejs/node-v14.15.4-linux-x64/bin:$PATH
```
4. Source shell profile
```
source ~/.bash_profile
```
---
Installing Composer
---
1. Download composer and install
```curl -sS https://getcomposer.org/installer |php```
2. Move composer.phar to bin directory for global call
```sudo mv composer.phar /usr/local/bin/composer```
---
Setup correct user-group permission for web server
---
1. Create user group
`sudo groupadd laravel`
2. Add ssh-user to group
`sudo gpasswd -a ssh-user laravel`
3. Add web server user to group
- for nginx
`sudo gpasswd -a nginx laravel`
- for apache either of the following command
`sudo gpasswd -a apache laravel`
`sudo gpasswd -a httpd laravel`
4. Navigate to your Application directory
`sudo cd /path/to/your/beautiful/laravel-application`
5. This is an optional steps for resetting file and directory permissions to default
```
sudo find ./ -type d -exec chmod 755 {} \;
sudo find ./ -type f -exec chmod 644 {} \;
```
6. Give users part of the group the standard RW and RWX
```
sudo chown -R :laravel ./storage
sudo chown -R :laravel ./bootstrap/cache
sudo chgrp laravel /path/to/your/beautiful/laravel-application
sudo chmod g+s /path/to/your/beautiful/laravel-application
sudo find ./storage -type d -exec chmod 775 {} \;
sudo find ./bootstrap/cache -type d -exec chmod 775 {} \;
sudo find ./storage -type f -exec chmod 664 {} \;
sudo find ./bootstrap/cache -type f -exec chmod 664 {} \;
```
7. Give the newly created files/directories the group of the parent directory
```
sudo find ./bootstrap/cache -type d -exec chmod g+s {} \;
sudo find ./storage -type d -exec chmod g+s {} \;
```
8. Let newly created files/directories inherit the default owner
This set permissions up to maximum permission of rwx e.g. new files get 664 and olders get 775
```
sudo setfacl -R -d -m g::rwx ./storage
sudo setfacl -R -d -m g::rwx ./bootstrap/cache
```
9. Set File permission for .ht files
```
sudo chmod 0755 .htaccess
```
10. Update the web server config to use the appropriate user and group
- For Apache: update config commonly at `/etc/httpd`
- For Nginx: update nginx config commonly at `/etc/nginx`
- For PHP-FPM: update pool config commonly at `/etc/php/fpm/pool.d` OR /etc/php-fpm.d/www.conf
11. Test your application
#### NOTE
For laravel projects manually create the data folder for cache on ./storage/framework/cache/ to avoid cache permission issue