Ubuntu16.04.6 稳定版部署 Django+uWSGI+nginx

2023年 7月 10日 19.0k 0

Ubuntu 是比较受欢迎的 Liunx 系统,广泛应用有服务器领域,同时各种 GUI 版本层出不穷。本文将搭建一个 Ubuntu 网站服务器,部署 Django+uWSGI+nginx 。本文在 16.04.6 稳定版下通过,其他版本应该也一样。

Ubuntu

选择下载一个自己熟悉的 Ubuntu 版本,desktop 字样代表有界面。

http://mirrors.aliyun.com/centos/7/isos/x86_64/
## ubuntuOS ==> ubuntu-16.04.6-desktop-amd64.iso
https://mirrors.aliyun.com/ubuntu-releases/16.04.6/

注:可安装在 Virtualbox 等虚拟,虚拟机网络类型选择桥接,可以进行访问。

准备

为了方便起见,躲过权限相关的坑,直接使用 root 账号进行操作。

# 创建root账户
sudo passwd root
# 使用 root
su root
# 升级工具
apt update
# 遇到 lock 的执行一下
sudo rm /var/lib/dpkg/lock

SSH

开启 SSH 可远程管理,使用 putty、iTerm 或者系统自带的 shell 工具进行操作。

# ssh 开启
# 默认只安装ssh-client服务
dpkg -l | grep ssh

# 安装ssh-server服务
sudo apt-get install openssh-server
dpkg -l | grep ssh
# 然后确认ssh-server是否启动了
ps -e | grep ssh
# 启动 ssh
sudo /etc/init.d/ssh start
#  也可以用以下命令启动
sudo service ssh start

SSH 相关的配置:

#  配置相关: 支持远程访问
sudo nano /etc/ssh/sshd_config
# 在这里可以定义SSH的服务端口,默认端口是22,你可以自己定义成其他端口号,如222
# 把配置文件中的”PermitRootLogin without-password”加一个”#”号,把它注释掉
# 把配置文件中的”PermitRootLogin prohibit-password”加一个”#”号,把它注释掉
# 增加一句
PermitRootLogin yes
# 然后重启SSH服务:
sudo /etc/init.d/ssh restart
sudo service ssh restart
# nano
完成后按ctrl+x退出,按y保存

网络配置:

# 查看网络信息
ip addr
ifconfig
# 修改 IP 最后 ens32 为网卡名称
nano /etc/sysconfig/network-scripts/ifcfg-ens32
# or
nano /etc/network/interfaces
# 修改以下
bootproto=static
onboot=yes
# 在最后加上几行,IP地址、子网掩码、网关、dns服务器
IPADDR=192.168.1.160
NETMASK=255.255.255.0
GATEWAY=192.168.1.1
DNS1=114.114.114.114
DNS2=8.8.8.8
# 重启网络服务
systemctl restart network
service network-manager restart
/etc/init.d/networking restart

SSH 使用:

# 在终端输入,对应域名
ssh root@192.168.1.160
# 连接成功后输入密码即可登录成功

Miniconda

Miniconda 可实现 python 版本的虚拟环境。首先,进行安装:

# 下载 miniconda, 官网 https://docs.conda.io/en/latest/miniconda.html
wget https://mirrors.tuna.tsinghua.edu.cn/anaconda/miniconda/Miniconda3-latest-Linux-x86_64.sh
# 执行安装
sh Miniconda3-latest-Linux-x86_64.sh
# 安装过程中提示选择安装目录,推荐如下目录
/home/miniconda3
# 异常处理
eval "$(/home/miniconda3/bin/conda shell.bash hook)"
conda init

miniconda 相关配置:

# 写入环境变量
sudo nano /etc/profile
# 增加到 尾部
export PATH="/home/miniconda3/bin:$PATH"

# 修改源
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge/
conda config --set show_channel_urls yes

# 创建环境并安装包
conda create -n py37 python=3.7 django uwsgi
# 激活环境
conda activate py37
# OR
source activate py37
# 退出环境
conda deactivate

# 安装 python 包
conda activate py37
conda install django uwsgi
# or
pip install django uwsgi -i https://pypi.tuna.tsinghua.edu.cn/simple

# conda 如果用安装找不到的包,可用以下命令
conda install -c conda-forge 

一般做数据处理分析时可能需要以下包:

django pandas xlrd openpyxl xlsxwriter
xlwings premailer requests matplotlib
seaborn drymail pyecharts arrow

uwsgi 安装配置

需要进入相应环境下进行安装。

conda install uwsgi
# or
pip install uwsgi

测试:

# 创建以下内容的 test.py 测试文件
def application(env, start_response):
    start_response('200 OK', [('Content-Type','text/html')])
    return ["Hello World"]

执行以下命令进行测试,在浏览器中按端口打开

uwsgi --http :8000 --wsgi-file test.py
# 最后在项目根目录下运行 uwsgi 命令,载入配置文件
uwsgi --ini uwsgi.ini

