Налаштування деплою сайту на VDS/VPS

Наша компанія займається розробкою, підтримкою та обслуговуванням сайтів будь-якої складності. Від простих односторінкових сайтів до масштабних кластерних систем, побудованих на мікро сервісах. Досвід розробників підтверджено сертифікатами від вендорів.
Розробка та обслуговування будь-яких видів сайтів:
Інформаційні сайти або веб-програми
Сайти візитки, landing page, корпоративні сайти, онлайн каталоги, квіз, промо-сайти, блоги, ресурси новин, інформаційні портали, форуми, агрегатори
Сайти або веб-програми електронної комерції
Інтернет-магазини, B2B-портали, маркетплейси, онлайн-обмінники, кешбек-сайти, біржі, дропшиппінг-платформи, парсери товарів
Веб-програми для управління бізнес-процесами
CRM-системи, ERP-системи, корпоративні портали, системи управління виробництвом, парсери інформації
Сайти або веб-програми електронних послуг
Дошки оголошень, онлайн-школи, онлайн-кінотеатри, конструктори сайтів, портали надання електронних послуг, відеохостинги, тематичні портали

Це лише деякі з технічних типів сайтів, з якими ми працюємо, і кожен із них може мати свої специфічні особливості та функціональність, а також бути адаптованим під конкретні потреби та цілі клієнта.

Пропоновані послуги
Показано 1 з 1 послугУсі 2065 послуг
Налаштування деплою сайту на VDS/VPS
Середня
від 1 робочого дня до 3 робочих днів
Часті питання
Наші компетенції:
Етапи розробки
Останні роботи
  • image_website-b2b-advance_0.png
    Розробка сайту компанії B2B ADVANCE
    1262
  • image_web-applications_feedme_466_0.webp
    Розробка веб-додатків для компанії FEEDME
    1171
  • image_websites_belfingroup_462_0.webp
    Розробка веб-сайту для компанії БЕЛФІНГРУП
    874
  • image_ecommerce_furnoro_435_0.webp
    Розробка інтернет магазину для компанії FURNORO
    1094
  • image_crm_enviok_479_0.webp
    Розробка веб-додатків для компанії Enviok
    831
  • image_bitrix-bitrix-24-1c_fixper_448_0.png
    Розробка веб-сайту для компанії ФІКСПЕР
    851

Налаштування розгортання сайту на VDS/VPS

VDS/VPS — виртуальний виділений сервер з корневим доступом. Дає повний контроль над окружением при доступній ціні. Підходить для більшості комерційних проектів: Laravel, Django, Node.js, WordPress.

Первічна настройка сервера

# Підключення
ssh root@YOUR_SERVER_IP

# Створити deploy-користувача (не працювати від root)
useradd -m -s /bin/bash deploy
usermod -aG sudo deploy
mkdir -p /home/deploy/.ssh
cp ~/.ssh/authorized_keys /home/deploy/.ssh/
chown -R deploy:deploy /home/deploy/.ssh
chmod 700 /home/deploy/.ssh && chmod 600 /home/deploy/.ssh/authorized_keys

# Запретити root-логін по SSH
sed -i 's/PermitRootLogin yes/PermitRootLogin no/' /etc/ssh/sshd_config
sed -i 's/#PasswordAuthentication yes/PasswordAuthentication no/' /etc/ssh/sshd_config
systemctl restart sshd

# Базові пакети
apt update && apt upgrade -y
apt install -y git curl wget nginx ufw fail2ban unzip

PHP + Laravel стек

# PHP 8.3
add-apt-repository ppa:ondrej/php
apt install -y php8.3-fpm php8.3-cli php8.3-{pgsql,mysql,redis,xml,mbstring,curl,zip,gd}

# Composer
curl -sS https://getcomposer.org/installer | php
mv composer.phar /usr/local/bin/composer

# Node.js 20
curl -fsSL https://deb.nodesource.com/setup_20.x | bash -
apt install -y nodejs

# PostgreSQL 16
apt install -y postgresql-16
sudo -u postgres createuser --superuser myapp_user
sudo -u postgres createdb myapp_prod -O myapp_user

Nginx конфигурація для Laravel

# /etc/nginx/sites-available/myapp
server {
    listen 80;
    server_name example.com www.example.com;
    root /var/www/myapp/current/public;

    index index.php;
    charset utf-8;

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

    location ~ \.php$ {
        fastcgi_pass unix:/var/run/php/php8.3-fpm.sock;
        fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name;
        include fastcgi_params;
    }

    location ~ /\.(?!well-known).* {
        deny all;
    }

    # Кеш статики
    location ~* \.(css|js|jpg|jpeg|png|gif|ico|svg|woff2?)$ {
        expires 1y;
        add_header Cache-Control "public, immutable";
    }

    # Gzip
    gzip on;
    gzip_types text/plain text/css application/json application/javascript;
    gzip_min_length 1024;
}

Let's Encrypt SSL

apt install -y certbot python3-certbot-nginx
certbot --nginx -d example.com -d www.example.com \
    --non-interactive --agree-tos -m [email protected]

# Автообновлення
systemctl enable --now certbot.timer

Структура деплоя (Deployer або ручний)

# /var/www/myapp/
# ├── current -> releases/20241115143022
# ├── releases/
# │   └── 20241115143022/
# ├── shared/
# │   ├── .env
# │   └── storage/

# deploy.sh
DEPLOY_PATH=/var/www/myapp
RELEASE=$DEPLOY_PATH/releases/$(date +%Y%m%d%H%M%S)

git clone --depth=1 -b main https://github.com/user/repo.git $RELEASE
cd $RELEASE

composer install --no-dev --optimize-autoloader
npm ci && npm run build

ln -s $DEPLOY_PATH/shared/.env $RELEASE/.env
ln -s $DEPLOY_PATH/shared/storage $RELEASE/storage

php artisan migrate --force
php artisan optimize

ln -sfn $RELEASE $DEPLOY_PATH/current

sudo systemctl reload php8.3-fpm nginx
php artisan queue:restart

# Видалити старі релізи
ls -dt $DEPLOY_PATH/releases/* | tail -n +6 | xargs rm -rf

Фаервол і безопасність

ufw allow OpenSSH
ufw allow 'Nginx Full'
ufw enable
ufw status

# Fail2ban
cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
systemctl enable --now fail2ban

Мониторинг (мінімальний)

# Netdata — простий мониторинг
bash <(curl -Ss https://my-netdata.io/kickstart.sh)
# Доступен на :19999

# Або встановити Prometheus Node Exporter
apt install -y prometheus-node-exporter

Терміни реалізації

  • Первічна настройка VPS + Nginx + PHP + деплой: 1–2 дні
  • SSL + фаервол + fail2ban: кілька годин
  • Настройка мониторингу: +1 день