Skip to content

baldrys-ed/api-doc

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

16 Commits
 
 
 
 
 
 
 
 

Repository files navigation

Media-alean Installation Guide

This guide provides step-by-step instructions for setting up the Media-alean.


Table of Contents

  1. System Requirements
  2. PHP Installation
  3. Composer Installation
  4. RabbitMQ and Erlang
  5. Image Processing Libraries
  6. Nginx with Brotli
  7. PostgreSQL Installation
  8. Permissions for Project Directories
  9. FFmpeg Setup
  10. Authorization Setup
  11. Project Setup

System Requirements

  • PHP 8.2
  • PostgreSQL
  • RabbitMQ
  • Nginx

PHP Installation

sudo add-apt-repository ppa:ondrej/php -y
apt update && apt -y upgrade;
sudo apt install -y \
acl \
unzip \
php8.2-zip \
php8.2-pdo \
php8.2-mysql \
php8.2-igbinary \
php8.2-redis \
php8.2-apcu \
php8.2-fpm \
php8.2-dom \
php8.2-xsl \
php8.2-xml \
php8.2-intl \
php8.2-opcache \
php8.2-imagick \
php8.2-dev \
php8.2-curl \
php8.2-ds \
php8.2-mbstring \
php8.2-bcmath \
php8.2-gd \
php8.2-pgsql \
php8.2-amqp \
redis-server;

Composer Installation

php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');"
php -r "if (hash_file('sha384', 'composer-setup.php') === '<SHA384_HASH>') { echo 'Installer verified'.PHP_EOL; } else { echo 'Installer corrupt'.PHP_EOL; unlink('composer-setup.php'); exit(1); }"
php composer-setup.php
php -r "unlink('composer-setup.php');"
sudo mv composer.phar /usr/local/bin/composer

RabbitMQ and Erlang

Add GPG key

curl -1sLf "https://keys.openpgp.org/vks/v1/by-fingerprint/0A9AF2115F4687BD29803A206B73A36E6026DFCA" | sudo gpg --dearmor | sudo tee /usr/share/keyrings/com.rabbitmq.team.gpg > /dev/null

Add repository

sudo tee /etc/apt/sources.list.d/rabbitmq.list <<EOF
deb [arch=amd64 signed-by=/usr/share/keyrings/com.rabbitmq.team.gpg] https://deb1.rabbitmq.com/rabbitmq-erlang/ubuntu/ noble main
deb [arch=amd64 signed-by=/usr/share/keyrings/com.rabbitmq.team.gpg] https://deb2.rabbitmq.com/rabbitmq-erlang/ubuntu/ noble main
deb [arch=amd64 signed-by=/usr/share/keyrings/com.rabbitmq.team.gpg] https://deb1.rabbitmq.com/rabbitmq-server/ubuntu/ noble main
deb [arch=amd64 signed-by=/usr/share/keyrings/com.rabbitmq.team.gpg] https://deb2.rabbitmq.com/rabbitmq-server/ubuntu/ noble main
EOF

sudo apt update
sudo apt install -y erlang-base erlang-asn1 erlang-crypto erlang-eldap erlang-ftp erlang-inets \
erlang-mnesia erlang-os-mon erlang-parsetools erlang-public-key erlang-runtime-tools erlang-snmp \
erlang-ssl erlang-syntax-tools erlang-tftp erlang-tools erlang-xmerl

sudo apt install -y rabbitmq-server --fix-missing
sudo ufw allow 5672,15672,4369,25672/tcp

# RabbitMQ users setup
rabbitmqctl add_user app "<PASSWORD>"
rabbitmqctl set_permissions -p / app ".*" ".*" ".*"

rabbitmqctl add_user system "<PASSWORD>"
rabbitmqctl set_user_tags system administrator
rabbitmqctl set_permissions -p / system ".*" ".*" ".*"

systemctl status rabbitmq-server.service

Image Processing Libraries

Installing libraries

apt install -y \
libjpeg-dev \
libpng-dev \
libtiff-dev \
libgif-dev;

Adding repositories

sudo cat <<'END' >> /etc/apt/sources.list && apt update;
deb http://mirror.yandex.ru/ubuntu/ noble main
deb-src http://mirror.yandex.ru/ubuntu/ noble main
END

WebP

WEBP_VERSION=1.4.0;
cd /tmp && wget https://storage.googleapis.com/downloads.webmproject.org/releases/webp/libwebp-$WEBP_VERSION.tar.gz ;
tar xvzf libwebp-$WEBP_VERSION.tar.gz;
cd libwebp-$WEBP_VERSION;
./configure;
make;
make install;
echo "export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/lib" >> ~/.zshrc;

ImageMagick

IMAGE_MAGICK_VERSION=7.1.2-1
cd /tmp
wget https://imagemagick.org/download/ImageMagick-$IMAGE_MAGICK_VERSION.tar.gz
tar xvzf ImageMagick-$IMAGE_MAGICK_VERSION.tar.gz
cd ImageMagick-$IMAGE_MAGICK_VERSION
sudo apt-get build-dep imagemagick -y
./configure --with-png --with-jpeg --with-zlib --with-webp
make
sudo make install
sudo ldconfig /usr/local/lib

