腾讯云Ubuntu18.04部署Django项目(简单部署,仅供学习)

本秂侑毒 提交于 2019-12-10 17:42:33

登录腾讯云

进入腾讯云官网,点击右上角控制台,微信扫码登录
点击云服务器进入实例界面
点击云服务器进入实例界面
点击左侧安全组,新建安全组(放通全部端口表示可以通过网络访问实例所有端口)
新建安全组
点击实例最右边-更多-安全组-配置安全组,选择刚刚那个新建的就好了
配置安全组
点击登录,微信扫码,选择第一种登录方式,使用购买腾讯云默认的账号密码登录(如果忘了点击更多重置密码,一步一步来就好了)

安装环境

Ubuntu18.04自带python3 ,但是没有下载pip,我们先安装一下所有必要的环境

sudo apt install python3-pip
sudo pip3 install uwsgi
sudo apt install nginx
sudo apt install mysql-server

由于安装MySQL可能会未设置密码(很有可能),我们判断一下MySQL是否安装成功,并且查看默认密码

netstat -tap | grep mysql
# 查看默认密码
cat /etc/mysql/debian.cnf

user和password就是用户和密码,使用默认用户密码进入MySQL

mysql -u'user' -p'password'
# mysql -udebian-sys-maint -p8CpdQIbo3hAjmwwk

更改密码和一些设置

use mysql;
update mysql.user set authentication_string=password('123456') where user='root';
# 如果不修改如下字段很可能会报错
update user set plugin="mysql_native_password"; 
# 刷新一下
flush privileges;
quit;

接下来就可以用刚刚设置的新密码登录MySQL了

mysql -uroot -p123456

上传项目文件

打开本地终端(此处我是ubuntu18.04,其他的可能有所区别),输入命令连接腾讯云:

ssh -q  -l '你的用户名' -p 22 '你服务器的IP'
# ssh -1 -l ubuntu -p 22 1.1.1.1

输入yes ,然后输入密码(你的登录密码)

在腾讯云终端设置root密码(这个密码可以无限改,输入命令就可以,尽量复杂一点,因为我有过被黑客破解密码的经历,如果数据重要请务必请专业人士):

sudo passwd root

修改配置,找到PermitRootLogin 这项 将其改为 yes,保存退出

sudo vim /etc/ssh/ssh_config

重启ssh服务:

sudo service ssh restart

在本地终端输入命令上传文件

scp '本地文件'  root@'腾讯云IP地址':'上传后的文件路径'
# scp /home/oo/python/xiangmu.tar.gz root@1.1.1.1:/home/ubuntu/xiangmu.tar.gz

上传文件如果报错

1.确认已连接(第一步),你的腾讯云安全组必须开通端口22

2.删除用户主目录下的./ssh/known_hosts文件并重试(确实有效,不过不懂(⊙_⊙)?)

cd ~
sudo -rm ./ssh/known_hosts

创建数据库

创建数据库(此处的数据库名为你的Django数据库名)

create database '数据库名' charset=utf8;

你的数据库可能需要导入数据

# 将本地数据库数据导出
# 备份命令格式
mysqldump -u root -p '数据库名' > ./'数据库名'.sql(保存在当前文件夹)
# 将当前目录的sql文件导入数据库
# 恢复命令格式
mysql -u root -p '数据库名'  <'数据库名' .sql(恢复当前文件夹的数据库)

如果没有数据,需要迁移数据库,cd到项目文件夹(有manage.py的文件夹)

python3 manage.py makemigration
python3 manage.py migrate

配置uWSGI

在manage.py同级文件创建uwsgi.ini

vim uwsgi.ini

需要用到的vim:

i 编辑

Esc(键盘左上角) 退出编辑

:wq 保存退出

写入如下配置:

[uwsgi]
# Http通信方式的 IP地址:端口号(不使用nginx,可以通过浏览器直接访问)
# http=127.0.0.1:8000
# 套接字方式的 IP地址:端口号(需要映射到nginx)
socket=127.0.0.1:8000
# 项目当前工作目录(绝对路径)
chdir=/home/oo/.../my_project 这里需要换为项目文件夹的绝对路径
# 项目中wsgi.py文件的目录,相对于当前工作目录
wsgi-file=my_project/wsgi.py
# 进程个数
process=1
# 每个进程的线程个数
threads=2
# 是否开启管理员进程,该进程用于管理其它进程,不与用户交互,如果需要,设为true
master=false
# 服务的pid记录文件
pidfile=uwsgi.pid
# 服务的目志文件位置
daemonize=uwsgi.log

配置nginx

修改nginx 的配置文件

sudo vim /etc/nginx/sites-enabled/default

下面没有的就不要修改了

server {
    listen      80;
    server_name www.xxx.com; # 你的域名(需要备案,不然一天内就封了)或者公有云公网IP
    charset     utf-8;
    client_max_body_size 75M;
  
  # 媒体文件目录(MP4,MP3等用户上传的数据,如果没有可以不写)
    location /media  {
        alias /path/to/project/media;
    }
  # 静态文件目录(js,css等)
    location /static {
        alias /path/to/project/static;
    }
    # 项目文件路径
    location / {
    	# 和uwsgi.ini一样的IP和端口
        uwsgi_pass  127.0.0.1:8000;
        include     /etc/nginx/uwsgi_params;
		# try_files $uri $uri/ =404; # 将这行注释掉
    }
}

重启nginx

sudo /etc/init.d/nginx restart

启动服务

启动uWSGI

sudo uwsgi --ini uwsgi.ini

重启服务需要先关闭服务

停止uWSGI(如果uwsgi.ini进程数大于1且没有设置管理员进程,停止将无法起作用)

sudo uwsgi --stop uwsgi.pid

此时需要强制终止一些进程

ps -acux|grep uwsgi
kill -9 'pid号'

ps:如果一切正常,启动服务就可以在公网访问你的网站了,不过世事往往不尽如人意,希望各位能够一次成功,出现错误就找百度吧!

出现的错误写在uwsgi.log,太多了就删了,启动服务自动创建

cat uwsgi.log
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!