1.部署前的准备.
准备一台可以通过外网访问的服务器, 域名可以先不用,直接用ip就好
2.在服务器创建一个用户
useradd xxx 添加用户
passwd xxx 设置密码
gpasswd -a xxx group(用户组)
cd /home
mkdir xxx (给用户一个目录)
chown -R xxx /home/xxx
3.安装所需要的软件
sudo apt-get update
sudo apt-get upgrade
sudo apt-get install nginx git python3-pip virtualenv
pip3 install gunicorn
安装好nginx,启动nginx, sudo server nginx start 打你的ip
会出现:
接下来,上传你的代码到服务器,我使用scp可能很慢, 先通过上传到github, 在git到本地。接下里,把项目里的静态文件收集起来。到你项目的目录下,python(python3) manage.py collectstatic
创建数据库文件 python(python3) manage.py makemigrations python(python3) manage.py migrate
配置nginx (在/etc/nginx/site-available/)创建一个文件 xxx
server {
charset utf8;
listen 80;
server_name ip;
location /static {
alias /path/to/youproject/static;
}
location /media {
alias /path/to/yourproject/media;
}
location / {
proxy_set_header Host $host;
proxy_pass http://unix:/tmp/xx.socket;
}
}
其它请求转发给 Django 处理。proxy_pass 后面使用了 unix 套接字,其作用是防止端口冲突
sudo ln -s /etc/nginx/site-available/xxx /etc/nginx/site-enabled/xxx
sudo service nginx reload
接下来,使用前面安装好的gunicorn
在你的项目的目录下(就是包含manage.py的那个目录)
gunicorn --bind unix:/tmp/xxx.socket yourproject.wsgi:application
访问你的ip或者域名看看你的项目有没有拉起来?
如果没有,①仔细检查配置和上面写的是否一样.
②查看你的服务器的80, 8000端口是否开放?
以阿里云为例(因为我也是这样过来的,开始的懵逼,慢慢摸索)
(网页版登录)找到控制台(在右上角的位置)找到安全组,看到你的实例, 大概在实例的右下角, 有一个配置规则, 点进去,找到添加安全组规则.根据提示可以完成添加。
③如果看到的是nginx的胡欢迎界面,一尝试把nginx目录下的default删除(site-avaiabled, enabled), 你也可以做一个备份)。二,看看你项目的路径,是不是加上了你的路径(主界面)
如果能够正常访问, 那么,我们就要可以写一个启动脚本了
脚本位于 /etc/init/ 目录下,且脚本文件名必须以 .conf 结尾:xxx.conf
start on net-device-up ①
stop on shutdown
respawn ②
setuid user(你的用户名,括号这里的不要写,只是为了解释)③
chdir /home/xxx/path/to/yourprojectl ④
exec ../env/bin/gunicorn --bind unix:/tmp/xxx.socket yourproject.wsgi:application ⑤
① start on net-device-up 确保只在服务器联网时才启动 Gunicorn。
② 如果进程崩溃了(比如服务器重启或者进程因为某些以外情况被 kill),respawn 将自动重启 Gunicorn。
③ setuid 确保以 xxx 用户的身份(换成你自己的用户名)运行 Gunicorn 进程。
④ chdir 进入到指定目录,这里进入项目的根目录。
⑤ exec 执行进程,即开启服务器进程。
sudo service xxx start
去访问吧, 哈哈哈