不灭的焱

革命尚未成功,同志仍须努力下载JDK17

作者:Albert.Wen  添加时间:2022-03-12 20:49:50  修改时间:2024-04-23 11:11:11  分类:Python基础  编辑

官网:https://www.56yhz.com/

一、基础安装

1、安装 Git 2.31

CentOS 7 升级Git至最新的v2.x版本

2、安装 Python 3.9.10

(1) CentOS 7 编译安装 Python 3.9.10

(2) 永久设置pip3为国内镜像

3、安装 Node 14

CentOS 7 安装 nodejs v14.x

4、安装 SQLite 3.38  或 MySQL 5.7

CentOS 7 安装SQLite 3.38  【不管SQLite了,我们使用MySQL】

CentOS7 源码编译安装 MySQL 5.7

5、安装 前端资源

# 升级npm
npm install npm -g

# 安装yarn
npm install yarn -g

# 安装quasar
npm install @quasar/cli -g

# 安装cordova
npm install cordova -g

# 检查 Quasar 版本
quasar -v

6、下载 GreaterWMS 代码

cd /alidata/www
git clone https://gitee.com/Singosgu/GreaterWMS

7、安装 Python 依赖库

cd GreaterWMS
pip3 install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple

8、解决报错问题:PySQLite版本过低【不管SQLite了,我们使用MySQL】

django.db.utils.NotSupportedError: deterministic=True requires SQLite 3.8.3 or higher

9、启动后端,端口为 30006

(1) 设置开放防火墙端口:30006(后端),40006(前端)

firewall-cmd --permanent --add-port=30006/tcp
firewall-cmd --permanent --add-port=40006/tcp

# 重启防火墙(修改配置后要重启防火墙)
firewall-cmd --reload

(2) Django默认使用sqlite3作为数据库,这里需要改为MySQL数据库,在greaterwms/settings.py里面配置DATABASE:

vim greaterwms/settings.py

修改数据库配置:

DATABASES = {
    #'default': {
    #    'ENGINE': 'django.db.backends.sqlite3',
    #    'NAME': BASE_DIR / 'db.sqlite3',
    #}
    'default':{
         'ENGINE':'django.db.backends.mysql',
         'HOST':'127.0.0.1',
         'PORT':'3306',
         'NAME':'greater_wms',  # 数据库名
         'USER':'root',
         'PASSWORD':'wjb123456',
         'OPTIONS':{
             'init_command':"SET sql_mode='STRICT_TRANS_TABLES'"
         },
    }
}

创建好数据库:greater_wms

CREATE DATABASE IF NOT EXISTS `greater_wms` DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

参考:https://www.cnblogs.com/BlueSkyyj/p/7910957.html

另外,还需要修改 Django 连接MySQL的方式,安装依赖包

pip3 install PyMySQL

修改文件 ./greaterwms/__init__.py

vim ./greaterwms/__init__.py

在头部增加如下代码:

import pymysql
pymysql.install_as_MySQLdb()

(3) 启动后端

/usr/local/bin/daphne -p 30006 -b 0.0.0.0 greaterwms.asgi:application
# 现在打开浏览器,输入"0.0.0.0:30006",你会看到500错误,恭喜你,你已经可以正常部署接下来的事情了

# 回到GreaterWMS文件夹
Ctrl + C

# 数据库生成
python3 manage.py makemigrations

# 数据库迁移
python3 manage.py migrate

/usr/local/bin/daphne -p 30006 -b 0.0.0.0 greaterwms.asgi:application
# 现在打开浏览器,输入"127.0.0.1:30006",你会看到项目已经运行了

# 输入 "127.0.0.1:30006/myip", 你会得到你的内网IP,一定记住它 
# 回到GreaterWMS文件夹
Ctrl + C

10、编译 前端资源(注意:如果没有涉及到前端页面的调整,不需要执行这一步操作)

# 进入 templates 文件夹
cd /alidata/www/GreaterWMS/templates

# 更改yarn为国内源
yarn config set registry https://registry.npm.taobao.org/

# 单独设置electron国内源
npm config set electron_mirror https://npm.taobao.org/mirrors/electron/

# 等待Yarn安装完成,其实你也可以npm install ,就是会慢一点
/alidata/data/nodejs_repo/node_global_v14/bin/yarn install  

# 使用quasar命令启动前端页面
/alidata/data/nodejs_repo/node_global_v14/bin/quasar d

# 前端会向 "127.0.0.1:30006"发请求,在这里我们只是看下项目是不是可以运行
App dir........... /alidata/www/GreaterWMS/templates
    App URL........... http://localhost:8080
    Dev mode.......... spa
    Pkg quasar........ v1.16.0
    Pkg @quasar/app... v2.2.10
    Transpiled JS..... yes (Babel)

