28 січня 2019 р.
Розглянемо простий варіант деплою декількох сайтів на Linux VPS (дистрибютив Ubuntu). Заходити по ssh з командної стрічки (напр. ssh root@12.34.56.78, потім пароль).
Як правило серверa "голі" без nginx, apache і т.д. Але може бути вже дещо встановлено (це як на мене гірше, бо багато чого не потрібного, включаючи у conf файлах)..
Перевіряємо чи запущений apache2 і зупиняєм по потребі, перевірка/встановлення nginx:
В дистрибютиві Ubuntu (16 і вище) використовуємо Python v3+
Встановлюємо uWSGI глобально (режим Emperor, щоб запустити на однму сервері декілька проектів)
Також встановлюємо Supervisor:
Створюєм папку для конфігураційних файлів:
Заходимо в /etc/supervisor/supervisord.conf i додаємо наступні конфігурації:
Далі наші проекти.
Для прикладу поміщаємо все в /home
Створюємо в /home папку virtenv для "віртуалок" та віртуальне середовище:
активуємо і інсталюємо все що потрібно
Розглянемо для прикладу два проекти django: kyiv та lviv (віртуалку викоритаєм одну для двох, для демонстрації). Вони будуть також в /home
структура приблизно така:
те саме для другого, замість kyiv - lviv
Готові проекти переносимо за допомогою GIT (можна і копіпастом в nautilus, якщо туго з GITом о_О ), незабуваючи про права доступу до файлів (можуть бути змінені, наприклад, доступи до папки статики і в браузері видасть 403 forbidden; допоможе chmod -R 755 або 777 /home/kyiv/mysite/static
).
Також в settings.py не забуваєм поставити ALLOWED_HOSTS = ["*"] (детальніше про це налаштування краще почитати тут django allowed-hosts)
В папці де знаходиться файл manage.py створюємо файл налаштування uwsgi, напр. kyiv_uwsgi.ini
(для lviv відповідно lviv_uwsgi.ini
) з такими налаштуваннями:
kyiv_uwsgi.ini
lviv_uwsgi.ini
Різні варіації можна подивитись тут:
uWSGI Django and Nginx
Також треба створити папку logs для logfile.
Будем вважати, що в нас є зареестровані домени kyiv.ua та lviv.ua і в них прописані NS сервера нашого хостера. А також у хостера до ІР сервера привязані дані домени.
Налаштовуємо nginx.conf
в /etc/nginx
Взагальному цей файл всюди однаковий, хоча можуть бути індивідуальні варіації. Використовуємо такий варіант налаштуваня файлу nginx.conf:
В папці де файл manage.py
створюємо файл налаштування nginx, для кожного проекту напр. kyiv_nginx.conf (для lviv відповідно lviv_nginx.conf) з такими налаштуваннями:
kyiv_nginx.conf
lviv_nginx.conf
В нашому випадку налаштований редірект сайту з без www на www
В /etc/nginx
має бути файл uwsgi_params, копіюємо його в папку де файл manage.py
(щоб все було в одному місці). Якщо немає то створюємо (всюди однаковий):
Тепер важливий момент, створюєм посилання конфігурацій для uwsgi та nginx:
Можем попередньо перевірити на помилки в nginx командою nginx -t
Перезапускаєм uwsgi та nginx:
Можуть бути помилки в nginx і видасть попередження, що неперезапустилось - дивимось командою sudo journalctl -xe
а також в логах.
uwsgi при рестарті повідомлення в терміналі не дає, тому якщо не працює дивимось в логах
Якщо все без омилок то по kyiv.ua та lviv.ua мають працювати наші сайти. Шляхи до статики в проекті і шаблонах треба налаштовувати індивідуально, шлях до папки /static чи /media прописаний в kyiv_nginx.conf
та lviv_nginx.conf
Після кожних змін в проекті в .ру файлах потрібно перезапускати uwsgi (sudo supervisorctl restart uwsgi
) щоб підтянулись зміни
Встановлення і запуск PyCharm через application menu linux (ubuntu)
Timezone in Python: Naive & Aware - різниця