记一次django+uwsgi aliyun环境搭建

主要的安装流程参考原文地址:https://blog.csdn.net/xing851483876/article/details/84306953

使用XShell工具 上传和下载文件 安装

yum -y install lrzsz
或者
apt install lrzsz

如果rz上传失败请尝试

$ rz -are --o-sync

1、虚拟环境(virtualenv)的安装

1、安装virtualenv

sudo pip install virtualenv
sudo pip install virtualenvwrapper #安装虚拟环境管理工具

2、在home下创建虚拟环境安装目录

mkdir .virtualenvs

3、为virtualenv配置环境变量,打开.bashrc文件

sudo vim ~/.bashrc
在末尾添加两行代码
export WORKON_HOME=$HOME/.virtualenvs  # 所有虚拟环境存储的目录
source /usr/local/bin/virtualenvwrapper.sh

使配置生效

source ~/.bashrc

如果有Python2 Python3两个环境请加入环境变量

if [ -f /usr/local/bin/virtualenvwrapper.sh ]; then

       export WORKON_HOME=$HOME/.virtualenvs

       export VIRTUALENVWRAPPER_PYTHON=/usr/bin/python3

       source /usr/local/bin/virtualenvwrapper.sh

fi

如果遇到" command not found: shopt "的 "~/.bashrc" 配置问题 说明使用的是zsh shell
将所需配置修改写入~/.zshrc
执行 source ~/.zshrc
或者zsh切换bash

chsh -s /bin/bash

bash切换zsh

chsh -s /bin/zsh

4、创建虚拟环境,默认命令创建的是python2的虚拟环境,指定创建python3.6的虚拟环境可以使用以下命令

mkvirtualenv -p /usr/bin/python3.6 XX #XX是虚拟环境的名字,创建python3.5的虚拟环境

其他命令:
workon xx #进入虚拟环境XX
deactivate #退出虚拟环境

2、在虚拟环境中安装相应的工具包

我们在本地写django项目肯定是安装了一堆相应的包,需要把他们移植到阿里云上。首先在本地ubuntu进入虚拟环境,在项目根目录下,执行以下命令收集安装的包,就是生成一个包的清单文件plist.txt。

pip freeze > requirment.txt

然后用xftp把这个requirment.txt文件上传到阿里云项目的根目录,然后进入虚拟环境test(test是我新建的虚拟环境的名字)

workon test    #进入虚拟环境test
 
cd到plist.txt所在目录
pip install -r requirment.txt  #安装txt文件上的包

3、Mysql数据库的安装和数据的迁移
安装Mysql:输入以下命令,安装过程会设置密码,设置成和原来本地一样的,就不用在setting中修改了。

sudo apt-get update
sudo apt-get install mysql-server 
sudo apt-get install mysql-client

创建数据库:先登录数据库, 然后创建数据库v1,数据库名字也创建成和原来本地一样的,我的叫v1。

create database v1;

数据的迁移:把本地数据库中的数据复制到阿里云上的数据库中。先在本地生成备份文件,v1是要备份的数据库,v1.sql是生成的备份文件。然后用Xftp把v1.sql文件上传到阿里云。

mysqldump -u root -p v1 >v1.sql

数据还原:阿里云终端 cd到v1.sql所在目录,输入以下命令

mysql -u root -p v1<v1.sql

mysql配置:找到mysqld.cnf文件注释掉bind-address这一行

/etc/mysql/mysql.conf.d/mysqld.cnf   #配置文件路径
 
#bind-address       = 127.0.0.1   #注释掉这一行

4、修改django的setting文件:

DEBUG = False
ALLOW_HOSTS=['XXXXXX'] #改成阿里云的公网IP

USWGI配置
三、nginx、uWSGI的安装

在安装前先了解下这几个是什么东西:WSGI、uWSGI、nginx。

WSGI:PythonWeb服务器网关接口(Python Web Server Gateway Interface),这是一种协议规范,用于规范web server(比如uWSGI)和web application(Flask、Django等)之间的通信方式。这种协议其实是将我们和更加底层的HTTP、TCP等协议分隔开来,使我们在开发的时候可以不用自己去实现这些协议的处理,只关注于更高层次的逻辑处理,实现面向对象的编程。