文件配置,在项目根目录中 增加 uwsgi.ini 文件,内容为:

# uwsgi.ini
[uwsgi]

# 与nginx通信
socket = :8000
# socket = /home/www/uwsgi.sock
# 让uwsgi作为单独的web-server,这里注释掉
# http = :8888

# django项目根目录
# 根据实际情况改写成自己django项目的路径
chdir = /home/www/gairuo

# 本项指示uwsgi.py文件的位置,其位于Django工程目录下有个与
# 工程名同名的子文件夹内(设置方式为:文件夹名.wsgi)
# module = mysite_django
# web 为 app 名
wsgi-file = web/wsgi.py
# 修改 py 代码后自动重启uwsgi
py-autoreload=1

buffer-size = 65536
max-requests = 6000
chmod-socket = 664
processes = 4
threads = 2
master = True
pidfile = uwsgi.pid
daemonize = uwsgi.log
# uwsgi --stop uwsgi_stop.pid 

# 虚拟环境地址
virtualenv = /home/miniconda3/envs/py37

Nginx 安装配置

安装 Nginx:

# 准备,升级工具
apt update
# 安装
sudo apt install nginx
# 异常处理
# ps -A | grep apt
# sudo kill 2725
# sudo rm /var/lib/dpkg/lock

文件配置,在项目根目录中 增加 nginx.conf 文件,内容为:

server {
    listen         8888; 
    # server_name    ;
    charset UTF-8;
    access_log      /home/www/gairuo/nginx_access.log;
    error_log       /home/www/gairuo/nginx_error.log;
    client_max_body_size 75M;
    location / { 
        include uwsgi_params;
        uwsgi_pass 127.0.0.1:8000;
        uwsgi_read_timeout 20;
    }
    location /static/admin {
        alias /home/miniconda3/envs/py37/lib/python3.7/site-packages/django/contrib/admin/static/admin/;
     }
    location /static {
        # expires 30d;
        # autoindex on; 
        # root /home/www/gairuo/static/;
        # add_header Cache-Control private;
        alias /home/www/gairuo/static/;
     }
 }

相关配置:

# 链接配置让它生效
sudo nano /etc/nginx/nginx.conf
# http {} 内 include 旁边加
include /home/www/gairuo/nginx.conf;
# 或者建立软链接(推荐)
sudo ln -s /home/www/gairuo/nginx.conf /etc/nginx/sites-enabled/gairuo_nginx.conf
# 重启
sudo service nginx start
# or
sudo /etc/init.d/nginx restart

uwsgi --ini /home/www/gairuo/uwsgi.ini

# 默认站点处理-关闭
cd /etc/nginx/sites-enabled
sudo nano default # 全注销
sudo service nginx restart

# 如果出现 400 可看 uwsgi.log
# kill 占用的端口
sudo fuser -k 8002/tcp
# 查看端口情况
sudo netstat -lnp
sudo netstat -lnp | grep 0.0.0.0:80
lsof -i:8888

# 关闭使用这个端口的程序,使用kill + 对应的pid
kill -9 PID号

如果上传文件 5xx 方便期间可进行如下修改(建议进行安全配置): /etc/nginx/nginx.conf 中修改成 user root;

开机启动服务

需要自动启动的有: - ssh (上文已设置) - nginx - uwsgi

手动启动 uwsgi:

conda activate py37
uwsgi --ini /home/www/gairuo/uwsgi.ini
# 或者直接执行
/home/miniconda3/envs/py37/bin/uwsgi --ini /home/www/gairuo/uwsgi.ini

配置开机 reboot 自动启动:

sudo nano /etc/rc.local
# 在 exit 0 前加入
/home/miniconda3/envs/py37/bin/uwsgi --ini /home/www/gairuo/uwsgi.ini
# reboot 测试下,就会生效
# 设置开机启动 nginx ? 待补充
systemctl enable nginx
reboot

其他

解决编码问题:

sudo nano ~/.bashrc
# 增加一行
export LC_ALL=en_US.UTF-8
source ~/.bashrc

ubuntu清理垃圾命令:

sudo apt-get autoclean
sudo apt-get clean
sudo apt-get autoremove
dpkg --get-selections|grep linux //寻找多余的内核包
dpkg -l |grep ^rc|awk '{print $2}' |sudo xargs dpkg -P//清理配置
# 删除指定文件
rm -rf /uwsgi.log

相关文章

服务器端口转发,带你了解服务器端口转发
服务器开放端口,服务器开放端口的步骤
产品推荐:7月受欢迎AI容器镜像来了,有Qwen系列大模型镜像
如何使用 WinGet 下载 Microsoft Store 应用
百度搜索:蓝易云 – 熟悉ubuntu apt-get命令详解
百度搜索:蓝易云 – 域名解析成功但ping不通解决方案

发布评论