set -e -v cd ~/mnemo_cards_common git pull origin master dart pub get cd ~/mnemo_cards_common_backend git pull origin master dart pub get cd ~/mnemo_cards_backend dart pub get && dart compile exe --verbose lib/main.dart -o server_build.exe sudo systemctl stop mnemo_cards_server && true sleep 15 sudo chmod 777 mnemo_cards_server.service sudo cp mnemo_cards_server.service /etc/systemd/system sudo cp server_build.exe server.exe rm server_build.exe # Проверяем наличие Let's Encrypt сертификатов для двойного режима if [ -d "/etc/letsencrypt/live/api.memo-cards.online" ] && [ -f "/etc/letsencrypt/live/api.memo-cards.online/fullchain.pem" ]; then echo "✅ Let's Encrypt сертификаты найдены. Запускаем в двойном режиме (HTTP + HTTPS)" # Обновляем systemd сервис для двойного режима sudo sed -i 's|ExecStart=/root/mnemo_cards_backend/server.exe.*|ExecStart=/root/mnemo_cards_backend/server.exe --dual --certs /etc/letsencrypt/live/api.memo-cards.online -a 0.0.0.0 -p 8080|' /etc/systemd/system/mnemo_cards_server.service else echo "⚠️ Let's Encrypt сертификаты не найдены или повреждены. Пытаемся создать..." # Проверяем, занят ли порт 80 if sudo netstat -tulpn | grep :80 > /dev/null 2>&1; then echo "🔍 Порт 80 занят другим процессом. Проверяем возможные веб-сервера..." # Пытаемся остановить распространенные веб-сервера if sudo systemctl is-active --quiet nginx; then echo "🛑 Останавливаем nginx для получения сертификата..." sudo systemctl stop nginx NGINX_STOPPED=true elif sudo systemctl is-active --quiet apache2; then echo "🛑 Останавливаем apache2 для получения сертификата..." sudo systemctl stop apache2 APACHE_STOPPED=true elif sudo systemctl is-active --quiet httpd; then echo "🛑 Останавливаем httpd для получения сертификата..." sudo systemctl stop httpd HTTPD_STOPPED=true else echo "❓ Порт 80 занят неизвестным процессом:" sudo netstat -tulpn | grep :80 echo "💡 Рекомендуется вручную остановить процесс, занимающий порт 80, или использовать webroot режим certbot" fi fi # Останавливаем наш сервер временно для получения сертификата sudo systemctl stop mnemo_cards_server 2>/dev/null || true sleep 5 # Пытаемся получить Let's Encrypt сертификат echo "🔐 Получаем Let's Encrypt сертификат для домена api.memo-cards.online..." if sudo certbot certonly --standalone -d api.memo-cards.online --non-interactive --agree-tos --email admin@api.memo-cards.online; then echo "✅ Let's Encrypt сертификат успешно создан!" echo "🚀 Запускаем в двойном режиме (HTTP + HTTPS)" # Обновляем systemd сервис для двойного режима sudo sed -i 's|ExecStart=/root/mnemo_cards_backend/server.exe.*|ExecStart=/root/mnemo_cards_backend/server.exe --dual --certs /etc/letsencrypt/live/api.memo-cards.online -a 0.0.0.0 -p 8080|' /etc/systemd/system/mnemo_cards_server.service else echo "❌ Не удалось создать Let's Encrypt сертификат. Запускаем в HTTP режиме" echo "💡 Возможные причины и решения:" echo " - Домен api.memo-cards.online не указывает на этот сервер" echo " - Порт 80 недоступен извне (firewall, порт forwarding)" echo " - Сертификат уже был получен ранее - проверьте /etc/letsencrypt/live/" echo " - Используйте webroot режим если есть веб-сервер: certbot certonly --webroot -w /var/www/html -d api.memo-cards.online" # Возвращаем обычный режим sudo sed -i 's|ExecStart=/root/mnemo_cards_backend/server.exe.*|ExecStart=/root/mnemo_cards_backend/server.exe -a 0.0.0.0 -p 8080|' /etc/systemd/system/mnemo_cards_server.service fi # Возвращаем веб-сервера в исходное состояние if [ "$NGINX_STOPPED" = true ]; then echo "🔄 Возвращаем nginx..." sudo systemctl start nginx fi if [ "$APACHE_STOPPED" = true ]; then echo "🔄 Возвращаем apache2..." sudo systemctl start apache2 fi if [ "$HTTPD_STOPPED" = true ]; then echo "🔄 Возвращаем httpd..." sudo systemctl start httpd fi fi sudo systemctl daemon-reload sudo systemctl start mnemo_cards_server journalctl -u mnemo_cards_server --since "1min ago"