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