uWSGI:uWSGI是一个Web服务器,它实现了WSGI协议、uwsgi、http等协议。它本身可以作为一个服务器单独使用,但是也可以和nginx组合使用。一般Django部署都是用的nginx+uWSGI,可以理解为这种组合性能更优。

nginx:这是一个高性能的web服务器/反向代理,类似Apache。什么叫反向代理,客户端通过一个代理去访问服务器,这样的代理叫正向代理;同样的服务器前加一个代理和客户端通信,这样的代理叫反向代理。nginx就是用来放在uWSGI前做反向代理。

image.png

我们在本地开发的时候没有安装过以上服务器,但是也可以python manage.py runserver运行项目,那是因为Django等框架自带了WSGI服务器,性能不强,可以用于调试。
转自:https://blog.csdn.net/xing851483876/article/details/84306953

nginx安装:

sudo apt-get update
sudo apt-get install nginx

安装成功后,用浏览器访问你的阿里云IP地址,可以看到以下提示 :
nginx常用命令:

service nginx start   #启动
service nginx stop    #停止
service nginx reload  #重启

nginx配置:打开配置文件default,路径/etc/nginx/sites-available/default,设置以下内容。一个是server_name后面换成你的阿里云公网IP,有的文章说不换也行。关键是下面2个location,第一个location是设置的和uWSGI的关联。第二个location /static是设置的静态文件的路径。如果你的项目还有media文件夹,那还要加一个location /media,把路径设置上。注意:location 和alias后面有空格。

server_name 47.106.84.245;
        
        location / {
        # First attempt to serve request as file, then
        # as directory, then fall back to displaying a 404.
        # try_files $uri $uri/ =404;
        include  uwsgi_params;
                uwsgi_pass  127.0.0.1:8000;  
    }
        location /static {
               alias /home/myweb/static;
}

上面nginx配置静态文件有一个问题,就是上面的目录/root/xxx/xxx/static只是我们自己的静态文件的目录,你登录admin后发现admin页面的样式都丢失了。因为django自带的admin的静态文件路径没有导入。所以就需要新建一个文件夹,我的是/root/xxx/xxx/nginx/static,然后执行命令把整个项目的所有静态文件都收集到这个目录下,再修改下上面的配置。
第一步:新建文件夹 /root/xxx/xxx/nginx/static
第二步:修改setting.py文件,增加STATIC_ROOT