# 退回到templates文件夹
Ctrl + C

注意:

从2.0.19版本以后,优化了请求地址修改方式,直接修改templates/dist/spa/statics/baseurl.js,中的baseurl和wsurl,就可以成功更改前端请求地址,不再需要做下面的quasar build打包工作。

如果需要修改前端内容,则还需要修改templates/public/statics/baseurl.js中的baseurl和wsurl,然后重新使用quasar build进行打包

/alidata/data/nodejs_repo/node_global_v14/bin/quasar build

11、修改前端配置

vim templates/dist/spa/statics/baseurl.js

把里面的端口 8008 改为 30006

二、配置 Nginx

官方的Nginx配置 模板:nginx.conf

user root;
worker_processes auto;

events {
    worker_connections  1024;
}

http {
    include         mime.types;
    default_type    application/octet-stream;
    sendfile        on;
    gzip            on;
    gzip_min_length 1k;
    gzip_comp_level 4;
    gzip_types      text/plain application/javascript application/x-javascript text/javascript text/xml text/css;
    gzip_disable    "MSIE [1-6]\.";
    gzip_vary       on;
	proxy_redirect off;
	proxy_set_header Host $host;
	proxy_set_header  https $https;
	proxy_set_header X-Real-IP $remote_addr;
	proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
	client_max_body_size 75M; #缓冲区代理缓冲用户端请求的最大字节数,可以理解为保存到本地再传给用户
	client_body_buffer_size 256k;
	client_header_timeout 3m;
	client_body_timeout 3m;
	send_timeout 3m;
	proxy_connect_timeout 300s; #nginx跟后端服务器连接超时时间(代理连接超时)
	proxy_read_timeout 300s; #连接成功后,后端服务器响应时间(代理接收超时)
	proxy_send_timeout 300s;
	proxy_buffer_size 64k; #设置代理服务器(nginx)保存用户头信息的缓冲区大小
	proxy_buffers 4 32k; #proxy_buffers缓冲区,网页平均在32k以下的话,这样设置
	proxy_busy_buffers_size 64k; #高负荷下缓冲大小(proxy_buffers*2)
	proxy_temp_file_write_size 64k; #设定缓存文件夹大小,大于这个值,将从upstream服务器传递请求,而不缓冲到磁盘
	proxy_ignore_client_abort on; #不允许代理端主动关闭连接

	upstream GreaterWMS {
		server 127.0.0.1:8008;
	}
	server {
		listen      80;
		server_name {{ Domin Name }};
		rewrite ^(.*)$ https://{{ Domin Name }}$1;
	}

    server {
		listen      443 ssl;

		server_name  {{ Domin Name }};
		root /path/to/GreaterWMS;
		charset utf-8;
		add_header X-Frame-Options "SAMEORIGIN";
		add_header X-XSS-Protection "1; mode=block";
		add_header X-Content-Type-Options "nosniff";

		client_max_body_size 75M;

		ssl_certificate   /path/to/GreaterWMS.pem;
		ssl_certificate_key  /path/to/GreaterWMS.key;
		ssl_session_timeout 5m;
		ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
		ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
		ssl_prefer_server_ciphers on;

		access_log off;
		error_log  /path/to/GreaterWMS/greaterwms-error.log error;

		location /websocket/ {
			proxy_pass http://GreaterWMS/;
			proxy_read_timeout 60s;
			proxy_set_header Host $host;
			proxy_set_header X-Real_IP $remote_addr;
			proxy_set_header X-Forwarded-for $remote_addr;
			proxy_http_version 1.1;
			proxy_set_header Upgrade $http_upgrade;
			proxy_set_header Connection 'Upgrade';
		}

		location / {
			#root   html;
			#index  testssl.html index.html index.htm;
			proxy_redirect off;
			proxy_set_header Host $host;
			proxy_set_header X-Real-IP $remote_addr;
			proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
			proxy_pass http://127.0.0.1:8008/;
		}
		
		location /static/ {
			alias /path/to/GreaterWMS/static_new/;
		}
		location /media/{
			alias /path/to/GreaterWMS/media/;
		}
    }
}

根据自己的实际情况,调整如下:

(1) nginx/conf/nginx.conf


user  www www;
worker_processes auto;

pid    logs/nginx.pid;

events {
    worker_connections  4096;
}


