最近被django项目部署搞得头疼,查阅了一些相关的资料,终于解决这个问题,因此在这里记录一下,加深印象。
**
- 服务器环境:Ubuntu 18.04.1+Mysql 5.7.29+Python 3.6.9
**
步骤一:布置环境
- mysql安装(sudo apt-get update):
1.1命令安装
(1)sudo apt-get install mysql-server
(2)sudo apt-get install mysql-client
(3)sudo apt-get install libmysqlclient-dev
1.2使用
(1)启动服务
sudo /etc/init.d/mysql start
可通过systemctl status mysql.service检查mysql服务状态
(2)查看可登录的用户名和密码(安装过程如果设置可跳过,我安装的时候没有提示设置账号和密码,查阅资料后解决)
sudo cat /etc/mysql/debian.cnf
(3)根据上面的密码登录
mysql -u -p
(4)MySQL中 password字段已从mysql.user表中删除,新的字段名是“authenticalion_string”.先检查一下root 的 plugin字段是否为mysql_native_password
use mysql;
select user, plugin from user;
然后
update user set plugin=‘mysql_native_password’ where user=‘root’;
(5)修改密码
update user set authentication_string=password(‘需要设置的密码’) where user=‘root’;
flush privileges; #刷新mysql权限
(6)重新登录
(7)可视化界面安装(workbench)
sudo apt-get install mysql-workbench
(8)workbench启动命令:mysql-workbench
步骤二.python安装
- Ubuntu默认安装2.7版本通过设置,可以将默认环境变更为3.6:
sudo update-alternatives --install /usr/bin/python python /usr/bin/python3 150
改回python2sudo update-alternatives --config python - 设置好Python后,再使用Python默认就变成python3,但是这个时候,pip会出问题,可以重新装pip
sudo python3 -m pip uninstall pip && sudo apt install python3-pip --reinstall - 安装虚拟环境
3.1virtualenv是一个python工具,可以用apt-get、pip、easy-install安装
sudo pip install virtualenv
sudo pip install virtualenvwrapper
3.2配置virtualenvwrapper
默认的virtualenvwrapper安装在/usr/locak/bin 目录下,需要运行virtualenvwrapper.sh文件配置如下:
创建目录存放虚拟环境
mkdir $HOME/.virtualenvs
打开并在~/.bashrc中添加行:
export WORKON_HOME=$HOME/.virtualenvs
source /usr/local/bin/virtualenvwrapper.sh
运行:
source ~/.bashrc
- 虚拟环境
创建:mkvirtualenv 环境变量名
也可以创建的时候指定Python版本,例如:mkvirtualenv --python=/usr/local/,上面如果将Python3设置成了Python3,默认就是Python3的虚拟环境
步骤三.uwsgi安装
- pip install uwsgi
在项目文件加下新建uwsgi.ini文件,内容如下:
[uwsgi]
#如果单独使用uwsgi来部署Django项目时,就用这一行。
#http=127.0.0.1:8000
#如果使用nginx+uwsgi来部署Django项目时,就用这行。其中,8000端口用来跟nginx通信。也要在阿里云防火墙中添加8000端口。
socket=0.0.0.0:8000
#你项目的完整路径。(如何查看,cd进入到目录下->pwd查看完整路径)
chdir=路径
wsgi-file=DegreeInformation/wsgi.py
#给socket文件赋权限,这里不用管。
chmod-socket=664
#启用主线程。
master=true
#指定启动的进程数
processes=4
#指定启动的线程数
threads=2
#指定日志文件(会自动创建)。这个很重要,如果uwsgi出现错误,可以通过日志文件来查错。
logto=uwsgi.log
#指定进程号文件(会自动创建)。这个也很重要,如果要重启和关闭uwsgi,则需要这个文件,里面记录了进程号。
pidfile=uwsgi.pid
#指定wsgi文件。在与settings.py同级目录中会有一个wsgi.py文件。
module=MyProject.wsgi:application
virtualenv=/home/donglang/.virtualenvs/degreeinfoenv #python环境
- uwsgi启动和关闭
首先进入python环境,然后进入到uwsgi.ini文件所在的目录下
启动:uwsgi --ini uwsgi.ini 查看是否开启:ps aux|grep uwsgi
关闭:uwsgi --stop uwsgi.pid
重启:uwsgi --reload uwsgi.pid
python环境创建成功之后,在django的settings.py里面讲Debug关闭,并添加STATIC_ROOT=os.path.join(BASE_DIR,‘static’),之后运行python manage.py collectstatic 将网站所需的静态资源收集到一起。
步骤四.nginx安装
- 首先查看linux系统
cat /proc/version
这表示Ubantu系统 - 装nginx
sudo apt-get install nginx
过程会让选一个Y同意占用内存。 - 如果出现无法定位nginx包,进行如下操作:
sudo apt-get update - 更新完成之后,安装nginx
sudo apt-get install nginx - Ubuntu安装之后的文件结构大致为:
1)所有的配置文件都在/etc/nginx下,并且每个虚拟主机已经安排在了/etc/nginx/sites-available下
2)程序文件在/usr/sbin/nginx
3)日志放在了/var/log/nginx中
4)并已经在/etc/init.d/下创建了启动脚本nginx
5)默认的虚拟主机的目录设置在了/var/www/nginx-default (有的版本默认的虚拟主机的目录设置在了/var/www, 请参考/etc/nginx/sites-available里的配置)
Nginx.conf文件内容如下:(cd /etc/nginx->ls->sudo vi nginx.conf)
user root;
worker_processes auto;
pid /run/nginx.pid;
include /etc/nginx/modules-enabled/*.conf;
events {
worker_connections 768;
multi_accept on;
}
http {
# Basic Settings
##
sendfile on;
tcp_nopush on;
tcp_nodelay on;
keepalive_timeout 65;
types_hash_max_size 2048;
# server_tokens off;
# server_names_hash_bucket_size 64;
# server_name_in_redirect off;
include /etc/nginx/mime.types;
default_type application/octet-stream;
##
# SSL Settings
##
ssl_protocols TLSv1 TLSv1.1 TLSv1.2; # Dropping SSLv3, ref: POODLE
ssl_prefer_server_ciphers on;
##
# Logging Settings
##
access_log /var/log/nginx/access.log;
error_log /var/log/nginx/error.log;
##
# Gzip Settings
##
gzip on;
server {
listen 800; #这个端口用来监听浏览器的请求。(默认为80端口)
server_name 0.0.0.0; # 不用管,如果有域名可以填上域名。
# charset UTF-8;
#日志文件。如果nginx出现问题,都可以通过日志文件来查错。
access_log /var/log/nginx/MyProject_access.log;
error_log /var/log/nginx/MyProject_error.log;
client_max_body_size 75M;
location / {
include uwsgi_params; # 使用uwsgi服务器。
uwsgi_pass 0.0.0.0:8000; # 把浏览器发来的请求转发到8000端口,而uwsgi也正在监听8000端口,所以就实现了nginx与uwsgi的通信。
#uwsgi_read_timeout 30; #链接超时时间
}
location /static{ # 处理静态文件,处理链接是以/static/开头的请求。即:如果是静态文件,就不用发给uwsgi了,nginx自己处理。
alias /home/xxx/static/; # 项目静态文件的绝对路径。即:告诉nginx应该去哪里找静态文件。后面会介绍。
}
}
# gzip_vary on;
# gzip_proxied any;
# gzip_comp_level 6;
# gzip_buffers 16 8k;
# gzip_http_version 1.1;
# gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript;
##
# Virtual Host Configs
##
include /etc/nginx/conf.d/*.conf;
include /etc/nginx/sites-enabled/*;
}
#mail {
# # See sample authentication script at:
# # http://wiki.nginx.org/ImapAuthenticateWithApachePhpScript
#
# # auth_http localhost/auth.php;
# # pop3_capabilities "TOP" "USER";
# # imap_capabilities "IMAP4rev1" "UIDPLUS";
#
# server {
# listen localhost:110;
# protocol pop3;
# proxy on;
# }
#
# server {
# listen localhost:143;
# protocol imap;
# proxy on;
# }
#}
- nginx启动和关闭
Nginx目录: cd /etc/nginx
开启:service nginx start
关闭:service nginx stop
重启:service nginx restart
查看:ps -ef|grep nginx
退出:sudo nginx -s quit