Django应用部署实战:从开发到生产,全程解析
部署架构图

版本说明
Centos 7.4
Python 3.6.4
Django 2.0.2
Channels 2.0.0
MySql 5.7
uWSGI
Nginx 1.12.2
部署前
1、更新系统环境
yum install epel-release
2、安装所有的开发工具包
yum groupinstall -y “Development tools”
一、安装python 3.6.4
1、下载
cd /usr/local/src
wget https://www.python.org/ftp/python/3.6.4/Python-3.6.4.tgz
2、安装python依赖包
yum install zlib-devel 不安装编译会报错
yum install libffi-devel -y 新版本python3.7
yum install openssl-devel pip下载使用https协议的包时需要
安装sqlite
cd /usr/local/src
wget https://www.sqlite.org/2018/sqlite-autoconf-3250300.tar.gz
tar zxvf sqlite-autoconf-3250300.tar.gz
cd sqlite-autoconf-3250300
./configure
make && make install
3、解压
tar zxvf Python-3.6.4.tgz
cd Python-3.6.4
4、编译安装
./configure --prefix=/usr/local/python3.6.4
make && make install
5、链接python和pip
ln -s /usr/local/python3.6.4/bin/python3 /usr/bin/python3
ln -snf /usr/bin/python3 /usr/bin/python
ln -s /usr/local/python3.6.4/bin/pip3 /usr/bin/pip
查看朴python版本
python -V
查看pip版本
pip --version
6、yum配置文件依赖python,Python升级后就要修改配置文件
vim /usr/bin/yum
vim /usr/libexec/urlgrabber-ext-down
修改第一行#!/usr/bin/python 为 #!/usr/bin/python2
测试修改是否成功
yum -h
升级系统 yum update
7、检查其他需要修改的命令
sed -i “s#/usr/bin/python#/usr/bin/python2#g” grep /usr/bin/python -rl /usr/bin/*
grep -ai /usr/bin/python /usr/bin/*
列出文件列表后逐个修改(按照yum修改方法)
二、安装django2.0.2
1、安装
pip install django==2.0.2
2、安装成功后测试
链接
ln -s /usr/local/python3.6.4/bin/django-admin /usr/bin/django-admin
三、安装数据库
0、卸载mariadb(安装mysql前要卸载mariadb)
rpm -qa | grep mariadb
rpm -e --nodeps mariadb-libs-5.5.37-1.el7_0.x86_64
1、安装sqlite3(注意要在编译python之前安装)
yum install sqlite
yum install sqlite-devel
2、源码安装MySQL5.6.39(安装后问题较多)
1)下载
cd /usr/local/src
wget http://ftp.ntu.edu.tw/MySQL/Downloads/MySQL-5.6/mysql-5.6.39-linux-glibc2.12-x86_64.tar.gz
2)解压
tar zxvf mysql-5.6.39-linux-glibc2.12-x86_64.tar.gz -C /usr/local/
cd /usr/local/
修改目录名
mv mysql-5.6.39-linux-glibc2.12-x86_64 mysql
3)创建mysql用户
创建系统用户组,组id为300
groupadd -r -g 300 mysql
创建mysql用户,组id 为300,用户id为300
useradd -g 300 -r -u 300 mysql
修改mysql目录用户和用户组
chown -R mysql:mysql mysql
4)初始化
cd /usr/local/mysql
scripts/mysql_install_db --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data --user=mysql
问题
解决yum -y install autoconf
5)设置开机启动
cp support-files/mysql.server /etc/init.d/mysqld
chmod 755 /etc/init.d/mysqld
chkconfig mysqld on
6)配置文件(如果服务器性能低,配置文件里内存大小就要修改)
cp support-files/my-default.cnf …/my.cnf
7)加入PATH路径(环境变量)
vim /etc/profile
PATH=$PATH:/usr/local/mysql/bin
export PATH
保存退出
source /etc/profile
开启服务systemctl start mysqld.service
8)输入mysql进入(超级终端不需要密码),给root用户设置密码
GRANT ALL PRIVILEGES ON . TO ‘root’@‘localhost’ IDENTIFIED BY ‘123456’ WITH GRANT OPTION;
FLUSH PRIVILEGES;
测试
mysql -uroot -p (回车后输入密码)
3、yum 安装MySQL
1)配置yum源
在MySQL官网中下载YUM源rpm安装包:http://dev.mysql.com/downloads/repo/yum/
2)下载
cd /usr/local/src
wget http://dev.mysql.com/get/mysql57-community-release-el7-8.noarch.rpm
3)安装
yum localinstall mysql57-community-release-el7-8.noarch.rpm
4)检查是否安装成功
yum repolist enabled | grep “mysql.-community.”
看到上图所示表示安装成功。
5)可以修改vim /etc/yum.repos.d/mysql-community.repo源,改变默认安装的mysql版本。比如要安装5.6版本,将5.7源的enabled=1改成enabled=0。然后再将5.6源的enabled=0改成enabled=1即可。改完之后的效果如下所示:
6)安装mysql
yum install mysql-community-server
7)启动MySQL服务
systemctl start mysqld
查看MySQL的启动状态
systemctl status mysqld
mysqld.service - MySQL Server
Loaded: loaded (/usr/lib/systemd/system/mysqld.service; disabled; vendor preset: disabled)
Active: active (running) since 五 2016-06-24 04:37:37 CST; 35min ago
Main PID: 2888 (mysqld)
CGroup: /system.slice/mysqld.service
└─2888 /usr/sbin/mysqld --daemonize --pid-file=/var/run/mysqld/mysqld.pid
6月 24 04:37:36 localhost.localdomain systemd[1]: Starting MySQL Server…6月 24 04:37:37 localhost.localdomain systemd[1]: Started MySQL Server.
8)开机启动
ystemctl enable mysqldshell> systemctl daemon-reload
9)修改root本地登录密码
mysql安装完成之后,在/var/log/mysqld.log文件中给root生成了一个默认密码。通过下面的方式找到root默认密码,然后登录mysql进行修改:
grep ‘temporary password’ /var/log/mysqld.log
mysql -uroot -p
ALTER USER ‘root’@‘localhost’ IDENTIFIED BY ‘MyNewPass4!’;
或者set password for ‘root’@‘localhost’=password(‘MyNewPass4!’);
注意:mysql5.7默认安装了密码安全检查插件(validate_password),默认密码检查策略要求密码必须包含:大小写字母、数字和特殊符号,并且长度不能少于8位。否则会提示ERROR 1819 (HY000): Your password does not satisfy the current policy requirements错误,如下图所示:
10)通过msyql环境变量可以查看密码策略的相关信息:
show variables like ‘%password%’;
validate_password_policy:密码策略,默认为MEDIUM策略
validate_password_dictionary_file:密码策略文件,策略为STRONG才需要
validate_password_length:密码最少长度
validate_password_mixed_case_count:大小写字符长度,至少1个
validate_password_number_count :数字至少1个
validate_password_special_char_count:特殊字符至少1个
上述参数是默认策略MEDIUM的密码检查规则。
共有以下几种密码策略:
策略 检查规则
0 or LOWLength
1 or MEDIUM Length; numeric, lowercase/uppercase, and special characters
2 or STRONG Length; numeric, lowercase/uppercase, and special characters; dictionary file
MySQL官网密码策略详细说明:http://dev.mysql.com/doc/refman/5.7/en/validate-password-options-variables.html#sysvar_validate_password_policy
11)修改密码策略
在/etc/my.cnf文件添加validate_password_policy配置,指定密码策略
#选择0(LOW),1(MEDIUM),2(STRONG)其中一种,选择2需要提供密码字典文件
validate_password_policy=0
如果不需要密码策略,添加my.cnf文件中添加如下配置禁用即可:
validate_password = off
重新启动mysql服务使配置生效:
systemctl restart mysqld
12)添加远程登录用户
默认只允许root帐户在本地登录,如果要在其它机器上连接mysql,必须修改root允许远程连接,或者添加一个允许远程连接的帐户,为了安全起见,我添加一个新的帐户:
GRANT ALL PRIVILEGES ON . TO ‘yangxin’@‘%’ IDENTIFIED BY ‘Yangxin0917!’ WITH GRANT OPTION;
13)配置默认编码为utf8
修改/etc/my.cnf配置文件,在[mysqld]下添加编码配置,如下所示:
[mysqld]character_set_server=utf8init_connect=‘SET NAMES utf8’
重新启动mysql服务,查看数据库默认编码如下所示:
默认配置文件路径:
配置文件:/etc/my.cnf
日志文件:/var/log//var/log/mysqld.log
服务启动脚本:/usr/lib/systemd/system/mysqld.service
socket文件:/var/run/mysqld/mysqld.pid
[plain] view plain copy
1.mysql>use mysql;
2.mysql>update user set password=password(‘root’) where user=‘root’ and host=‘localhost’;
3.mysql>flush privileges;
设置远程主机登录,注意下面的your username 和 your password改成你需要设置的用户和密码
[plain] view plain copy
1.mysql>GRANT ALL PRIVILEGES ON . TO ‘your username’@‘%’ IDENTIFIED BY ‘your password’ WITH
2.GRANT OPTION;
14)出现下面情况:
1,linux libaio.so.1: cannot open shared object file: No such file or directory
缺少安装包libaio和libaio-devel.
命令行
yum install libaio*。自动安装这两个包
2,ERROR 2002 (HY000): Can’t connect to local MySQL server through socket ‘/var/lib/mysql/mysql.sock’ (2)
1、先查看 /etc/rc.d/init.d/mysqld status 看看m y s q l 是否已经启动.
另外看看是不是权限问题.
2、确定你的mysql.sock是不是在那个位置,
mysql -u 你的mysql用户名 -p -S /var/lib/mysql/mysql.sock
3、试试:service mysqld start
4、如果是权限问题,则先改变权限 #chown -R mysql:mysql /var/lib/mysql
alter user ‘root’@‘localhost’ identified by ‘1stDianpiao&&&’;
四、安装pyMySQL 和 mysqlclient
pip install PyMySQL
pip install mysqlclient
五、创建django项目
django-admin startproject mysite
创建app
cd mysite
django-admin startapp app
修改配置
vim mysite/init.py 添加下面代码(否则python3和mysql之间连接会报错)
import pymysql
pymysql.install_as_MySQLdb()
vim mysite/settings.py
在项目中创建media和collection_static目录
mkdir media; mkdir collection_static
执行python manage.py collectstatic命令时,STATIC_ROOT目录存放整个项目的静态文件(注意STATICFILES_DIRS也要配置,如果不配置就不会收集自定义的静态文件,执行完后要把该目录的属主属组都给nginx用户,即chown -R nginx:nginx collection_static)
进入mysql中创建数据库
create database mysite character set utf8;
然后执行
python manage.py makemigrations 为这些修改创建迁移文件,给应用生成迁移脚本
python manage.py migrate 同步修改过的数据库
启动项目
python manage.py runserver
打开浏览器测试
六、安装uwsgi
- 安装pip install uwsgi
- 链接ln -s /usr/local/python3.6.4/bin/uwsgi /usr/bin/uwsgi
- 启动服务 uwsgi --http :80 --chdir /root/mysite/ -w mysite.wsgi(mysite.wsgi前缀必须和项目名相同)
- 查看启动进程lsof :80 查看占用80端口的进程,可以用kill -9 PID杀掉进程
- 打开浏览器输入本机IP就能访问
- uwsgi 配置文件
mkdir -p /etc/uwsgi/
vim /etc/uwsgi/mysite.ini
[uwsgi]
chdir = /root/mysite #项目目录
socket = /run/mysite.sock #socekt文件,要和nginx配置的相同
wsgi-file = /root/mysite/mysite/wsgi.py #django项目中wsgi文件
module = mysite.wsgi:applcation
master = true #允许主线程存在
processes = 2 #开启进程的数量
threads = 4 #开启线程的数量
daemonize = /var/log/mysite/uwsgi.log #日志文件
vacuum = true #当服务器退出的时候自动清理环境
保存退出
创建日志目录
mkdir -p /var/log/mysite
七、源码安装nginx(或直接用yum安装)
uwsgi处理动态请求,nginx处理静态请求
1、下载
cd /usr/local/src
wget http://nginx.org/download/nginx-1.16.0.tar.gz
2、安装依赖包
yum -y install zlib zlib-devel openssl openssl-devel pcre-devel
zlib:Nginx提供gzip模块,需要zlib库支持。
openssl:Nginx提供SSL功能
pcre:支持地址重写rewrite功能
安装编译工具
yum -y install gcc gcc-c++ autoconf automake
3、创建用户
groupadd -r -g 500 nginx
useradd -g 500 -r -u 500 nginx
4、解压安装
tar zxvf nginx-1.13.8.tar.gz
cd nginx-1.13.8
./configure –help 查看配置信息
生成配置文件
./configure --prefix=/usr/local/nginx --conf-path=/usr/local/nginx/nginx.conf --error-log-path=/usr/local/nginx/log/error.log --pid-path=/usr/local/nginx/nginx.pid --lock-path=/usr/local/nginx/nginx.lock --user=nginx --group=nginx --with-http_ssl_module --with-http_flv_module
make && make install
给目录授权
chown -R nginx:nginx nginx/
测试 /usr/local/nginx/sbin/nginx 如果没报错就说明服务已经启动
链接
ln -s /usr/local/nginx/sbin/nginx /usr/bin/nginx
5、修改配置文件
vim /usr/local/nginx/nginx.conf
在http模块中加入include /usr/local/nginx/conf.d/*.conf;(一定要加在server前面,否则nginx会按默认配置显示)
创建配置文件目录
mkdir -p /usr/local/nginx/conf.d/
cd /usr/local/nginx/conf.d/
vim mysite.conf
添加下面内容
upstream mysite{server unix:///run/mysite.sock; #socket文件要uwsgi配置相同
}
server {listen 80;server_name 127.0.0.1;charset UTF-8;error_log /var/log/mysite/nginx_error.log;access_log /var/log/mysite/nginx_access.log;client_max_body_size 75M;location /media {alias /root/mysite/media;}location /static {alias /root/mysite/collection_static;}location / {uwsgi_pass mysite;include /usr/local/nginx/uwsgi_params;}
}
保存退出
给项目目录修改属主属组(包含)
chown -R nginx:nginx /root/mysite
创建日志目录
mkdir -p /var/log/mysite
测试配置文件正确性
nginx -t
nginx: the configuration file /usr/local/nginx/nginx.conf syntax is ok
nginx: configuration file /usr/local/nginx/nginx.conf test is successful 说明成功
启动服务
nginx
打开浏览器访问测试
关闭服务
nginx -s stop
修改配置后重新读配置文件
nginx -s reload
配置完成后启动服务
uwsgi --init /etc/uwsgi/mysite.ini
nginx -s reload
八、配置iptables(centos7以前版本)
1、开启ssh端口(如果是远程配置,一定要先配置运行ssh访问)
iptables -A INPUT -p tcp --dport 22 -j ACCEPT
iptables -A OUTPUT -p tcp --sport 22 -j ACCEPT
2、开启80端口
iptables -A INPUT -p tcp --dport 80 -j ACCEPT
3、允许ping
iptables -A INPUT -p icmp -j ACCEPT
#如果OUTPUT设置成DROP需要添加 iptables -A OUTPUT -p icmp -j ACCEPT
4、最后配置拒绝所有进入
iptables -P INPUT DROP 拒绝所有进
iptables -P OUTPUT ACCEPT 开放所有出
iptables -P FORWARD DROP 拒绝所有转发
5、查看详细信息
iptables -L -n
6、查找所有规则
iptables -L INPUT --line-numbers
7、删除一条规则
iptables -D INPUT 11 (注意,这个11是行号,是iptables -L INPUT --line-numbers 所打印出来的行号)
8、重启
service iptables restart
九、配置firewall
1、查看版本firewall-cmd --version
报错
解决
vim /usr/bin/firewall-cmd
vim /usr/bin/firewall-offline-cmd
vim /usr/sbin/firewalld
修改第一行#!/usr/bin/python -Es 为 #!/usr/bin/python2 -Es 保存退出
2、启动服务
systemctl start firewalld.service
systemctl status firewalld.service #查看状态
3、查询
SSH协议是否被允许(yes/no)
firewall-cmd --zone=public --query-service=ssh
查询开启那些端口
firewall-cmd --zone=public --list-ports
查看区域所有信息
firewall-cmd --zone=public --list-all
4、添加规则
添加http协议
firewall-cmd --permanent --zone=public --add-service=http
添加https协议
firewall-cmd --permanent --zone=public --add-service=https
添加ssh协议
firewall-cmd --permanent --zone=public --add-service=ssh
添加8080端口
firewall-cmd --permanent --zone=public --add-port=8080/tcp
firewall-cmd --reload
5、删除规则
删除http协议
firewall-cmd --permanent --zone=public --remove-service=http
每次添加删除规则后要重新加载
firewall-cmd --reload
6、重启服务
systemctl restart firewalld
十、安装redis
1、下载
cd /usr/local/src
wget http://download.redis.io/releases/redis-4.0.8.tar.gz
2、编译安装
cd redis-4.0.8
make && make install
3、配置
mkdir -p /etc/redis
cp /usr/local/src/redis-4.0.8/redis.conf /etc/redis
#redis以守护进程的方式运行
#no表示不以守护进程的方式运行(会占用一个终端)
vim /etc/redis/redis.conf
daemonize yes
4、启动服务
/usr/local/bin/redis-server /etc/redis/redis.conf
查看启动
ps -aux | grep redis
5、客户端
redis-cli
set name diaopiao
get name
“dianpiao”
6、开机自启动
#开机启动要配置在 rc.local 中,而 /etc/profile 文件,要有用户登录了,才会被执行。
echo “/usr/local/bin/redis-server /etc/redis/redis.conf &” >> /etc/rc.local
十一、Django配置redis
1、安装redis
pip install redis
pip install django-redis
2、修改django配置
vim /root/mysite/mysite/settings.py
增加下面配置
CACHES = {'default': {'BACKEND': 'django_redis.cache.RedisCache','LOCATION': '127.0.0.1:6379',"OPTIONS": {"CLIENT_CLASS": "django_redis.client.DefaultClient",},},
}
十二、安装django Channels
1、安装
pip install -U Channels2.0.0
pip install channels-redis2.0.2
2、在django配置文件中添加
vim /root/mysite/mysite/settings.py
INSTALLED_APPS = ['django.contrib.admin','django.contrib.auth','django.contrib.contenttypes','django.contrib.sessions','django.contrib.messages','django.contrib.staticfiles','channels', # 添加插件
]CHANNEL_LAYERS = {"default": {"BACKEND": "asgi_redis.RedisChannelLayer","CONFIG": {"hosts": [os.environ.get('REDIS_URL', 'redis://localhost:6379')],},"ROUTING": "chat.routing.channel_routing",},
}
补充
1)问题
ERRORS:
blog.Article.portal: (fields.E210) Cannot use ImageField because Pillow is not installed.
HINT: Get Pillow at https://pypi.python.org/pypi/Pillow or run command “pip install Pillow”.
提示要安装Pillow,经查Pillow是python的一个图像处理库,下面进行安装
安装装Pillow
pip install --use-wheel Pillow #安装最新的Pillow
安装完成,再次运行发现问题解决。
2)uwsgi问题
需要不停的更新uwsgi --ini /etc/uwsgi/mysite.ini
uwsgi基本操作
启动uwsgi
uwsgi -x xxxx.xml #xml配置文件uwsgi -i xxxx.ini #ini配置文件
重启uwsgi
首选要找到uwsgi的主进程号,如果使用了pidfile记录进程号,则可以简单的找到master pid,如果未使用pidfile选项,则到日志中查看日志
spawned uWSGI master process (pid: 7486) #主进程号
spawned uWSGI worker 1 (pid: 7487, cores: 10)
spawned uWSGI worker 2 (pid: 7488, cores: 10)
然后使用-HUP或-TERM
kill -HUP pid #友好重启,不会丢失会话kill -TERM pid #强制重启,可能丢失会话
结束uwsgi
同重启uwsgi,需要先得到uwsgi的主进程号,然后使用
kill -INT pid
使用killall
在没使用pidfile参数记录uwsgi主进程号的情况下,如果服务器上只有一个uwsgi实例,可以使用killall命令控制uwsgi
killall -HUP uwsgi #所有的uwsgi实例都重启
killall -INT uwsgi #关闭所有uwsgi实例
3)最后修改django配置文件
使用DEBUG = False,进入settings.py
将DEBUG = True 改为 DEBUG = False
在下面这句里添加’‘后保存
ALLOWED_HOSTS = [’']
为模板添加路径
给settings.py里添加如下代码,并修改’DIR’后面的值
TEMPLATE_PATH = os.path.join(BASE_DIR, ‘templates’)
最终我们的网站结构应该是这样的
1、创建不了数据表migrate
设置git
1、在家目录下输入ls -a 查看有没有.ssh目录
2、如果没有输入下面命令,然后默认回车。就会生产.ssh目录
3、进去.ssh,生成一对密钥id_rsa是私钥,id_rsa.pub是公钥,打开公钥讲里面的字符复制
4、打开git网页,ssh公钥配置,标题自定义,讲复制的公钥粘贴进去,确定
5、完了之后克隆,第一次需要确认,后面都不需要密码直接更新
相关文章:
Django应用部署实战:从开发到生产,全程解析
部署架构图 版本说明 Centos 7.4 Python 3.6.4 Django 2.0.2 Channels 2.0.0 MySql 5.7 uWSGI Nginx 1.12.2 部署前 1、更新系统环境 yum install epel-release 2、安装所有的开发工具包 yum groupinstall -y “Development tools” 一、安装python 3.6.4 1、下载 cd /usr/…...
群晖NAS如何在内网部署HTTPS服务让浏览器信任证书
前言 最近在折腾内部部署Web服务。通过Vue实现一个H5的内部的管理服务。但在实际部署过程中由于种种原因,必须部署成Https服务。但在部署成Https服务后,由于没有HTTPS证书,每次进入页面都会被浏览器拦截。使用起来非常不便。于是开始各种Goo…...
crAPI靶场学习记录
靶场搭建 [靶场下载地址](我fork了一份) docker安装,笔者是用的wsldocker. [lab0:**初始账户 **] 注册一个账户,邮箱为[APIqq.com],密码为Admin123 登陆后访问对应IP的8025端口,接收邮件获取车辆信息。 [lab1:**访问其它用户车…...
知识图谱实战应用28-基于py2neo的ICD-11疾病分类的知识图谱的查询与问答实战应用
大家好,我是微学AI,今天给大家介绍一下知识图谱实战应用28-基于py2neo的ICD-11疾病分类的知识图谱的查询与问答实战应用。使用基于py2neo的ICD-11疾病分类知识图谱,我们能够像探索一座生物医学宇宙般,穿梭在各种疾病之间。这个神奇的图谱可以帮助我们揭示各种疾病之间复杂而…...
20.Xaml GroupBox控件 ---->带标题的内容控件
1.运行效果 2.运行源码 a.Xaml源码 <Window x:Class="testView.MainWindow"xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"xmlns:d="http://schemas.mic…...
基于CycleGAN的山水风格画迁移
基于CycleGAN的山水风格画迁移 1、简介 1.1 研究背景及意义 绘画是人类重要的一种艺术形式,其中中国的山水画源远流长,具有丰富的美学内涵,沉淀着中国人的情思。游山玩水的大陆文化意识,以山为德、水为性的内在修为意识&#x…...
@Cacheable 注解
1. 功能说明 Cacheable 注解在方法上,表示该方法的返回结果是可以缓存的。也就是说,该方法的返回结果会放在缓存中,以便于以后使用相同的参数调用该方法时,会返回缓存中的值,而不会实际执行该方法。 注意,这…...
vue3+ts项目打包后的本地访问
注意:打包之后不可直接点击html访问,需要给项目安装本地服务! 1、安装servenpm i -g serve 2、打包项目npm run build 生成dist文件夹 3、本地访问serve dist 运行service dist之后的控制台 可复制下方的地址运行打包后的项目,运行…...
探索程序员需要掌握的算法?
文章目录 一:引言二:常见算法介绍三:重点算法总结 🎉欢迎来到数据结构学习专栏~探索程序员需要掌握的算法? ☆* o(≧▽≦)o *☆嗨~我是IT陈寒🍹✨博客主页:IT陈寒的博客🎈该系列文章…...
性能测试 —— Jmeter定时器
固定定时器 如果你需要让每个线程在请求之前按相同的指定时间停顿,那么可以使用这个定时器;需要注意的是,固定定时器的延时不会计入单个sampler的响应时间,但会计入事务控制器的时间 1、使用固定定时器位置在http请求中…...
mp4视频太大怎么压缩?几种常见压缩方法
mp4视频太大怎么压缩?科技的飞速发展使得视频成为人们生活中不可或缺的一部分。然而,随着视频质量的不断提高,视频文件的大小也与日俱增,给我们的存储和传输带来了巨大的挑战和困扰。特别是MP4格式的视频,由于其出色的…...
论文复制ChatGPT按钮被发表,撤回后再曝多个类似案例;Midjourney 生成大师级的人像
🦉 AI新闻 🚀 论文复制ChatGPT按钮被发表,撤回后再曝多个类似案例 摘要:一篇物理论文复制了ChatGPT按钮内容,经过两个月同行评审并在杂志上发表。这一现象被知名打假人发现后,发表商决定撤回该论文。此外…...
Python自动化测试 史上最全的进阶教程
Python自动化测试就是把以前人为测试转化为机器测试的一种过程。自动化测试是一种比手工测试更快获得故障反馈的方法。 随着时代的变革,也许在未来测试这个职位的需求会越来越少甚至消失,但是每一个组织,每一个客户对软件质量的要求是永远不…...
centos pip失效
在 CentOS 上安装和配置 pip3 可能需要以下步骤: 确保 Python 3 已正确安装:请确保您已经正确地安装了 Python 3。在 CentOS 上,Python 3 可能默认安装在 /usr/bin/python3 路径下。您可以通过运行以下命令来验证 Python 3 是否正确安装&…...
Java——》ThreadLocal
推荐链接: 总结——》【Java】 总结——》【Mysql】 总结——》【Redis】 总结——》【Kafka】 总结——》【Spring】 总结——》【SpringBoot】 总结——》【MyBatis、MyBatis-Plus】 总结——》【Linux】 总结——》【MongoD…...
如何做好利益相关方的期望管理?
利益相关方对项目而言非常重要,有效管理利益相关方的期望可以帮助项目团队更好地满足利益相关方的需求,助于建立良好的合作伙伴关系,提高项目的可持续性和成功率。 如果项目团队无法满足利益相关方的需求,可能会引发冲突、争议或其…...
【K8S系列】深入解析k8s网络插件—Canal
序言 做一件事并不难,难的是在于坚持。坚持一下也不难,难的是坚持到底。 文章标记颜色说明: 黄色:重要标题红色:用来标记结论绿色:用来标记论点蓝色:用来标记论点 在现代容器化应用程序的世界中…...
从单页面应用角度去解决不跳转页面,也能更改浏览器url地址
正常来说不刷新页面,也能更改浏览器url地址的方法有很多,我们在网上搜的话可以看到有pushState、replaceState、popstate等方法,那还有没有其他方法呢? 答案是有的! 最近做一个vue商城项目的时候,用户点击支…...
Linux:keepalived + ipvsadm
介绍 Linux:keepalived 双热备份(基础备份web)_鲍海超-GNUBHCkalitarro的博客-CSDN博客https://blog.csdn.net/w14768855/article/details/132815057?spm1001.2014.3001.5501 环境 一台 centos7 keepalived ipvsadm (主…...
Linux基础命令(示例代码 + 解释)
查看目录下文件 ls [-a -l -h] [路径] -a(全部) -l(细节) -h(大小) ls ls / ls -a ls -l ls -h ls -alh ls -l -h -a ls -lah /切换目录 cd [路径] change di…...
第19节 Node.js Express 框架
Express 是一个为Node.js设计的web开发框架,它基于nodejs平台。 Express 简介 Express是一个简洁而灵活的node.js Web应用框架, 提供了一系列强大特性帮助你创建各种Web应用,和丰富的HTTP工具。 使用Express可以快速地搭建一个完整功能的网站。 Expre…...
【杂谈】-递归进化:人工智能的自我改进与监管挑战
递归进化:人工智能的自我改进与监管挑战 文章目录 递归进化:人工智能的自我改进与监管挑战1、自我改进型人工智能的崛起2、人工智能如何挑战人类监管?3、确保人工智能受控的策略4、人类在人工智能发展中的角色5、平衡自主性与控制力6、总结与…...
Qt Widget类解析与代码注释
#include "widget.h" #include "ui_widget.h"Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget) {ui->setupUi(this); }Widget::~Widget() {delete ui; }//解释这串代码,写上注释 当然可以!这段代码是 Qt …...
学校招生小程序源码介绍
基于ThinkPHPFastAdminUniApp开发的学校招生小程序源码,专为学校招生场景量身打造,功能实用且操作便捷。 从技术架构来看,ThinkPHP提供稳定可靠的后台服务,FastAdmin加速开发流程,UniApp则保障小程序在多端有良好的兼…...
【算法训练营Day07】字符串part1
文章目录 反转字符串反转字符串II替换数字 反转字符串 题目链接:344. 反转字符串 双指针法,两个指针的元素直接调转即可 class Solution {public void reverseString(char[] s) {int head 0;int end s.length - 1;while(head < end) {char temp …...
DIY|Mac 搭建 ESP-IDF 开发环境及编译小智 AI
前一阵子在百度 AI 开发者大会上,看到基于小智 AI DIY 玩具的演示,感觉有点意思,想着自己也来试试。 如果只是想烧录现成的固件,乐鑫官方除了提供了 Windows 版本的 Flash 下载工具 之外,还提供了基于网页版的 ESP LA…...
学习STC51单片机31(芯片为STC89C52RCRC)OLED显示屏1
每日一言 生活的美好,总是藏在那些你咬牙坚持的日子里。 硬件:OLED 以后要用到OLED的时候找到这个文件 OLED的设备地址 SSD1306"SSD" 是品牌缩写,"1306" 是产品编号。 驱动 OLED 屏幕的 IIC 总线数据传输格式 示意图 …...
Java多线程实现之Thread类深度解析
Java多线程实现之Thread类深度解析 一、多线程基础概念1.1 什么是线程1.2 多线程的优势1.3 Java多线程模型 二、Thread类的基本结构与构造函数2.1 Thread类的继承关系2.2 构造函数 三、创建和启动线程3.1 继承Thread类创建线程3.2 实现Runnable接口创建线程 四、Thread类的核心…...
USB Over IP专用硬件的5个特点
USB over IP技术通过将USB协议数据封装在标准TCP/IP网络数据包中,从根本上改变了USB连接。这允许客户端通过局域网或广域网远程访问和控制物理连接到服务器的USB设备(如专用硬件设备),从而消除了直接物理连接的需要。USB over IP的…...
安卓基础(aar)
重新设置java21的环境,临时设置 $env:JAVA_HOME "D:\Android Studio\jbr" 查看当前环境变量 JAVA_HOME 的值 echo $env:JAVA_HOME 构建ARR文件 ./gradlew :private-lib:assembleRelease 目录是这样的: MyApp/ ├── app/ …...
