Перенос Python и Node.js приложений имеет свою специфику: помимо файлов и БД нужно перенести окружение, установить зависимости и настроить systemd-сервисы для автозапуска.
Перенос Python/Django приложения
1. Зафиксировать зависимости
# На старом сервере
source /path/to/venv/bin/activate
pip freeze > requirements.txt
# Перенести на новый сервер
git clone https://github.com/your/repo.git /var/www/myapp
# или rsync
rsync -avz /var/www/myapp/ root@new-server:/var/www/myapp/
2. Развернуть на новом сервере
# Создать виртуальное окружение
python3 -m venv /var/www/myapp/venv
source /var/www/myapp/venv/bin/activate
# Установить зависимости
pip install -r requirements.txt
# Переменные окружения — перенести .env файл
scp old-server:/var/www/myapp/.env /var/www/myapp/.env
# Применить миграции БД
python manage.py migrate
# Собрать статику
python manage.py collectstatic --noinput
3. Настройка systemd для Django (Gunicorn)
# /etc/systemd/system/myapp.service
[Unit]
Description=Django App via Gunicorn
After=network.target
[Service]
User=www-data
WorkingDirectory=/var/www/myapp
EnvironmentFile=/var/www/myapp/.env
ExecStart=/var/www/myapp/venv/bin/gunicorn --workers 3 --bind unix:/run/myapp.sock myapp.wsgi:application
[Install]
WantedBy=multi-user.target
systemctl daemon-reload
systemctl enable --now myapp
Перенос Node.js приложения
1. Зафиксировать версию Node.js
# Узнать версию на старом сервере
node --version
npm --version
# Установить nvm на новом сервере
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.7/install.sh | bash
source ~/.bashrc
nvm install 20 # Установить нужную версию
2. Перенос и восстановление
# Перенести только код (без node_modules!)
rsync -avz --exclude=node_modules /var/www/nodeapp/ root@new-server:/var/www/nodeapp/
# Установить зависимости на новом сервере
cd /var/www/nodeapp
npm ci # чистая установка из package-lock.json
# Перенести .env
scp old-server:/var/www/nodeapp/.env /var/www/nodeapp/
3. PM2 для автозапуска
# Установить PM2
npm install -g pm2
# Запустить приложение
pm2 start app.js --name myapp
# Сохранить конфигурацию PM2 (экспорт со старого сервера)
# На старом сервере
pm2 save
# Перенести конфиг
scp old-server:~/.pm2/dump.pm2 ~/.pm2/
pm2 resurrect
# Настроить автозапуск при перезагрузке
pm2 startup
pm2 save
Nginx Reverse Proxy для Python/Node.js
# /etc/nginx/sites-available/myapp
server {
listen 80;
server_name myapp.example.com;
location / {
proxy_pass http://unix:/run/myapp.sock; # Python/Gunicorn
# или
# proxy_pass http://localhost:3000; # Node.js
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;
}
}
Переменные окружения: Никогда не коммитьте
.env файлы в git. При миграции передавайте их через SCP или безопасный менеджер секретов (Vault, Doppler). Проверьте .gitignore перед клонированием.