http {
    include         mime.types;
    default_type    application/octet-stream;
    sendfile        on;
    gzip            on;
    gzip_min_length 1k;
    gzip_comp_level 4;
    gzip_types      text/plain application/javascript application/x-javascript text/javascript text/xml text/css;
    gzip_disable    "MSIE [1-6]\.";
    gzip_vary       on;
	proxy_redirect off;
	proxy_set_header Host $host;
	proxy_set_header  https $https;
	proxy_set_header X-Real-IP $remote_addr;
	proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
	client_max_body_size 75M; #缓冲区代理缓冲用户端请求的最大字节数,可以理解为保存到本地再传给用户
	client_body_buffer_size 256k;
	client_header_timeout 3m;
	client_body_timeout 3m;
	send_timeout 3m;
	proxy_connect_timeout 300s; #nginx跟后端服务器连接超时时间(代理连接超时)
	proxy_read_timeout 300s; #连接成功后,后端服务器响应时间(代理接收超时)
	proxy_send_timeout 300s;
	proxy_buffer_size 64k; #设置代理服务器(nginx)保存用户头信息的缓冲区大小
	proxy_buffers 4 32k; #proxy_buffers缓冲区,网页平均在32k以下的话,这样设置
	proxy_busy_buffers_size 64k; #高负荷下缓冲大小(proxy_buffers*2)
	proxy_temp_file_write_size 64k; #设定缓存文件夹大小,大于这个值,将从upstream服务器传递请求,而不缓冲到磁盘
	proxy_ignore_client_abort on; #不允许代理端主动关闭连接

    server {
        listen       80;
        #server_name  localhost alias 127.0.0.1;

        location / {
            root   html;
            index  index.html index.php;
        }
		
		location ~ \.php$ {
            root   html;
            fastcgi_pass   127.0.0.1:9000;
            fastcgi_index  index.php;
            fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
            include  	   fastcgi_params;
        }
    }

    include   vhost/*.conf;
}

(2) nginx/conf/vhost/GreaterWMS_web_40006.conf

upstream GreaterWMS {
	server 127.0.0.1:30006;
}

server {
	listen      40006;

	root /alidata/www/GreaterWMS;
	charset utf-8;
	add_header X-Frame-Options "SAMEORIGIN";
	add_header X-XSS-Protection "1; mode=block";
	add_header X-Content-Type-Options "nosniff";

	client_max_body_size 75M;

	access_log off;
	error_log  /alidata/logs/GreaterWMS/greaterwms-error.log error;

	location /websocket/ {
		proxy_pass http://GreaterWMS/;
		proxy_read_timeout 60s;
		proxy_set_header Host $host;
		proxy_set_header X-Real_IP $remote_addr;
		proxy_set_header X-Forwarded-for $remote_addr;
		proxy_http_version 1.1;
		proxy_set_header Upgrade $http_upgrade;
		proxy_set_header Connection 'Upgrade';
	}

	location / {
		#root   html;
		#index  testssl.html index.html index.htm;
		proxy_redirect off;
		proxy_set_header Host $host;
		proxy_set_header X-Real-IP $remote_addr;
		proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
		proxy_pass http://GreaterWMS/;
	}
	
	location /static/ {
		alias /alidata/www/GreaterWMS/static_new/;
	}
	location /media/{
		alias /alidata/www/GreaterWMS/media/;
	}
}
	

三、使用 Supervisord  启动 /usr/local/bin/daphne

1、安装supervisor

pip3 install supervisor

配置软连接:

ln -s /usr/local/lib/python3.9/site-packages/supervisor/supervisord.py /usr/bin/supervisord

2、新建配置文件:

vim /etc/supervisord.conf

增加内容:

[supervisord]
nodaemon=false   #调试的时候可以设置为true
user=root
[program:daphne]
directory=/alidata/www/GreaterWMS #项目目录 (绝对路径)
command=/usr/local/bin/daphne -p 30006 -b 0.0.0.0  greaterwms.asgi:application #启动命令
autostart=true
autorestart=true
stdout_logfile=/alidata/logs/GreaterWMS/daphne.log
redirect_stderr=true

3、启动supervisord

supervisord -c /etc/supervisord.conf

4、关闭 supervisord

(1) 先找到 对应的进程ID

ps -ef | grep supervisord

(2) 然后杀死进程

kill -9 进程ID值

 

 

参考:

https://gitee.com/Singosgu/GreaterWMS/blob/master/Centos%20Build(CN).md

CentOS 7安装GreaterWMS时报错(1):django.core.exceptions.ImproperlyConfigured: SQLite 3.8.3 or later is required (found 3.7.17)

CentOS 7安装GreaterWMS时报错(2):安装electron项目的时候老是报错:Command failed.