ebs/docs/install.md
2024-03-29 11:27:12 +01:00

7.3 KiB

Installation

This is an example of installation of the project on a virtual private server. I has been installed on a OVH VPS, the smallest one, its specifications are:

  • 1 vCore
  • 2 Go RAM
  • 20 Go SSD SATA
  • 100 Mbit/s unlimited
  • Ubuntu 22.04 LTS

Of course any hoster and servers type can be used. Small modifications may be required depending on the used operating system. But as the installation process is quite generic, ony small changes should be required to fit your operating system needs.

Some links are provided for reference. Of course you are free to install the way you want the various required component it's just a basic working example that can be adapted.

I havent's put sudo command, it depends on wheter you run an administrator account or not. If not, you will have to prefix some commands with sudo.

Server update (source):

First we must update the base packages of the server:

apt update && sudo apt upgrade -y
apt-get install linux-headers-generic make
snap install nvim --classic
([ -f /var/run/reboot-required ] && sudo reboot -f)

PHP Installation

apt install php php-cli php-common php-mbstring php-xmlrpc php-soap php-gd php-xml php-intl php-mysql php-cli php-zip php-curl php-apcu php-redis -y

Verify the cli:

php --version

We should have the following output:

PHP 8.1.2-1ubuntu2.11 (cli) (built: Feb 22 2023 22:56:18) (NTS)
Copyright (c) The PHP Group
Zend Engine v4.1.2, Copyright (c) Zend Technologies
with Zend OPcache v8.1.2-1ubuntu2.11, Copyright (c), by Zend Technologies

Here the defautl PHP version is used but it is better to use the ondrej/php PPA repository to have the last minor PHP version.

Apache installation (source)

apt install apache2
systemctl start apache2
systemctl enable apache2
service apache2 status

It should display (green ●):

● apache2.service - The Apache HTTP Server

And we should see the default Apache page when accessing the server with HTTP:

Apache2

(eg: http://vps-9cd99999.vps.ovh.net)

Generate a SSH key (source)

This section is only needed if you want to fetch the project from a private repository. You may also not need this depending of your deployment process.

ssh-keygen -t ed25519 -C "ubuntu@vps-6cd61302"
eval `ssh-agent -s`
ssh-add

Cloning the project

Git is already installed on this distribution. You must install it if it isn't available.

cd /var/www
git clone git@github.com:ApesHDF/EBS.git

Composer (source)

Follow the instructions on https://getcomposer.org/download/.

Then should have composer available

composer --version

Which gives:

Composer version 2.5.5 2023-03-21 11:50:05

Install the project dependencies:

cd /var/www/plateforme-ebs
composer install --ignore-platform-req=php

The --ignore-platform- options is required if you have a PHP version below 8.1.11.

Redis installation

 apt-get install redis

Meilisearch cloud service

You can install a Meilsearch local instance but you can also use the cloud free service. It allows to have 100k documents and 10k search by month. It works well for testing purpose. Then can you always install a local Meilisearch instance when you reached the free tier threshold.

Once you cloud instance is created, get the instance URL and the password. You have to use them for the MEILISEARCH_URL and MEILISEARCH_API_KEY variables (check below).

Postgres 14 installation (source)

apt install vim curl wget gpg gnupg2 software-properties-common apt-transport-https lsb-release ca-certificates
apt install postgresql-14 postgresql-client
systemctl status postgresql@14-main.service
sudo -u postgres psql -c "SELECT version();"

Create the database

sudo -u postgres psql
create database app;
create user app with encrypted password '!ChangeMe!';
grant all privileges on database app to app;

Create the tables and load the initial fixtures

bin/console doctrine:schema:create --env=prod
bin/console doctrine:migrations:migrate --env=prod --no-interaction
bin/console messenger:setup-transports --env=prod
bin/console hautelook:fixtures:load --no-interaction -vv --no-bundles --env=prod

Apache configuration

Here is a simple vhost:

nvim /etc/apache2/sites-available/000-default.conf

And put:

<VirtualHost *:80>
    ServerAdmin admin@example.com
    DocumentRoot /var/www/plateforme-ebs/public

    ErrorLog ${APACHE_LOG_DIR}/error.log
    CustomLog ${APACHE_LOG_DIR}/access.log combined

    <Directory /var/www/plateforme-ebs/public>
         AllowOverride All
         Require all granted
         FallbackResource /index.php
     </Directory>
</VirtualHost>

Of course you should install a SSL certificate later with letsencrypt for example.

Node and Yarn installation

Here are some resources:

We must have at least Node 14 and Yarn 1.22

wget -qO- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.1/install.sh | bash
sudo apt install nvm

Close and reopen the session so nvm is available:

nvm install 14
apt install npm
npm install -g yarn

Then run:

cd /var/www/plateforme-ebs
yarn install
yarn build

Files

Be careful that is you run the commands as root some files may not have the correct rights. The following directory should be owned by the web server user:

chown -R /var/www/plateforme-ebs/public 
chown -R /var/www/plateforme-ebs/var 

Parameters

You can create a .env.local file containing:

APP_ENV=prod
APP_DEBUG=0
APP_SECRET=xxxxxxx
MEILISEARCH_URL=https://ms-xxxxxxxx-3263.lon.meilisearch.io
MEILISEARCH_API_KEY=xxxxxxx
PAYUM_APIKEY=test_FRxxxxxx
REDIS_URL=redis://localhost:6379
DATABASE_URL="postgresql://app:!ChangeMe!@127.0.0.1:5432/app?serverVersion=14&charset=utf8"
MAILER_DSN=smtp://mailer:1025
SMS_DSN=null://null

Change the Meilisearch parameters you received before. With this setup, mails are sent with a local SMTP server and SMS are disabled.

Then you can run the Meilisearch index command:

sudo bin/console app:index-products --env=prod

That's it, access the root URL of your server, you should see the home page. If you have a 500 error, you can change APP_DEBUG to 1 to see the errors.

More information about the parameters in this file.

Conclusion

This is a working basic installation process. Of course, it it better to use a deployment tool like EasyDeploy, Capistrano or other ones.