Назва: Як розмістити Node.js та Flask застосунки з SSL на власних доменах (VPS або Google Cloud VM)

Створення безпечного хостингу веб-застосунків є критичним етапом для надання надійних послуг вашим користувачам. У цьому блозі я детально розкажу, як розгорнути як Node.js застосунок, так і Flask API на віртуальній машині Google Cloud, використовуючи Apache, підключити їх до власних доменів і захистити за допомогою SSL сертифікатів. Крім того, я поясню, як це можна зробити, використовуючи популярні VPS сервіси, такі як Hostinger або Google Cloud VM. Цей всебічний посібник допоможе вам відтворити налаштування для ваших проєктів.

pic

pic

Крок 1: Вибір хостингової платформи

Ви можете хостити ваш застосунок на таких платформах:

  • Google Cloud VM (використовувана в цьому посібнику): Надійна та масштабована.
  • Hostinger VPS: Доступна і зручна для менших проєктів.
  • AWS або Azure: Рішення корпоративного рівня з додатковими функціями.

Крок 2: Налаштування середовища

2.1 Встановлення необхідного програмного забезпечення

Спочатку оновіть ваш сервер і встановіть необхідне програмне забезпечення.

sudo apt update && sudo apt upgrade -y

Встановіть Apache, Certbot та інші необхідні залежності:

sudo apt install apache2 certbot python3-certbot-apache -y

Увімкніть необхідні модулі Apache для проксіювання та SSL:

sudo a2enmod proxy proxy_http ssl rewrite  
sudo systemctl restart apache2

2.2 Розгортання застосунків

Переконайтесь, що ваші застосунки працюють локально:

  • Node.js застосунок: працює на порту 3000.
  • Flask API: працює на порту 5001.

Для тестування ви можете запустити ваш Node.js застосунок за допомогою npm start і Flask застосунок через flask run.

Крок 3: Налаштування DNS

Увійдіть на сайт вашого реєстратора доменів (наприклад, Namecheap) і налаштуйте записи DNS.

3.1 Додайте записи A

  • Основний домен:
    • Ім'я: @
    • Тип: A
    • Значення: публічна IP-адреса вашого сервера.
  • Субдомен для API:
    • Ім'я: api
    • Тип: A
    • Значення: публічна IP-адреса вашого сервера.

Зачекайте, поки зміни DNS поширяться, що може зайняти кілька годин (але зазвичай це відбувається швидше).

Крок 4: Генерація SSL сертифікатів

4.1 Тимчасово зупиніть Apache

Certbot потребує, щоб порт 80 був вільний для генерації сертифікатів.
Зупиніть Apache перед продовженням:

sudo systemctl stop apache2

4.2 Отримання сертифікатів

Використовуйте Certbot для генерації SSL сертифікатів для ваших доменів:

  • Для основного домену (Node.js):
sudo certbot certonly --standalone -d yourdomain.com
  • Для субдомену API (Flask):
sudo certbot certonly --standalone -d api.yourdomain.com

Після успішного виконання, Certbot надасть шляхи до сертифікатів і приватних ключів, зазвичай розташованих у /etc/letsencrypt/live//.

4.3 Перезапустіть Apache

Перезапустіть Apache після генерації сертифікатів:

sudo systemctl start apache2

Крок 5: Налаштування віртуальних хостів Apache

Створіть окремі конфігураційні файли для Node.js і Flask застосунків.

5.1 Налаштування домену для Node.js

Створіть і відредагуйте конфігураційний файл:

sudo nano /etc/apache2/sites-available/yourdomain.com.conf

Додайте наступну конфігурацію:


 ServerName yourdomain.com  
 Redirect permanent / https://yourdomain.com/  



 ServerName yourdomain.com SSLEngine on  
 SSLCertificateFile /etc/letsencrypt/live/yourdomain.com/fullchain.pem  
 SSLCertificateKeyFile /etc/letsencrypt/live/yourdomain.com/privkey.pem ProxyPreserveHost On  
 ProxyPass / [http://127.0.0.1:3000/](http://127.0.0.1:3000/)  
 ProxyPassReverse / [http://127.0.0.1:3000/](http://127.0.0.1:3000/) ErrorLog ${APACHE_LOG_DIR}/node-error.log  
 CustomLog ${APACHE_LOG_DIR}/node-access.log combined  


5.2 Налаштування субдомену для Flask

Створіть і відредагуйте конфігураційний файл:

sudo nano /etc/apache2/sites-available/api.yourdomain.com.conf

Додайте наступну конфігурацію:


 ServerName api.yourdomain.com  
 Redirect permanent / https://api.yourdomain.com/  



 ServerName api.yourdomain.com SSLEngine on  
 SSLCertificateFile /etc/letsencrypt/live/api.yourdomain.com/fullchain.pem  
 SSLCertificateKeyFile /etc/letsencrypt/live/api.yourdomain.com/privkey.pem ProxyPreserveHost On  
 ProxyPass / [http://127.0.0.1:5001/](http://127.0.0.1:5001/)  
 ProxyPassReverse / [http://127.0.0.1:5001/](http://127.0.0.1:5001/) ErrorLog ${APACHE_LOG_DIR}/flask-error.log  
 CustomLog ${APACHE_LOG_DIR}/flask-access.log combined  


Крок 6: Увімкнення сайтів і перезапуск Apache

6.1 Увімкнення конфігураційних файлів

Активуйте щойно створені конфігураційні файли:

sudo a2ensite yourdomain.com.conf  
sudo a2ensite api.yourdomain.com.conf

6.2 Перезапуск Apache

Перезапустіть Apache для застосування змін:

sudo systemctl restart apache2

Крок 7: Тестування налаштування

  • Відвідайте https://yourdomain.com, щоб перевірити Node.js застосунок.
  • Відвідайте https://api.yourdomain.com, щоб перевірити Flask API.

Переконайтесь, що обидва сайти завантажуються безпечно і в браузері немає попереджень про змішаний контент.

Крок 8: Увімкнення автоматичного оновлення SSL

Certbot автоматично налаштовує завдання для оновлення, але ви можете перевірити це вручну:

sudo certbot renew --dry-run

Це гарантує, що ваші сертифікати будуть оновлені до того, як вони стануть недійсними.

Висновок: Дотримуючись цього посібника, ви зможете безпечно розмістити кілька застосунків на одному сервері з власними доменами та SSL за допомогою Apache. Незалежно від того, чи використовуєте ви Google Cloud VM, Hostinger VPS або будь-якого іншого постачальника, це налаштування забезпечить безпечне спілкування і надасть професійний вигляд вашим проєктам. Якщо цей посібник був корисним, поділіться ним з вашими друзями-розробниками!

Перекладено з: Title: How to Host Node.js and Flask Applications with SSL on Custom Domains (VPS, or Google Cloud VM)

Leave a Reply

Your email address will not be published. Required fields are marked *