Django บน url อื่นที่ไม่ใช่ localhost [ซ้ำกัน]

ฉันมีเซิร์ฟเวอร์ aerv.nl มันมี django (เฟรมเวิร์ก python) แต่เมื่อฉันรันเซิร์ฟเวอร์ django มันบอกว่า: เซิร์ฟเวอร์เริ่มต้นที่: http://127.0.0.1:8000/ ฉันจะปล่อยให้เซิร์ฟเวอร์ทำงานได้อย่างไร: http://www.aerv.nl/~filip/ ? (URL จริง)


person filipKAAS    schedule 13.12.2015    source แหล่งที่มา


คำตอบ (2)


คุณจะต้องกำหนดค่าเซิร์ฟเวอร์ http และ Django ของคุณ ตัวอย่างเช่น หากคุณใช้ apache คุณจะต้องทำสิ่งนี้:

https://docs.djangoproject.com/en/1.9/howto/deployment/wsgi/modwsgi/

สิ่งที่คุณกำลังทำที่นี่คือการตั้งค่าเซิร์ฟเวอร์ของคุณให้จัดการคำขอ http ผ่านแอป django ของคุณ

person MarkHarley    schedule 13.12.2015
comment
ฉันสามารถให้คำตอบโดยละเอียดได้หากคุณให้รายละเอียดเพิ่มเติมเล็กน้อยเกี่ยวกับการตั้งค่าเซิร์ฟเวอร์ของคุณ (และผู้ให้บริการ) เช่น. คุณใช้ apache, Unicorn, nginx, ... และสิ่งนี้โฮสต์บน webfaction, linode, ... - person MarkHarley; 13.12.2015

คุณจะต้องเข้าใจวิธีการทำงานของ DNS จากนั้นใช้การเปลี่ยนเส้นทาง จากนั้นใช้เซิร์ฟเวอร์ที่เหมาะสม (เช่น nginx หรือ apache เช่น gunicorn) ไม่ใช่เซิร์ฟเวอร์การพัฒนา django ซึ่งไม่ควรใช้ในการผลิต ไม่มีทางที่คุณจะสามารถทำตามที่คุณขอเพียงแค่ใช้ ./manage runserver ได้ สิ่งที่คุณทำได้คือเปลี่ยนที่อยู่ IP และพอร์ตเป็นสิ่งที่แตกต่างออกไป เช่น ./manage.py runserver 192.168.0.12:9999 ตัวอย่างเช่น คอมพิวเตอร์เครื่องอื่นๆ ในเครือข่ายของคุณอาจเข้าถึงไซต์ของคุณบน IP และพอร์ตเฉพาะนี้

ตัวอย่าง

คุณเป็นเจ้าของโดเมน example.com คุณมีเซิร์ฟเวอร์ที่คุณต้องการเซิร์ฟเวอร์เว็บไซต์ของคุณด้วยที่อยู่ IP เช่น 5.130.2.19. คุณต้องไปที่ผู้ให้บริการโดเมนของคุณและเพิ่มระเบียน A ซึ่งเชื่อมโยงสิ่งเหล่านี้เข้าด้วยกัน: example.com -> 5.130.2.19

จากนั้นบนเซิร์ฟเวอร์ของคุณ คุณตั้งค่าเว็บเซิร์ฟเวอร์ เช่น nginx และปล่อยให้มันทำงานด้วยเช่น การกำหนดค่านี้สำหรับเซิร์ฟเวอร์/ไซต์เฉพาะของคุณ:

server {

    listen   80;
    server_name example.com;

    client_max_body_size 4G;

    location /static/ {
        autoindex on;
        alias   /var/www/example/django/static/;
    }

    location /media/ {
        autoindex on;
        alias   /var/www/example/django/media/;
    }

    location / {
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

        proxy_set_header Host $http_host;

        proxy_redirect off;

        if (!-f $request_filename) {
            proxy_pass http://upstream_server;
            break;
        }
    }

upstream upstream_server {
  server unix:/var/www/example/gunicorn.sock fail_timeout=10s;
}

จากนั้นคุณจะต้องเรียกใช้ gunicorn ด้วยสิ่งที่ต้องการ

gunicorn example.wsgi:application --bind=unix:/var/www/example/gunicorn.sock 

นั่นควรจะเป็นทั้งหมด แต่แน่นอนว่ามันสั้นมาก เพียงแทนที่ example.com สำหรับ URL ของคุณ ขึ้นอยู่กับคุณว่านี่จะเป็นบันทึกเฉพาะใน nginx config (คิดว่านี่เป็นจุดเริ่มต้น) หรือจะเป็นเส้นทางใดเส้นทางหนึ่งที่ระบุในโปรเจ็กต์ django ของคุณ

มันทำงานอย่างไร?

ผู้ใช้ใส่ example.com ลงในแถบที่อยู่ จากนั้นคอมพิวเตอร์ของคุณถามเซิร์ฟเวอร์ DNS ทั่วโลก: ที่อยู่ IP example.com ชี้ไปที่ที่อยู่ IP ใด การตอบกลับ DNS: มันคือ 5.130.2.19 จากนั้นเบราว์เซอร์ของผู้ใช้จะส่งคำขอ HTTP บน IP นั้น โดยที่ nginx ได้รับคำขอนี้และดูภายในการกำหนดค่าว่ามี example.com ตัวจัดการ หรือไม่ พบว่ามีอยู่และเขาควรค้นหาไฟล์ใน unix:/var/www/example/gunicorn.sock เขามองไปที่นั่นและดูการทำงาน gunicorn ซึ่งโดยพื้นฐานแล้วแยกวิเคราะห์โปรเจ็กต์ python django เป็นสิ่งที่ nginx สามารถนำเสนอเป็นเว็บไซต์ของคุณได้

person kotrfa    schedule 13.12.2015
comment
ฮ่าฮ่า! ดังนั้นเมื่อฉันทำเช่นนั้น แต่ชี้ไปที่ aerv.nl/~filip มันจะได้ผลไหม หรือฉันต้องเปลี่ยนการกำหนดค่า HTTPD? - person filipKAAS; 13.12.2015
comment
มันขึ้นอยู่กับการกำหนดค่าของคุณโดยรวม ฉันอัปเดตคำตอบเพื่อให้คุณมีแนวคิดสั้น ๆ - person kotrfa; 13.12.2015