Несколько веб-сайтов на одном VPS (nginx + centos + django)
Я использую VPS с nginx + centos + django. У меня уже есть один сайт, работающий на нем. Теперь я хочу добавить еще один домен, но после прочтения множества статей у меня все еще возникают проблемы с этим.
Вот мой файл nginx.conf:
Я пробовал использовать один короткий главный файл и два файла для каждого сайта с серверными блоками, как в файле выше. В этом случае оба сайта не открываются вообще.
user nginx;
worker_processes auto;
error_log /var/log/nginx/error.log;
pid /run/nginx.pid;
# Load dynamic modules. See /usr/share/nginx/README.dynamic.
include /usr/share/nginx/modules/*.conf;
events {
worker_connections 1024;
}
http {
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
access_log /var/log/nginx/access.log main;
sendfile on;
tcp_nopush on;
tcp_nodelay on;
keepalive_timeout 65;
types_hash_max_size 2048;
include /etc/nginx/mime.types;
default_type application/octet-stream;
# Load modular configuration files from the /etc/nginx/conf.d directory.
# See http://nginx.org/en/docs/ngx_core_module.html#include
# for more information.
include /etc/nginx/sites-enabled/*.conf;
server_names_hash_bucket_size 64;
}
Вот мой файл настроек django, он почти одинаков для обоих доменов, поэтому я оставляю здесь только один
Что я делаю неправильно? Теперь мне кажется, что оба сайта обращаются к одному и тому же пути, поэтому я получаю одинаковый контент для разных доменов, но я не могу найти, где моя ошибка.
мне кажется, что вы пытаетесь запустить django вручную, на каком-то порту и соединить его с nginx
но это неправильно, nginx может обслуживать только статические файлы, а дефолтное ядро django python manage.py runserver недостаточно хорошо, чтобы использовать его в production, оно предназначено только для тестирования. Вам нужно подключить его к gunicorn, gunicorn может обслуживать скрипты, а nginx - статические файлы. Я поделюсь своей конфигурацией, которая на 100% работает с несколькими проектами django, но я использую ее на ubuntu
в данном примере проект называется mail, поэтому вы можете изменить "mail" на то, что вам нужно
- развертывание почтового проекта:
mkdir mailcd mailvirtualenv venvsource venv/bin/activatepip install django gunicorn nginxdjango-admin.py startproject mail ~/mailnano ~/mail/mail/settings.py
в settings.py добавьте:
8.a) import os
8.b) ALLOWED_HOSTS = ["*"]
8.c) TIME_ZONE = 'Europe/Moscow'
8.d) STATIC_ROOT = os.path.join(BASE_DIR, 'static/')
python manage.py makemigrationspython manage.py migratepython manage.py createsuperuserpython manage.py collectstaticpython manage.py runserver 0.0.0.0:8000
13.a) перейдите по адресу "(ip)0.0.0.0:8000/admin" в вашем браузере сайт должен работать и css стили должны быть в админ панели
gunicorn --bind 0.0.0.0:8000 mail.wsgi
14.a) (выполнить команду выше^^ в папке с manage.py )
14.b) зайдите на "(ip)0.0.0.0:8000/admin" сайт должен работать, а css стили НЕ ДОЛЖНЫ работать
deactivatesudo nano /etc/systemd/system/mail.service
Внимательно замените все слова "mail" на название вашего проекта,
/home/admin/mail >> это корневая папка (в config under), имейте это в виду, вы можете проверить реальный путь к вашему проекту, набрав команду pwd в папке projects
[Unit]
Description=gunicorn daemon
After=network.target
[Service]
User=admin
Group=www-data
WorkingDirectory=/home/admin/mail
ExecStart=/home/admin/mail/venv/bin/gunicorn --access-logfile - --workers 3 --bind unix:/home/admin/mail/mail.sock mail.wsgi:application
[Install]
WantedBy=multi-user.target
sudo systemctl start mailsudo systemctl enable mail- в папке проекта почты (где находится manage.py ) Файл ДОЛЖЕН
(MUST) appear“mail.sock”, если он не доходит до 16 параграфа, то вы допустили ошибку .
перечислите свои папки:
~/mail$ ls
вывод должен выглядеть следующим образом:
db.sqlite3 mail mail.sock manage.py static venv
sudo systemctl status mail
он проверит статус сервиса для почты проекта, который должен запустить его с помощью gunicorn
- Конфигурация Nginx:
sudo nano /etc/nginx/sites-available/mail
замените mail в конфигурации на ваш project (3 места и 1 адрес)
/home/admin/mail >> это корневая папка (в config under), имейте это в виду, вы можете проверить реальный путь к вашему проекту, набрав команду pwd внутри папки projects
server {
listen 80;
server_name adress.mail.com;
location = /favicon.ico { access_log off; log_not_found off; }
location /static/ {
root /home/admin/mail;
}
location / {
include proxy_params;
proxy_pass http://unix:/home/admin/mail/mail.sock;
}
}
sudo ln -s /etc/nginx/sites-available/mail /etc/nginx/sites-enabled
23.a) cd /etc/nginx/sites-enabled
23.b) тип ls
проект mail должен находиться в этой папке
sudo nginx -t
это проверит nginx на ошибки
sudo systemctl reload nginxДалее вам нужно назначить доменное имя, в данном примере
.adress.mail.com, на ip-адрес вашей виртуальной машины, с помощьюCNAMEилиA type. Но если у вас нет никакого доменного имени, вы можете назначить ip адресserver_name 222.333.444.555;, но в этом случае вы не сможете использовать разные порты, поэтому для вас не будет нескольких проектов django (купите домен)
ваш проект будет работать супер хорошо, если вы все сделали правильно, если вы хотите добавить еще один проект, просто переделайте все в этом списке