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; #静态资源路径
        }
    }







本文标签: 笔记