---
title: VPS running Linux.
description: Setup of ThemeParkPanel if using a VPS running Linux.
published: true
date: 2023-02-16T21:10:48.624Z
tags: 
editor: markdown
dateCreated: 2023-02-16T21:10:46.768Z
---

# VPS running Linux

This guide will guide you through the installation of ThemeParkPanel on an VPS running Linux.

*It assumes you are on the Ubuntu distro. If you are on another distro, some commands my vary.*

## 1. Webserver setup (LEMP)

We are going to use Nginx and MariaDB for this installation. Run the following commands in sequence.

```shell
# Add 'add-apt-repository` command
apt -y install software-properties-common curl apt-transport-https ca-certificates gnupg

# Install the required repositories
LC_ALL=C.UTF-8 add-apt-repository -y ppa:ondrej/php
curl -sS https://downloads.mariadb.com/MariaDB/mariadb_repo_setup | sudo bash

# Update repositories list
apt update

# Install dependencies
apt -y install php8.1 php8.1-{cli,gd,mysql,pdo,mbstring,tokenizer,bcmath,xml,fpm,curl,zip} openssl git unzip mariadb-server nginx

# Install composer
curl -sS https://getcomposer.org/installer | sudo php -- --install-dir=/usr/local/bin --filename=composer

# Create panel directory
mkdir -p /var/www/themeparkpanel
```

## 2. Uploading the files

**You need remote file transfer software to upload the files to your VPS. You can use for example Filezilla or WinSCP. *This guide assumes you have WinSCP.***

1. Click on **New Site**. Then enter your SSH details. Then click on **Login**.

![screenshot_114.png](/screenshot_114.png =25%x)

2. Go to the `/var/www/themeparkpanel` directory and upload the files of **the SSH zip**.
3. Run the following command to fix the file permissions:

```shell
chmod -R 755 storage/* bootstrap/cache/
```

## 3. Creating the MySQL database

1. Run the following command to enter the MariaDB console.

```shell
mysql -u root -p
```

And enter the following SQL commands in sequence.

```sql
# Make sure to replace 'yourPassword' with a secure password
CREATE USER 'themeparkpanel'@'%' IDENTIFIED BY 'yourPassword';
CREATE DATABASE panel;
GRANT ALL PRIVILEGES ON panel.* TO 'themeparkpanel'@'%' WITH GRANT OPTION;
exit
```

2. Open the `/etc/mysql/mariadb.conf.d/50-server.cnf` file and replace the value of the `bind-address` setting with `0.0.0.0`.

```yml
[mysqld]
# Replace the 127.0.0.1 with 0.0.0.0
bind-address=0.0.0.0
```

3. Run the following command to restart the MariaDB server.

```shell
systemctl restart mariadb
```

## 4. Configuration of the panel

1. Copy the .env.example file to .env (using `cp .env.example .env`) and open the `.env` file.
	- Change `APP_URL` to the URL of your panel
	- At `DB_` change the credentials to the database details created above.
	- At `MAIL_` change the credentials to the credentials of an email account.
2. Run the followings command in sequence to proceed the installation.

```shell
# Install dependencies
composer install --no-dev --optimize-autoloader

# Generate the key
php artisan key:generate --force

# Populate the database
php artisan migrate --force

# Fix file permissions for the panel
chown -R www-data:www-data /var/www/themeparkpanel/*
```

## 5. Configuration of the webserver

Choose if you want to add SSL encryption to your panel or not.

# Tabs {.tabset}
## Without SSL

*We include an example configuration to serve our panel. Make sure to replace `%DOMAIN` with the full domain, and `%PATH%` with the full installation path (probably `/var/www/themeparkpanel`).*

1. Create `/etc/nginx/sites-available/themeparkpanel.conf` and put the following content in it.

```nginx
server {
        listen 80;
        listen [::]:80;
        
        root /var/www/themeparkpanel/public;
        
        server_name %DOMAIN%;
        index index.php index.html index.htm index.nginx-debian.html;

        location / {
                try_files $uri $uri/ /index.php?$query_string;
        }

        location ~ \.php$ {
                include snippets/fastcgi-php.conf;
                fastcgi_pass unix:/run/php/php8.1-fpm.sock;
        }

        location ~ /\.ht {
                deny all;
        }

        location ~ /.well-known {
                allow all;
        }
}
```

2. Run the following commands.

```shell
# Link the configuration to the enabled directory
sudo ln -s /etc/nginx/sites-available/themeparkpanel.conf /etc/nginx/sites-enabled/themeparkpanel.conf

# Restart Nginx
systemctl restart nginx
```

## With SSL

*We include an example configuration to serve our panel. Make sure to replace `%DOMAIN` with the full domain, and `%PATH%` with the full installation path (probably `/var/www/themeparkpanel`).*

1. Create `/etc/nginx/sites-available/themeparkpanel.conf` and put the following content in it.

```nginx
server {
        listen 80;
        listen [::]:80;

        server_name %DOMAIN%;
        return 301 https://$server_name$request_uri;
}

server {
        listen 443 ssl http2;
        listen [::]:443 ssl http2;
        
        ssl_certificate /etc/letsencrypt/live/%DOMAIN%/fullchain.pem;
        ssl_certificate_key /etc/letsencrypt/live/%DOMAIN%/privkey.pem;

        root /var/www/themeparkpanel/public;

        index index.php index.html;

        server_name %DOMAIN%;

        location / {
                try_files $uri $uri/ /index.php?$query_string;
        }

        location ~ \.php$ {
                include snippets/fastcgi-php.conf;
                fastcgi_pass unix:/run/php/php8.1-fpm.sock;
        }

        location ~ /\.ht {
                deny all;
        }

        location ~ /.well-known {
                allow all;
        }
}
```

2. Create your SSL certificate. You can use for example Certbot to do this for you.

3. Run the following commands.

```shell
# Link the configuration to the enabled directory
sudo ln -s /etc/nginx/sites-available/themeparkpanel.conf /etc/nginx/sites-enabled/themeparkpanel.conf

# Restart Nginx
systemctl restart nginx
```