Поиск по сайту:

Настройка и конфигурация серверного приложения на Ubuntu 24.04


Введение

Настройка и конфигурация серверного приложения на Ubuntu 24.04 необходимы для развертывания веб-приложений в рабочих средах. Независимо от того, размещаете ли вы приложения на Node.js, веб-сервисы на Python или сайты на PHP, правильно настроенный сервер приложений обеспечивает основу для надежного, безопасного и масштабируемого развертывания.

Это руководство поможет вам настроить готовый к работе в производственной среде сервер приложений на Droplet от Linux-Console.net с Ubuntu 24.04. Вы узнаете, как установить и настроить основные компоненты, настроить обратный прокси с помощью Nginx, защитить сервер с помощью SSL-сертификатов и развертывать приложения с использованием systemd для управления процессами. Конфигурация соответствует лучшим практикам для производства, обеспечивая готовность сервера к обработке реальных рабочих нагрузок.

Основные выводы

  • Настройте готовый к работе в продакшене сервер приложений на Ubuntu 24.04 с использованием Droplet от Linux-Console.net.
  • Настройте Nginx как обратный прокси-сервер для обработки входящих запросов и маршрутизации трафика к вашим приложениям
  • Реализуйте шифрование SSL/TLS с использованием Let’s Encrypt для безопасных соединений.
  • Разворачивайте и управляйте приложениями с помощью systemd для надежного управления процессами.
  • Применяйте меры по усилению безопасности, включая настройку брандмауэра и прав пользователей.
  • Поддержка нескольких типов приложений, включая приложения на Node.js, Python и PHP.

Предварительные требования

Прежде чем начать, убедитесь, что у вас есть следующее:

  • Droplet от Linux-Console.net, работающий на Ubuntu 24.04. Если вам нужно создать его, следуйте нашему руководству по начальной настройке сервера с Ubuntu, которое включает создание пользователя без прав root с привилегиями sudo и настройку брандмауэра.
  • Имя домена указано на IP-адрес вашего Droplet. Вы можете настроить это, следуя нашему руководству по настройке имени хоста на Linux-Console.net.
  • Базовое знакомство с командной строкой Linux и доступ по SSH к вашему серверу.

Шаг 1 — Обновление системных пакетов

Начните с обновления индекса пакетов вашей системы и обновления существующих пакетов, чтобы убедиться, что у вас установлены последние исправления безопасности и версии программного обеспечения:

sudo apt update
sudo apt upgrade -y

Это гарантирует, что ваш сервер Ubuntu 24.04 имеет самую актуальную информацию о пакетах и обновления безопасности. Ubuntu 24.04 включает обновлённые версии пакетов по сравнению с Ubuntu 22.04, включая более новые версии systemd, Nginx и других основных компонентов.

Шаг 2 — Установка Nginx в качестве обратного прокси

Nginx служит в качестве обратного прокси, обрабатывая входящие HTTP- и HTTPS-запросы и перенаправляя их на ваш сервер приложений. Такая настройка предоставляет несколько преимуществ: завершение SSL, возможности балансировки нагрузки и улучшенную безопасность за счет того, что ваш сервер приложений находится за прокси.

Установите Nginx с помощью apt:

sudo apt install nginx -y

После установки запустите Nginx и включите его автоматический запуск при загрузке:

sudo systemctl start nginx
sudo systemctl enable nginx

Проверьте, что Nginx работает:

sudo systemctl status nginx

Вы должны увидеть вывод, указывающий на то, что Nginx активен и работает.

● nginx.service - A high performance web server and a reverse proxy server
     Loaded: loaded (/usr/lib/systemd/system/nginx.service; enabled; preset: enabled)
     Active: active (running) since Thu 2025-12-18 07:03:01 UTC; 32s ago
       Docs: man:nginx(8)
   Main PID: 46284 (nginx)
      Tasks: 3 (limit: 4656)
     Memory: 2.4M (peak: 5.3M)
        CPU: 46ms
     CGroup: /system.slice/nginx.service
             ├─46284 "nginx: master process /usr/sbin/nginx -g daemon on; master_process on;"
             ├─46286 "nginx: worker process"
             └─46287 "nginx: worker process"

