python 项目部署相关
git 代码管理和同步
git本地上传
-
全局配置
git config --global user.name "aaa" git config --global user.email "aaa@live.com" -
进入项目目录
-
初始化
git init -
配置远程地址
git remote add origin https://gitee.com/wupeiqi/xxxxx.git -
本地版本提交
git add . git commit -m '提交说明...' -
提交到远程仓库
git push origin master
-
这样虽然能操作,但是会有两个小问题:
- 项目中所有数据都提交了,如果仓库是公开的,有些敏感数据会泄露。
- 每次提交都需要输入密码,太烦了。
gitignore
在项目中创建一个 .gitignore的文件,在里面写上文件名或文件夹,可以git忽略一些文件,不要进行版本控制。
https://github.com/github/gitignore/blob/main/Python.gitignore github上也有现成的可以忽略版本控制的文件后缀
将Python的ignore文件内存拷贝并保存至项目目录下。

配置文件避免敏感信息同步
如果本次开发和线上开发一些配置不同,就可以放在这个文件。
- 本地:local_settings.py 编写本地特有配置。
- 线上:settings.py 编写线上特有配置。
- 在上面的gitignore中添加local_settings.py文件,排除版本控制提交
而在settings.py中编写所有环境都有的配置。在local_settings.py编写敏感的配置,比如数据库,缓存的账号密码等
django运行会先加载settings.py文件内的公共变量,然后再加载local_settings内的敏感变量

git仓库用SSH的秘钥登录
本地提交代码时,每次需要输入密码 & 线上服务器拉去代码时,每次也需要输入密码。
-
固定用户名和密码
git remote remove origin git remote add origin https://用户名:密码@gitee.com/wupeiqi/xxxxx.git -
使用SSH
-
使用ssh-keygen命令,生成一对秘钥(公钥和私钥)
ssh-keygen -t rsa -
读取公钥
~/.ssh/id_rsa.pub内容并上传到代码托管仓库

-推拉数据
-
git remote add origin git@gitee.com:wupeiqi/xxxxx.git
git push origin master
git clone git@gitee.com:wupeiqi/xxxxx.git

