ubuntu22.04部署django+uwsgi+nginx上线站点

系统默认是3.10的python版本,不支持pip,需要先安装pip

常用的命令

pip install somepackage -i https://pypi.doubanio.com/simple/ #pip安装使用豆瓣源比较快

sudo chown ubuntu:ubuntu /opt/wwwroot/mysite -R #可更改文件夹对应的用户,避免总是提示无权限被禁止

项目默认部署在/opt/wwwroot下

1,安装虚拟环境,正常来说在虚拟环境下安装不需要使用sudo,直接使用pip来安装即可

pip3 install virtualenv
cd /opt/ #切换到目录
virtualenv pyweb #建立虚拟目录及文件
#######这里可能遇到WARNING: The script virtualenv is installed in '/home/huake/.local/bin' which is not on PATH.
#######Consider adding this directory to PATH or, if you prefer to suppress this warning, use --no-warn-script-location.
export PATH=$PATH:/home/huake/.local/bin
source  ~/.bashrc
source /opt/pyweb/bin/activate #激活虚拟环境
pip3 install django==4.2 #安装django
pip3 install uwsgi #安装uwsgi

这里也可以直接新建目录,然后防止网站,不然系统目录有权限限制,还得手工修正

mkdir wwwroot

cd wwwroot

virtualenv pyweb

 2,设置uwsgi并启动服务

在manage.py同级建立一个uwsgi.ini文件,配置内容如下:

[uwsgi]
#使用 Nginx 连接时使用,Django程序所在服务器地址
socket=127.0.0.1:8000
#项目目录
chdir=/opt/wwwroot/mysite
#项目中wsgi.py文件的目录,相对于项目目录,就是和settings.py同级目录的那个文件夹
wsgi-file=mysite/wsgi.py
#方便结束进程
pidfile=uwsgi.pid
# 进程数
processes=1
# 指定依赖的虚拟环境, 路径到虚拟环境的名字即可(可以命令查看 which python)
virtualenv=/opt/pyweb/
#uwsgi启动及相关日志
daemonize=uwsgi.log

 如何启动及结束进程

uwsgi --ini wusgi.ini #启动服务
uwsgi --stop wusgi.pid #结束服务
ps aux | grep uwsgi #查看进程
kill -INT 1234 #结束进程
kill -9 1234 #强制关闭

3,安装mariadb数据库

sudo apt-get install mariadb-server #安装数据库
service mysql status #查看是否运行
sudo service mysql restart #重启数据库
sudo systemctl enable mariadb #设置开机启动

#对于ubuntu系统安装
sudo apt-get update
sudo apt-get install pkg-config
sudo apt-get install libmysqlclient-dev
pip3 install mysqlclient

 使用脚本设置,提高安全性

sudo mysql_secure_installation

登录数据库及相关常用命令

mysql -u root -p

推荐的方式就是创建一个管理员用户,可以访问所有的数据库:

GRANT ALL PRIVILEGES ON *.* TO 'administrator'@'%' IDENTIFIED BY 'very_strong_password';
FLUSH PRIVILEGES;#更新权限

 如果需要远程连接MariaDB,修改配置文件:/etc/mysql/mariadb.conf.d/50-server.cnf

 创建数据库:

create database vipdatabase default charset utf8 collate utf8_general_ci; #创建数据库
create user 'vipuser'@'%' identified by '123456';#创建用户
flush privileges; #刷新
grant all privileges on vipdatabase.* to vipuser@'%'; #授权访问数据库
flush privileges; #刷新
delete from user where Host='localhost' and User=""; #删除某用户

use mysql;#进入mysql

show tables;

desc user;

select Host,User,Password from user;

4,安装nginx

sudo apt-get install nginx -y

默认配置文件路径:/etc/nginx/nginx.conf

默认日志路径:/var/log/nginx/error.log

       /var/log/nginx/access.log

 常用命令:

systemctl start nginx#启动nginx
systemctl stop nginx#停止nginx
systemctl restart nginx#重启nginx
systemctl enable nginx#开机启动
sudo nginx -t   # 检查Nginx配置文件语法是否正确
sudo systemctl reload nginx   # 重新加载Nginx配置

 nginx配置文件内容如:

user www-data;
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;
        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;
        server {
                listen 80;
                server_name test.hahado.cn;
        location / {
                # 使用 uwsgi_pass 转发基于 uwsgi 协议的一个请求
                uwsgi_pass 127.0.0.1:8000; # 与 uwsgi 配置一样
                include /etc/nginx/uwsgi_params;
        }
        location /static {
                #这个就是真实的静态文件路径
                alias /opt/wwwroot/mysite/static/;
        }
    }

        ##
        # SSL Settings
        ##

        ssl_protocols TLSv1 TLSv1.1 TLSv1.2 TLSv1.3; # 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;



        include /etc/nginx/conf.d/*.conf;
        include /etc/nginx/sites-enabled/*;
}

 

关于线上部署admin后台样式没有生效的问题:

方法一:

1、在settings.py尾部:

STATIC_ROOT  = os.path.join(BASE_DIR, 'static')#指定样式收集目录
#或
STATIC_ROOT = '/www/mysite/mysite/static'  #指定样式收集目录

2、收集CSS样式,在终端输入:

python manage.py collectstatic

运行这个命令之后,就会自动把后台CSS样式收集到/static/目录下。刷新页面就能恢复样式!

注意:收集或复制前一定先在settings里配置并指定STATIC_ROOT路径,static/ 个目录可以自己定。指定的时候一定要在settings.py和nginx里指定新的路径。不然无法生效。

具体可参考:https://www.django.cn/article/show-4.html#yangsi

 

 

posted @ 2024-03-19 09:36  super_ip  阅读(147)  评论(0编辑  收藏  举报