Dec 18 07:03:01 Anish-Ubuntu-24 systemd[1]: Starting nginx.service - A high performance web server and a reverse proxy server...
Dec 18 07:03:01 Anish-Ubuntu-24 systemd[1]: Started nginx.service - A high performance web server and a reverse proxy server.

Шаг 3 — Настройка брандмауэра

Ubuntu 24.04 использует UFW (Uncomplicated Firewall) для управления брандмауэром. Настройте его так, чтобы разрешить трафик HTTP, HTTPS и SSH, блокируя при этом другие ненужные порты.

Сначала убедитесь, что UFW установлен, и проверьте его статус:

sudo ufw status

Если UFW не активен, включите его и настройте необходимые правила:

sudo ufw allow OpenSSH
sudo ufw allow 'Nginx Full'
sudo ufw enable
sudo ufw allow 'Nginx Full'
sudo ufw enable
Rules updated
Rules updated (v6)
Rules updated
Rules updated (v6)
Command may disrupt existing ssh connections. Proceed with operation (y|n)? y
Firewall is active and enabled on system startup

Профиль Nginx Full позволяет трафику по протоколам HTTP (порт 80) и HTTPS (порт 443). Проверьте правила брандмауэра:

sudo ufw status verbose

Вы должны увидеть правила, разрешающие трафик OpenSSH и Nginx Full.

Status: active
Logging: on (low)
Default: deny (incoming), allow (outgoing), disabled (routed)
New profiles: skip

To                         Action      From
--                         ------      ----
22/tcp (OpenSSH)           ALLOW IN    Anywhere                  
80,443/tcp (Nginx Full)    ALLOW IN    Anywhere                  
22/tcp (OpenSSH (v6))      ALLOW IN    Anywhere (v6)             
80,443/tcp (Nginx Full (v6)) ALLOW IN    Anywhere (v6)            

Шаг 4 — Настройка SSL с помощью Let’s Encrypt

Защита вашего серверного приложения с помощью шифрования SSL/TLS необходима для промышленной эксплуатации. Let’s Encrypt предоставляет бесплатные SSL-сертификаты, которые можно автоматически продлевать.

Установите Certbot и плагин для Nginx:

sudo apt install certbot python3-certbot-nginx -y

Получите SSL-сертификат для вашего домена. Замените your_domain на фактическое имя вашего домена:

sudo certbot --nginx -d your_domain -d www.your_domain

Certbot запросит у вас адрес электронной почты и спросит, хотите ли вы перенаправлять HTTP-трафик на HTTPS. Выберите перенаправление для лучшей безопасности. Сертификат будет автоматически обновляться до истечения срока действия.

Проверьте процесс автоматического продления:

sudo certbot renew --dry-run

Если эта команда выполняется без ошибок, автоматическое продление настроено правильно.

Шаг 5 — Настройка Nginx в качестве обратного прокси

Создайте конфигурацию блока сервера Nginx для маршрутизации трафика на ваш сервер приложений. Этот пример демонстрирует общую конфигурацию, которую вы можете адаптировать для различных типов приложений.

Создайте новый файл конфигурации для вашего домена:

sudo nano /etc/nginx/sites-available/your_domain

Добавьте следующую конфигурацию, заменив your_domain на ваш фактический домен и настроив URL proxy_pass в соответствии с портом вашего приложения:

