1、安装ubuntu
经过测试网易云下载速度最快,地址如下:
2、安装ubuntu
文章后面14节提到了要设置账号密码信息,记得修改
3、更新 ubuntu 软件源,推荐清华镜像站,写的很清楚
4、更新可安装软件包,及更新已安装软件版本
sudo apt-get update
sudo apt-get upgrade
5、安装 net-tools
系统默认没有安装net-tools,因此无法使用ifconfig,需要手动安装
sudo apt install net-tools
6、修改固定IP地址
这里可以参考我之前记录的过程,时隔多年,依然是一把过
7、安装ssh
如果安装的时候忽略了ssh的安装,这里需要再安装下,很简单
sudo apt install ssh
8、测试ssh
ssh username@192.168.31.250
username 需替换成安装系统时的用户名,后面的IP地址已ifconfig查到的为准
回车后输入密码即可登录系统
* 阿里云等服务器需开防火墙端口。
9、测试 SFTP
服务器远程管理,windows用xshell secureCRT,在macos环境提供一个利器transmit,不用任何设置,即可上传成功。
10、修改 pip3 源
cd
mkdir .pip
vim ~/.pip/pip.conf
# 将下列内容拷贝到文件中
[global]
index-url=https://mirrors.aliyun.com/pypi/simple/
[install]
trusted-host=mirrors.aliyun.com
========== 至此 ubuntu 部分安装完毕 ==========
10、安装、测试nginx
sudo apt install nginx
安装后用用浏览器访问 xxx.xxx.xxx.xxx即可访问,看到下方图片即表示安装成功,nginx主要为开机启动且提供不间断网络访问的伺服程序
11、安装redis
系统实时运行的数据是放在redis里的,方便快速计算,反馈结果,命令如下:
sudo apt install redis
安装秒完成,测试通过
12、安装、测试 django
# 安装django
pip3 install django
# 测试django
cd
django-admin startproject django_test
cd django_test
python3 manage.py runserver
如果出现了下面图片即表示安装成功。
*这时还不能网络访问,因为没有打开允许IP地址的选项,因为是linux没有界面,本机也无法看到状态,具体修改内容另发文再记录。
13、安装、测试 uwsgi
# 安装uwsgi
sudo apt install uwsgi
uwsgi --http :8000 --wsgi-file ./django-admin/wsgi.py
如果没有报错,就应该能访问到刚才和django默认页面一样的页面了
* 我在自己装的服务器上安装uwsgi就会出现打不开,找不到路径的情况,在阿里云的服务器上就有一个较长时间的编译过程,我把图截下来了
在我自己的设备上则是下面的界面,我还特意卸载和重安装了,但没有 building wheel for uwsgi的部分。
最后找了一些文章通过源码安装解决了这个问题,不知道会不会下次还遇到这样的问题,大家可以自行搜索学习,这个问题以后装机再考虑解决吧
========== 至此 程序安装完成 ==========
14、 nginx + uwsgi + django 联调
这个问题困扰了我很久,因为一直在学习编程序就没太重视,后来程序编辑的差不多了,看了很多文章说这块,总是感觉很困难,这里调试我的一个应用,终于成功了,耗时10小时,在这里记录下。
14.1、NGINX
nginx是这里最简单的部分,nginx目录如下,默认系统安装好的时候调用的是default的解释文件,
/etc/nginx/sites-available/default
这个文件里只有基本配置,如果正常上线部署应该是在
/etc/nginx/conf.d目录里新建配置文件,默认的则失效(个人理解没有验证)
因此default是最简配置,方便学习,我把default里的所有注释去掉,内容如下:
server {
listen 80 default_server;
listen [::]:80 default_server;
root /var/www/html;
index index.html index.htm index.nginx-debian.html;
# server_name 127.0.0.1 202.xxx.xxx.xxx;
location / {
try_files $uri $uri/ =404;
# include /etc/nginx/uwsgi_params;
# uwsgi_pass 127.0.0.1:8010;
}
}
这里我解释下各个模块的意思:
server:核心模块,相当于一个虚拟主机,因此可以有多个虚拟主机
listen:为监听的端口,上面为 ipv4 的端口,下面为ipv6的端口
root:为访问时提供的目录,这个目录里有nginx的默认页面
index:为接受访问的文件名(这个没有验证,也没有改)
server_name:我看说明说写127.0.0.1 以及外网IP地址,反正是没报错,这块是后来修改的
location:是执行的一些参数,默认体用的是404的访问处理
加# 注释的三句是我后来添加的,IP地址就不说了
include /etc/nginx/uwsgi_params; 这句话说明要加载nginx自带的uwsgi的解释器,装NGINX的时候就有,就在/etc/nginx/目录下,相当于开启了nginx转发到uwsgi的解释通道;
uwsgi_pass 127.0.0.1:8010 是uwsgi内网监听的接口,uwsgi通过ini方式启动的时候,端口只为内部服务,这时nginx相当于把80接口的对UWSGI的访问全转发到127.0.0.1:8010,这个地址上,实现了对于python程序的解释转发;
把 # 注释的部分放开就相当于nginx调试完毕,这时再访问80端口则出现下面的页面:
这个表示nginx启动了,但是转发请求被拒绝或没有响应了,因为uwsgi还没有配置,这就是正确的反馈。
14.2、uwsgi
这块就是坑了我将近10个小时的地方,我分别在根目录下将我开发的软件和一个django的默认初识环境放在一起测试
django_test 是初始应用
api_2 是我编写的应用
1、在两个目录下执行启动命令均可看到界面
python3 manage.py runserver 0.0.0.0:8000
2、使用uwsgi启动
uwsgi --http :8020 -w api_2.wsgi
uwsgi --http :8020 -w django_test.wsgi
也是June可启用,只是api_2失去了对静态文件的解析
3、使用 ini 方式启动
这里是卡了最长的时间,django_test 一下就成功了,配置如下:
[uwsgi]
socket = :8010
chdir = /root/django_test
module = django_test.wsgi
master = true
pythonpath = /usr/local/lib/python3.8/dist-packagese
processes = 3
buffer-size = 65536
vacuum = true
socket:是监听内部从nginx发过来的端口请求,如果是从外网访问会显示500错误,我卡这里好久,明明收到了请求,为啥不返回信息呢,后来看了很多文章才发现,之前的启动命令 uwsgi --http :8020 -w api_2.wsgi 是响应http协议对8020端口的访问请求,ini文件是socket = :8010,只响应接口的请求,所以不对外网访问,这个事终于明白了;
chdir:启动路径,因为django里的项目名和默认应用名称是一样的,因此chdir截止在项目名称
module:是模块名称,也是项目启动的uwsgi.py文件,所以是项目名称+启动文件的形式;
pythonpath:是查了很多文章说同时安装2.x和3.x会冲突,就写了个路径;
其他素材都可以查到就不说了,启动 uwsgi --ini django_test.ini
成功启动!!!
但是同样的配置放在api_2上就不行了
无论怎么调模块都不行,踩的坑包括路径有问题,直接指定wsgi.py的启动绝对路径,最终实际上只改了一句话,因为我编写的应用里有很多应用名称,所以要标明,有的文章提了这个问题,但因为各种场景不理解,没有想到,最终终于成功了。
[uwsgi]
socket = :8010
chdir = /root/api_2
module = api_2.wsgi:application
master = true
pythonpath = /usr/local/lib/python3.8/dist-packagese
processes = 3
buffer-size = 65536
vacuum = true
就是这句:module = api_2.wsgi:application
至此 uwsgi --ini api.ini 一键启动,访问成功