Django创建超级用户命令
python manage.py createsuperuser
uname -a
Linux andy-virtual-machine 5.15.0-52-generic #58~20.04.1-Ubuntu SMP Thu Oct 13 13:09:46 UTC 2022 x86_64 x86_64 x86_64 GNU/Linux
type python python2 python3
bash: type: python: not found
bash: type: python2: not found
python3 is /usr/bin/python3
pip
。sudo apt-get install python3-pip
sudo pip install virtualenv
sudo pip install virtualenvwrapper
mkvirtualenv
command not fonud (需要配置环境变量)mkdir $HOME/.virtualenvs --->在HOME目录下创建文件用来存放虚拟环境
或者在HOME目录下
mkdir .virtualenvs
vi .bashrc
打开文件(否则在其他路径下vi ~/.bashrc
)。文件末尾添加如下三行。(:wq
保存,a
追加写入,G
定位末行,Shift+Insert
粘贴,dd
删除当前行)export VIRTUALENVWRAPPER_PYTHON='/usr/bin/python3'
source /usr/local/bin/virtualenvwrapper.sh
source ~/.bashrc
mkvirtualenv -p python3 blog
workon
workon virtueName
deactivate
rmvirtualenv virtueName
192.168.80.128
中间连不上怀疑是防火墙的问题
查看防火墙是否打开
sudo ufw status
inactive
表示没有打开
[sudo] password for andy:
Status: inactive
Ubuntu上安装ssh-server
指令:
sudo apt-get install openssh-server
安装完成后进行连接,这里的用户名和密码是虚拟机的用户名和密码
这里使用最low的传输方式,直接将项目拖入项目的/home/andy/Documents
目录中,(看别人都是拖进/var/www/
),然后开始部署后端。
好像可以用git直接从gitee上拉取项目,这种方式也便于后面的维护
workon pvCal
(查看当前所在目录的绝对路径)
pwd
cd ../ //返回上一级目录
cd Document //进行Document目录
Python manage.py runserver
没有Django包,那就下载
以下直接列出项目其他需要的库(这里通过Python manage.py runserver
来尝试缺失哪些包,但应该可以更快的方法,将需要的包写入个req.txt
文件,然后pip install -r req.txt
应该也行)
pip install django
pip install pymysql
pip install djangorestframework
pip install django-cors-headers
最后是连接数据库失败,解决它
下载数据库(这边我没有进入虚拟环境下载,直接下载了)
sudo apt-get install mysql-server
在安装完数据库之后,我们需要用系统生成的用户名和密码登录mysql,这样在后面对数据库操作时,不容易产生错误。
在下面的文件中找到用户名和密码
cat /etc/mysql/debian.cnf
切换成root用户,设置密码
sudo passwd root
用su
命令进入到root
用户就可以访问了。后续如果登录不了,就用这里的用户和密码登录
比如:
mysql -uxxxxxxx(用户) -pXXXXXXXXXX(密码)
systemctl status mysql.service
#停止
sudo service mysql stop
#启动
sudo service mysql start
进入数据库
mysql -u root -p
这里刚开始输入任意密码都可以进入
进入后创建一个root新用户:
CREATE USER '用户名'@'localhost' IDENTIFIED BY '密码';
create user 'root'@'%' identified by '123'; //示例
如果出现下面报错,改成反引号。
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ‘E USER failed for ‘root’@’%’
create user ‘andy’@‘%’ identified by ‘admin123’’ at line 1
create user `andy'@`%` identified by `admin123`; //示例 输入反引号
查看当前mysql所有用户:
select user,host from mysql.user;
%
允许来自任何ip的连接
localhost
允许本机的连接
由于我们要通过本地的workbench将本地的数据导入到云服务器中,所以需要对这个root用户设置可以远程传输数据的权限。使用如下命令:
grant all on *.* to 'andy'@'%' with grant option; //授权
// mysql>GRANT ALL PRIVILEGES ON *.* TO 'andy'@'%' IDENTIFIED BY 'admin123' with grant option;
flush privileges; //刷新权限
/etc/mysql/mysql.conf.d/mysqld.cnf
mysqld.cnf
文件才是可更改的。 我是先进入该文件夹内然后打开的文件*
,::
, 0.0.0.0
,当然也可以是单独的固定 ip,这样就仅允许指定 ip 连接,更加安全。sudo systemctl restart mysql
马上进行重启命令模式:x删除光标所在当前字符
进入编辑模式:按i: 光标和内容 没有变化进入编辑模式
输入模式::wq
,保存退出。完美
这里通过下面命令测试端口是否在使用。
tcp端口测试 确保服务器开启了端口监听,否则开放了端口也连接不到。(所以端口监听和开放是两回事儿)
netstat -tunlp | grep 3306 #查看端口是否被占用
'''
-t (tcp) 仅显示tcp相关选项
-u (udp)仅显示udp相关选项
-n 拒绝显示别名,能显示数字的全部转化为数字
-l 仅列出在Listen(监听)的服务状态
-p 显示建立相关链接的程序名
'''
我在修改完mysqld.cnf
配置之后,仍然链接不到虚拟机的Mysql,然后启动虚拟机中的mysql服务也会出错而启动不了,也会出现如下错误。
ERROR 2002 (HY000): Can’t connect to local MySQL server through socket ‘/var/run/mysqld/mysqld.sock’
网上说需要给某个文件添加软链接啥的,但是我文件路径中的文件都是不存在的。
隔了一天之后,我才想:在mysql配置中我只改过这个bind-address地址,会不会是它出问题了。然后我就把它改回去了,重新启动mysql。运行成功!之后再改成0.0.0.0
,重新启动。然后就成功在本地远程连接到了虚拟机的数据库!!!!
连接成功后,我们下一步将在workbench中对数据库进行复制迁移(从本地复制到虚拟机中)
目前知道两种
本地未连接虚拟机数据库(远程数据库):在本地workch导出sql文件,然后用Xftp发送到虚拟机中导入,在ubuntu中导入sql。
点击下方的【test connectiton】,测试两个连接是否正常,然后点击【next】
系统显示复制进度,结束后点击【next】
点击【finished】,此时跨服务器的数据库实例复制就完成了
python manage.py runserver
pip3 install cryptography -i https://pypi.douban.com/simple
然后成功运行
上面忘记数据库迁移了,不然Django后台读取不到数据
python manage.py makemigrations
python manage.py migrate
python manage.py makemigrations --fake //有已存在的数据表用这个
python manage.py migrate --fake //有已存在的数据表用这个
然后在Django后台访问数据出现报错
django.db.utils.ProgrammingError: (1146, “Table ‘photovoltaiccalculation.photovoltaicCalculation_factory’ doesn’t exist”)
以下是尝试的解决方案
下面尝试第三个方法来进行导入了
创建数据库命令
CREATE DATABASE IF NOT EXISTS photovoltaiccalculation;
dump stored procedure and functions: 导出存储过程和功能
dump even: 导出事件
dump trigger: 导出trigger
如果没有特殊需求,也可以都不选
选择你要用文件夹还是文件接收数据 (1) 文件夹就是数据库的每张表单独一个sql文件 (2) 文件就是整一个数据库就一个sql文件
开始导出,然后用xftp上传至虚拟机(或者直接拖进去,下了tools的话)
先看一下导入到虚拟机的sql文件,其实就是一堆包含注释和sql语法的sql语句。
source /home/andy/Documents/sql_data/photovoltaiccalculation_photovoltaiccalculation_factory.sql
报错1
root@andy-virtual-machine:/# source /home/andy/Documents/sql_data/photovoltaiccalculation_photovoltaiccalculation_factory.sql
bash: /home/andy/Documents/sql_data/photovoltaiccalculation_photovoltaiccalculation_factory.sql: line 1: syntax error near unexpected tokena(' 'ash: /home/andy/Documents/sql_data/photovoltaiccalculation_photovoltaiccalculation_factory.sql: line 1:
– MySQL dump 10.13 Distrib 8.0.29, for Win64 (x86_64)
删掉sql语句头部注释,发生报错2
ERROR 1231 (42000): Variable ‘time_zone’ can’t be set to the value of ‘NULL’
ERROR 1231 (42000): Variable ‘sql_mode’ can’t be set to the value of ‘NULL’
ERROR 1231 (42000): Variable ‘foreign_key_checks’ can’t be set to the value of ‘NULL’
ERROR 1231 (42000): Variable ‘unique_checks’ can’t be set to the value of ‘NULL’
ERROR 1231 (42000): Variable ‘character_set_client’ can’t be set to the value of ‘NULL’
Query OK, 0 rows affected (0.00 sec)
ERROR 1231 (42000): Variable ‘collation_connection’ can’t be set to the value of ‘NULL’
ERROR 1231 (42000): Variable ‘sql_notes’ can’t be set to the value of ‘NULL’
继续删除尾部注释,成功执行。
photovoltaicCalculation
是Django项目app名称。factory是Django中models文件自定义的数据库表名。migrate
迁移的时候,ubuntu是区分大小写写入的,但是我在windows本地的数据库是忽略大写的(直接全部变小写)后面才发现这才是Django读取后台数据库不存在的原因。如何解决?
修改app中views.py内关于models的引用
修改app中urls.py内关于app的views.py的引用
修改项目settings.py app名称
其余只要涉及app名或app内py文件的调用都需要修改才行。(都在自己的项目内,不需要改大环境的配置)
uwsgi官方文档
进入虚拟环境
workon pvCal
pip install uwsgi
[uwsgi]
#chdir=/home/andy/Documents/photovoltaic/photovoltaicsite # 指定运行目录:项目根目录的绝对路径
# 指定sock的文件路径,可以用端口或sock文件(Nginx监听的端口)
socket = 127.0.0.1:9090
# stats子系统允许您将uWSGI的内部统计数据导出为JSON, 在指定的地址上,开启状态服务
#stats = 127.0.0.1:9999
#载入wsgi-file
wsgi-file = photovoltaicsite/wsgi.py
#允许主进程存在(enable master process)
master=true
#设置最大工作进程数:将会生成4个进程, 每个进程有2个线程
processes=4
threads = 2
#某个权限
chmod-socket = 666
#退出时清除环境
vacuum=true
执行命令:
uwsgi pvsite_uwsgi.ini
pip uninstall uwsgi
sudo apt-get install libpcre3 libpcre3-dev
pip install uwsgi --no-cache-dir
chdir() to /home/andy/Documents/photovoltaicsite # 项目根目录的绝对路径
chdir(): No such file or directory [core/uwsgi.c line 2625]
chdir(): No such file or directory [core/uwsgi.c line 1649]
sudo apt-get install nginx
常见nginx命令
service nginx stop //停止运行
service nginx start //启动nginx
service nginx reload // 重新加载nginx。配置文件完,常执行此步骤。
service nginx restart //重新开始
有一些文件夹(etc等)只能用root访问(读取修改复制)
选择root用户需要进行下面的配置:
编辑vi /etc/ssh/sshd_config
文件
PermitRootLogin Prohibit-password 这句话原本就是用#注释的
在其下新添加:PermitRootLogin yes
然后用service sshd restart
重启ssh服务
将下面一段修改粘贴在/etc/nginx
目录下的nginx.conf文件的http末尾。其他不更改。
server {
listen 9001; #配置访问时的端口号
server_name 192.168.80.128;
charset utf-8;
client_max_body_size 75M;
location /upload { #配置媒体资源文件
expires 30d;
autoindex on;
add_header Cache-Control private;
alias /home/andy/Documents/photovoltaic/photovoltaicsite/upload;
}
location /static { #配置静态资源文件
expires 30d;
autoindex on;
add_header Cache-Control private;
alias /home/andy/Documents/photovoltaic/photovoltaiccalculation;
}
location / { #配置uWSGI服务器
include /etc/nginx/uwsgi_params;
uwsgi_pass 127.0.0.1:9090;
uwsgi_read_timeout 2;
}
}
注意 :文件用#
注释而不是//
,注意分号的书写。不然会报错
先运行uwsgi
uwsgi pvsite_uwsgi.ini
再运行nginx
service nginx start
查看nginx运行状态
systemctl status nginx.service
manage.py
目录下)python manage.py collectstatic //在项目根目录 运行此命令 生成static相关静态资源文件
可以看到样式文件被收集在static。165个文件被复制。
2. 更改nginx配置
server{
...
location /static {
alias /home/andy/Documents/photovoltaic/photovoltaicsite/static;
}
...
}
下面是配置静态资源文件到指定项目目录的,不然 默认static会在Django的安装目录下
STATIC_URL = '/static/' # nginx 会通过static为开头访问指定静态资源文件
MEDIA_URL = '/upload/'
MEDIA_ROOT = os.path.join(BASE_DIR, 'upload').replace('\\', '/')
STATIC_ROOT = os.path.join(BASE_DIR, 'static').replace('\\', '/') # 指定样式收集目录
下一步进行Vue项目的部署
——————————————————以下为补充内容————————————————
su root
sudo useradd -r -m -s /bin/bash andy(用户名)
其中参数的意义如下:
-r:建立系统账号
-m:自动建立用户的登入目录
-s:指定用户登入后所使用的shell
sudo passwd andy(用户名)
su
ls -l /etc/sudoers
文件只有r权限,在改动前需要增加w权限,改动后,再去掉w权限。
chmod u+w /etc/sudoers
ls -l /etc/sudoers
vim编辑器
打开sudoers文件vim /etc/sudoers
root ALL=(ALL) ALL
后面加上:xxx ALL = (ALL) ALL
,其中xxx表示你的用户名,保存之后退出vim编辑: o (在当前行下面插入一个新行)
保存退出——Esc 后 :wq! (强制保存退出)
chmod u-w /etc/sudoers
ls -l /etc/sudoers
此时新用户已经拥有root权限
ps:
sudo chmod -R 777 文件目录 eg:/data/XXX
777解除所有锁定
先将mysql中的数据表django_migrations
中自建 表的历史记录删除。再把本地migraions
生成的文件删除。执行如下命令即可。
python manage.py makemigrations
python manage.py migrate --fake-initial