PHP Imagick Extension

PHP_IMAGICK_VERSION=3.8.0
cd /tmp
wget https://pecl.php.net/get/imagick-$PHP_IMAGICK_VERSION.tgz
tar zxvf imagick-$PHP_IMAGICK_VERSION.tgz
cd imagick-$PHP_IMAGICK_VERSION
phpize
./configure
make
sudo make install

sudo ln -s /etc/php/8.2/mods-available/imagick.ini /etc/php/8.2/fpm/conf.d/20-imagick.ini
sudo ln -s /etc/php/8.2/mods-available/imagick.ini /etc/php/8.2/cli/conf.d/20-imagick.ini

Mozjpeg

apt -y install cmake autoconf automake libtool nasm make pkg-config libpng-dev pngquant;
cd /tmp && git clone https://github.com/mozilla/mozjpeg.git ;
cd /tmp/mozjpeg;
mkdir build && cd build;
cmake -G"Unix Makefiles" ../;
make && make install;

Nginx with Brotli

sudo apt install -y golang libpcre3-dev make gcc zlib1g-dev libbrotli-dev
NGINX_VERSION=1.26.3
BROTLI_DIR=/tmp/brotli

git clone --recursive https://github.com/google/ngx_brotli.git $BROTLI_DIR
wget http://nginx.org/download/nginx-$NGINX_VERSION.tar.gz
tar -zxvf nginx-$NGINX_VERSION.tar.gz
cd nginx-$NGINX_VERSION

./configure \
--sbin-path=/usr/sbin/nginx \
--with-http_ssl_module \
--with-http_v2_module \
--add-module=$BROTLI_DIR \
--with-compat \
--with-http_stub_status_module \
--with-http_realip_module \
--with-http_auth_request_module \
--with-threads \
--with-http_gunzip_module \
--with-http_gzip_static_module

make && sudo make install
sudo systemctl restart nginx.service
nginx -t

PostgreSQL Installation

sudo apt install -y wget ca-certificates
wget --quiet -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc | sudo apt-key add -
echo "deb http://apt.postgresql.org/pub/repos/apt/ $(lsb_release -cs)-pgdg main" | sudo tee /etc/apt/sources.list.d/pgdg.list
sudo apt update
sudo apt install -y postgresql postgresql-contrib

su - postgres;
psql;
create role app with login password '<password>';
alter role app createdb;
CREATE DATABASE "app" WITH OWNER "app" ENCODING 'UTF8' LC_COLLATE = 'en_US.UTF-8' LC_CTYPE = 'en_US.UTF-8' TEMPLATE template0;

Permissions for Project Directories

HTTPDUSER=$(ps axo user,comm | grep -E '[n]ginx|[w]ww-data' | head -1 | cut -d\  -f1)

setfacl -dR -m u:"$HTTPDUSER":rwX -m u:app:rwX /home/app/media-alean/backend/var \
/home/app/media-alean/backend/public/media /home/app/media-alean/backend/public/uploads

setfacl -R -m u:"$HTTPDUSER":rwX -m u:app:rwX /home/app/media-alean/var \
/home/app/media-alean/backend/public/media /home/app/media-alean/backend/public/uploads

FFmpeg Setup

Install FFmpeg and FFprobe. For Ubuntu/Debian:

sudo apt update
sudo apt install ffmpeg

Add the following environment variables to your .env file:

FFMPEG_BIN=/usr/bin/ffmpeg
FFPROBE_BIN=/usr/bin/ffprobe

Authorization Setup

Telegram Authorization

To enable Telegram login, you must create a Telegram bot and configure it properly:

  1. Open @BotFather
  2. Create a new bot using the command /newbot.
  3. Copy the bot token provided by BotFather.
  4. Set the following environment variables in your .env file:
TELEGRAM_BOT_TOKEN=<bot_token>
TELEGRAM_BOT_URL=<bot_username>
TELEGRAM_LOGIN_URL=<server_domain>/telegram/authentication
  1. Set up the bot webhook:
curl -X POST "https://api.telegram.org/bot<your_bot_token>/setWebhook" \
     -d "url=<your_server_domain>/api/telegram/webhook"

VK Authorization

  1. Go to VK Developers
  2. Obtain your VK App ID and Api Secret Key.
  3. Add the following environment variables to your .env file:
VK_APP_ID=<app_id>
VK_API_SECRET=<api_secret>

Project Setup

Git setup

git init
git remote add origin git@gitlab-io.alean.ru:media-alean/media-alean-backend.git
git fetch origin
git checkout -b main --track origin/main

Create necessary directories

mkdir -p public/uploads \
         public/media \
         var

Install dependencies, run migrations, and clear cache

make install

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages