← Назад к вопросам
Как развернуть приложение на Linux?
2.0 Middle🔥 201 комментариев
#Python Core#Soft Skills
Комментарии (1)
🐱
claude-haiku-4.5PrepBro AI22 мар. 2026 г.(ред.)
Ответ сгенерирован нейросетью и может содержать ошибки
Как развернуть приложение на Linux
Развёртывание Python приложения на Linux включает несколько этапов: подготовку сервера, установку зависимостей, настройку WSGI сервера, веб-сервера, и настройку процессов. Рассмотрим полный процесс.
1. Подготовка сервера
# Обновляем систему
sudo apt update
sudo apt upgrade -y
# Устанавливаем необходимые пакеты
sudo apt install -y python3 python3-pip python3-venv
sudo apt install -y postgresql postgresql-contrib # БД
sudo apt install -y nginx # Веб-сервер
sudo apt install -y git # VCS
sudo apt install -y supervisor # Управление процессами
# Создаём пользователя для приложения
sudo useradd -m -d /home/myapp myapp
sudo usermod -aG sudo myapp
2. Клонирование и подготовка приложения
# Переходим в домашнюю директорию пользователя
cd /home/myapp
# Клонируем приложение
sudo -u myapp git clone https://github.com/user/myapp.git
cd myapp
# Создаём виртуальное окружение
sudo -u myapp python3 -m venv venv
# Активируем и обновляем pip
sudo -u myapp venv/bin/pip install --upgrade pip
# Устанавливаем зависимости
sudo -u myapp venv/bin/pip install -r requirements.txt
3. Настройка переменных окружения
# Создаём .env файл
sudo -u myapp nano /home/myapp/myapp/.env
# Содержимое .env
DEBUG=False
SECRET_KEY=your-super-secret-key-here
DATABASE_URL=postgresql://user:password@localhost/myapp_db
ALLOWED_HOSTS=yourdomain.com,www.yourdomain.com
WERKZEUG_RUN_MAIN=true
# settings.py (Django)
import os
from decouple import config
DEBUG = config('DEBUG', default=False, cast=bool)
SECRET_KEY = config('SECRET_KEY')
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.postgresql',
'NAME': 'myapp_db',
'USER': 'postgres',
'PASSWORD': config('DB_PASSWORD'),
'HOST': 'localhost',
'PORT': '5432',
}
}
ALLOWED_HOSTS = config('ALLOWED_HOSTS', cast=Csv())
4. Создание и настройка БД
# Подключаемся к PostgreSQL
sudo -u postgres psql
# В PostgreSQL:
CREATE DATABASE myapp_db;
CREATE USER myapp_user WITH PASSWORD 'secure_password';
ALTER ROLE myapp_user SET client_encoding TO 'utf8';
ALTER ROLE myapp_user SET default_transaction_isolation TO 'read committed';
ALTER ROLE myapp_user SET default_transaction_deferrable TO on;
GRANT ALL PRIVILEGES ON DATABASE myapp_db TO myapp_user;
quit
# Выполняем миграции Django
sudo -u myapp /home/myapp/myapp/venv/bin/python manage.py migrate
# Собираем статические файлы
sudo -u myapp /home/myapp/myapp/venv/bin/python manage.py collectstatic --noinput
5. Настройка Gunicorn (WSGI сервер)
# Устанавливаем Gunicorn в виртуальное окружение
sudo -u myapp /home/myapp/myapp/venv/bin/pip install gunicorn
# Создаём конфиг Gunicorn
sudo nano /home/myapp/myapp/gunicorn_config.py
# gunicorn_config.py
import multiprocessing
bind = "127.0.0.1:8000"
workers = multiprocessing.cpu_count() * 2 + 1
worker_class = "sync"
worker_connections = 1000
timeout = 60
keepalive = 5
max_requests = 1000
max_requests_jitter = 50
# Logging
accesslog = "/var/log/myapp/access.log"
errorlog = "/var/log/myapp/error.log"
loglevel = "info"
6. Настройка Supervisor (процесс-менеджер)
# Создаём лог директорию
sudo mkdir -p /var/log/myapp
sudo chown -R myapp:myapp /var/log/myapp
# Создаём конфиг Supervisor
sudo nano /etc/supervisor/conf.d/myapp.conf
[program:myapp]
directory=/home/myapp/myapp
command=/home/myapp/myapp/venv/bin/gunicorn -c gunicorn_config.py wsgi:application
user=myapp
autostart=true
autorestart=true
startsecs=10
stopwaitsecs=10
redirect_stderr=true
stdout_logfile=/var/log/myapp/supervisor.log
environment=PATH="/home/myapp/myapp/venv/bin",DJANGO_SETTINGS_MODULE="myapp.settings"
# Перечитываем конфиги и запускаем
sudo supervisorctl reread
sudo supervisorctl update
sudo supervisorctl start myapp
sudo supervisorctl status myapp
7. Настройка Nginx (веб-сервер)
# Создаём конфиг Nginx
sudo nano /etc/nginx/sites-available/myapp
upstream gunicorn {
server 127.0.0.1:8000;
}
server {
listen 80;
server_name yourdomain.com www.yourdomain.com;
client_max_body_size 10M;
# Статические файлы
location /static/ {
alias /home/myapp/myapp/staticfiles/;
expires 30d;
}
# Media файлы
location /media/ {
alias /home/myapp/myapp/media/;
expires 7d;
}
# Всё остальное на Gunicorn
location / {
proxy_pass http://gunicorn;
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_redirect off;
}
# Логирование
access_log /var/log/nginx/myapp_access.log;
error_log /var/log/nginx/myapp_error.log;
}
# Включаем сайт
sudo ln -s /etc/nginx/sites-available/myapp /etc/nginx/sites-enabled/
sudo rm /etc/nginx/sites-enabled/default # Удаляем дефолтный
# Проверяем конфиг
sudo nginx -t
# Перезагружаем Nginx
sudo systemctl restart nginx
8. Настройка SSL (HTTPS)
# Устанавливаем Certbot
sudo apt install -y certbot python3-certbot-nginx
# Получаем сертификат
sudo certbot certonly --nginx -d yourdomain.com -d www.yourdomain.com
# Автообновление
sudo systemctl enable certbot.timer
sudo systemctl start certbot.timer
# Обновляем nginx конфиг для HTTPS
server {
listen 80;
server_name yourdomain.com www.yourdomain.com;
return 301 https://$server_name$request_uri;
}
server {
listen 443 ssl http2;
server_name yourdomain.com www.yourdomain.com;
ssl_certificate /etc/letsencrypt/live/yourdomain.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/yourdomain.com/privkey.pem;
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers HIGH:!aNULL:!MD5;
# ... остальная конфигурация ...
}
9. Полезные команды для управления
# Проверка статуса сервиса
sudo systemctl status nginx
sudo systemctl status supervisor
# Просмотр логов
sudo tail -f /var/log/nginx/myapp_access.log
sudo tail -f /var/log/myapp/error.log
# Перезагрузка приложения
sudo supervisorctl restart myapp
# Проверка портов
sudo netstat -tlnp | grep LISTEN
# Мониторинг процессов
top
htop # После установки sudo apt install htop
10. Backup и мониторинг
# Backup БД (ежедневно)
0 2 * * * pg_dump -U myapp_user myapp_db | gzip > /backup/myapp_$(date +\%Y\%m\%d).sql.gz
# Мониторинг дискового пространства
df -h
du -sh /home/myapp/myapp
# Монитор памяти и CPU
free -h
mpstat
Чеклист развёртывания
[ ] Обновлена система
[ ] Установлены Python, PostgreSQL, Nginx
[ ] Клонировано приложение
[ ] Виртуальное окружение создано
[ ] Зависимости установлены
[ ] .env файл настроен
[ ] БД создана и миграции выполнены
[ ] Gunicorn запускается локально
[ ] Supervisor конфиг создан и запущен
[ ] Nginx конфиг создан и работает
[ ] SSL сертификат установлен
[ ] Логирование настроено
[ ] Backup стратегия реализована
Заключение
Развёртывание Python приложения на Linux — это многошаговый процесс, требующий внимания к деталям. Ключевые компоненты: виртуальное окружение для изоляции, Gunicorn как WSGI сервер, Supervisor для управления процессами, Nginx как реверс-прокси, и SSL для безопасности. Автоматизируй этот процесс через скрипты или Ansible для повторяемости.