admin 管理员组文章数量: 887031
笔记备忘
服务器:阿里云轻量级
系统:centos7
远程登录设置
参考
centos安装mysql8.0
地址:http://repo.mysql
wget http://repo.mysql/mysql80-community-release-el7-3.noarch.rpm
sudo rpm -ivh mysql80-community-release-el7-3.noarch.rpm
yum install -y mysql-community-server
#启动mysql服务:
systemctl start mysqld
#检查mysql状态:
systemctl status mysqld
#设置开机启动:
systemctl enable mysqld
#重新载入修改后的配置文件
systemctl daemon-reload
#获取安装时的临时密码(在第一次登录时就是用这个密码):
grep 'temporary password' /var/log/mysqld.log
#使用默认密码登陆mysql(上一步获取):
mysql -u root -p
在mysql:下:
#修改root密码:
ALTER USER 'root'@'localhost' IDENTIFIED BY '@py123456';
#看当前所有数据库:
show databases;
#进入mysql数据库:
use mysql;
#查看mysql数据库中所有的表:
show tables;
#查看user表中的数据:
select Host, User,Password from user;
##配置root远程登陆:修改user表中的Host(% 代表任意的客户端,可替换成具体IP地址。):
use mysql;
update user set Host='%' where User='root';
#刷新一下:
flush privileges;
#使用sqlyog等工具链接,需要开启原来的身份验证机制
ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY 'root账户密码';
# 云服务器防火墙添加3306端口
#1、设置安全选项:
mysql_secure_installation
#2、关闭MySQL
systemctl stop mysqld
#3、重启MySQL
systemctl restart mysqld
#4、查看MySQL运行状态
systemctl status mysqld
#5、设置开机启动
systemctl enable mysqld
#6、关闭开机启动
systemctl disable mysqld
#7、配置默认编码为utf8:
vi /etc/myf #添加 [mysqld] character_set_server=utf8 init_connect='SET NAMES utf8'
#其他默认配置文件路径:
##配置文件:/etc/myf
##日志文件:/var/log//var/log/mysqld.log
##服务启动脚本:/usr/lib/systemd/system/mysqld.service socket文件:/var/run/mysqld/mysqld.pid
#8、查看版本
select version();`
参考1
参考2
安装python3.8.1
#更新系统软件包
yum update -y
#为centos系统增加编译功能:
yum -y install gcc gcc-c++
#防止编译安装python3出现各种异常:
yum -y groupinstall "Development tools"
yum install openssl-devel bzip2-devel expat-devel gdbm-devel readline-devel sqlite-devel
yum install wget openssl-devel bzip2-devel expat-devel gdbm-devel readline-devel sqlite-devel
yum -y install libffi-devel tk-devel
#下载python3安装包:
wget https://www.python/ftp/python/3.8.1/Python-3.8.1.tgz
#解压:
tar -zxvf Python-3.8.1.tgz
#配置,将python3安装到/usr/local/python3/路径下:
cd Python-3.6.3
./configure --prefix=/usr/local/python3
#编译
make
#安装:
make install
#建立软链接,方便在终端中直接使用python3和pip3命令:
ln -s /usr/local/python3/bin/python3.8 /usr/bin/python3
ln -s /usr/local/python3/bin/pip3 /usr/bin/pip3
#显示版本:
python3 -V
pip3 -V
#更新pip3至最新版本
pip3 install --upgrade pip
安装django3.0.3
#安装virtualenv,建立虚拟环境管理
pip3 install virtualenv
# 建立软链接
ln -s /usr/local/python3/bin/virtualenv /usr/bin/virtualenv
#在根目录下虚拟环境文件夹。
mkdir -p /agp/env
#创建指定版本的虚拟环境。
cd /agp/env
virtualenv --python=/usr/bin/python3 pyweb
##要删除一个虚拟环境,只需删除它的文件夹。(执行 rm -rf venv )
#启动虚拟环境:
cd /agp/env/pyweb/bin
source activate
#虚拟环境里用python3安django3.03和uwsgi
pip3 install django==3.0.3
pip3 install uwsgi #2.0.18
#给uwsgi建立软链接
ln -s /usr/local/python3/bin/uwsgi /usr/bin/uwsgi
#退出虚拟环境
deactivate
#安装nginx
#添加nginx存储库
yum install epel-release
#安装nginx
yum install nginx
创建django项目
# 新建网站目录
mkdir -p /agp/wwwroot
#激活虚拟环境
source /agp/env/pyweb/bin/activate
# 创建项目
cd /agp/wwwroot
django-admin.py startproject agp_site
参考1
参考2
django中使用mysql数据库问题
django版本:3.0.3
python
django.get_version()
系统:centos7
配置mysql,不需要安装pymysql,直接安装mysqlclient
yum install gcc mariadb-devel
pip3 install mysqlclient
注:django项目中的__init__.py文件不再需要如下命令,不然会报错。以前旧版本django大多这样配置
import pymsql
pymysql.install_as_MySQLdb()
# 配置diango项目
vim /agp/wwwroot/agp_site/agp_site/settings.py
#修改ALLOWED_HOSTS,['*'],可以让任何IP访问
#TEMPLATES里添加模板路径"dir":[os.path.join(BASE_DIR, 'templates')]
## sql数据库链接
DATABASES = {
'default': {
# 默认使用sqlite3,所以先把它们注释掉
# 'ENGINE': 'django.db.backends.sqlite3',
# 'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
'ENGINE': 'django.db.backends.mysql',
'NAME': 'mysql', # 你的数据库名称
'USER': '', # 你的数据库用户名
'PASSWORD': '***', # 你的数据库密码
'HOST': '127.0.0.1', # 你的数据库主机,留空默认为localhost
'PORT': '3306', # 你的数据库端口
}
}
#settings.py文件尾部添加
STATICFILES_DIRS = (
os.path.join(BASE_DIR,'static'),
)
创建新的App
cd /agp/wwwroot/agp_site/
python3 manage.py startapp jhktmsg
#新定义的应用加到settings.py中的INSTALL_APPS中
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'jhktmsg',
]
# 刷新数据库
python3 manage.py makemigrations
python3 manage.py migrate
启动服务,然后访问
`python3 manage.py runserver
`
创建一个超级用户
python3 manage.py createsuperuser
# 输入http://127.0.0.1:8000/admin登录后台
20200221
#编辑jhktwsg应用中的views.py文件:
from django.http import HttpResponse
def msgio(request):
return HttpResponse("Hello, world. You're at the polls index.")
# 创建jhktwsg应用中的urls.py文件
cd /agp/wwwroot/agp_site/jhktwsg
vim urls.py
from django.urls import path
from . import views
urlpatterns = [
path('', views.msgio, name='msgio'),
]
#编辑agp_site项目中的urls.py文件:
from django.contrib import admin
from django.urls import include, path
urlpatterns = [
path('jhktmsg/', include('jhktmsg.urls')),
path('admin/', admin.site.urls),
]
#开启防火墙
systemctl start firewalld
#查看firewalld状态
systemctl status firewalld
#关闭防火墙
systemctl stop firewalld
# 开放端口3306
firewall-cmd --permanent --zone=public --add-port=3306/tcp
#查询TCP/UDP的80端口占用情况
firewall-cmd --query-port=80/tcp
firewall-cmd --query-port=80/udp
#如果返回结果为“no”,则表示该端口尚未开放
#永久开放TCP/UDP的80端口
firewall-cmd --permanent --zone=public --add-port=80/tcp
firewall-cmd --permanent --zone=public --add-port=80/udp
firewall-cmd --permanent --zone=public --add-port=8000/tcp
firewall-cmd --permanent --zone=public --add-port=8000/udp
#重启防火墙
firewall-cmd --reload
# 安装semanage
yum provides semanage
yum -y install policycoreutils-python.x86_64
#查看http允许访问的端口
semanage port -l | grep http_port_t
#将需要开放的端口加入到如上端口列表中,例如开放7878端口作为nginx与uwsgi通信的socket通道
semanage port -a -t http_port_t -p tcp 7878
关联nginx与uwsgi
#为django站点创建一个nginx服务的配置文件
cd /etc/nginx/conf.d/
vim agp_site.conf
vim /etc/nginx/conf.d/agp_site.conf
#在文件agp_site.conf中填入如下内容
server {
server_name 192.168.2.141; #暴露给外部访问的IP地址,根据实际情况改写成自己主机IP
listen 80; #暴露给外部访问的端口,确保端口在http访问和防火墙访问的允许列表中
charset utf-8;
location / {
include uwsgi_params;
uwsgi_pass 0.0.0.0:7878; #nginx与uwsgi通信用的socket接口,确保端口在http访问端口的列表中
uwsgi_param UWSGI_SCRIPT agp_site.wsgi; #wsgi.py所在的目录名+.wsgi
uwsgi_param UWSGI_CHDIR /agp/wwwroot/agp_site/; #项目路径
}
location /static/ {
alias /agp/wwwroot/agp_site/static/; #静态资源路径
}
}
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
server {
listen 80;
server_name 192.168.2.141; #192.168.2.141改为自己的域名,没域名修改成ip
charset utf-8;
location / {
include uwsgi_params;
uwsgi_pass 127.0.0.1:7878; #端口要和uwsgi里配置的一样
uwsgi_param UWSGI_SCRIPT agp_site.wsgi; #wsgi.py所在的目录名+.wsgi
uwsgi_param UWSGI_CHDIR /agp/wwwroot/agp_site; #项目路径
}
location /static/ {
alias /agp/wwwroot/agp_site/static/; #静态资源路径
}
}
}
server {
listen 80;
server_name www.django;
charset utf-8;
location / {
include uwsgi_params;
uwsgi_pass 127.0.0.1:7878; #端口要和uwsgi里配置的一样,这里只是演示作用,你想# # # 用哪个端口就用哪个端口,
#建议规避某些服务的端口,比如MySQL的3306等等
uwsgi_param UWSGI_SCRIPT agp_site.wsgi; #wsgi.py所在的目录名+.wsgi
uwsgi_param UWSGI_CHDIR /agp/wwwroot/agp_site/; #项目路径
}
location /static/ {
alias /agp/wwwroot/agp_site/static/; #静态资源路径
}
}
关联uwsgi与django
#创建uwsgi配置文件
cd /agp//wwwroot
touch agp_site_uwsgi.ini
vim agp_site_uwsgi.ini
#在agp_site_uwsgi.ini文件中填入如下内容
#agp_site_uwsgi.ini
[uwsgi]
#与nginx通信
socket = 0.0.0.0:9001
#让uwsgi作为单独的web-server,这里注释掉
#http = 127.0.0.1:7878
#django项目根目录
chdir = /agp/wwwroot/agp_site #根据实际情况改写成自己django项目的路径
#本项指示uwsgi.py文件的位置,其位于Django工程目录下有个与工程名同名的子文件夹内(设置方式为:文件夹名.wsgi)
#module = agp_site
wsgi-file = agp_site/wsgi.py
processes = 4
threads = 2
master = True
pidfile = agp_site_uwsgi.pid
daemonize = agp_site_uwsgi.log
# 虚拟环境地址
#virtualenv = /agp/env/pyweb
nginx+uwsgi+django联调测试
#先关闭nginx与uwsgi服务
pkill -9 nginx
pkill -9 uwsgi
#启动nginx服务
service nginx start
nginx -s reload # 重启Nginx
#启动uwsgi服务
cd /agp/wwwroot
source /agp/env/pyweb/bin/activate #激活虚拟环境pyweb
cd /agp/wwwroot/agp_site
vim /etc/nginx/conf.d/agp_site.conf
vim uwsgi_conf/agp_site_uwsgi.ini
uwsgi --ini agp_site_uwsgi.ini
#用浏览器访问django,访问方式为
<自己主机地址IP>:80/jhktmsg
#浏览器可以看到对应返回信息,说明部署成功,后面只需专注于django项目的开发了
vim /agp/wwwroot/agp_site/agp_site.xml
<uwsgi>
<socket>127.0.0.1:7878</socket> <!-- 内部端口,自定义 -->
<chdir>/agp/wwwroot/agp_site/</chdir> <!-- 项目路径 -->
<module>agp_site.wsgi</module> <!-- demo为wsgi.py所在目录名-->
<processes>4</processes> <!-- 进程数 -->
<threads>2</threads>
<master>True</master>
<pidfile>agp_site_uwsgi.pid</pidfile>
<daemonize>agp_site_uwsgi.log</daemonize> <!-- 日志文件 -->
</uwsgi>
uwsgi -x agp_site.xml
# uwsig使用配置文件启动
[uwsgi]
# 项目所在的根目录
chdir=/agp/wwwroot/agp_site/
# 指定项目的application,区别于启动命令--wsgi-filemysite/wsgi.py
module=agp_site.wsgi:application
#the local unix socket file than commnuincate to Nginx
# 指定sock的文件路径,这个sock文件会在nginx的uwsgi_pass配置,用来nginx与uwsgi通信
# 支持ip+port模式以及socket file模式
#socket=%(chdir)/uwsgi_conf/uwsgi.sock
socket=127.0.0.1:9001
# 进程个数
processes = 8
# 每个进程worker数
workers=5
procname-prefix-spaced=agp_site # uwsgi的进程名称前缀
py-autoreload=1 # py文件修改,自动加载
# 指定IP端口,web访问入口
http=0.0.0.0:9000
# 指定多个静态文件:static目录和media目录,也可以不用指定该静态文件,在nginx中配置静态文件目录
# uwsgi有自己的配置语法,详细可参考官网,无需写绝对路径,可以用循环、判断等高级配置语法
for =static media
static-map=/static=%(chdir)/%(_)
endfor =
# 启动uwsgi的用户名和用户组
uid=root
gid=root
# 启用主进程
master=true
# 自动移除unix Socket和pid文件当服务停止的时候
vacuum=true
# 序列化接受的内容,如果可能的话
thunder-lock=true
# 启用线程
enable-threads=true
# 设置一个超时,用于中断那些超过服务器请求上限的额外请求
harakiri=30
# 设置缓冲
post-buffering=4096
# 设置日志目录
daemonize=%(chdir)/uwsgi_conf/uwsgi.log
# uWSGI进程号存放
pidfile=%(chdir)/uwsgi_conf/uwsgi.pid
#monitor uwsgi status 通过该端口可以监控 uwsgi 的负载情况
# 支持ip+port模式以及socket file模式
# stats=%(chdir)/uwsgi_conf/uwsgi.status
stats = 127.0.0.1:9001
upstream blog_app {
# nginx通过socket在环回接口地址的9001端口与本地的uWSGI进程通信
# 支持ip:port模式以及socket file模式
#server unix:/opt/mywebapp/uwsgi_conf/uwsgi.sock;
server 127.0.0.1:9001;
}
server {
listen 9090;
server_name 192.168.100.5;
access_log /var/log/nginx/access.log;
charset utf-8;
gzip_types text/plain application/x-javascript text/css text/javascript application/x-httpd-php application/json text/json image/jpeg image/gif image/png application/octet-stream;
error_page 404 /404.html;
error_page 500 502 503 504 /50x.html;
location / {
# nginx转发动态请求到uWSGI
include uwsgi_params;
uwsgi_connect_timeout 20
uwsgi_pass blog_app;
}
# 如果写成/static/,nginx无法找到项目静态文件路径
location /static {
alias /agp/wwwroot/agp_site/static;
}
# 如果写成/media/,nginx无法找到项目媒体文件路径
location /media {
alias /agp/wwwroot/agp_site/media;
}
}
参考1
django3.0官方文档
CentOS7+win10+git
安装客户端
https://git-scm/downloads
#安装完后桌面右键点 Git Bash Here 进入命令框
git config --global user.name "你自己的name"
git config --global user.email "你自己的email"
#设置你自己的名字跟email,之后我们生成私钥跟公约。
ssh-keygen -t RSA -C "你自己的email"
# 根据提示输入保存文件名和设置passphrase
# 文件保存在当前目录下
#”保存的文件名“(私钥),”保存的文件名.pub“(公钥)两个文件,这里我们一会需要的是公钥的文件来添加权限.
服务器环境搭建
# centos7 安装git 默认已安装
yum install git -y
git --version
useradd git
passwd git
# 初始化Git
cd /agp/wwwroot # 进入网站目录
git --bare init
cd ..
#应用,git --bare init, 如使用git init则
#修改.git/config添加如下代码:
[receive]
denyCurrentBranch = ignore
# 给予相应权限
chown -R git:git wwwroot/
#服务器安装SSH
#查看是否安装
rpm -qa | grep ssh
# 安装缺失的包
yum install openssh*
#注册使用服务
systemctl enable sshd
#配置OpenSSH服务,编辑 sshd_config修改配置
vim /etc/ssh/sshd_config
#禁用root账户登录,如果是用root用户登录请开启
PermitRootLogin yes
# 是否让 sshd 去检查用户家目录或相关档案的权限数据,
# 这是为了担心使用者将某些重要档案的权限设错,可能会导致一些问题所致。
# 例如使用者的 ~.ssh/ 权限设错时,某些特殊情况下会不许用户登入
#StrictModes no
# 是否允许用户自行使用成对的密钥系统进行登入行为,仅针对 version 2。
# 至于自制的公钥数据就放置于用户家目录下的 .ssh/authorized_keys 内
RSAAuthentication yes
PubkeyAuthentication yes
AuthorizedKeysFile .ssh/authorized_keys
# 有了证书登录了,就禁用密码登录吧,安全要紧
#PasswordAuthentication no
#重启ssh
service sshd restart
#.ssh/authorized_keys这个是公钥存储的地方,是在/home/git/下的.ssh/下存放,实际目录/home/git/.ssh/authorized_keys
#在win10客户端执行命令
ssh git@服务器IP 'cat >> .ssh/authorized_keys' < 密钥文件名.pub
#ssh root@ip 'cat >> .ssh/authorized_keys' < wwwrootkey.pub
#centos,修改权限
cd ~
chmod 700 .ssh
cd .ssh
chmod 600 authorized_keys
在桌面上克隆服务器端项目
#服务器段的代码提交
cd /agp/wwwroot
git add *
git config --global user.email "email"
git config --global user.name "agp"
git commit -m '将服务器的django项目直接提交'
#win10 端
git clone root@ip:/agp/wwwroot
git add README.md
git commit -m 'README.md'
git push origin master
#然后查看历史记录
git log
git reflog #包含回滚的信息
git status #查看当前文件的状态(红色代表在工作区,绿色代表在暂存区,看不见东西证明所有修改的信息都已提交到历史区)
参考1
参考2
win10端conda新建django环境
# 列出当前环境
conda env list
# 创建python3.8.1环境
conda create -n python38 python=3.8.1
# 指定目录的创建
#conda create --prefix="D:\\my_python\\envs\\python38" python=3.8.1
#进入环境
activate python38
# 退出环境
# deactivate
# 删除环境
#conda remove -n python38 --all
# 安装django3.0.3
conda install django==3.0.3
# 安装mysqlclient
pip install mysqlclient
后期运行
重新刷新完整命令
source /agp/env/pyweb/bin/activate && pkill -9 nginx && pkill -9 uwsgi && cd /agp/wwwroot/agp_site && uwsgi --ini agp_site_uwsgi.ini && cd /agp/wwwroot/jhkt_site && uwsgi --ini jhkt_site_uwsgi.ini &&service nginx start && nginx -s reload
#先关闭nginx与uwsgi服务
pkill -9 nginx
pkill -9 uwsgi
#启动nginx服务
service nginx start
nginx -s reload # 重启Nginx
#启动uwsgi服务
cd /agp/wwwroot
source /agp/env/pyweb/bin/activate #激活虚拟环境pyweb
cd /agp/wwwroot/agp_site
vim /etc/nginx/conf.d/agp_site.conf
vim uwsgi_conf/agp_site_uwsgi.ini
Django启用SSL证书
参考文章
#vim /etc/nginx/nginx.conf
vim /etc/nginx/conf.d/agp_site.conf
server {
server_name 192.168.2.141; #暴露给外部访问的IP地址,根据实际情况改写成自
己主机IP
listen 80; #暴露给外部访问的端口,确保端口在http访问和防火墙访问的允许列表中
charset utf-8;
rewrite ^(.*) https://$server_name$1 permanent;
location / {
include uwsgi_params;
uwsgi_pass 0.0.0.0:8001; #nginx与uwsgi通信用的socket接口,确保端口在http访问端口的列表中
uwsgi_param UWSGI_SCRIPT agp_site.wsgi; #wsgi.py所在的目录名+.wsgi
uwsgi_param UWSGI_CHDIR /agp/wwwroot/agp_site; #项目路径
}
location /static/ {
alias /agp/wwwroot/agp_site/static; #静态资源路径
}
}
server {
listen 443 ssl;
server_name 192.168.2.141;
ssl_certificate /agp/wwwroot/*.pem;
ssl_certificate_key /agp/wwwroot/*.key;
ssl_session_cache shared:SSL:1m;
ssl_session_timeout 10m;
ssl_ciphers HIGH:!aNULL:!MD5;
ssl_prefer_server_ciphers on;
location / {
include uwsgi_params;
uwsgi_pass 0.0.0.0:8001; #nginx与uwsgi通信用的socket接口,确保端口在http访问端口的列表中
uwsgi_param UWSGI_SCRIPT agp_site.wsgi; #wsgi.py所在的目录名+.wsgi
uwsgi_param UWSGI_CHDIR /agp/wwwroot/agp_site; #项目路径
}
location /static/ {
alias /agp/wwwroot/agp_site/static; #静态资源路径
}
}
本文标签: 笔记
版权声明:本文标题:centos7 + python3 + django3.0.3 + mysql8.0 + 开发笔记-20200220 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.freenas.com.cn/jishu/1726333067h938889.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论