server {
    listen 80;
    listen [::]:80;
    server_name your_domain www.your_domain;

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

server {
    listen 443 ssl http2;
    listen [::]:443 ssl http2;
    server_name your_domain www.your_domain;

    ssl_certificate /etc/letsencrypt/live/your_domain/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/your_domain/privkey.pem;
    include /etc/letsencrypt/options-ssl-nginx.conf;
    ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem;

    location / {
        proxy_pass http://localhost:3000;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection 'upgrade';
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_cache_bypass $http_upgrade;
    }
}

Эта конфигурация:

  • Перенаправляет HTTP-трафик на HTTPS
  • Завершает SSL на уровне Nginx
  • Перенаправляет запросы к вашему приложению, работающему на порте 3000 (при необходимости измените)
  • Сохраняет IP-адреса клиентов и информацию о протоколе

Включите конфигурацию, создав символическую ссылку:

sudo ln -s /etc/nginx/sites-available/your_domain /etc/nginx/sites-enabled/

Проверьте конфигурацию Nginx на наличие синтаксических ошибок:

sudo nginx -t

Если тест пройдет успешно, перезагрузите Nginx, чтобы применить изменения:

sudo systemctl reload nginx

Шаг 6 — Установка зависимостей выполнения приложения

Время выполнения зависимостей, которые вам нужны, зависит от типа вашего приложения. В этом разделе рассматривается настройка приложений на Node.js, Python и PHP.

Установка Node.js

Для приложений Node.js установите Node.js с помощью репозитория NodeSource, чтобы получить последнюю LTS-версию:

curl -fsSL https://deb.nodesource.com/setup_20.x | sudo -E bash -
sudo apt install -y nodejs

Проверьте установку:

node --version
npm --version
v20.19.6
10.8.2

Установка Python и pip

Ubuntu 24.04 по умолчанию включает Python 3.12. Установите pip и инструменты для виртуальных окружений:

sudo apt install python3-pip python3-venv -y

Проверьте установку:

python3 --version
pip3 --version
pip3 --version
Python 3.12.3
pip 24.0 from /usr/lib/python3/dist-packages/pip (python 3.12)

Установка PHP и PHP-FPM

Для PHP-приложений установите PHP и PHP-FPM (FastCGI Process Manager):

sudo apt install php-fpm php-mysql php-mbstring php-xml php-curl -y

Проверьте, работает ли PHP-FPM:

sudo systemctl status php8.3-fpm
 Loaded: loaded (/usr/lib/systemd/system/php8.3-fpm.service; enabled; preset: enabled)
     Active: active (running) since Thu 2025-12-18 08:02:36 UTC; 1min 56s ago
       Docs: man:php-fpm8.3(8)
    Process: 59077 ExecStartPost=/usr/lib/php/php-fpm-socket-helper install /run/php/php-fpm.sock /etc/php/8.3/fpm/pool.d/www.conf 83 (code=exited, >
   Main PID: 59074 (php-fpm8.3)
     Status: "Processes active: 0, idle: 2, Requests: 0, slow: 0, Traffic: 0req/sec"
      Tasks: 3 (limit: 4656)
     Memory: 9.5M (peak: 10.4M)
        CPU: 97ms
     CGroup: /system.slice/php8.3-fpm.service
             ├─59074 "php-fpm: master process (/etc/php/8.3/fpm/php-fpm.conf)"
             ├─59075 "php-fpm: pool www"
             └─59076 "php-fpm: pool www"

Dec 18 08:02:36 Anish-Ubuntu-24 systemd[1]: Starting php8.3-fpm.service - The PHP 8.3 FastCGI Process Manager...

<$> Примечание: В Ubuntu 24.04 включен PHP 8.3. Измените номера версий, если на вашей системе используется другая версия. <$>

Шаг 7 — Создание службы Systemd для вашего приложения

Systemd управляет вашим приложением как службой, обеспечивая его автоматический запуск при загрузке и перезапуск в случае сбоев. Этот пример создаёт службу systemd для приложения Node.js, но вы можете адаптировать его для других типов приложений.

Создайте файл службы systemd:

sudo nano /etc/systemd/system/your-app.service

Добавьте следующую конфигурацию, при необходимости скорректировав пути и переменные окружения:

[Unit]
Description=Your Application Server
After=network.target

[Service]
Type=simple
User=www-data
WorkingDirectory=/var/www/your-app
Environment="NODE_ENV=production"
Environment="PORT=3000"
ExecStart=/usr/bin/node /var/www/your-app/server.js
Restart=on-failure
RestartSec=10

[Install]
WantedBy=multi-user.target

Ключевые моменты конфигурации:

  • Type=simple: Для приложений, которые работают на переднем плане
  • User=www-data: Запускает приложение от имени непривилегированного пользователя для безопасности
  • WorkingDirectory: задаёт рабочую директорию приложения
  • Restart=on-failure: Автоматически перезапускает приложение в случае сбоя
  • RestartSec=10: Ожидает 10 секунд перед перезапуском

Перезагрузите systemd и запустите вашу службу:

sudo systemctl daemon-reload
sudo systemctl start your-app
sudo systemctl enable your-app

Проверьте состояние службы:

sudo systemctl status your-app
● your-app.service
     Loaded: loaded (/etc/systemd/system/your-app.service; enabled; preset: enabled)
     Active: active (running) since Thu 2025-12-18 08:07:30 UTC; 4ms ago
   Main PID: 59408 ((node))
      Tasks: 1 (limit: 4656)
     Memory: 512.0K (peak: 512.0K)
        CPU: 936us
     CGroup: /system.slice/your-app.service
             └─59408 "(node)"

Dec 18 08:07:30 Anish-Ubuntu-24 systemd[1]: your-app.service: Scheduled restart job, restart counter is at 4.
Dec 18 08:07:30 Anish-Ubuntu-24 systemd[1]: Started your-app.service.

Пример приложения на Python

Для приложения на Python с использованием Gunicorn ваш systemd сервис может выглядеть так:

[Unit]
Description=Your Python Application
After=network.target

[Service]
Type=notify
User=www-data
WorkingDirectory=/var/www/your-app
Environment="PATH=/var/www/your-app/venv/bin"
ExecStart=/var/www/your-app/venv/bin/gunicorn --bind 127.0.0.1:8000 app:app
Restart=on-failure

[Install]
WantedBy=multi-user.target

Пример PHP-приложения

Для приложений на PHP обычно используют PHP-FPM с Nginx. Настройте Nginx так, чтобы он передавал запросы PHP-FPM:

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

Шаг 8 — Развертывание вашего приложения

Создайте каталог для вашего приложения и установите соответствующие права доступа:

sudo mkdir -p /var/www/your-app
sudo chown -R www-data:www-data /var/www/your-app

Разместите файлы вашего приложения в этом каталоге. Вы можете использовать Git, SCP или другие методы развертывания:

cd /var/www/your-app
sudo -u www-data git clone https://github.com/your-username/your-repo.git .

Установите зависимости и соберите ваше приложение по необходимости. Для Node.js:

sudo -u www-data npm install --production

Для Python:

sudo -u www-data python3 -m venv venv
sudo -u www-data ./venv/bin/pip install -r requirements.txt

После развертывания перезапустите службу приложения:

sudo systemctl restart your-app

Шаг 9 — Лучшие практики для производственного закрепления

Примените эти меры безопасности, чтобы укрепить ваш сервер приложений для использования в продакшене.

Отключить вход с правами root через SSH

Отредактируйте конфигурацию SSH:

sudo nano /etc/ssh/sshd_config

Установите следующее:

PermitRootLogin no
PasswordAuthentication no

Перезапустить SSH:

sudo systemctl restart sshd

Настроить автоматические обновления безопасности

Включить автоматические обновления безопасности:

sudo apt install unattended-upgrades -y
sudo dpkg-reconfigure -plow unattended-upgrades

Настроить ротацию логов

Настройте ротацию журналов, чтобы файлы журналов не занимали место на диске. Отредактируйте конфигурацию logrotate:

sudo nano /etc/logrotate.d/your-app

Добавить :

/var/www/your-app/logs/*.log {
    daily
    missingok
    rotate 14
    compress
    delaycompress
    notifempty
    create 0640 www-data www-data
    sharedscripts
}

Мониторинг дискового пространства

Настройте мониторинг, чтобы получать уведомления при низком уровне свободного места на диске. Установите и настройте инструменты мониторинга:

sudo apt install htop iotop -y

Шаг 10 — Устранение распространённых проблем

В этом разделе рассматриваются общие проблемы, с которыми вы можете столкнуться при настройке вашего серверного приложения.

Приложение не запускается

Проверьте состояние службы и журналы:

sudo systemctl status your-app
sudo journalctl -u your-app -n 50 --no-pager

Распространённые проблемы включают:

  • Неправильные пути к файлам в файле службы systemd
  • Отсутствуют переменные окружения
  • Ошибки разрешений (удостоверьтесь, что сервисный пользователь имеет доступ к файлам приложения)

Nginx 502 ошибка «Плохой шлюз»

Это обычно означает, что Nginx не может подключиться к вашему приложению. Проверьте:

  • Ваше приложение запущено:
sudo systemctl status your-app
  • Приложение слушает на правильном порту:
sudo netstat -tlnp | grep 3000
  • URL proxy_pass в вашей конфигурации Nginx совпадает с портом вашего приложения.

Проблемы с SSL-сертификатом

Если сертификаты SSL не удается обновить:

  • Проверьте журналы Certbot:
sudo tail -f /var/log/letsencrypt/letsencrypt.log
  • Проверьте, что записи DNS вашего домена указывают на ваш сервер:
dig your_domain
  • Убедитесь, что порты 80 и 443 открыты в вашем файрволе.

Высокое использование памяти

Мониторинг использования памяти:

free -h
htop

Если ваше приложение потребляет слишком много памяти, рассмотрите возможность:

  • Оптимизация кода вашего приложения
  • Увеличение оперативной памяти вашего Droplet
  • Реализация кэширования на уровне приложения

Часто задаваемые вопросы

1. Что такое сервер приложений в Ubuntu?

Сервер приложений — это серверная среда, которая запускает и управляет веб-приложениями. В Ubuntu 24.04 это обычно включает настройку среды выполнения (например, Node.js, Python или PHP), настройку обратного прокси (например, Nginx) и использование systemd для управления процессами приложений. Сервер приложений обрабатывает входящие запросы, выполняет код приложения и возвращает ответы клиентам.

2. Как настроить systemd для моего приложения?

Чтобы настроить systemd для вашего приложения, вам нужно создать файл сервиса. Вот пошаговый пример:

Предположим, что ваше приложение — это Node.js приложение, расположенное в /home/ubuntu/my-app, и вы хотите запустить его с помощью npm start, используя пользователя ubuntu.

  • Создайте файл службы systemd:
sudo nano /etc/systemd/system/my-app.service
  • Добавьте следующее содержимое в файл:
[Unit]
Description=My Node.js App
After=network.target

[Service]
Type=simple
User=ubuntu
WorkingDirectory=/home/ubuntu/my-app
ExecStart=/usr/bin/npm start
Restart=on-failure
Environment=NODE_ENV=production

[Install]
WantedBy=multi-user.target
  • Перезагрузите systemd, чтобы он распознал новую службу:
sudo systemctl daemon-reload
  • Включите службу для запуска при загрузке:
sudo systemctl enable my-app
  • Запустите приложение:
sudo systemctl start my-app

Теперь ваше приложение будет работать в фоновом режиме, перезапускаться в случае сбоя и автоматически запускаться при загрузке. Вы можете проверить его состояние с помощью:

sudo systemctl status my-app

Этот метод работает с большинством приложений. Просто настройте ExecStart, User и WorkingDirectory в соответствии с требованиями вашего стека.

3. Мне стоит использовать Nginx или Apache в качестве обратного прокси?

И Nginx, и Apache хорошо работают в качестве обратных прокси, но Nginx часто предпочитают для современных серверов приложений из-за меньшего потребления памяти, лучшей производительности при высокой нагрузке и более простой настройки для сценариев обратного прокси.

Nginx также отлично справляется с обработкой статического контента и проксированием запросов на серверы приложений, что делает его идеальным для использования в производственной среде. Apache по-прежнему является надежным выбором, особенно если вам нужны определённые модули или вы лучше знакомы с его синтаксисом настройки.

4. Как защитить мой сервер приложений на Ubuntu 24.04?

Защитите ваш сервер приложений следующим образом: включите межсетевой экран UFW и разрешите только необходимые порты, установите SSL-сертификаты через Let’s Encrypt, запускайте приложения от имени обычных пользователей, отключите вход в SSH под root, настройте автоматические обновления безопасности, поддерживайте актуальность программного обеспечения и реализуйте правильные права доступа к файлам. Кроме того, используйте надежные пароли или SSH-ключи, настройте fail2ban для предотвращения атак методом подбора и регулярно проверяйте журналы приложений и системы на предмет подозрительной активности.

5. Могу ли я разместить несколько приложений на одном сервере Ubuntu?

Да, вы можете размещать несколько приложений на одном сервере с Ubuntu 24.04. Настройте отдельные службы systemd для каждого приложения, чтобы они прослушивали разные порты (например, 3000, 3001, 8000). Настройте блоки сервера Nginx (виртуальные хосты) для каждого домена или поддомена, при этом каждый блок должен проксировать запросы на соответствующий порт приложения. Этот подход позволяет эффективно использовать ресурсы сервера, сохраняя изоляцию между приложениями.

6. Как я могу проверить, правильно ли работает мое приложение?

Проверьте, что ваше приложение запущено, проверив статус службы systemd с помощью sudo systemctl status your-app. Просмотрите журналы приложения с помощью sudo journalctl -u your-app -f, чтобы видеть вывод логов в реальном времени. Протестируйте приложение, получив к нему доступ через ваш домен или IP-адрес. Проверьте, что Nginx корректно маршрутизирует запросы, просматривая журналы доступа и ошибок Nginx по адресам /var/log/nginx/access.log и /var/log/nginx/error.log. Следите за использованием ресурсов с помощью htop или free -h, чтобы убедиться, что приложение не потребляет чрезмерно много CPU или памяти.

Заключение

Вы успешно настроили и сконфигурировали готовый к производству сервер приложений на Ubuntu 24.04. Ваш Droplet на Linux-Console.net теперь оснащен Nginx в качестве обратного прокси, шифрованием SSL/TLS, управлением сервисами через systemd и мерами по усилению безопасности. Эта настройка поддерживает развертывание приложений на Node.js, Python, PHP и других веб-приложений в безопасной и масштабируемой среде.

Конфигурация соответствует лучшим производственным практикам, включая автоматическую перезагрузку сервисов, обновление SSL-сертификатов, защиту с помощью файрвола и правильные права доступа пользователей. Ваш сервер приложений готов к работе с реальными нагрузками и может масштабироваться по мере роста ваших потребностей.

Для дальнейшего изучения и продвинутых настроек ознакомьтесь с этими связанными учебниками на Linux-Console.net:

  • Как установить и использовать Docker на Ubuntu — изучите контейнеризацию для более простой установки и управления приложениями
  • Как настроить Nginx в качестве обратного прокси на Ubuntu — подробное изучение продвинутых конфигураций обратного прокси Nginx
  • Рекомендуемые меры безопасности для защиты серверов - Дополнительные методы усиления безопасности для производственных серверов

Готовы развернуть свои приложения? Начните с Droplets от Linux-Console.net, чтобы создать масштабируемую и надежную инфраструктуру для вашего серверного приложения. С такими функциями, как автоматическое резервное копирование, мониторинг и гибкое ценообразование, Droplets от Linux-Console.net обеспечивают основу, необходимую для производственного развертывания.

Спасибо, что учитесь вместе с сообществом Linux-Console.net.