Переезд на новый сервер
Инструкция по переносу веб-платформы Syntaxis.
1. Подготовка нового сервера
Перед началом переноса убедитесь, что новый сервер соответствует всем требованиям:
-
Операционная система: Рекомендуется использовать ту же ОС, что и на старом сервере, для упрощения процесса.
-
Установите необходимые пакеты и зависимости:
#Обновите список пакетов sudo apt update && sudo apt upgrade -y #Установите PHP 8.2 и необходимые расширения sudo apt install -y php8.2 php8.2-mbstring php8.2-xml php8.2-mysql php8.2-zip php8.2-curl #Установите MySQL 5.7 sudo apt install -y mysql-server=5.7.* #Установите необходимые сервисы sudo apt install -y redis-server supervisor git curl unzip #Установите Composer curl -sS https://getcomposer.org/installer | php sudo mv composer.phar /usr/local/bin/composer # Установите веб-сервер (например, Nginx) sudo apt install -y nginx #Установите и настройте почтовые сервисы (Postfix для SMTP, Dovecot для POP3/IMAP) #Если будет использоваться внешний почтовый сервис, этот шаг можно пропустить sudo apt install -y postfix dovecot-imapd dovecot-pop3d
2. Настройка веб-сервера (Nginx)
Создайте конфигурационный файл для вашего сайта:
sudo nano /etc/nginx/sites-available/your_domain.conf
Пример конфигурации для Laravel:
server {
listen 80;
server_name your_domain.com www.your_domain.com;
root /var/www/your_project/public;
index index.php index.html index.htm;
add_header X-Frame-Options "SAMEORIGIN";
add_header X-Content-Type-Options "nosniff";
charset utf-8;
location / {
try_files $uri $uri/ /index.php?$query_string;
}
location = /favicon.ico { access_log off; log_not_found off; }
location = /robots.txt { access_log off; log_not_found off; }
error_page 404 /index.php;
location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/var/run/php/php8.2-fpm.sock;
fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name;
include fastcgi_params;
}
location ~ /\.(?!well-known).* {
deny all;
}
}
Активируйте сайт и перезапустите Nginx:
sudo ln -s /etc/nginx/sites-available/your_domain.conf /etc/nginx/sites-enabled/
sudo nginx -t
sudo systemctl restart nginx
3. Клонирование репозитория или перенос файлов
Через Git:
-
Установите Git на новом сервере, если еще не установлен:
sudo apt install -y git -
Клонируйте репозиторий в нужную директорию:
cd /var/www/ git clone https://github.com/yourusername/yourrepository.git your_project composer install -
Перейдите в директорию проекта:
cd /var/www/your_project -
Установите зависимости Composer:
composer install -
Скопируйте файл .env с конфигурациями из старого сервера:
scp user@old_server_ip:/path/to/your_project/.env /var/www/your_project/ -
Обновите параметры .env на новом сервере, такие как подключения к базе данных, пути и т.д.
-
Сгенерируйте ключ приложения:
php artisan key:generate -
Выполните миграции и заполнение базы данных, если необходимо:
php artisan migrate --force php artisan db:seed --force -
Настройте права доступа:
sudo chown -R www-data:www-data /var/www/your_project sudo chmod -R 755 /var/www/your_project sudo chmod -R 775 /var/www/your_project/storage sudo chmod -R 775 /var/www/your_project/bootstrap/cache
Через SCP/SFTP:
-
Архивируйте проект на старом сервере:
cd /path/to/your_project tar -czvf your_project.tar.gz . -
Перенесите архив на новый сервер:
scp your_project.tar.gz user@new_server_ip:/var/www/your_project/ -
Распакуйте архив на новом сервере:
cd /var/www/your_project tar -xzvf your_project.tar.gz
Настройка окружения
- Скопируйте файл
.envс конфигурациями из старого сервера:scp user@old_server_ip:/path/to/your_project/.env /var/www/your_project/ - Обновите параметры
.envна новом сервере, такие как подключения к базе данных, пути и т.д.- удалите раздел #dev only
Перенос базы данных
-
Экспортируйте базу данных на старом сервере:
mysqldump -u your_db_user -p your_database > your_database.sql -
Перенесите дамп на новый сервер:
scp your_database.sql user@new_server_ip:/home/user/ -
Импортируйте базу данных на новом сервере:
mysql -u your_db_user -p your_database < /home/user/your_database.sql
Установка зависимостей и оптимизация
-
Перейдите в директорию проекта:
cd /var/www/your_project -
Установите зависимости Composer:
composer install --optimize-autoloader --no-dev -
Сгенерируйте ключ приложения:
php artisan key:generate -
Выполните миграции и заполнение базы данных, если необходимо:
php artisan migrate --force php artisan db:seed --force -
Создайте символическую ссылку для хранилища:
php artisan storage:link -
Оптимизируйте проект:
php artisan optimize -
Настройте права доступа:
sudo chown -R www-data:www-data /var/www/your_project sudo chmod -R 755 /var/www/your_project sudo chmod -R 775 /var/www/your_project/storage sudo chmod -R 775 /var/www/your_project/bootstrap/cache
Настройка Redis и Supervisor
-
Настройте Redis:
Убедитесь, что Redis работает и настроен в вашем
.envфайле:REDIS_HOST=127.0.0.1 REDIS_PASSWORD=null REDIS_PORT=6379Запустите и активируйте Redis:
sudo systemctl start redis sudo systemctl enable redis -
Настройте Supervisor для управления очередями Laravel:
Установите Supervisor, если он еще не установлен:
sudo apt install -y supervisorСоздайте конфигурационный файл для вашего приложения:
sudo nano /etc/supervisor/conf.d/laravel-worker.confПример конфигурации:
[program:horizon] process_name=%(program_name)s command=php /path/to/app/artisan horizon autostart=true autorestart=true user=root redirect_stderr=true stdout_logfile=/path/to/log/horizon.log stopwaitsecs=3600Примените изменения:
sudo supervisorctl reread sudo supervisorctl update sudo supervisorctl start laravel-worker:*
Настройка Cron задач
-
Откройте crontab для пользователя
www-dataили нужного пользователя:sudo crontab -u www-data -e -
Добавьте задание для запуска Laravel Scheduler каждую минуту:
* * * * * php /var/www/your_project/artisan schedule:run >> /dev/null 2>&1Сохраните и выйдите из редактора.
Настройка почтовых сервисов (POP3, IMAP, SMTP с SSL)
-
Настройте Postfix для SMTP:
При установке Postfix выберите тип конфигурации «Internet Site» и укажите ваше доменное имя.
-
Настройте Dovecot для POP3 и IMAP:
Основные настройки обычно находятся в
/etc/dovecot/dovecot.conf. Убедитесь, что протоколы POP3 и IMAP включены.
Настройте SSL:
Получите SSL сертификат (например, через Let's Encrypt):
sudo apt install -y certbot
sudo certbot certonly --standalone -d mail.your_domain.com
Обновите конфигурации Postfix и Dovecot для использования SSL:
Postfix (/etc/postfix/main.cf):
smtpd_tls_cert_file=/etc/letsencrypt/live/mail.your_domain.com/fullchain.pem
smtpd_tls_key_file=/etc/letsencrypt/live/mail.your_domain.com/privkey.pem
smtpd_use_tls=yes
Dovecot (/etc/dovecot/conf.d/10-ssl.conf):
ssl = yes
ssl_cert = </etc/letsencrypt/live/mail.your_domain.com/fullchain.pem
ssl_key = </etc/letsencrypt/live/mail.your_domain.com/privkey.pem
Перезапустите сервисы:
sudo systemctl restart postfix
sudo systemctl restart dovecot
Тестирование и переключение DNS
Проверьте работу сайта на новом сервере:
- Убедитесь, что сайт загружается корректно.
- Проверьте функциональность всех сервисов (почта, очереди, задачи Cron и т.д.).
Обновите DNS-записи:
- Измените A-записи вашего домена на новый IP-адрес.
- Дождитесь обновления DNS (может занять до 24 часов).
Проверьте, что трафик перенаправляется на новый сервер.
Завершение переноса
Обеспечьте безопасность нового сервера:
- Настройте брандмауэр (например, UFW):
sudo ufw allow OpenSSH
sudo ufw allow 'Nginx Full'
sudo ufw enable
- Отключите доступ по паролю для SSH, если используете ключи.
Удалите или архивируйте старый сервер после успешного переноса и тестирования.
Упрощенный вариант развертывания веб-сервера
-
Установите Hestia Control Panel на новом сервере:
wget https://raw.githubusercontent.com/hestiacp/hestiacp/release/install/hst-install.sh bash hst-install.sh -
Создайте новый домен и установите SSL сертификат через Hestia Control Panel.
-
Перенесите файлы и базу данных на новый сервер.
-
Настройте окружение, зависимости и оптимизацию.
-
Настройте Redis, Supervisor и Cron задачи.
-
Проверьте работу сайта и переключите DNS-записи.
-
Убедитесь, что трафик перенаправляется на новый сервер.
-
Обеспечьте безопасность нового сервера и удалите старый сервер.
Дополнительные рекомендации
- Резервное копирование: Перед началом переноса сделайте полные резервные копии файлов и базы данных.
- Документация: Ведите документацию всех выполненных шагов для будущих переносов или восстановления.
- Мониторинг: Настройте мониторинг сервера для отслеживания производительности и доступности.
- Безопасность: Регулярно обновляйте сервер и устанавливайте патчи безопасности.
Links: