这是我原始问题的编辑,这是如何将Django应用程序成功部署到服务器,因为这是我第一次。 以下链接是我尝试过的:
我跟着这些信件,我到了~/myproject/manage.py runserver 0.0.0.0:8000
的部分,然后他们显示导航到端口8000上的服务器IP地址显示一个'It working'页面,我得不到回复。我也跑了
# test.py
def application(env, start_response):
start_response('200 OK', [('Content-Type','text/html')])
return [b"Hello World"] # python3
#return ["Hello World"] # python2
uwsgi --http :8000 --wsgi-file test.py
,仍然没有回应。
因此,经过一段时间将我的头撞在墙上,我决定放弃并跳过那一部分,然后直接将NGINX,uWSGI和我的Django应用程序结合起来。我只是设法让它工作,所以我将在下面发布一个详细的解决方案,我将如何做到这一点,希望它可以帮助其他人,因为我发现互联网上的大部分说明都没有解释我认为需要解释的事情完全理解发生了什么。这足以作为问答,......
左虽然在旁注,我仍然感兴趣,为什么没有安装网络服务器,我仍然无法访问使用该命令运行的Django应用程序runserver
,如果您知道,请发表评论。
答案 0 :(得分:0)
让我们先来看看DigitalOcean上Droplet的配置。您使用的是哪种Linux版本? (Ubuntu或Debian等)和哪个webserver(Nginx或Apache2等) 几个月前我在Digitalocean上设置了一个Debian Droplet,用Apache webserver做我自己的安装,它运行良好。我总是在我的项目库中安装virtualenv并点击安装我需要的所有内容。所以我建议回到这个安排,而不是把它放在项目的外部。一旦我的结构到位,将我的settings.py文件设置为我的wsgi.py文件并收集了我的静态文件等,然后我使用迁移等配置我的数据库。然后我配置我的网络服务器以找到项目的位置。在apache2中,您需要在/ etc / apache2 / sites-available /中配置.conf文件,然后使用sudo a2ensite .conf在启用的站点中启用它。在nginx中会有类似的设置,你可能比我过去部署Angular应用程序更了解它。因此,请检查这些主要步骤,看看它是否标记了您可能错过的任何内容。
答案 1 :(得分:0)
所以经过一段时间的努力,我设法将我的Django应用程序成功部署到Digitalocean托管的服务器上,使用NGINX和uWSGI。我不会在这里发布我的实际服务器的IP,所以在这个答案中我将使用10.11.12.13作为我的ubuntu服务器的IP地址,。我尽力回溯我的步骤,以下是按时间顺序排列的:
➜ ssh root@10.11.12.13
# sudo apt-get update
# sudo adduser jupiar && usermod -aG sudo jupiar
# su - jupiar
$ sudo apt-get install nginx
$ wget https://repo.continuum.io/archive/Anaconda3-5.0.0.1-Linux-x86_64.sh
$ bash Anaconda3-5.0.0.1-Linux-x86_64.sh
[yes]
让安装程序在.bashrc
<中将安装位置添加到PATH / em> $ . .bashrc
$ source .bashrc
$ conda create -n drfprojectenv python=3.6 anaconda
$ source activate drfprojectenv
(drfprojectenv)$ pip install Django
(drfprojectenv)$ django-admin.py startproject drfproject
(drfprojectenv)$ cd drfproject
(drfprojectenv)~/drfproject$ ./manage.py migrate
(drfprojectenv)~/drfproject$ echo 'STATIC_ROOT = os.path.join(BASE_DIR, "static/")' >> drfproject/settings.py
(drfprojectenv)~/drfproject$ ./manage.py collectstatic
(drfprojectenv)~/drfproject$ sudo apt-get install build-essential python-dev python3-dev
(drfprojectenv)~/drfproject$ cd
(drfprojectenv)$ pip install uwsgi
好的,现在它变得更有趣了:我们现在需要为Django项目创建一个初始化文件(.ini):
(drfprojectenv)$ sudo mkdir -p /etc/uwsgi/sites
(-p
只是让我们做出所有必要的父目录)
(drfprojectenv)$ sudo nano /etc/uwsgi/sites/drfproject.ini
在该文件中放置以下内容:
[uwsgi] project = drfproject base = /home/jupiar chdir = %(base)/%(project) home = %(base)/Env/%(project) module = %(project).wsgi:application master = true processes = 2 socket = %(base)/%(project)/%(project).sock chmod-socket = 666 vacuum = true
现在我们需要制作一个uWSGI服务,我们可以通过以下方式实现:
(drfprojectenv)$ sudo nano /etc/systemd/system/uwsgi.service
然后在那个文件里面:
[Unit] Description=uWSGI Emperor service After=syslog.target [Service] ExecStart=/home/jupiar/anaconda3/envs/drfprojectenv/bin/uwsgi --emperor /etc/uwsgi/sites/drfproject.ini Restart=always KillSignal=SIGQUIT Type=notify StandardError=syslog NotifyAccess=all [Install] WantedBy=multi-user.target
现在,我们希望uWSGI在系统重启时自动启动,并激活服务:
(drfprojectenv)$ sudo systemctl uwsgi enable
(drfprojectenv)$ sudo systemctl uwsgi start
注意,你可能会看到:
Warning: emperor.uwsgi.service changed on disk. Run 'systemctl daemon-reload' to reload units.
我们将在哪里运行:
(drfprojectenv)$ sudo systemctl daemon-reload
检查服务是否正常运行:
(drfprojectenv)$ sudo systemctl status uwsgi.service
我们应该看到类似的内容:
uwsgi.service - uWSGI Emperor service Loaded: loaded (/etc/systemd/system/uwsgi.service; enabled; vendor preset: enabled) Active: active (running)
(drfprojectenv)$ sudo service uwsgi start
(drfprojectenv)$ sudo nano /etc/nginx/sites-available/default
server { listen 80; server_name _;}location = /favicon.ico { access_log off; log_not_found off; } location /static/ { root /home/drfproject; } location / { include uwsgi_params; uwsgi_pass unix:/home/jupiar/drfproject/drfproject.sock; }
确保Django的ALLOWED_HOSTS具有以下ip地址的某种组合:
ALLOWED_HOSTS = ['10.11.12.13', '*', 'localhost', '127.0.0.1']
现在停止并启动uWSGI服务,然后重新启动nginx:
(drfprojectenv)$ sudo service uwsgi stop
(drfprojectenv)$ sudo service uwsgi start
(drfprojectenv)$ sudo service nginx restart
这应该是粗略的,我可以回溯的所有步骤都在那里。您可能需要做的一件事是在全局安装Anaconda以及虚拟环境中安装Django和uwsgi。
现在已正确安装,将其切换到其余框架应该非常轻松。