This guide provides step-by-step instructions for setting up the Media-alean.
- System Requirements
- PHP Installation
- Composer Installation
- RabbitMQ and Erlang
- Image Processing Libraries
- Nginx with Brotli
- PostgreSQL Installation
- Permissions for Project Directories
- FFmpeg Setup
- Authorization Setup
- Project Setup
- PHP 8.2
- PostgreSQL
- RabbitMQ
- Nginx
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;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/composercurl -1sLf "https://keys.openpgp.org/vks/v1/by-fingerprint/0A9AF2115F4687BD29803A206B73A36E6026DFCA" | sudo gpg --dearmor | sudo tee /usr/share/keyrings/com.rabbitmq.team.gpg > /dev/nullsudo 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.serviceapt install -y \
libjpeg-dev \
libpng-dev \
libtiff-dev \
libgif-dev;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
ENDWEBP_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;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/libPHP_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.iniapt -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;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 -tsudo 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;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/uploadsInstall FFmpeg and FFprobe. For Ubuntu/Debian:
sudo apt update
sudo apt install ffmpegAdd the following environment variables to your .env file:
FFMPEG_BIN=/usr/bin/ffmpeg
FFPROBE_BIN=/usr/bin/ffprobeTo enable Telegram login, you must create a Telegram bot and configure it properly:
- Open @BotFather
- Create a new bot using the command /newbot.
- Copy the bot token provided by BotFather.
- 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- 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"- Go to VK Developers
- Obtain your VK App ID and Api Secret Key.
- Add the following environment variables to your .env file:
VK_APP_ID=<app_id>
VK_API_SECRET=<api_secret>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/mainmkdir -p public/uploads \
public/media \
varmake install