常用工具与配置
3 豆瓣源&生成项目依赖包(查看安装包版本)
5 linux启动项目(nginx,防火墙)
12 端口测试命令(wget,curl,telnet,ssh,tcping)
包工具:
其他菜鸡:
官网链接:https://git-scm.com/book/zh/v2/%E8%B5%B7%E6%AD%A5-%E5%AE%89%E8%A3%85-Git
文档参考:https://zhuanlan.zhihu.com/p/30355251
############git ############ 文档参考:https://zhuanlan.zhihu.com/p/30355251 git config # git config --global -l #查看当前用户配置 git config --global user.name "xxx" #名称 git config --global user.email "xxx" #邮箱 git status [filename] 查看指定文件状态 branch git branch -a #查看所有分支 git branch -r #查看远程分支 git branch #查看本地分支 git branch [branch-name] #新建分支,但停留在当前分支 git checkout -b [branc-name] #新建分支,并切换到该分支 git clone -b dev开发分支 https://github.com/521/springboot-rabbitmq.git //clone指定分支,不指定默认为master git checkout -b dev origin/dev #本地已有项目下拉取远程分支:dev是本地分支, origin/dev 是远程分支 git checkout -- . # 让工作区中的所有文件撤销更改 git branch -d xxx#删除本地分支 git push origin --delete xxx #删除远程分支 git merge [branch] #合并指定分支到当前分支 版本 git reflog #查看之后log git log #查看之前log git log --pretty=oneline #格式化log形式 git reset --hard #查看当前版本 git reset --hard commit-id #回退版本 tag标签 git tag -a v1 -m "my version 1" #创建标签 (为当前提交创建一个标签,标签名为v1.0,-m就是该标签的附注信息) git log --pretty=oneline #查看历史版本 git tag -a v1.2 9fceb02 #给过去版本打标签 git tag #列出标签 git tag -l "v1.8.5*" #特定的模式查找标签 git show v1 #展示标签与之对应的提交信息 git push origin v1.5 #推送单个标签 git push origin --tags #推送所有标签 git tag -d v1.4-lw #删除本地标签 git push origin --delete <tagname> #删除远程标签
############git ############ git config # git config --global -l #查看当前用户配置 git config --global user.name "xxx" #名称 git config --global user.email "xxx" #邮箱 git status [filename] 查看指定文件状态 branch git branch -a #查看所有分支 git branch -r #查看远程分支 git branch #查看本地分支 git branch [branch-name] #新建分支,但停留在当前分支 git checkout -b [branc-name] #新建分支,并切换到该分支
git checkout -- . # 让工作区中的所有文件撤销更改 git clone -b dev开发分支 https://github.com/521/springboot-rabbitmq.git //clone指定分支,不指定默认为master git checkout -b dev origin/dev #本地已有项目下拉取远程分支:dev是本地分支, origin/dev 是远程分支 git branch -d xxx#删除本地分支 git push origin --delete xxx #删除远程分支 git merge [branch] #合并指定分支到当前分支 版本 git reflog #查看之后log git log #查看之前log
git log --pretty=oneline #格式化log形式 git reset --hard #查看当前版本 git reset --hard commit-id #回退版本
tag标签
git tag -a v1 -m "my version 1" #创建标签 (为当前提交创建一个标签,标签名为v1.0,-m就是该标签的附注信息)
git log --pretty=oneline #查看历史版本
git tag -a v1.2 9fceb02 #给过去版本打标签
git tag #列出标签
git tag -l "v1.8.5*" #特定的模式查找标签
git show v1 #展示标签与之对应的提交信息
git push origin v1.5 #推送单个标签
git push origin --tags #推送所有标签
git tag -d v1.4-lw #删除本地标签
git push origin --delete <tagname> #删除远程标签
# 查看当前所在版本 git reset --hard # 查看git 相关配置
vim .git/config
# 去除git版本控制 find . -name ".git" | xargs rm -Rf
# git修改远程仓库地址(先删后加) git remote rm origin
git remote add origin url
git init git add git commit git log git reflog git reset --hard 版本号 1. 取别名 git remote add origin 地址 2. 推送代码 git push -u origin 分支 git pull origin dev 3 看看远端仓库信息 git remote -v pycharm 使用GIt 1 clone代码 VCS---->Get from Version Control-->URL(复制远程地址) 2 进行编辑代码 3Commit 提交代码,生成版本 4 推送代码 VCS-->git-->Push(快捷键Ctrl +Shift+K) 5 拉取代码
# pycharm .idea/ .DS_Store __pycache__/ *.py[cod] *$py.class # Django stuff: local_settings.py *.sqlite3 # database migrations */migrations/*.py !*/migrations/__init__.py
全局User配置(只用操作一次) git config --global user.name "your_Name" git config --global user.email "your_email" 初始化本地Git仓库 git init 绑定远程仓库 git remote add origin 远程仓库地址 将所有文件添加到暂存区 git add * 将暂存区的文件添加到本地仓库 git commit -m "注释" 将远程仓库和本地仓库合并(如果合并失败整理好再push 或者 强制push) git pull origin master --allow-unrelated-histories 将本地仓库推送到远程仓库(-u 跟踪分支 -f 强制推送) git push -u origin master git push -f origin master
1 查看更多详情
# 以管理员身份启动 cmd C:\>cd C:\ProgramData\Anaconda3 C:\ProgramData\Anaconda3>cd Scripts C:\ProgramData\Anaconda3\Scripts>activate
虚拟环境 virtualenv 1.安装 pip install virtualenv pip install virlualenv -i http://pypi.douban.com/simple --trusted-host pypi.douban.com 2.创建虚拟环境 virtualenv 环境名称 # 注意 :创建【环境名称】文件夹,放置所有的环境,进入指定目录 D:/envs 示例:假设电脑 py27 / py36 virtualenv s28(环境名称) --python=python3.6 #virtualenv s28(环境名称) --python=python2.7 3 激活 、退出虚拟环境 打开终端 ,找到s28 win: cd Scripts # 进入虚拟环境 Scripts目录 activate #激活虚拟环境 deactivate #Scripts目录,退出虚拟环境 mac: source s25/bin/activate deactivate #任意目录 退出虚拟环境 4 在虚拟环境种安装模块 pip3 install django==1.11.7 -i http://pypi.douban.com/simple --trusted-host pypi.douban.com
# 检测某个模块包是否安装
python -c "import channels; print(channels.__version__)"
--生成所需安装包 pip freeze > requirements.txt --安装所需包 pip install -r requirements.txt --豆瓣源&清华源 pip install -i http://pypi.douban.com/simple/ sayhi --trusted-host pypi.douban.com #sayhi是模块名
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple pyinstaller #清华源 - 安装 pip3 install pipreqs -执行相关命令 - 生成依赖文件:pipreqs ./ - 安装依赖文件:pip3 install -r requirements.txt #如果出现编码格式错误: UnicodeDecodeError: 'gbk' codec can't decode byte 0x80 in position 776: illegal multibyte sequence ###解决方法在命令后面指定编码格式: pipreqs ./ --encoding=utf8
安装Miniconda:https://zh-v2.d2l.ai/chapter_installation/index.html
安装流程:
网址:https://conda.io/en/latest/miniconda.html wget https://repo.anaconda.com/miniconda/Miniconda3-py310_23.1.0-1-Linux-x86_64.sh #下载脚本 sh Miniconda3-py39_4.12.0-Linux-x86_64.sh # 执行 ~/miniconda3/bin/conda init #初始化Shell,以便直接运行conda conda create --name d2 python=3.9 #关启shell,创建虚拟环境 conda activate d2 #激活 d2环境
Conda的环境管理 1创建环境 # 创建一个名为python34的环境,指定Python版本是3.5(不用管是3.5.x,conda会为我们自动寻找3.5.x中的最新版本) conda create --name py35 python=3.5 2激活环境 # 安装好后,使用activate激活某个环境 activate py35 # for Windows source activate py35 # for Linux & Mac (py35) user@user-XPS-8920:~$ # 激活后,会发现terminal输入的地方多了py35的字样,实际上,此时系统做的事情就是把默认2.7环境从PATH中去除,再把3.4对应的命令加入PATH (py35) user@user-XPS-8920:~$ python --version Python 3.5.5 :: Anaconda, Inc. # 可以得到`Python 3.5.5 :: Anaconda, Inc.`,即系统已经切换到了3.5的环境 3 返回主环境 # 如果想返回默认的python 2.7环境,运行 deactivate py35 # for Windows source deactivate py35 # for Linux & Mac 4删除环境 # 删除一个已有的环境 conda remove --name py35 --all 5 查看系统中的所有环境 用户安装的不同Python环境会放在~/anaconda/envs目录下。查看当前系统中已经安装了哪些环境,使用conda info -e。 user@user-XPS-8920:~$ conda info -e # conda environments: # base * /home/user/anaconda2 caffe /home/user/anaconda2/envs/caffe py35 /home/user/anaconda2/envs/py35 tf /home/user/anaconda2/envs/tf 6 Conda的包管理 -安装库 为当前环境安装库 conda install numpy # conda会从从远程搜索numpy的相关信息和依赖项目 -查看已经安装的库 # 查看已经安装的packages conda list # 最新版的conda是从site-packages文件夹中搜索已经安装的包,可以显示出通过各种方式安装的包 -查看某个环境的已安装包 # 查看某个指定环境的已安装包 conda list -n py35 搜索package的信息 # 查找package信息 conda search numpy Loading channels: done # Name Version Build Channel numpy 1.5.1 py26_1 pkgs/free ... numpy 1.15.1 py37hec00662_0 anaconda/pkgs/main numpy 1.15.1 py37hec00662_0 pkgs/main -安装package到指定的环境 # 安装package conda install -n py35 numpy # 如果不用-n指定环境名称,则被安装在当前活跃环境 # 也可以通过-c指定通过某个channel安装 -更新package # 更新package conda update -n py35 numpy -删除package # 删除package conda remove -n py35 numpy -更新conda # 更新conda,保持conda最新 conda update conda 更新anaconda -# 更新anaconda conda update anaconda ``` -### 更新Python 更新python conda update python 假设当前环境是python 3.5, conda会将python升级为3.5.x系列的当前最新版本 设置国内镜像 因为http://Anaconda.org的服务器在国外,所有有些库下载缓慢,可以使用清华Anaconda镜像源。 网站地址: 清华大学开源软件镜像站 Anaconda 镜像 Anaconda 安装包可以到 https://mirrors.tuna.tsinghua.edu.cn/anaconda/archive/ 下载。 TUNA还提供了Anaconda仓库的镜像,运行以下命令: conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/ conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main/ conda config --set show_channel_urls yes 即可添加 Anaconda Python 免费仓库。 运行 conda install numpy 测试一下吧。 Miniconda 镜像 Miniconda 是一个 Anaconda 的轻量级替代,默认只包含了 python 和 conda,但是可以通过 pip 和 conda 来安装所需要的包。 Miniconda 安装包可以到 https://mirrors.tuna.tsinghua.edu.cn/anaconda/miniconda/ 下载。
1 conda启动cmd启动 处理过程:使用utools搜索Anacondas3-->找到Anaconda Prompt (Anaconda3).lnk-->找到源文件右键属性找到目标 C:\ProgramData\Anaconda3\Scripts\activate.bat C:\ProgramData\Anaconda3
conda常用命令
conda info --envs 查看conda环境下所有的虚拟环境
conda create -n 虚拟环境名字 python=3.6 #创建虚拟环境 conda activate 虚拟环境名字 #激活虚拟环境 conda deactivate #退出虚拟环境
conda list #查看当前虚拟环境里已经安装的库
conda remove -n aotu --all # 删除虚拟环境
conda install uwsgi -c conda-forge # -c conda-forge(当前pkgs找不到时可以加上此参数)
conda config --show channels #查看镜像源
conda config --remove-key channels #移除镜像源
#添加镜像源
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main
conda config --set show_channel_urls yes
说明:windows 创建虚拟环境,需要在conda base环境下,否则报错!
其他(conda-forge...)
conda install uwsgi -c conda-forge # -c conda-forge(当前pkgs找不到时可以加上此参数)
#####linux-----cnblog##### ##测试环境下启动 1 上传代码--创建虚拟环境 cd /usr/src/cnblog # 代码存放位置 cd /python_venv virtualenv --python=python3 cnblog_env 2启动虚拟环境 alias cnblog_venv='source /python_venv/cnblog_env/bin/activate' #alias start_cnblog='python /usr/src/s25/manage.py runserver 0.0.0.0:9000' 3安装相应的模块 pip3 freeze > requirements.txt pip3 install -i https://pypi.douban.com/simple -r requirements.txt #或者手动安装 pip3 install -i https://pypi.douban.com/simple django==3.1.7 pip3 install -i https://pypi.douban.com/simple pymysql pip3 install -i https://pypi.douban.com/simple Pillow pip3 install -i https://pypi.douban.com/simple bs4 4 安装并启动mysql yum install mariadb-server mariadb -y systemctl start mariadb 5 导入导出数据 数据从window中导出 mysqldump -uroot -p --databases cnblog > cnblog.sql linux导入数据 mysql -uroot -p < /opt/alldb.sql 6启动项目 alias start_cnblog='python /usr/src/cnblog/manage.py runserver 0.0.0.0:9000' start_cnblog ##uwsgi启动 让你的django在linux上,支持并发形式启动,支持多进程,多线程,乃至于协程的一个C语言编写的高性能工具 1.安装uwsgi工具 pip3 install -i https://pypi.douban.com/simple uwsgi 2.编写uwsgi.ini配置文件,以多进程形式启动tf_crm touch uwsgi.ini #手动创建此uwsgi的配置文件,写入如下的内容参数,去启动crm (在项目目录下/usr/src/cnblog创建) # 写入如下的功能性的参数配置,用于启动项目 # 这些部署的流程,是国外的uwsgi官网,给与的用法,我们照着用即可 # 注意要根据你自己的目录,修改如下的参数 [uwsgi] # Django-related settings # the base directory (full path) # 填写crm项目的第一层绝对路径 chdir = /opt/tf_crm/ # Django's wsgi file # 填写crm项目第二层的相对路径,找到第二层目录下的wsgi.py # 这里填写的不是路径,是以上一个参数为相对,找到第二层项目目录下的wsgi.py文件 module = tf_crm.wsgi # the virtualenv (full path) # 填写虚拟环境解释器的第一层工作目录 home = /opt/tf_crm/venv_crm # process-related settings # master master = true # maximum number of worker processes # 代表定义uwsgi运行的多进程数量,官网给出的优化建议是 2*cpu核数+1 ,单核的cpu填写几? # 如果是单进程,十万个请求,都丢给一个进程去处理 # 3个工作进程,十万个请求,就分给了3个进程去分摊处理 processes = 3 # the socket (use the full path to be safe # 这里的socket参数,是用于和nginx结合部署的unix-socket参数,这里临时先暂停使用 # socket = 0.0.0.0:8000 # 线上不会用http参数,因为对后端是不安全的,使用socket参数是安全的连接,用nginx反向代理去访问 # 后端程序是运行在防火墙内部,外网是无法直接访问的 # 临时使用http参数,便于我们用浏览器调试访问 http = 0.0.0.0:8000 # ... with appropriate permissions - may be needed # chmod-socket = 664 # clear environment on exit vacuum = true 3.此时可以用命令,基于uwsgi协议的一个高性能web后端启动了 uwsgi --ini ./uwsgi.ini #指定配置文件启动后端 4.此时crm项目,已经用uwsgi支持了3个进程的启动了,但是由于uwsgi对静态文件的解析性能很弱,线上是丢给nginx去处理的 #####使用supervisor进行管理######## 8.uwsgi和uwsgi.ini都配置完毕之后,开始使用supervisor工具进行管理了 - 1.使用yum命令即可直接安装 [root@s25linux ~]# yum install supervisor -y - 2.生成supervisor的配置文件 [root@s25linux ~]# echo_supervisord_conf > /etc/supervisord.conf 先明确,启动uwsgi的绝对路径命令是什么 8.1 找到uwsgi的绝对路径 /python_venv/cnblog_env/bin/uwsgi # which uwsgi 8.2 找到uwsgi.ini的绝对路径 /usr/src/cnblog/uwsgi.ini 8.3 因此 启动 crm项目的 完整绝对路径命令是 /python_venv/cnblog_env/bin/uwsgi --ini /usr/src/cnblog/uwsgi.ini 9.修改supervisor的配置文件 vim /etc/supervisord.conf #写入如下 (大写G跳到最底层) [program:cnblog] command=/python_venv/cnblog_env/bin/uwsgi --ini /usr/src/cnblog/uwsgi.ini ;supervisor其实就是在帮你执行命令而已! autostart=true ; 在supervisord启动的时候也自动启动 startsecs=10 ; 启动10秒后没有异常退出,就表示进程正常启动了,默认为1秒 autorestart=true ; 程序退出后自动重启,可选值:[unexpected,true,false],默认为unexpected,表示进程意外杀死后才重启 stopasgroup=true ;默认为false,进程被杀死时,是否向这个进程组发送stop信号,包括子进程 killasgroup=true ;默认为false,向进程组发送kill信号,包括子进程 10.启动supervisor,默认就会直接启动uwsgi了 supervisord -c /etc/supervisord.conf #启动supervisor服务端,指定配置文件启动 启动完毕supervisor之后,检查进程信息 ps -ef|grep supervisor #检查supervisor是否存在了进程,是否启动 ps -ef|grep uwsgi #检查uwsgi是否启动 11.supervisor任务管理终端 supervisorctl -c /etc/supervisord.conf 看到如下的结果,表示你自定义的任务s25crm,也就是uwsgi进程,正确的启动了 (venv_crm_again) [root@s25linux tf_crm]# supervisorctl -c /etc/supervisord.conf s25crm RUNNING pid 41451, uptime 0:01:34 supervisor> 12.看到了没有静态文件的 crm界面,就是正确的了 13.supervisorctl的管理命令 提供了如下命令 (venv_crm_again) [root@s25linux tf_crm]# supervisorctl -c /etc/supervisord.conf s25crm RUNNING pid 41451, uptime 0:01:34 supervisor> supervisor>start s25crm supervisor>stop s25crm supervisor>status supervisor>start all supervisor>stop all 14.uwsgi异常崩溃的话,supervisor会立即重启uwsgi 15.如果要运行多个 uwsgi项目,在supervisor中定义多个任务即可 16 此时配置好nginx.conf就完事了,修改如下,配置nginx,请求转发给后台即可 server { listen 80; server_name localhost; #这是一个局部的变量,只对当前这个server{}代码块生效,编码设置为utf-8 charset utf-8; error_page 404 /40x.html; # 这里的locaiton 路径匹配,如果你写的是root参数,就是一个web站点功能 # 基于uwsgi协议的一个高性能的反向代理转发,新的参数 location / { #当请求发送给 192.168.178.140:80的时候 #通过uwsgi_pass把请求转发给后端的uwsgi服务器 uwsgi_pass 0.0.0.0:8000; #这个参数,是固定的,是添加一些转发请求头内容 include uwsgi_params; } } 18.重启nginx nginx -s reload 18.1 此时发现静态文件丢失,例如如下的静态文件 http://192.168.178.143/static/js/common.js http://192.168.178.143/static/css/style.css http://192.168.178.143/static/js/jquery.validate.min.js 19.还得配置nginx接收所有的django静态文件,修改命令如下 第一步:修改django的配置文件,收集所有的静态文件,放入一个统一管理的目录 vim settings.py #添加如下内容 STATIC_ROOT='/s25static/' #作用是定义一个统一管理的目录,收集所有crm的静态文件 第二步:用命令收集静态文件 python3 manage.py collectstiac 20.通过nginx去找到如下的静态文件即可 ###小知识:supervisor工具的介绍与安装#### --supervisor工具 目前你所学的linux技能 对crm的进程进行管理,启停 ps -ef|grep python3 ps -ef|grep uwsgi #检查uwsgi的进程,确认django是否存活,假如检测到pid是 5999 停止uwsgi,kill -9 5999 #检测uwsgi如果挂掉之后,自动帮你重启 #使用supervisor这个python开发的进程管理工具,用它启动uwsgi之后,uwsgi进程挂掉后,自动会再启动 比如,crm的部署技术栈 nginx+uwsgi+django+mysql ,我们可以手动的,单独启动每一个进程 还可以通过supervisor一键启动这四个进程,进行批量管理,批量启停 ,很好用 ----安装supervisor工具 1.使用yum命令即可直接安装 [root@s25linux ~]# yum install supervisor -y 2.生成supervisor的配置文件 [root@s25linux ~]# echo_supervisord_conf > /etc/supervisord.conf 3.修改supervisor的配置文件,添加管理crm的任务 vim /etc/supervisor.conf #再最底行,添加如下内容 #[program:xx]是被管理的进程配置参数,xx是进程的名称 [program:s25crm] command=写入启动uwsgi的命令 ;supervisor其实就是在帮你执行命令而已! autostart=true ; 在supervisord启动的时候也自动启动 startsecs=10 ; 启动10秒后没有异常退出,就表示进程正常启动了,默认为1秒 autorestart=true ; 程序退出后自动重启,可选值:[unexpected,true,false],默认为unexpected,表示进程意外杀死后才重启 stopasgroup=true ;默认为false,进程被杀死时,是否向这个进程组发送stop信号,包括子进程 killasgroup=true ;默认为false,向进程组发送kill信号,包括子进程 nginx 官方nginx tenginx 淘宝nginx 这2个一模一样,淘宝的nginx,官方文档更详细 #小知识: ---如果你想删除 编译安装的软件 1,清空PATH 2,删除文件夹即可 ---linux命令:curl -I baidu.com # 对百度发起请求 ---查询端口 netstat -tunlp|grep 80 #####eginx####### 注意,编译软件之前,还是需要解决系统的开发环境,例如如下 yum install gcc patch libffi-devel python-devel zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel gdbm-devel db4-devel libpcap-devel xz-devel openssl openssl-devel -y 1.进入淘宝nginx官网,下载源代码,进行编译安装 http://tengine.taobao.org/index_cn.html 2.在linux的opt目录下,下载nginx源代码 wget http://tengine.taobao.org/download/tengine-2.3.2.tar.gz 3.解压缩源代码,准备编译三部曲 [root@s25linux opt]# tar -zxvf tengine-2.3.2.tar.gz 4.进入源码目录,指定nginx的安装位置 [root@s25linux tengine-2.3.2]# ./configure --prefix=/opt/tngx232/ 5.编译且编译安装,生成nginx的可执行命令目录 make && make install 6.安装完毕后,会生成/opt/tngx232/文件夹,nginx可以使用的配置都在这里了 [root@s25linux tngx232]# ls conf html logs sbin conf 明显是存放*.conf配置文件的 html 存放网页的静态文件的目录 logs 日志 sbin 存放nginx的可执行命令 7.添加nginx到PATH中,可以快捷执行命令 永久修改PATH,开机就去读 vim /etc/profile 写入PATH="/opt/tngx232/sbin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:" source /etc/profile 8.首次启动nginx,注意要关闭防火墙 直接输入nginx命令即可启动 有关nginx的命令 nginx #首次输入是直接启动,不得再次输入 nginx -s reload #平滑重启,重新读取nginx的配置文件,而不重启进程 nginx -s stop #停止nginx进程 nginx -t #检测nginx.conf语法是否正确 9.默认访问nginx的首页站点url是 http://192.168.178.140:80/index.html 示例访问: http://49.235.88.178:80/ sass (使用nginx+uwsgi) http://49.235.88.178:9001/ cnblog(使用uwsgi)
防火墙(查看与禁用)
systemctl status firewalld #查看防火墙 systemctl stop firewalld #关闭firewalld服务 systemctl disable firewalld #禁止开机自启 systemctl stop iptables #关闭iptables systemctl disable iptables #禁止开机自启
vi /etc/selinux/config #禁用selinux
SELINUX=disabled
nginx配置文件示例(saas密码:huawang12)
1.which nginx # 找到nginx --->/opt/tngx232/sbin/nginx
whereis nginx 2.cd /opt/tngx232 3 ls 4 cd conf #cd到conf目录下 5 ls-->vim nginx.conf #编辑nginx配置文件
6 nginx常用命令:
cd /usr/local/nginx/sbin/
./nginx 启动
./nginx -s stop 停止
./nginx -s quit 安全退出
./nginx -s reload 重新加载配置文件
ps aux|grep nginx 查看nginx进程
--示例:
http { include mime.types; default_type application/octet-stream; log_format main '$remote_addr - $remote_user [$time_local] "$request" ' '$status $body_bytes_sent "$http_referer" ' '"$http_user_agent" "$http_x_forwarded_for"'; access_log logs/access.log main; #access_log "pipe:rollback logs/access_log interval=1d baknum=7 maxsize=2G" main; sendfile on; #tcp_nopush on; #keepalive_timeout 0; keepalive_timeout 65; #gzip on; # # 用upstream关键词定义负载均衡池,写入资源服务器的地址 # # 负载均衡的算法,默认是轮询机制,一台服务器处理一次 upstream s25real_server { #user nobody; worker_processes 1; #error_log logs/error.log; #error_log "pipe:rollback logs/error_log interval=1d baknum=7 maxsize=2G"; #pid logs/nginx.pid; events { default_type application/octet-stream; log_format main '$remote_addr - $remote_user [$time_local] "$request" ' '$status $body_bytes_sent "$http_referer" ' '"$http_user_agent" "$http_x_forwarded_for"'; access_log logs/access.log main; #access_log "pipe:rollback logs/access_log interval=1d baknum=7 maxsize=2G" main; sendfile on; #tcp_nopush on; #keepalive_timeout 0; keepalive_timeout 65; #gzip on; # # 用upstream关键词定义负载均衡池,写入资源服务器的地址 # # 负载均衡的算法,默认是轮询机制,一台服务器处理一次 upstream s25real_server { server 49.235.88.178:85; server 49.235.88.178:90; } server { listen 80; server_name localhost; #charset koi8-r; #access_log logs/host.access.log main; #access_log "pipe:rollback logs/host.access_log interval=1d baknum=7 maxsize=2G" main; location / { #当请求发送给 192.168.178.140:80的时候 #通过uwsgi_pass把请求转发给后端的uwsgi服务器 uwsgi_pass 0.0.0.0:8001; # #这个参数,是固定的,是添加一些转发请求头内容 include uwsgi_params; # proxy_pass http://49.235.88.178:85; # proxy_pass http://s25real_server; # root html; # root /s25python/; #index index.html index.htm; } #error_page 404 404.html; # redirect server error pages to the static page /50x.html # error_page 500 502 503 504 /50x.html; location = /50x.html { root html; } location /static { alias /s25static; } # proxy the PHP scripts to Apache listening on 127.0.0.1:80 # #location ~ \.php$ { # 这里是第二个虚拟主机的配置了 server { listen 85; server_name _; # #nginx的域名匹配 # # 当用户访问 192.168.178.140:89的时候,返回该目录的内容 location / { root /s25python/; index index.html; error_page 404 /40x.html; } } # 这里是第三个虚拟主机的配置了 server { listen 90; server_name localhost_; # # #nginx的域名匹配 # # # 当用户访问 192.168.178.14.90的时候,返回该目录的内容 # location / { #xmall 商城项目 try_files $uri $uri/ /index.html; #匹配所有的路由 root /tmp/dist; #填写前端的根目录 index index.html index.htm;} } }
# 开启 service firewalld start # 重启 service firewalld restart # 关闭 service firewalld stop # 查看防火墙规则 firewall-cmd --list-all # 查询端口是否开放 firewall-cmd --query-port=8080/tcp # 开放80端口 firewall-cmd --permanent --add-port=80/tcp # 移除端口 firewall-cmd --permanent --remove-port=8080/tcp #重启防火墙(修改配置后要重启防火墙) firewall-cmd --reload # 参数解释 1、firwall-cmd:是Linux提供的操作firewall的一个工具; 2、--permanent:表示设置为持久; 3、--add-port:标识添加的端口;
nginx演示:
upstream lb{ server 127.0.0.1:8080 weight=1; server 127.0.0.1:8081 weight=1; } location / { proxy_pass http://lb; }
部署前后端分离项目(xmall为例)
### 上线部署 #服务器准备 www.pyhonav.cn 阿里云买台服务器 **登录服务器** `用户名:ssh root@49.235.88.178` `密码:xxxx` ------ **1 安装node* `cd /opt/` `wget https://nodejs.org/download/release/v10.15.3/node-v10.15.3-linux-x64.tar.xz ` **2 解压node** `xz -d node-v10.15.3-linux-x64.tar.xz ` :去除掉.xz后缀 `tar -xf node-v10.15.3-linux-x64.tar ` **3配置环境变量**(echo $PATH) ```js 在/etc/profile最后一行添加 export PATH=/opt/node-v10.15.3-linux-x64/bin/node:/opt/node-v10.15.3-linux-x64/bin/npm:$PATH 然后 source /etc/profile ``` **4 安装pm2进程管理工具** ```js 1 npm install pm2 -g (全局安装) 2 ln -s /opt/node-v10.15.3-linux-x64/lib/node_modules/pm2/bin/pm2 (创建软连接) 3 pm2 list (查看进程) pm2 -v (查看版本) 4 pm2 start npm --name "my-nuxt" -- run start (启动,引号内是线程名) 5 pm2 delete my-nuxt (结束进程) ``` **5 部署后端代码(node)** 项目所在目录 :/tmp/server cd /tmp/server 启动:pm2 start app.js - `git pull https://www.github.com/xiaomage/server` - 模拟本地文件上传到服务器 - 本地终端运行:`scp ./server.zip root@49.235.88.178:/tmp` - 服务器终端运行:`unzip server.zip && cd server && npm install && pm2 start app.js` - 访问:http://49.235.88.178:3000/api/goods/home **6 部署Vue前端项目** 前端打包文件: ```js npm run build ``` - 本地终端运行:`scp ./dist.zip root@49.235.88.178:/tmp` - 服务器终端运行:`unzip dist.zip` **7 部署nginx** 找到nginx的安装目录 ```js //以我的服务器为例:nginx目录 cd /opt/ngx112/conf vim nginx.conf //修改配置文件如下 server { listen 80; //端口号 server_name www.pythonav.cn; //域名 location / { try_files $uri $uri/ /index.html; #匹配所有的路由 root /tmp/dist; //填写前端的根目录 index index.html index.htm; } } ``` 输入nginx的启动命令 ``` nginx 第一次输入是启动 nginx -s reload #平滑重启,重新读取配置文件,不重启进程 nginx -s stop ``` 访问http://www.pythonav.cn 查看xmall商城项目(测试:http://49.235.88.178:90/) ![image-20191118151652251](assets/image-20191118151652251.png)
setting.py
try: from .local_settings import * except ImportError: pass
""" Django settings for s25 project. Generated by 'django-admin startproject' using Django 1.11.7. For more information on this file, see https://docs.djangoproject.com/en/1.11/topics/settings/ For the full list of settings and their values, see https://docs.djangoproject.com/en/1.11/ref/settings/ """ import os # Build paths inside the project like this: os.path.join(BASE_DIR, ...) BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) # Quick-start development settings - unsuitable for production # See https://docs.djangoproject.com/en/1.11/howto/deployment/checklist/ # SECURITY WARNING: keep the secret key used in production secret! SECRET_KEY = '5cgwwp#mio9=kq@rfi!oi2h=b=wcd0_2p!qf33@)k%x4kdg!0*' # SECURITY WARNING: don't run with debug turned on in production! DEBUG = True ALLOWED_HOSTS = [] # Application definition INSTALLED_APPS = [ 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', 'app01.apps.App01Config', 'web.apps.WebConfig' ] MIDDLEWARE = [ 'django.middleware.security.SecurityMiddleware', 'django.contrib.sessions.middleware.SessionMiddleware', 'django.middleware.common.CommonMiddleware', 'django.middleware.csrf.CsrfViewMiddleware', 'django.contrib.auth.middleware.AuthenticationMiddleware', 'django.contrib.messages.middleware.MessageMiddleware', 'django.middleware.clickjacking.XFrameOptionsMiddleware', 'web.middleware.auth.AuthMiddleware' ] ROOT_URLCONF = 's25.urls' TEMPLATES = [ { 'BACKEND': 'django.template.backends.django.DjangoTemplates', 'DIRS': [os.path.join(BASE_DIR, 'templates')] , 'APP_DIRS': True, 'OPTIONS': { 'context_processors': [ 'django.template.context_processors.debug', 'django.template.context_processors.request', 'django.contrib.auth.context_processors.auth', 'django.contrib.messages.context_processors.messages', ], }, }, ] WSGI_APPLICATION = 's25.wsgi.application' # Database # https://docs.djangoproject.com/en/1.11/ref/settings/#databases DATABASES = { 'default': { 'ENGINE': 'django.db.backends.sqlite3', 'NAME': os.path.join(BASE_DIR, 'db.sqlite3'), } } # Password validation # https://docs.djangoproject.com/en/1.11/ref/settings/#auth-password-validators AUTH_PASSWORD_VALIDATORS = [ { 'NAME': 'django.contrib.auth.password_validation.UserAttributeSimilarityValidator', }, { 'NAME': 'django.contrib.auth.password_validation.MinimumLengthValidator', }, { 'NAME': 'django.contrib.auth.password_validation.CommonPasswordValidator', }, { 'NAME': 'django.contrib.auth.password_validation.NumericPasswordValidator', }, ] # Internationalization # https://docs.djangoproject.com/en/1.11/topics/i18n/ # LANGUAGE_CODE = 'en-us' LANGUAGE_CODE = 'zh-hans' # datetime.datetime.now() / datetime.datetime.utcnow() => utc时间 # TIME_ZONE = 'UTC' # datetime.datetime.now() - 东八区时间 / datetime.datetime.utcnow() => utc时间 TIME_ZONE = 'Asia/Shanghai' USE_I18N = True USE_L10N = True # 影响自动生成数据库时间字段; # USE_TZ = True,创建UTC时间写入到数据库。 # USE_TZ = False,根据TIME_ZONE设置的时区进行创建时间并写入数据库 USE_TZ = False # Static files (CSS, JavaScript, Images) # https://docs.djangoproject.com/en/1.11/howto/static-files/ STATIC_URL = '/static/' # ######## sms ######## # 腾讯云短信应用的 app_id TENCENT_SMS_APP_ID = 6666666666 # 腾讯云短信应用的 app_key TENCENT_SMS_APP_KEY = "6666666666666666666666" # 腾讯云短信签名内容 TENCENT_SMS_SIGN = "Python之路" TENCENT_SMS_TEMPLATE = { 'register': 548760, 'login': 548762 } TENCENT_COS_ID = "COS的secret_id" TENCENT_COS_KEY = "COS的secret_key" # ########### 登录白名单:无需登录就可以访问的页面 ########### WHITE_REGEX_URL_LIST = [ "/register/", "/send/sms/", "/login/", "/login/sms/", "/image/code/", "/index/", "/price/", ] # -----------支付宝alipay 相关配置----------------- ALI_GATEWAY="https://openapi.alipaydev.com/gateway.do" ALI_APPID='xxxxxxx' ALI_PRI_KEY_PATH =os.path.join(BASE_DIR,'files/应用私钥2048.txt') ALI_PUB_KEY_PATH=os.path.join(BASE_DIR,'files/支付宝公钥.txt') ALI_NOTIFY_URL ="http://127.0.0.1:8000/pay/notify/" ALI_RETURN_URL="http://127.0.0.1:8000/pay/notify/" try: from .local_settings import * except ImportError: pass
#!\Users\Local\Programs\Python37 # -*- coding: utf-8 -*- # ------------ 腾讯云(发短信 sms-cos存储桶)------------ # 腾讯云短信应用的 app_id TENCENT_SMS_APP_ID = 1400489336 # 腾讯云短信应用的 app_key TENCENT_SMS_APP_KEY = "290d09151f3338901b7ec118c4def2c9" # 腾讯云短信签名内容 TENCENT_SMS_SIGN = "华王的心得" # 模板ID TENCENT_SMS_TEMPLATE = { 'register': 881346, 'login': 881344, 'resetpwd':881347, } # cos TENCENT_COS_ID = 'AKIDThIepkCQQFqDMFtErFNbHL9PO5XhpCTg' # 替换为用户的 secretId TENCENT_COS_KEY = '5indDWejdKl00i9Jn2zf4qMahsgJvSjl' # 替换为用户的 secretKey # name = form.cleaned_data['name'] # # 1. 为项目创建一个桶 # bucket = "{}-{}-{}-1304998306".format(name, request.tracer.user.mobile_phone, str(int(time.time()))) # region = 'ap-nanjing' # -----------django_redis配置----------------- CACHES = { "default": { "BACKEND": "django_redis.cache.RedisCache", "LOCATION": "redis://127.0.0.1:6379", # 安装redis的主机的 IP 和 端口 "OPTIONS": { "CLIENT_CLASS": "django_redis.client.DefaultClient", "CONNECTION_POOL_KWARGS": { "max_connections": 1000, "encoding": 'utf-8' }, # "PASSWORD": "foobared" # redis密码 } }, "master": { "BACKEND": "django_redis.cache.RedisCache", "LOCATION": "redis://10.211.55.29:6379", # 安装redis的主机的 IP 和 端口 "OPTIONS": { "CLIENT_CLASS": "django_redis.client.DefaultClient", "CONNECTION_POOL_KWARGS": { "max_connections": 1000, "encoding": 'utf-8' }, "PASSWORD": "foobar999ed" # redis密码 } } } import os BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) # -----------支付宝alipay 相关配置----------------- ALI_GATEWAY="https://openapi.alipaydev.com/gateway.do" ALI_APPID='2021000117613231' ALI_PRI_KEY_PATH =os.path.join(BASE_DIR,'files/应用私钥2048.txt') ALI_PUB_KEY_PATH=os.path.join(BASE_DIR,'files/支付宝公钥.txt') ALI_NOTIFY_URL ="http://127.0.0.1:8000/pay/notify/" ALI_RETURN_URL="http://127.0.0.1:8000/pay/notify/"
1 解决中文乱码的问题 def query_valid(cls, request): task_id = request.GET.get('task_id') data =TcLabeled.objects.filter(task_id=task_id,user='valid').values('labels') data =list(data) print(data) response = dict() response.update({ 'res': True, 'data': data }) print(response) return JsonResponse(response,json_dumps_params={'ensure_ascii': False})
纯键盘模式
点开开始,在开始的输入框中输入cmd,这个时候出现cmd的快捷方式,可以采用方法一的方法启用管理员调用,但这里我们不用鼠标,直接按住CTRL+SHIFT+ENTER三个键就可以直接调用管理员权限的cmd了;
icon链接:http://www.icosky.com/cat/file-type-icons/
# 1 使用conda创建虚拟环境 conda create -n 虚拟环境名字 python=3.6 #创建虚拟环境
conda activate 虚拟环境名字 #激活虚拟环境
conda deactivate #退出虚拟环境
conda remove -n aotu --all # 删除虚拟环境
conda info --envs #查看虚拟环境
# 2 Pyinstaller打包
#安装Pyinstall和其他依赖的包
pip install -i https://pypi.douban.com/simple/ pyinstaller #豆瓣源
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple pyinstaller #清华源
# 3 打包
Pyinstaller -F -w -i apple.ico py_word.py #产生一个exe文件
Pyinstaller -F py_word.py #弹出命令行,方便调试 -w(是否弹出控制台)
#Pyinstaller -D -w -i chengzi.ico py_word.py #产生一个目录(备用,优点:启动快,打包快但文件过大)
import datetime import os curr_time = datetime.datetime.now() path = datetime.datetime.strftime(curr_time, '%Y%m%d%H%M')# if os.path.exists(path): print("属于这个时间点的文件夹已经创建好") else: os.mkdir(path) print("创建成功!!!!正在保存图片") dirname = os.getcwd() + '\\' + path + '\\' #获取当前工作目录并加上之前的时间生成文件夹路径
1 生成公钥与私钥 ssh-keygen -t rsa -C "642178633@qq.com" #win: C:\Users\huawang\.ssh #linux: ~/.ssh/ 2找到B服务器的 ~/.ssh/authorized_keys 将A的id_rsa.pub公钥内容复制进去 cd ~/.ssh/ vim a.txt #复制你的公钥 echo a.txt >> authorized_keys #追加公钥到此文件中
MD5算法常常被用来验证网络文件传输的完整性,防止文件被人篡改
#linux
md5sum main.cpp
#windows
certutil -hashfile test12.py MD5
pip install speedtest-cli speedtest-cli --secure speedtest --secure
包工具
nvm 网站:https://nvm.uihtm.com/#nvm-linux 1下载 cd ~ wget https://github.com/nvm-sh/nvm/archive/refs/tags/v0.39.1.tar.gz 2解压 mkdir ~/.nvm tar -zxvf nvm-0.39.0.tar.gz -C ~ /.nvm 3 环境配置 vim ~/.bashrc export NVM_DIR="$HOME/.nvm/nvm-0.39.1" [ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh" # This loads nvm [ -s "$NVM_DIR/bash_completion" ] && \. "$NVM_DIR/bash_completion" # This loads nvm bash_completion 4生效 source ~/.bashrc 5安装与使用 nvm install 8.16.0 nvm list node nvm use 14.17.3
参考网址:https://docs.npmjs.com/cli/v6/commands/npm-install
淘宝NPM 镜像 npm install -g cnpm --registry=https://registry.npmmirror.com cnpm install [name]
npm install --registry=https://registry.npm.taobao.org #镜像安装
npm -v #版本 npm install express -g #全局安装 npm list -g #全局安装模块 npm config get prefix #查看全局安装包路径 npm search express #搜索模块 ;npm list --depth=0 #查看安装的包 var express = require('express');
npm init #初始化项目
npm install express #安装(把X包安装到node_modules目录中,但不会修改package.json,之后运行npm install, 不会自动安装X包)
npm uninstall express #卸载
npm install express --save # 等同于-S
(npm i --production 会自动安装)
npm i module_name -save-dev #等同于-D
开发环境下(生产环境不需要)
npm install #默认安装 dependencies 和devDependencies 中的所有模块
其他:
1新建的txt文档, 2输入ren *.png *.jpg, 解释下:Ren 空格 星号 点 需要修改的文件后缀名 空格 星号 点 需要改成的文件后缀名; 3 改为bat后缀