Несколько веб-сайтов на одном 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" на то, что вам нужно

  1. развертывание почтового проекта:
  2. mkdir mail
  3. cd mail
  4. virtualenv venv
  5. source venv/bin/activate
  6. pip install django gunicorn nginx
  7. django-admin.py startproject mail ~/mail
  8. nano ~/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/')
  1. python manage.py makemigrations
  2. python manage.py migrate
  3. python manage.py createsuperuser
  4. python manage.py collectstatic
  5. python manage.py runserver 0.0.0.0:8000

13.a) перейдите по адресу "(ip)0.0.0.0:8000/admin" в вашем браузере сайт должен работать и css стили должны быть в админ панели

  1. gunicorn --bind 0.0.0.0:8000 mail.wsgi

14.a) (выполнить команду выше^^ в папке с manage.py )

14.b) зайдите на "(ip)0.0.0.0:8000/admin" сайт должен работать, а css стили НЕ ДОЛЖНЫ работать

  1. deactivate

  2. sudo 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
  1. sudo systemctl start mail
  2. sudo systemctl enable mail
  3. в папке проекта почты (где находится manage.py ) Файл ДОЛЖЕН (MUST) appear “mail.sock”, если он не доходит до 16 параграфа, то вы допустили ошибку
  4. .

перечислите свои папки:

~/mail$ ls

вывод должен выглядеть следующим образом:

db.sqlite3 mail mail.sock manage.py static venv

  1. sudo systemctl status mail

он проверит статус сервиса для почты проекта, который должен запустить его с помощью gunicorn

  1. Конфигурация 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;
}
}
  1. sudo ln -s /etc/nginx/sites-available/mail /etc/nginx/sites-enabled

23.a) cd /etc/nginx/sites-enabled

23.b) тип ls

проект mail должен находиться в этой папке

  1. sudo nginx -t

это проверит nginx на ошибки

  1. sudo systemctl reload nginx

  2. Далее вам нужно назначить доменное имя, в данном примере adress.mail.com, на ip-адрес вашей виртуальной машины, с помощью CNAME или A type. Но если у вас нет никакого доменного имени, вы можете назначить ip адрес server_name 222.333.444.555;, но в этом случае вы не сможете использовать разные порты, поэтому для вас не будет нескольких проектов django (купите домен)

    .

ваш проект будет работать супер хорошо, если вы все сделали правильно, если вы хотите добавить еще один проект, просто переделайте все в этом списке

Вернуться на верх