环境设置
设置 root 密码
sudo passwd root
新增用户
adduser [用户名]
环境变量设置
.profile/.bash_profile 通用设置
set -o vi
PS1="用户:\$PWD> "; export PS1
# 激活python虚拟环境
source $HOME/env/bin/activate
python环境设置
安装python pip3
sudo apt install python3-pip
sudo apt-get update
sudo apt install python3-pip
pip3 –V
安装python3-venv
# 1. 安装python3-venv
sudo apt-get install python3-venv
# 2. 创建虚拟环境
python3 -m venv env
# 3.激活环境
cd ~/env
source env/bin/activate
# 4.激活成功
# 显示 (env) xxxx
# 5.退出环境
# 退出虚拟环境
deactivate
pip源切换
豆瓣:http://pypi.douban.com/simple/
中科大:https://pypi.mirrors.ustc.edu.cn/simple/
清华:https://pypi.tuna.tsinghua.edu.cn/simple/
一次性使用
可以在使用pip的时候加参数
pip3 install pandas -i https://pypi.tuna.tsinghua.edu.cn/simple
永久修改
Linux & MacOS
linux下,修改 ~/.pip/pip.conf
(没有就创建一个), 修改 index-url 为国内镜像地址,内容如下
[global]
index-url = https://pypi.tuna.tsinghua.edu.cn/simple
软件安装
ssh服务器安装
Ubuntu默认没有安装ssh的server,需要安装
apt-get install openssh-server
启用 root 用户直接登录(可选但不推荐)
sudo nano /etc/ssh/sshd_config
-----------------------------------------------
#PermitRootLogin prohibit-password
PermitRootLogin yes # 取消注释并改为yes
-----------------------------------------------
sudo systemctl restart sshd
默认启动ssh
修改服务为enable
sudo systemctl enable ssh
mysql安装
安装mysql服务器
sudo apt-get update
sudo apt-get install mysql-server
免密登录
sudo mysql -uroot
更新密码
alter user 'root'@'localhost' identified with mysql_native_password by 'kdadmin2016@';
授权root访问
update user set host='%' where user='root';
grant all on *.* to 'root'@'%';
flush privileges;
# ----------------------------------------------------
/etc/mysql/mysql.conf.d/mysqld.cnf
# bing-address = 127.0.0.1 屏蔽绑定
# ----------------------------------------------------
重启mysql:
service mysql restart
查看端口:netstat -an|grep 3306
# nginx 安装
检查 Nginx 是否安装
可以使用`dpkg -l | grep nginx`命令来查看。这个命令是在系统已安装软件包的列表中查找包含 “nginx” 字样的软件包。
安装nginx服务
apt-get install nginx
查看 Nginx 服务状态
在 Ubuntu 系统中,可以使用命令。
systemctl status nginx
配置Nginx
root:/home> nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
# 配置nginx文件,先对原始配置文件做个备份 sudo
cp /etc/nginx/sites-available/default /etc/nginx/sites-available/default.bak
关键配置
server {
listen 8889;
server_name 14.22.83.104;
server_name_in_redirect off;
access_log /root/jh_data_plt/XtbPlatform/logs/nginx.access.log;
error_log /root/jh_data_plt/XtbPlatform/logs/nginx.error.log;
client_max_body_size 5m;
# 跨域的处理
add_header Access-Control-Allow-Credentials true;
add_header Access-Control-Allow-Origin $http_origin;
location /file {
if ($request_method = 'OPTIONS') {
add_header Access-Control-Allow-Origin $http_origin;
add_header Access-Control-Allow-Methods $http_access_control_request_method;
add_header Access-Control-Allow-Credentials true;
add_header Access-Control-Allow-Headers $http_access_control_request_headers;
add_header Access-Control-Max-Age 1728000;
return 204;
}
}
location /{
proxy_pass http://127.0.0.1:8000;
add_header Cross-Origin-Opener-Policy "same-origin";
proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_next_upstream error timeout invalid_header http_500 http_502 http_503 http_504;
proxy_max_temp_file_size 0;
proxy_connect_timeout 90;
proxy_send_timeout 90;
proxy_read_timeout 90;
proxy_buffer_size 4k;
proxy_buffers 4 32k;
proxy_busy_buffers_size 64k;
proxy_temp_file_write_size 64k;
}
location /static {
root /root/jh_data_plt/XtbPlatform/staticfile;
}
location /media {
alias /root/jh_data_plt/XtbPlatform/static/media;
}
}
重启Nginx
sudo service nginx restart 或 sudo /etc/init.d/nginx restart
Django 设置
安装基本库
pip3 install django;
pip3 install gunicorn;
pip3 install xlwt;
pip3 install xlwings;
pip3 install XlsxWriter;
pip3 install requests;
pip3 install openpyxl;
pip3 install pandas;
pip3 install PyMySQL;
pip3 install django-cors-headers;
pip3 install django-import-export;
pip3 install django-simpleui;
pip3 install Pillow;
pip3 install concurrent-log-handler;
pip3 install mysqlclient;
pip3 install mysqlclient 报错处理
apt-get install default-libmysqlclient-dev pkg-config
pip3 install mysqlclient -i https://pypi.doubanio.com/simple/
项目迁移
开发环境应用到Ubntun服务器应用用户
settings.py关键设置
# 1、生产环境设置为 False
DEBUG = False
# 2、设置运行访问IP
ALLOWED_HOSTS = ['14.22.83.104', 'localhost', '127.0.0.1']
# 数据库设置
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'jihe_db',
'USER': 'root',
'PASSWORD': 'kdadmin2016@',
'HOST': '127.0.0.1',
'PORT': '3306',
}
}
# 语言时区设置
LANGUAGE_CODE = 'zh-hans'
TIME_ZONE = 'Asia/Shanghai'
USE_I18N = True
USE_TZ = True
# Static files
STATIC_URL = 'static/'
STATICFILES_DIRS = [
os.path.join(BASE_DIR, "static"),
]
# STATIC_ROOT = os.path.join(BASE_DIR, "staticfile")
# Default primary key field type
EMAIL_HOST = 'smtp.qq.com' # 发送者邮箱服务器
EMAIL_PORT = 25 # 端口
EMAIL_HOST_USER = 'xietianb@qq.com' # 发送者用户名(邮箱地址)
EMAIL_HOST_PASSWORD = 'wnqcmckpibcpbjic' # 发送者密码
EMAIL_USE_SSL = True
DEFAULT_FROM_EMAIL = 'xietianb@qq.com'
# 3、日志设置
BASE_LOG_DIR = os.path.join(BASE_DIR, "logs")
LOGGING = {
'version': 1,
'disable_existing_loggers': False,
'formatters': {
'verbose': {
'format': '{asctime} {module}.{funcName} {lineno:3} {levelname:7} => {message}',
'style': '{',
},
},
'handlers': {
'console': {
'class': 'logging.StreamHandler',
'formatter': 'verbose',
},
'file': {
'class': 'concurrent_log_handler.ConcurrentRotatingFileHandler',
'formatter': 'verbose',
'filename': os.path.join(BASE_LOG_DIR, "info.log"),
'maxBytes': 4194304, # 4 MB
'backupCount': 10,
'level': 'DEBUG',
},
},
'loggers': {
'': {
'handlers': ['console', 'file'],
'level': 'INFO',
},
'django': {
'handlers': ['console', 'file'],
'level': 'INFO',
'propagate': False,
},
},
}
# 4、跨域访问
# 添加Cors配置
# 1.设置白名单
CORS_ORIGIN_WHITELIST = ('http://14.22.83.104:8889', 'http://192.168.164:8080')
# 2.设置Cors的cookies
CORS_ALLOW_CREDENTIALS = True # 允许带cookies
CORS_ORIGIN_ALLOW_ALL = True # 运行所有资源访问
CSRF_TRUSTED_ORIGINS = [
"http://11.22.83.104:8889",
]
CSRF_COOKIE_SECURE = False # HTTP 时设为 False
CSRF_COOKIE_HTTPONLY = False
SESSION_COOKIE_SECURE = False # HTTP 时设为 False
CSRF_TRUSTED_ORIGINS = ['http://14.22.83.104:8889'] # 允许屏蔽SCRF
# 5、SimpleUI配置
SIMPLEUI_HOME_INFO = False # 隐藏右侧SimpleUI广告链接
SIMPLEUI_ANALYSIS = False # 隐藏使用分析
SIMPLEUI_HOME_QUICK = True
# 首页设置, 指向新创建的控制面板
SIMPLEUI_HOME_PAGE = '/index/dashboard/'
SIMPLEUI_HOME_TITLE = '首页'
SIMPLEUI_HOME_ICON = 'fa-sharp fa-solid fa-house'
# logo设置
SIMPLEUI_LOGO = 'http://14.22.83.104:8889/static/images/fl_logo2.png'
# 导入导出设置
IMPORT_EXPORT_USE_TRANSACTIONS = True
# 自定义菜单设置
MENU_IP_ADDRESS = "http://14.22.83.104:8889/"
# 自定义菜单
SIMPLEUI_CONFIG = {
'system_keep': True,
'menu_display': ['聚水潭管理', '钉钉管理', '对账管理', '资料管理', '系统管理'],
'menus': [
# 聚水潭资料数据
{
'app': 'H',
'name': '聚水潭管理',
'icon': 'el-icon-s-ticket',
'models': [
{
'name': '销售出库同步',
'icon': 'el-icon-sort',
'url': MENU_IP_ADDRESS + 'xindi/xsck_order/'
},
{
'name': '售后数据同步',
'icon': 'el-icon-s-grid',
'url': MENU_IP_ADDRESS + 'xindi/xsth_order/'
},
{
'name': '采购订单同步',
'icon': 'el-icon-smoking',
'url': MENU_IP_ADDRESS + 'xindi/cgrk_order/'
},
{
'name': '采购退料同步',
'icon': 'el-icon-no-smoking',
'url': MENU_IP_ADDRESS + 'xindi/cgth_order/'
},
{
'name': '库存同步',
'icon': 'el-icon-shopping-cart-full',
'url': "xindi/qtkc/"
},
]
},
# 钉钉数据
{
'app': 'xindi',
'name': '钉钉管理',
'icon': 'el-icon-s-promotion',
'models': [
{
'name': '采购付款',
'icon': 'el-icon-s-goods',
'url': MENU_IP_ADDRESS + "xindi/purchase_pay/"
},
{
'name': '费用报销',
'icon': 'el-icon-s-help',
'url': MENU_IP_ADDRESS + "xindi/exp_reimb/"
},
{
'name': '其他付款',
'icon': 'el-icon-suitcase',
'url': MENU_IP_ADDRESS + "xindi/other_pay/"
},
{
'name': '报销冲账',
'icon': 'el-icon-finished',
'url': MENU_IP_ADDRESS + "xindi/invoice_reversal/"
},
{
'name': '特批流程',
'icon': 'el-icon-mouse',
'url': MENU_IP_ADDRESS + "xindi/special_pay/"
},
{
'name': '资金调拨',
'icon': 'el-icon-guide',
'url': MENU_IP_ADDRESS + "xindi/pay_transfe/"
},
]
},
# 对账管理
{
'app': 'xindi',
'name': '对账管理',
'icon': 'el-icon-document-copy',
'models': [
{
'name': '规则参数',
'icon': 'el-icon-document-checked',
'url': "xindi/wlmap/"
},
{
'name': '聚水潭订单',
'icon': 'el-icon-notebook-1',
'url': "xindi/saleorder/"
},
{
'name': '快递账单',
'icon': 'el-icon-notebook-2',
'url': "xindi/projectmap/"
},
{
'name': '对账报表明细',
'icon': 'el-icon-document',
'url': "xindi/projectmap/"
},
{
'name': '对账报表汇总',
'icon': 'el-icon-document-add',
'url': "xindi/projectmap/"
}
]
},
# 资料
{
'app': 'xindi',
'name': '资料管理',
'icon': 'el-icon-setting',
'models': [
{
'name': '组织参数',
'icon': 'el-icon-s-claim',
'url': "xindi/orgmap/"
},
{
'name': '部门参数',
'icon': 'el-icon-s-finance',
'url': "xindi/deptmap/"
},
{
'name': '项目参数',
'icon': 'el-icon-s-finance',
'url': "xindi/projectmap/"
},
{
'name': '员工参数',
'icon': 'el-icon-s-finance',
'url': "xindi/empmap/"
},
{
'name': '供应商参数',
'icon': 'el-icon-s-check',
'url': "xindi/supplierpara/"
},
{
'name': '商品数据',
'icon': 'el-icon-s-goods',
'url': "xindi/goodmap/"
},
{
'name': '店铺数据',
'icon': 'el-icon-s-shop',
'url': "xindi/shoppara/"
},
{
'name': 'OA流程实例参数',
'icon': 'el-icon-finished',
'url': "xindi/processinstance/"
}
]
},
# 系统管理
{
'app': 'auth',
'name': '系统管理',
'icon': 'el-icon-s-tools',
'models': [
{
'name': '用户权限',
'icon': 'fa fa-user',
'url': 'auth/user/'
},
{
'name': '用户权限组',
'icon': 'el-icon-menu',
'url': 'auth/group/'
},
{
'name': '接口鉴权管理',
'icon': 'el-icon-set-up',
'url': 'xindi/interfaceconfig/'
},
{
'name': '操作日志',
'icon': 'el-icon-chat-line-square',
'url': 'xindi/operloginfo/'
},
]
},
]
}
# # Session的失效日期为 秒级
SESSION_COOKIE_AGE = 18000
# # 是否每次请求都保存Session,默认修改之后才保存
# ESSION_SAVE_EVERY_REQUEST = True
# 是否关闭浏览器使得Session过期
SESSION_EXPIRE_AT_BROWSER_CLOSE = True
USE_L10N = False
DATETIME_FORMAT = 'Y-m-d'
DATE_FORMAT = 'Y-m-d'
收集静态文件
python3 manage.py collectstatic # 错误时在settings.py中设置:STATIC_ROOT = os.path.join(BASE_DIR, "staticfile")
使用 Django-crontab
**适用场景**:简单的定时任务(如每天清理日志、发送日报等)。
**原理**:基于 Linux 的 cron
服务,通过 Django 管理任务。
安装与配置
pip3 install Django-crontab
在 settings.py
中注册
INSTALLED_APPS = [
...
'django_crontab',
]
定义定时任务
在 settings.py
中添加:
CRONJOBS = [
# 每 5 分钟执行一次(示例:清理临时文件)
('*/5 * * * *', 'myapp.cron.clean_temp_files'),
# 每天凌晨 3 点执行(示例:发送日报)
('0 3 * * *', 'myapp.cron.send_daily_report'),
]
创建 cron.py
文件
在 myapp/cron.py
中编写任务逻辑:
```python
def clean_temp_files():
print("清理临时文件...")
# 你的代码...
def send_daily_report():
print("发送日报...")
# 你的代码...
启动 cron 服务
python manage.py crontab add # 添加任务
python manage.py crontab show # 查看任务
python manage.py crontab remove # 移除任务
检查运行日志
tail -f /var/log/syslog | grep CRON
数据迁移
# 数据库创建
python3 manage.py makemigrations
python3 manage.py migrate
# 创建超级用户
python manage.py createsuperuser
设置gunicorn
import multiprocessing
bind = "127.0.0.1:8000" #绑定的ip与端口
workers = 5 #核心数
errorlog = '/root/jh_data_plt/XtbPlatform/logs/gunicorn.error.log' #发生错误时log的路径
accesslog = '/root/jh_data_plt/XtbPlatform/logs/gunicorn.access.log' #正常时的log路径
# loglevel = 'debug' #日志等级
proc_name = 'gunicorn_project' #进程名
设置启动/停止脚本
killall -9 gunicorn
nohup gunicorn XtbPlatform.wsgi:application -c /root/jh_data_plt/XtbPlatform/gunicorn.conf.py&
ps -ef|grep gunicorn