今日概要:
- 购买云服务器【公网IP】(阿里云、腾讯云)
- 代码同步到云服务器
- 云服务器进行配置(依赖软件和工具)
- 启动项目(无障碍手机、浏览器基于公网IP访问)
1.购买云服务器(腾讯云)
系统:centos7.6
公网IP:82.156.54.134
安全组:22/80
基本操作:
- SSH连接【本地电脑安装支持SSH工具】 推荐:Tabby
- 下载安装本地
- 本地命令
- SSH远程连接
- 配置
Linux命令:
/
bin
data
etc
lib
home
...
cd 进入某个文件夹
ls 查看目录下的所有文件
touch a.py 创建文件
rm a.py 删除文件
rm -rf xxx/ 强制删除文件/文件夹
mkdir xxx 创建文件夹
cat 文件名 查看文件内容
yum install vim -y 安装软件
基于编辑器vim
vim 文件名 打开文件
i 进入插入模式
ESC 退出插入模式
:w 保存+不退出
:wq 保存+退出
2.代码同步到云服务器
2.1 直接上传【非主流】
- FTP工具(scp)
- Tabby集成ftp功能
2.2 基于git同步代码【主流】
- 注册代码托管平台:github/gitee【公共/私有】
- 注册
- 创建项目 https://gitee.com/wupeiqi/auto_luffy_web.git
- 本地代码提交托管平台:【软件】【命令,推】
- git软件
- git必备命令(对项目进行管理)
- 全局配置(永久生效)
git config --global user.name "武沛齐"
git config --global user.email "wupeiqi@live.com"
- 针对项目配置
进入项目根目录
git init # 初始化,git管理我们当前项目。 .git隐藏文件夹
git remote add origin https://gitee.com/wupeiqi/auto_luffy_web.git
- 针对项目中的文件
- 本地
git add .
git commit -m "除此初始化" # a1af2ed1add7df313646279ea7c8011279b5ecc5
git log
git add .
git commit -m "修改信息功能"
git add .
git commit -m "xxxxxxx"
- 远程
git push origin master
>>>输入码云账户名
>>>密码
注意事项:
- .venv文件夹:本地虚拟环境,运行项目。
- 无用文件
- 数据库文件:db.sqlite3
- local_settings.py
- 服务器获取代码:【软件】【命令,拉】
- Tabby连接服务器
- 服务器上安装git软件
yum install git -y
- 下载代码【全量下载】
cd /data/
git clone https://gitee.com/wupeiqi/auto_luffy_web.git
- 更新代码
cd /data/auto_luffy_web/
git pull origin master
禁止操作:禁止在线上直接修改代码。
git扩展:https://www.bilibili.com/video/BV19E411f76x/
3.云服务器进行配置(依赖软件和工具)
3.1 安装Python3.9(默认有2.7、3.6)【系统解释器】
- 安装依赖包
- 下载Python3.9.5源码
- 编译安装
3.2 创建虚拟环境
pip3.9 install virtualenv
mkdir /envs
virtualenv /envs/nb --python=python3.9
# 激活虚拟环境
source /envs/nb/bin/activate
# 安装django
pip install django
3.3 安装项目需要的Python的第三方模块(django)
pip install -r requirements.txt
3.4 django项目必备
- 手动创建local_settings.py线上配置
DEBUG = False
- 数据库表生成
python manage.py makemigrations
python manage.py migrate
注意:创建数据+超级用户
python manage.py createsuperuser
root
root!2345
- 提取项目中所有的静态文件 /allstatic/
import os
from pathlib import Path
# 项目根目录 /data/auto_luffy_web
# BASE_DIR = Path(__file__).resolve().parent.parent
# 项目根目录 /data/allstatic/
BASE_DIR = Path(__file__).resolve().parent.parent.parent
STATIC_ROOT = os.path.join(BASE_DIR, "allstatic")
执行命令:
python manage.py collectstatic
3.5 uwsgi
1.安装uwsgi
>>>激活虚拟环境
>>>source /envs/nb/bin/activate
>>>pip install uwsgi
2.配置uwsgi【在项目目录下创建文件 auto_luffy_web_uwsgi.ini】
[uwsgi]
socket = 0.0.0.0:8001
chdir = /data/auto_luffy_web_uwsgi/
wsgi-file = auto_luffy_web_uwsgi/wsgi.py
processes = 4
static-map = /static=/data/allstatic
virtualenv = /envs/nb/
3.启动uwsgi
/envs/nb/bin/uwsgi --ini auto_luffy_web_uwsgi.ini
3.6 nginx
1.安装nginx
yum install nginx -y
2.修改nginx配置
删除 rm /etc/nginx/nginx.conf
新建 vim /etc/nginx/nginx.conf
3.启动nginx
# 开机启动
systemctl enable nginx
# 启动
systemctl start nginx
systemctl stop nginx
4.测试静态文件
http://127.0.0.1:8005/static/admin/img/icon-addlink.svg
http://82.156.54.134:80/static/admin/img/icon-addlink.svg
http://82.156.54.134/static/admin/img/icon-addlink.svg
http://82.156.54.134:80/admin/
4.方便的启动/关闭:uwsgi
- 目前:
/envs/nb/bin/uwsgi --ini auto_luffy_web_uwsgi.ini
- 手动重启
后台运行
/envs/nb/bin/uwsgi --ini auto_luffy_web_uwsgi.ini & >/dev/null
寻找后台进程:
ps -ef|grep auto_luffy_web_uwsgi
杀死进程:
kill -9 9627
后台运行
/envs/nb/bin/uwsgi --ini auto_luffy_web_uwsgi.ini & >/dev/null
- shell脚本
5.报错
django.db.utils.NotSupportedError: deterministic=True requires SQLite 3.8.3 or higher
- 安装:
pip install pysqlite3
pip install pysqlite3-binary
- 修改django源码:
/虚拟环境/lib/python3.9/site-packages/django/db/backends/sqlite3/base.py
vim /envs/nb/lib/python3.9/site-packages/django/db/backends/sqlite3/base.py
#from sqlite3 import dbapi2 as Database #注释它
from pysqlite3 import dbapi2 as Database #新加这段代码
6.服务器+无障碍应用
- 完成项目部署
- 任务下发
http://82.156.54.134/admin/login/
- 创建设备
- 创建任务
- 启动无障碍APP
- 地址: 82.156.54.134:80
- 启动无障碍APP
7.无障碍注意事项【停止无障碍】
- 进入手机中设置
- 无障碍
- 无障碍的服务【关闭】
项目部署
本质四个步骤:
租个服务器(含公网ip)
代码上传到服务器
安装环境以来
启动程序
1.云服务器
1.1 购买
在阿里云、腾讯云或其他平台 购买一台云服务器(选便宜的)。
以下是以 腾讯云 + centos 7.5 操作系统来进行操作。
请记住自己的公网IP,后续用户访问和我们远程登录时,均使用这个IP:
82.156.54.134
-账号:root
-密码:root!2345
-[我们]自己电脑远程登录上服务器,在服务器安装各种服务+代码+启动
-[用户]访问程序
当购买成功且安装好操作系统之后,请先配置安全组:
1.2 连接操作
后续部署时,需要对服务器进行操作,哪我们必须能登录上服务器才行。
推荐:Tabby(支持win、mac)
https://github.com/Eugeny/tabby
https://github.com/Eugeny/tabby/releases
2.代码同步
上传代码的方式有很多种,例如:FTP工具、scp命令、rsync服务、svn等,不过目前公司主流的都是使用git+代码托管平台。
- 本地电脑,安装git并使用git命令上传代码。
- 代码仓库,创建仓库。
- 服务器,安装git并使用git命令获取最新代码。
2.1 代码托管
注册成功后,就可以在里面创建代码仓库:
2.2 本地上传
在本地电脑上本质上需要执行如下步骤:
全局配置
git config --global user.name "武沛齐" git config --global user.email "wupeiqi@live.com"
进入项目目录
初始化
git init
配置远程地址
git remote add origin https://gitee.com/wupeiqi/xxxxx.git
本地版本提交
git add . git commit -m '提交说明...'
提交到远程仓库
git push origin master
2.3 服务器同步
登录线上服务器并获取代码,本质上需要以下三个步骤:
登录服务器
- 云平台网页版:支持登录并进行命令交互(不便捷,不推荐)。 - SSH工具,连接比较方便(推荐) - win:xshell、SecureCRT - mac:iTerm2 注意:如果使用SSH工具连接远程服务器的话,需要在云平台的的安全组开启22端口权限。
安装git
yum install git -y
进入项目克隆或拉取代码
基于用户名和密码,需要输入用户和密码 git clone https://gitee.com/wupeiqi/xxxxx.git 基于用户名和密码,直接集成用户和密码 git clone https://用户名:密码@gitee.com/wupeiqi/xxxxx.git 基于秘钥: >>>ssh-keygen -t rsa >>>cat ~/.ssh/id_rsa.pub >>>拷贝公钥到代码仓库 >>>git clone git@gitee.com:wupeiqi/xxxxx.git
gitignore
在项目中创建一个 .gitignore
的文件,在里面写上文件名或文件夹,可以git忽略一些文件,不要进行版本控制。
https://github.com/github/gitignore/blob/main/Python.gitignore
将Python的ignore文件内存拷贝并保存至项目目录下。
这样,就可以控制git忽略某些文件。
学会这个知识点之后,接下来再来讲一个关于配置文件的常见操作,即:local_settings.py
如果本次开发和线上开发一些配置不同,就可以放在这个文件。
- 本地:local_settings.py 编写本地特有配置。
- 线上:local_settings.py 编写线上特有配置。
而在settings.py中编写所有环境都有的配置。
# Byte-compiled / optimized / DLL files
__pycache__/
*.py[cod]
# C extensions
*.so
# Distribution / packaging
.Python
env/
.venv/
.idea/
build/
develop-eggs/
dist/
downloads/
eggs/
lib/
lib64/
parts/
sdist/
var/
*.egg-info/
.installed.cfg
*.egg
# PyInstaller
# Usually these files are written by a python script from a template
# before PyInstaller builds the exe, so as to inject date/other infos into it.
*.manifest
*.spec
# Installer logs
pip-log.txt
pip-delete-this-directory.txt
# Unit test / coverage reports
htmlcov/
.tox/
.coverage
.cache
nosetests.xml
coverage.xml
# Translations
*.mo
*.pot
# Django stuff:
*.log
# Sphinx documentation
docs/_build/
# PyBuilder
target/
# Django stuff:
local_settings.py
# database migrations
*/migrations/*.py
!*/migrations/__init__.py
db.sqlite3
3.配置和部署
3.1 Python3.9
安装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 -y
编译安装
解压
tar -xvf Python-3.9.5.tgz
进入目录并编译安装
cd Python-3.9.5 ./configure make all make install
测试
python3.9 --version pip3.9 --version /usr/local/bin/pip3.9 --version
配置豆瓣源(腾讯云服务器,默认腾讯源)
pip3.9 config set global.index-url https://mirrors.cloud.tencent.com/pypi/simple
3.2 虚拟环境
安装虚拟环境
pip3.9 install virtualenv
创建虚拟环境目录并创建虚拟环境
mkdir /envs virtualenv /envs/nb --python=python3.9
安装项目依赖的pip包
# 激活虚拟环境 source /envs/nb/bin/activate # 安装django pip install django
cd /data/项目目录/ pip install -r requirements.txt
3.3 拉取代码和配置
当上述环境准备好之后,接下来需要在线上服务器上做以下步骤:
获取最新代码
安装第三方包
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")
收集静态文件
python manage.py collectstatic
3.4 uwsgi
激活虚拟环境并安装uwsgi
source /envs/nb/bin/activate
pip install uwsgi
基于uwsgi运行项目
文件参数
创建 auto_luffy_web_uwsgi.ini
[uwsgi] socket = 0.0.0.0:8001 chdir = /data/auto_luffy_web/ wsgi-file = auto_luffy_web/wsgi.py processes = 4 static-map = /static=/data/allstatic virtualenv = /envs/nb/
执行命令
uwsgi --ini day06_uwsgi.ini
3.5 nginx
利用nginx做反向代理和处理静态文件。
yum install nginx -y
修改nginx.conf配置文件:
user nginx;
worker_processes auto;
error_log /var/log/nginx/error.log;
pid /run/nginx.pid;
# Load dynamic modules. See /usr/share/doc/nginx/README.dynamic.
include /usr/share/nginx/modules/*.conf;
events {
worker_connections 1024;
}
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;
types_hash_max_size 4096;
include /etc/nginx/mime.types;
default_type application/octet-stream;
upstream django {
server 127.0.0.1:8001;
}
server {
listen 80;
listen [::]:80;
server_name localhost;
location /static {
alias /data/allstatic/;
}
location / {
uwsgi_pass django;
include uwsgi_params;
}
}
}
修改uwsgi配置(auto_luffy_web_uwsgi):
[uwsgi]
socket = 0.0.0.0:8001
chdir = /data/auto_luffy_web/
wsgi-file = auto_luffy_web/wsgi.py
processes = 4
static-map = /static=/data/allstatic
virtualenv = /envs/nb/
接下来就需要启动uwsgi和nginx:
nginx
# 启动 systemctl start nginx # 开机启动 systemctl enable nginx
uwsgi
uwsgi --ini day06_uwsgi.ini
每次启动都比较麻烦,怎么办?
3.6 shell脚本
reboot.sh
#!/usr/bin/env bash
echo -e "\033[34m--------------------wsgi process--------------------\033[0m"
ps -ef|grep auto_luffy_web_uwsgi.ini | grep -v grep
sleep 0.5
echo -e '\n--------------------going to close--------------------'
ps -ef |grep auto_luffy_web_uwsgi.ini | grep -v grep | awk '{print $2}' | xargs kill -9
sleep 0.5
echo -e '\n----------check if the kill action is correct----------'
/envs/nb/bin/uwsgi --ini auto_luffy_web_uwsgi.ini & >/dev/null
echo -e '\n\033[42;1m----------------------started...----------------------\033[0m'
sleep 1
ps -ef |grep auto_luffy_web_uwsgi.ini | grep -v grep
sh reboot.sh
stop.sh
#!/usr/bin/env bash
echo -e "\033[34m--------------------wsgi process--------------------\033[0m"
ps -ef|grep auto_luffy_web_uwsgi.ini | grep -v grep
sleep 0.5
echo -e '\n--------------------going to close--------------------'
ps -ef |grep auto_luffy_web_uwsgi.ini | grep -v grep | awk '{print $2}' | xargs kill -9
sleep 0.5
4.报错
pip install pysqlite3
pip install pysqlite3-binary
修改/envs/nb/lib/python3.9/site-packages/django/db/backends/sqlite3/base.py
文件:
#from sqlite3 import dbapi2 as Database #注释它
from pysqlite3 import dbapi2 as Database #新加这段代码