STATIC_ROOT='/home/myweb/nginx/static/'    #添加收集静态文件的目录
STATIC_URL = '/static/'
STATICFILES_DIRS=(
os.path.join(BASE_DIR,'static'),   

第三步:执行以下代码收集静态文件

python manage.py collectstatic

第四步:修改nginx的配置

 location /static {
               alias /root/xxx/xxx/nginx/static;
}

uWSGI安装:

这个是安装在虚拟环境中,先workon test进入虚拟环境,安装uWSGI前需要先安装依赖,输入以下命令完成安装

apt-get install build-essential python
apt-get install python-dev
pip install uwsgi

这里遇到问题uwsgi安装失败 异常栈信息忘了复制了 主要原因是python3还是pip3软连接出错
我是写在python3重新安装才发现的应该安装没问题可以直接设置软连接
Python3.6安装
安装python3.6可能使用的依赖
yum -y install zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel gdbm-devel db4-devel libpcap-devel xz-devel

下载python3.6编译安装


# wget https://www.python.org/ftp/python/3.6.5/Python-3.6.5.tgz
# tar -xzvf Python-3.6.5.tgz -C  /tmp
# cd  /tmp/Python-3.6.5/
把Python3.6安装到 /usr/local 目录
# ./configure --prefix=/usr/local
# make
# make install

python3.6程序的执行文件:/usr/local/bin/python3.6
python3.6应用程序目录:/usr/local/lib/python3.6
pip3的执行文件:/usr/local/bin/pip3.6


更改/usr/bin/python链接
# ln -s /usr/local/bin/python3.6 /usr/bin/python 此步骤忽略
# ln -s /usr/local/bin/python3.6 /usr/bin/python3
# ln -s /usr/local/bin/pip3.6   /usr/bin/pip3

配置uWSGI:在django项目的根目录下,新建两个文件,uwsgi.ini和run.log 。第一个是uWSGI的配置文件,第二个是日志记录文件。设置uwsgi.ini文件如下:

[uwsgi]
#使用nginx连接时使用,Django程序所在服务器地址
socket=127.0.0.1:9002
#项目目录
chdir=/root/xxx/xxx/xxx/xxx
#项目中wsgi.py文件的目录,相对于项目目录
wsgi-file=wsgi.py
# 进程数
processes=4
# 线程数
threads=2
# uwsgi服务器的角色
master=True
# 存放进程编号的文件
pidfile=uwsgi.pid
# 日志文件,因为uwsgi可以脱离终端在后台运行,日志看不见。我们以前的runserver是依赖终端的
daemonize=run.log

chdir是django项目所在目录,socket后面的地址是和上面nginx配置文件中的地址uwsgi_pass 127.0.0.1:8000对应的,规定nginx和uWSGI之间的通信端口。daemonize就是日志文件的路径。disable-logging = true 表示不记录正常信息,只记录错误信息。wsgi-file是你django项目根目录下项目同名目录中有一个wsgi.py文件的路径。pidfile是uwsgi.pid文件的路径,这个文件是uWSGI运行后自动生成的,里面记录了uWSGI的进程号,可以用来重启uWSGI。但是我的uwsgi.pid文件记录的进程号老是不对,用不了。
————————————————
版权声明:本文为CSDN博主「Mars_DD」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/xing851483876/article/details/84306953

uWSGI基本命令:

启动:uwsgi --ini uwsgi.ini
停止:uwsgi --stop uwsgi.pid
重启:uwsgi --reload uwsgi.pid

注:uwsgi启动命令在自己构建的虚拟环境中启动

然后再外部重启uwsgi服务 这样我们就可以看到启动的进程了

root      8754  0.0  1.8 131516 37820 ?        S    Sep22   0:03 /root/.virtualenvs/xx/bin/uwsgi --iniuwsgi.ini
root      8956  0.0  2.4 224040 49292 ?        Sl   Sep22   0:01 /root/.virtualenvs/xx/bin/uwsgi --iniuwsgi.ini
root      8957  0.0  2.2 221896 46744 ?        Sl   Sep22   0:00 /root/.virtualenvs/xx/bin/uwsgi --iniuwsgi.ini
root      8958  0.0  2.3 222400 47404 ?        Sl   Sep22   0:00 /root/.virtualenvs/xx/bin/uwsgi --iniuwsgi.ini
root      8959  0.0  1.5 205248 31108 ?        Sl   Sep22   0:00 /root/.virtualenvs/xx/bin/uwsgi --iniuwsgi.ini

通过外网访问阿里云地址就可以看到nginx代理成功

如果遇到mysql ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2)
参考https://blog.csdn.net/lmss82/article/details/4414178

 1.#ps -A|grep mysql
   显示类似:
  1829 ?        00:00:00 mysqld_safe
   1876 ?        00:00:31 mysqld
  2.#kill -9 1829
  3.#kill -9 1876
  4.#/etc/init.d/mysql restart
  5.#mysql -u root -p

uwsgi是运行的virtualenvs 虚拟环境中的程序如果启动在系统中如/user/local/bin是访问不到服务的所以要kill 掉错误的uwsgi进程重新启动虚拟环境中的uwsgi


image.png
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 151,688评论 1 330
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 64,559评论 1 273
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 101,749评论 0 226
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 42,581评论 0 191
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 50,741评论 3 271
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 39,684评论 1 192
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,122评论 2 292
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 29,847评论 0 182
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 33,441评论 0 228
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 29,939评论 2 232
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 31,333评论 1 242
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 27,783评论 2 236
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 32,275评论 3 220
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 25,830评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,444评论 0 180
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 34,553评论 2 249
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 34,618评论 2 249

推荐阅读更多精彩内容