0% found this document useful (0 votes)
3 views

Server configuration for PHP & Laravel projects.

Uploaded by

vepisab634
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
3 views

Server configuration for PHP & Laravel projects.

Uploaded by

vepisab634
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 8

saddamhshovon / SERVER-CONFIGURATION.

md
Last active last week • Report abuse

Code Revisions 7 Stars 2 Forks 1 Embed Download ZIP


<script src="https://gist.g

Server configuration for PHP & Laravel projects.

SERVER-CONFIGURATION.md

Configuration Guidelines for Servers


Version: 1.1.3 Last Modified: 2024-11-29

This document outlines the guidelines for configuring a new VPS/Cloud server, specifically
focusing on Debian 12 (or Ubuntu 24.04 as an alternative). If using a different distribution,
commands may vary, and you will need to adjust accordingly.

1. Initial Setup

1.1 Update and Upgrade System


Before proceeding with any configuration, always ensure the system is up to date.

sudo apt update


sudo apt upgrade

2. Sudo Configuration

2.1 Install sudo

By default, sudo is not installed on Debian. First, switch to root mode:

su -

Then, install sudo :

apt-get install sudo -y

2.2 Create a New User


It is best practice to avoid using the root user for server operations. Create a new user and add
them to the sudo group:

adduser admin
usermod -aG sudo admin

You can find more details here.

3. Setting Up a Firewall

3.1 Install UFW and Dependencies


UFW (Uncomplicated Firewall) is our preferred choice for managing firewall rules. UFW
automatically installs iptables and netfilter as dependencies, but if needed, you can install
them manually:

apt install iptables


apt install ufw

3.2 Verify UFW Requirements


Check if UFW meets the system requirements:

/usr/share/ufw/check-requirements

If something fails, reboot the server and recheck:

reboot now

3.3 Configure UFW


List available applications:

ufw app list

Allow OpenSSH to ensure SSH access after the firewall is enabled:

ufw allow OpenSSH

Enable UFW:
ufw enable

Note: You may be logged out after enabling UFW. Log back in to continue.

Check the UFW status:

ufw status

Logout and relogin as the new sudo user ( admin ):

logout

4. Installing PHP
Install PHP-FPM (FastCGI Process Manager) and necessary PHP extensions:

sudo apt install php-fpm php-mbstring php-xml php-bcmath php-curl php-gd php-mysql php-zip

4.1 Check PHP Version


To verify PHP installation:

php -v

4.2 Check Installed Extensions


To list installed PHP extensions:

php -m

5. Installing Nginx
To serve web applications, install Nginx:

sudo apt install nginx

5.1 Allow Nginx Through UFW


Nginx integrates with UFW and offers several profiles. List available UFW profiles:
sudo ufw app list

Enable the "Nginx Full" profile, which allows both HTTP and HTTPS traffic:

sudo ufw allow 'Nginx Full'

Check the UFW status:

sudo ufw status

5.2 Managing Nginx Service


• Check Nginx service status:

sudo systemctl status nginx

• Enable Nginx to start on boot:

sudo systemctl enable nginx

• Restart Nginx:

sudo systemctl restart nginx

• Reload Nginx configuration without stopping the server:

sudo systemctl reload nginx

You can find more details here.

6. Installing MariaDB Server


MariaDB is a popular, open-source database system. Follow the steps below to install and
configure MariaDB on your Debian 12 server.

6.1 Install MariaDB


First, install the MariaDB server package using the following command:

sudo apt install mariadb-server


6.2 Secure MariaDB Installation
Once MariaDB is installed, run the security script to configure it securely:

sudo mysql_secure_installation

You will be prompted with several questions during the process:

• Enter current root password:


Since no password is set yet, simply press ENTER to proceed.

• Switch to unix_socket authentication:


Type n and press ENTER to skip this step.

• Change the root password:


Type n and press ENTER .

• Afterward, press Y and ENTER to accept the defaults for the remaining prompts. These steps
will remove anonymous users, disable remote root logins, and remove the test database,
securing your MariaDB setup.

6.3 Create an Administrative User


To manage the database securely, it is recommended to create a new administrative user with full
privileges. First, access the MariaDB shell:

sudo mariadb

Then create a new user with root privileges:

GRANT ALL ON *.* TO 'admin'@'localhost' IDENTIFIED BY 'password' WITH GRANT OPTION;


FLUSH PRIVILEGES;
exit;

Be sure to replace 'admin' and 'password' with your desired username and password.

You can find more details here.

6.4 Create a Database and User


Once MariaDB is installed and secured, you can create a new database and user for your
application. Follow the steps below to create a database and assign a user to manage it.

1. Access the MariaDB shell:

sudo mariadb

2.
Create a new database named example_db with the utf8 character set and utf8_unicode_ci
collation:

CREATE DATABASE example_db DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

3. Create a new user example_user with a secure password:

CREATE USER 'example_user'@'localhost' IDENTIFIED BY 'example_pw';

4. Grant all privileges on the example_db database to the newly created user:

GRANT ALL PRIVILEGES ON example_db.* TO 'example_user'@'localhost';

5. Apply the privilege changes by flushing the privileges:

FLUSH PRIVILEGES;

6. Exit the MariaDB shell:

exit;

Make sure to replace example_db , example_user , and example_pw with your desired database
name, username, and password.

7. Deploying a Laravel Project

7.1 Directory Setup


Create the directory where your Laravel project will reside:

sudo mkdir /var/www/sub.example.com

Take ownership of the directory:

sudo chown -R $USER /var/www/sub.example.com

7.2 Clone the Project


Navigate to the directory and clone the desired branch from your repository:

cd /var/www/sub.example.com
git clone -b <branchname> <remote-repository-url>

7.3 Install Dependencies


After cloning, install the required Composer dependencies:

composer install

7.4 Set Permissions


Set appropriate ownership for storage and bootstrap/cache directories:

sudo chown -R $USER:www-data storage


sudo chown -R $USER:www-data bootstrap/cache

Set permissions for files (644) and directories (755):

sudo find /var/www/sub.example.com/ -type f -exec chmod 644 {} \;


sudo find /var/www/sub.example.com/ -type d -exec chmod 755 {} \;

Grant read, write, and execute permissions for storage and bootstrap/cache :

sudo chmod -R ug+rwx storage bootstrap/cache

7.5 Laravel Environment Configuration


Copy the .env.example to .env , set up the necessary environment variables, generate an app
key, link storage, and run migrations:

cp .env.example .env
php artisan key:generate
php artisan storage:link
php artisan migrate

hi2tamzid commented on Nov 19, 2024

Update the following command:

CREATE DATABASE example_db DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

saddamhshovon commented on Nov 29, 2024 Author


Update the following command:

CREATE DATABASE example_db DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

@hi2tamzid updated

You might also like