因此,在抓狂了一段时间后,我成功地将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
-
安装NGINX-webserver
$ 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
注意,在安装过程中,Anaconda3被安装到/home/jupiar/Anaconda3,我选择了
[yes]
要让安装程序在
.bashrc
-
现在重新启动bash:
$ . .bashrc
$ source .bashrc
-
现在,我创建了一个python虚拟环境,然后将其激活:
$ conda create -n drfprojectenv python=3.6 anaconda
$ source activate drfprojectenv
-
现在安装Django,然后启动一个新项目
(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
-
现在要安装uWSGI,我们需要几个操作系统包来编译C代码,uWSGI需要:
(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
(The
-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
-
(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
-
现在我们需要配置NGINX:
(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_主机具有以下ip地址的某些组合:
ALLOWED_HOSTS = ['10.11.12.13', '*', 'localhost', '127.0.0.1']
-
现在停止并启动uWSGI服务,并重新启动nginx:
(drfprojectenv)$ sudo service uwsgi stop
(drfprojectenv)$sudo服务uwsgi启动
(drfprojectenv)$ sudo service nginx restart
-
大致就是这样,我可以回溯的所有步骤都在那里。您可能还需要做的一件事是在Anaconda的全局安装上以及在虚拟环境中安装Django和uwsgi。