git版本切换
可以通过命令实现在各个版本之间进行切换:
-
查看提交记录
git log -
查看提交记录
git reflog -
跳转至指定版本
git reset --hard fa1653b6cd5ed1ff12ef1acdf534e91b9b895604
注意:此命令可以在本地、线上执行,以此来切换到各种版本。
远程主机SSH秘钥登录
在我们本地想要通过SSH连接服务器,每次连接都输入密码也觉得比较烦,此时也可以使用秘钥的方式直接连接服务器。
>>>ssh-keygen -t rsa 这个命令不需要做了,因为在之前git上传代码时已执行过(已有公钥和私钥)
>>>ssh-copy-id -i ~/.ssh/id_rsa.pub root@82.156.54.134
MySQL
-
安装服务端
yum install mariadb-server -ymariadb-server.x86_64 1:5.5.68-1.el7 -
安装客户端
yum install mariadb -y软件包 1:mariadb-5.5.68-1.el7.x86_64 已安装并且是最新版本 -
服务配置
-
启动
systemctl start mariadb -
设置开机启动
systemctl enable mariadb
-
-
账号初始化
-
登录
mysql -u root -p -
root设置密码
UPDATE user SET password=password('qwe123..') WHERE user='root'; flush privileges; -
创建用户
insert into mysql.user(user,host,password) values('xxx','%',password('qwe123..')); # 或更新密码 UPDATE user SET password=password('qwe123..') WHERE user='xxx'; flush privileges; -
创建数据库
CREATE DATABASE 数据库名 DEFAULT CHARSET utf8 COLLATE utf8_general_ci; -
授权
grant all privileges on 数据库.* to settle@'%'; flush privileges;grant all privileges on 数据库.* to tasker@'127.0.0.1'; flush privileges;
-
redis
-
安装
yum install redis -y -
配置
vim /etc/redis.conf ?requirepass 设置密码 -
启动
-
启动
systemctl start redis systemctl restart redis -
开机启动
systemctl enable redis
-
Python3
-
安装gcc,用于后续安装Python时编译源码。
yum install gcc -y -
安装Python3相关依赖
yum install zlib zlib-devel -y yum install bzip2 bzip2-devel -y yum install ncurses ncurses-devel -y yum install readline readline-devel -y yum install openssl openssl-devel -y yum install xz lzma xz-devel -y yum install sqlite sqlite-devel -y yum install gdbm gdbm-devel -y yum install tk tk-devel -y yum install mysql-devel -y yum install python-devel -y yum install libffi-devel -y -
下载Python源码,https://www.python.org/ftp/python/
cd /data/ wget https://www.python.org/ftp/python/3.9.5/Python-3.9.5.tgz注意:如果没有wget,则先安装
yum install wget -
编译安装
-
解压
tar -xvf Python-3.9.5.tgz -
进入目录并编译安装
cd Python-3.9.5 ./configure make all make install -
测试
python3 --version /usr/local/bin/python3 /usr/local/bin/pip3 /usr/local/bin/pip3.9 -
配置豆瓣源(腾讯云服务器,默认腾讯源)
pip3.9 config set global.index-url https://pypi.douban.com/simple/
-
虚拟环境
-
安装虚拟环境
pip3.9 install virtualenv -
创建虚拟环境目录并创建虚拟环境
mkdir /envs virtualenv /envs/nb --python=python3.9 -
安装项目依赖的pip包
source /envs/nb/bin/activate cd /data/www/nb/ pip install -r requirements.txt
拉取代码和配置
当上述环境准备好之后,接下来需要在线上服务器上做以下步骤:
-
获取最新代码
-
安装第三方包
source /envs/nb/bin/activate pip install -r requirements.txt -
local_settings.py设置线上配置
import os from pathlib import Path BASE_DIR = Path(__file__).resolve().parent.parent.parent DEBUG = False ALLOWED_HOSTS = ['*'] STATIC_ROOT = os.path.join(BASE_DIR,"allstatic") DATABASES = { 'default': { 'ENGINE': 'django.db.backends.mysql', 'NAME': 'day06db', # 数据库名字 'USER': 'wangchuan', 'PASSWORD': 'qwe123..', 'HOST': '127.0.0.1', # ip 'PORT': 3306, } } CACHES = { "default": { "BACKEND": "django_redis.cache.RedisCache", "LOCATION": "redis://127.0.0.1:6379", "OPTIONS": { "CLIENT_CLASS": "django_redis.client.DefaultClient", "CONNECTION_POOL_KWARGS": {"max_connections": 100}, "PASSWORD": "qwe123456", } } } -
收集静态文件
python manage.py collectstatic
uwsg和nginx
参考
https://www.cnblogs.com/Young-shi/p/15884197.html
shell脚本
接下来就需要启动uwsgi和nginx:
-
nginx
# 启动 systemctl start nginx # 开机启动 systemctl enable nginx -
uwsgi
uwsgi --ini day06_uwsgi.ini
每次启动都比较麻烦,怎么办?
reboot.sh
#!/usr/bin/env bash
echo -e "\033[34m--------------------wsgi process--------------------\033[0m"
ps -ef|grep uwsgi_day06.ini | grep -v grep
sleep 0.5
echo -e '\n--------------------going to close--------------------'
ps -ef |grep uwsgi_day06.ini | grep -v grep | awk '{print $2}' | xargs kill -9
sleep 0.5
echo -e '\n----------check if the kill action is correct----------'
/envs/day06/bin/uwsgi --ini uwsgi_day06.ini & >/dev/null
echo -e '\n\033[42;1m----------------------started...----------------------\033[0m'
sleep 1
ps -ef |grep uwsgi_day06.ini | grep -v grep
stop.sh
#!/usr/bin/env bash
echo -e "\033[34m--------------------wsgi process--------------------\033[0m"
ps -ef |grep uwsgi_day06.ini | grep -v grep
sleep 0.5
echo -e '\n--------------------going to close--------------------'
ps -ef |grep uwsgi_day06.ini | grep -v grep | awk '{print $2}' | xargs kill -9
sleep 0.5
域名
域名购买

域名解析



https证书
申请证书






下载证书

上传证书
将证书文件上传至服务器,例如:上传至项目目录的ssl文件夹下。

修改nginx配置
user nginx;
worker_processes auto;
error_log /var/log/nginx/error.log;
pid /run/nginx.pid;
events {
worker_connections 65536;
use epoll;
}
http {
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 /var/log/nginx/access.log main;
sendfile on;
tcp_nopush on;
tcp_nodelay on;
keepalive_timeout 65;
gzip on;
gzip_http_version 1.1;
gzip_buffers 4 32k;
gzip_comp_level 9;
include mime.types;
default_type application/octet-stream;
upstream django {
server 127.0.0.1:8001; # for a web port socket (we'll use this first)
}
server {
listen 80;
server_name day06.pythonav.com;
rewrite ^(.*) https://$server_name$1 redirect;
}
server {
listen 443 ssl;
server_name day06.pythonav.com;
#证书文件
ssl_certificate /data/www/ssl/8372403_day06.pythonav.com.pem;
#私钥文件
ssl_certificate_key /data/www/ssl/8372403_day06.pythonav.com.key;
ssl_session_cache shared:SSL:1m;
ssl_session_timeout 5m;
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_prefer_server_ciphers on;
location / {
uwsgi_pass django;
include uwsgi_params;
}
location /static {
alias /data/www/allstatic;
}
}
}

浙公网安备 33010602011771号