ubuntu18.04部署django
也算是第一次接触linux内核,成功部署全靠玄学+硬刚,结束后记录一下过程,新手,文章内容是回忆
环境:Ubuntu18.04
Python3.7
Django2.2.3+uWSGI+Nginx
Mysql5.7
热身
1.设置root密码
腾讯云默认登陆用户ubuntu,第一次登录时root没有密码
$ sudo passwd root
然后切换成root用户
$ su - root
更新源地址
# apt-get update
2.安装python3.7
# apt-get install python3.7
ubuntu18.04内置了python2.7和python3.6,它的python3不是我需要的版本,所以设置一下,先删除原本指向python3.6的软链接
# rm -rf /usr/bin/python3
再建立新的软链接
# ln -s /usr/bin/python3.7 /usr/bin/python3
此时可以使用python3指令了
然后安装python3-dev
# apt-get install python3.7-dev 可能需要指定3.7,有点忘了
3.安装pip3
# apt-get install python3-pip
接下来就可以使用pip3安装第三方包了
4.安装指定版本的django
# pip3 install django==2.2.3
安装Mysql5.7
使用# apt-get install mysql-server安装的最新版本应该是8.0以上了,我要用5.7,所以要指定版本
其实看到一篇文章说MySQL5.7最高只是配到Ubuntu17.04,而MySQL8.0最高适配到Ubuntu18.04。
但是没出什么问题也就没考虑换8.0,毕竟之前用的也都是5.7
# apt-get install mysql-server-5.7
# apt-get install libmysqlclient-dev
# apt-get install mysql-client
关于链接mysql连接python3
# pip3 install mysqlclient
目测可行,但是当时装了好几个乱七八糟的,所以不能保证
此时的mysqlroot账户是没有密码的,
# sudo mysql_secure_installation
对mysql进行初始化,很关键
可以参考这个非常详细
然后根据提示安装,显示Success.之后表示结束初始化,但是还有一个很大的问题,输入mysql进入mysql shell
依次
mysql> use mysql;
mysql> show tables;
mysql> select Host,User,plugin,authentication_string from user;
可以看到
+-----------+------------------+-----------------------+-------------------------------------------+
| Host | User | plugin | authentication_string |
+-----------+------------------+-----------------------+-------------------------------------------+
| localhost | root | auth_socket | |
| localhost | mysql.session | mysql_native_password | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE |
| localhost | mysql.sys | mysql_native_password | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE |
| localhost | debian-sys-maint | mysql_native_password | *9FD2128DA457CDBF327277BA59C9DE1BAFA88816 |
+-----------+------------------+-----------------------+-------------------------------------------+
发现root的插件是auth_socket,查询后发现
它只检查用户是否使用套接字进行连接,然后比较用户名,并没有密码验证。
此时无法通过其他用户如ubuntu账号登录
authentication_string字段用于存放密码,需要修改plugin和密码
mysql> ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'your_password';
必须用一句话执行而不能分开,可以参考这篇文章
现在root账户密码已经设置好了,之后登录mysql需要输入密码
# mysql -u root -p
OK完成,需要设置远程登录数据库,同样可参考这篇文章
安装uWSGI
# pip3 install uwsgi
- chemaid
- chemaid
- settings.py
- wsgi.py
- 省略
- login
- manage.py
- __ pycache __
- static
- uwsgi.ini
- chemaid
项目结构如上,首先使用django指令python3 manage.py collectstatic收集静态文件,生成上图中加粗的static,然后在manage.py同级目录下新建uwsgi.ini,使用vim编辑器
$ vim uwsgi.ini
后进入vim界面
[uwsgi]
#此端口必须与后面的Nginx一致
socket=127.0.0.1:8000
#此路径为项目的绝对路径
chdir=/home/ubuntu/chemaid正式2
#此路径为相对路径,注意是在chemaid/chemaid/wsgi.py
wsgi-file=chemaid/wsgi.py
process=1
# 每个进程的线程个数
threads=2
# 是否开启管理员进程,该进程用于管理其它进程,不与用户交互,如果需要,设为true
master=true
# 服务的pid记录文件,不需要自己动手新建
pidfile=uwsgi.pid
# 服务的目志文件位置,不需要自己动手新建
daemonize=uwsgi.log
安装Nginx
# apt install nginx
输入
# cd /etc/nginx/
# ls
显示
conf.d fastcgi_params koi-win modules-available nginx.conf scgi_params sites-enabled uwsgi_params
fastcgi.conf koi-utf mime.types modules-enabled proxy_params sites-available snippets win-utf
进入conf.d,新建my_nginx.conf
# cd conf.d
# vim my_nginx.conf
server {
listen 80;
server_name xx.xxx.xx.xx; #这里填你主机的公网IP
charset utf-8;
client_max_body_size 75M;
# 媒体文件目录(MP4,MP3等用户上传的数据,如果没有可以不写)
location /media {
alias /home/ubuntu/....; #你的media文件路径
}
# 静态文件目录(js,css等)
location /static {
alias /home/ubuntu/...; #你的static文件路径
}
# 项目文件路径
location / {
uwsgi_pass 127.0.0.1:8000; #这里与uwsgi一致
include /etc/nginx/uwsgi_params;
uwsgi_read_timeout 15;
# try_files $uri $uri/ =404; # 将这行注释掉
}
}
启动服务
重启Nginx
# service nginx restart
# netstat -ntlp 可以查看网络状态
进入django项目文件目录下即uwsgi.ini同级目录下输入
$ sudo uwsgi --ini uwsgi.ini
到此完结撒花~
浏览器输入公网IP尝试访问,出问题了找百度/ Google / Stackoverflow / Github
pillow包也报错了,有空再记。
其实还没完成,后续再记录。
Ubuntu18.04部署Django
1747

被折叠的 条评论
为什么被折叠?



