2025-11-16 11:25:27 +00:00
set -e -v
2025-11-16 14:37:24 +00:00
SCRIPT_DIR = " $( cd " $( dirname " $0 " ) " && pwd ) "
2025-11-16 14:38:35 +00:00
PROJECT_ROOT = " $( cd " $SCRIPT_DIR /../.. " && pwd ) "
2025-11-16 14:37:24 +00:00
cd $PROJECT_ROOT /mnemo_cards_common
2025-11-16 11:25:27 +00:00
git pull origin master
dart pub get
2025-11-16 14:37:24 +00:00
cd $PROJECT_ROOT /mnemo_cards_common_backend
2025-11-16 11:25:27 +00:00
git pull origin master
dart pub get
2025-11-16 14:37:24 +00:00
cd $PROJECT_ROOT /mnemo_cards_backend
2025-11-16 11:25:27 +00:00
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 сертификатов для двойного режима
2025-11-16 14:53:15 +00:00
if [ -d "/etc/letsencrypt/live/api.memo-cards.online" ] && [ -f "/etc/letsencrypt/live/api.memo-cards.online/fullchain.pem" ] ; then
2025-11-16 11:25:27 +00:00
echo "✅ Let's Encrypt сертификаты найдены. Запускаем в двойном режиме (HTTP + HTTPS)"
# Обновляем systemd сервис для двойного режима
2025-11-16 12:15:21 +00:00
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
2025-11-16 11:25:27 +00:00
else
2025-11-16 14:53:15 +00:00
echo "⚠️ Let's Encrypt сертификаты не найдены или повреждены. Пытаемся создать..."
2025-11-16 12:15:21 +00:00
2025-11-16 14:53:15 +00:00
# Проверяем, занят ли порт 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
# Останавливаем наш сервер временно для получения сертификата
2025-11-16 11:25:27 +00:00
sudo systemctl stop mnemo_cards_server 2>/dev/null || true
2025-11-16 14:53:15 +00:00
sleep 5
2025-11-16 12:15:21 +00:00
2025-11-16 11:25:27 +00:00
# Пытаемся получить Let's Encrypt сертификат
2025-11-16 12:15:21 +00:00
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
2025-11-16 11:25:27 +00:00
echo "✅ Let's Encrypt сертификат успешно создан!"
echo "🚀 Запускаем в двойном режиме (HTTP + HTTPS)"
# Обновляем systemd сервис для двойного режима
2025-11-16 12:15:21 +00:00
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
2025-11-16 11:25:27 +00:00
else
echo "❌ Н е удалось создать Let's Encrypt сертификат. Запускаем в HTTP режиме"
2025-11-16 14:53:15 +00:00
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"
2025-11-16 11:25:27 +00:00
# Возвращаем обычный режим
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
2025-11-16 14:53:15 +00:00
# Возвращаем веб-сервера в исходное состояние
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
2025-11-16 11:25:27 +00:00
fi
sudo systemctl daemon-reload
sudo systemctl start mnemo_cards_server
journalctl -u mnemo_cards_server --since "1min ago"