如何将本地的django项目部署到腾讯云轻量应用服务器
记录一下在腾讯云服务器上成功部署网站的过程,方便以后查阅部署。
本次部署使用的是Ubuntu+uWSGI+nginx。数据库使用默认的数据库sqlite3
一、安装Ubuntu系统
1.1 重装系统
登录腾讯云后点击控制台,找到轻量应用服务器,进入概要界面后,在镜像点击重装系统,选择“基于操作系统镜像”→Ubuntu→Ubuntu 22.04 LTS→勾选“确认已了解…”点击确定。
1.2 修改密码
在概要界面内找到远程登录,密码/密钥登录,点击重置密码,输入密码后点击离线重置,勾选“已阅读…”,点击确认。
1.3 登录
点击“密码/密钥登录”下面的登录按钮,输入密码后进入命令窗口。
ubuntu@VM-8-11-ubuntu:~$
看到~$是系统使用者级别,如果遇到权限问题,看看命令行前面有没有添加sudo
如:sudo python3 xxxxx
1.4 更新系统
sudo apt-get update
sudo apt-get dist-upgrade
sudo apt-get -y update
sudo apt-get install python-setuptools
sudo pip3 install --upgrade pip
二、django项目上传和修改
2.1 上传文件
使用FileZilla Client软件,把django项目从本地上传到服务器
在软件上输入
主机:公网ip
用户名:xxx
密码:***********
点击 "快速链接"按钮
界面的左边是本地文件,右边是服务器文件
在/home/ubuntu里右键创建两个文件夹“mypro”和“myenv”
将django项目拖到mypro文件夹内
2.2 修改settings.py文件
cd /home/ubuntu/mypro/项目名称/xxx/ #含有settings.py的文件夹路劲
sudo vim settings.py
修改如下参数:
ALLOWED_HOSTS=['*']
按Esc键 输入:wq,保存退出文件
2.3 测试项目是否正常运行
cd /home/ubuntu/mypro/项目名称
python manage.py runserver
复制公网IP到浏览器查看网站运行情况
2.4 为后续步骤作准备
1、将项目static文件复制到项目根目录下
2、修改settings.py文件
cd /home/ubuntu/mypro/项目名称/xxx/ #含有settings.py的文件夹路劲
sudo vim settings.py
DEBUG=FALSE
ALLOWED_HOSTS=['*']
STATIC_ROOT=os.path.join(BASE_DIR,'/home/ubuntu/mypro/xxx/static/') #'/home/ubuntu/mypro/xxx/static/'是项目根目录下的static文件夹的路径
3、记录第三方python库
在本地项目文件下进入cmd或进入命令窗口后cd到项目文件夹里面,输入一下命令
pip3 freeze>requirements.txt
将requirements.txt文件覆盖到云服务器原来的文件
三、虚拟环境
3.1 安装虚拟环境
sudo pip3 install virtualenv
cd
sudo virtualenv --python=python3 myenv
3.2 进入虚拟环境
source myenv/bin/activate
命令行会显示:
(myenv) ubuntu@VM-8-11-ubuntu:~$
3.3 安装第三方python库
sudo pip3 install -r requirements.txt
如果项目需要安装特定版本的python,在虚拟环境下安装
四、安装并配置uWSGI
4.1安装uWSGI
sudo apt-get install gcc
sudo apt-get install python3-dev
sudo pip3 install uwsgi
4.2测试uWSGI
cd到装有settings.py的文件夹内
cd /home/ubuntu/mypro/项目名称/xxx/ #含有settings.py的文件夹路劲
sudo vim uwsgi.ini
复制并修改配置参数
[uwsgi]
#直接做web服务器使用
http=0.0.0.0:9000
#项目目录
chdir=/home/ubuntu/mypro/xxx/
#项目中wsgi.py文件的目录,相对于项目目录
wsgi-file=xxx/wsgi.py
processes=10
#使用nginx连接时使用
#socket=127.0.0.1:8001
master=True
pidfile=uwsgi.pid
daemonize=uwsgi.log
vacuum=True
按Esc键,输入:wq,保存退出;
在腾讯云服务器中找到防火墙,添加规则,端口9000,确定
返回云服务器命令窗口,输入命令启动uwsgi
uwsgi --ini uwsgi.ini
输入公网IP :9000
访问网页,查看是否成功看到网页
关闭uwsgi
ps -ef|grep uwsgi #查看进程
kill -9 进程数字
4.3重新修改uwsgi.ini
cd /home/ubuntu/mypro/项目名称/xxx/ #确保在 含有uwsgi.ini 文件夹路劲里
sudo vim uwsgi.ini
修改 uwsgi.ini 参数
[uwsgi]
#直接做web服务器使用
#http=0.0.0.0:9000
#项目目录
chdir=/home/ubuntu/mypro/xxx/
#项目中wsgi.py文件的目录,相对于项目目录
wsgi-file=xxx/wsgi.py
processes=10
#使用nginx连接时使用
socket=127.0.0.1:8001
master=True
pidfile=uwsgi.pid
daemonize=uwsgi.log
vacuum=True
按Esc键,输入:wq,保存退出;
在腾讯云服务器中找到防火墙,把9000端口删除
五、安装和配置Nginx
5.1 安装Nginx
sudo apt-get install nginx
5.2 测试Nginx
在浏览器上输入公网IP + :80
浏览器会显示Welcome to nginx!
如果没有效果,请重启Nginx再试
systemctl restart nginx
输入服务器密码
5.3 复制uwsgi_params复制到项目根目录下
cd mypro/xxx
xxx需要替换,然后输入命令复制到项目根目录
sudo cp /etc/nginx/uwsgi_params .
查看uwsgi_params是否在文件夹里
ls
5.4 配置Nginx
cd /etc/nginx
查看文件夹里面是否有nginx.conf
ls
如果有则需要删除,输入命令
rm -rf nginx.conf
重新创建nginx.conf
sudo vim nginx.conf
输入以下参数:
user root;
worker_processes 1;
error_log /var/log/nginx/error.log;
pid /run/nginx.pid;
include /usr/share/nginx/modules/*.conf;
events {
use epoll;
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;
include /etc/nginx/conf.d/*.conf;
upstream django {
server 127.0.0.1:8001;
}
server {
listen 80 default_server;
listen [::]:80 default_server;
server_name 111.230.107.243;
charset utf-8;
location /static {
#静态文件所在文件夹
alias /home/ubuntu/mypro/xxx/static;#项目文件根目录下static的路径
}
location / {
uwsgi_pass django;
#uwsgi_params 路径,已复制到项目根目录
include /home/ubuntu/mypro/xxx/uwsgi_params;#项目文件根目录下uwsgi_params;的路径
}
}
}
按ESC键,输入:wq保存退出
5.5重启Nginx和uwsgi.ini
重启Nginx
systemctl restart nginx
输入服务器密码;
启动uwsgi
cd /home/ubuntu/mypro/项目名称/xxx/ #确保在 含有uwsgi.ini 文件夹的路劲里
uwsgi --ini uwsgi.ini
在浏览器输入公网IP查看情况,如果能打开网站,证明成功了。
若出现403,文件权限问题,在命令窗输入
chmod 777 -R /home/ubuntu/mypro
若出现404,请检查nginx和uwsgi配置文件的路劲是否正确
若浏览器找不到static文件,请检查nginx配置文件的static路劲是否正确
六、本地项目修改后
6.1上传到云服务器上
使用软件FileZilla Client,连接到服务器,将修改后的项目文件上传到云服务器,进行覆盖和添加
6.2重启uwsgi和Nginx
ps -ef|grep uwsgi #查看进程
kill -9 输入进程数字
cd /home/ubuntu/mypro/项目名称/xxx/ #确保在 含有uwsgi.ini 文件夹的路劲里
uwsgi --ini uwsgi.ini
systemctl restart nginx
查看网站是否正常运行
七、https证书
1、购买域名后,在腾讯云平台上找到我的域名,添加域名后解析映射IP。
2、在腾讯云平台上找到SSL证书,申请免费证书(一年)。
3、下载证书,需要是nginx的,然后解压文件,将xxx.key和xxx_bundle.crt文件上传到服务器/etc/nginx文件夹内。
4、打开nginx.conf,并修改参数
user root;
worker_processes 1;
error_log /var/log/nginx/error.log;
pid /run/nginx.pid;
include /usr/share/nginx/modules/*.conf;
events {
use epoll;
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;
include /etc/nginx/conf.d/*.conf;
upstream django {
server 127.0.0.1:8001;
}
server {
# listen 80 default_server;
# listen [::]:80 default_server;
# server_name 111.230.107.243;
# charset utf-8;
#SSL 默认访问端口号为 443
listen 443 ssl;
#请填写绑定证书的域名
server_name xxx;
#请填写证书文件的相对路径或绝对路径
ssl_certificate /etc/nginx/xxx_bundle.crt;
#请填写私钥文件的相对路径或绝对路径
ssl_certificate_key xxx.key;
ssl_session_timeout 5m;
#请按照以下协议配置
ssl_protocols TLSv1.2 TLSv1.3;
#请按照以下套件配置,配置加密套件,写法遵循 openssl 标准。
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE;
ssl_prefer_server_ciphers on;
location /static {
#静态文件所在文件夹
alias /home/ubuntu/mypro/xxx/static;
}
location / {
uwsgi_pass django;
#uwsgi_params 路径,已复制到项目根目录
include /home/ubuntu/mypro/xxx/uwsgi_params;
}
}
}
八、其他:
sudo -i 可以进入root权限
logout 退出root权限
Nginx
-启动
systemctl start nginx
-停止
systemctl stop nginx
-重启
systemctl restart nginx
-开机启动
systemctl enable nginx
启动虚拟环境
source myenv/bin/activate
关闭虚拟环境
deactivate