diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..58435c5 --- /dev/null +++ b/Dockerfile @@ -0,0 +1,33 @@ +# 建立 python 3.7环境 +FROM python:3.7 + +# 安装netcat +RUN apt-get update && apt install -y netcat + +# 可选:设置镜像源为国内 +COPY pip.conf /root/.pip/pip.conf + +# 容器内创建 myproject 文件夹 +ENV APP_HOME=/home/myproject +RUN mkdir -p $APP_HOME +WORKDIR $APP_HOME + +# 将当前目录加入到工作目录中(. 表示当前目录) +ADD . $APP_HOME + +# 更新pip版本 +RUN /usr/local/bin/python -m pip install --upgrade pip + +# 安装项目依赖 +RUN pip install -r requirements.txt + +# 移除\r in windows +RUN sed -i 's/\r//' ./start.sh + +# 给start.sh可执行权限 +RUN chmod +x ./start.sh + +EXPOSE 8000 + +# 数据迁移,并使用uwsgi启动服务 +ENTRYPOINT /bin/bash ./start.sh \ No newline at end of file diff --git a/TP_Api/asgi.py b/TP_Api/asgi.py index 4d2c0ee..29f5acb 100644 --- a/TP_Api/asgi.py +++ b/TP_Api/asgi.py @@ -1,5 +1,5 @@ """ -ASGI config for TP_Api project. +ASGI config for TP_API project. It exposes the ASGI callable as a module-level variable named ``application``. @@ -11,6 +11,6 @@ import os from django.core.asgi import get_asgi_application -os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'TP_Api.settings') +os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'TP_API.settings') application = get_asgi_application() diff --git a/TP_Api/settings.py b/TP_Api/settings.py index 5a2a2af..b26eba1 100644 --- a/TP_Api/settings.py +++ b/TP_Api/settings.py @@ -1,5 +1,5 @@ """ -Django settings for TP_Api project. +Django settings for TP_API project. Generated by 'django-admin startproject' using Django 3.2.19. @@ -49,13 +49,13 @@ MIDDLEWARE = [ 'django.contrib.sessions.middleware.SessionMiddleware', 'corsheaders.middleware.CorsMiddleware', 'django.middleware.common.CommonMiddleware', - # 'django.middleware.csrf.CsrfViewMiddleware', + 'django.middleware.csrf.CsrfViewMiddleware', 'django.contrib.auth.middleware.AuthenticationMiddleware', 'django.contrib.messages.middleware.MessageMiddleware', 'django.middleware.clickjacking.XFrameOptionsMiddleware', ] -ROOT_URLCONF = 'TP_Api.urls' +ROOT_URLCONF = 'TP_API.urls' TEMPLATES = [ { @@ -73,7 +73,7 @@ TEMPLATES = [ }, ] -WSGI_APPLICATION = 'TP_Api.wsgi.application' +WSGI_APPLICATION = 'TP_API.wsgi.application' # Database diff --git a/TP_Api/wsgi.py b/TP_Api/wsgi.py index 6ce5333..c70609e 100644 --- a/TP_Api/wsgi.py +++ b/TP_Api/wsgi.py @@ -1,5 +1,5 @@ """ -WSGI config for TP_Api project. +WSGI config for TP_API project. It exposes the WSGI callable as a module-level variable named ``application``. @@ -11,6 +11,6 @@ import os from django.core.wsgi import get_wsgi_application -os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'TP_Api.settings') +os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'TP_API.settings') application = get_wsgi_application() diff --git a/app/migrations/0001_initial.py b/app/migrations/0001_initial.py deleted file mode 100644 index e6709aa..0000000 --- a/app/migrations/0001_initial.py +++ /dev/null @@ -1,30 +0,0 @@ -# Generated by Django 3.2.19 on 2023-05-25 08:07 - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - initial = True - - dependencies = [ - ] - - operations = [ - migrations.CreateModel( - name='MyModel', - fields=[ - ('uid', models.AutoField(primary_key=True, serialize=False)), - ('video_hash', models.CharField(max_length=50)), - ('record_time', models.DateTimeField()), - ('police_id', models.CharField(max_length=50)), - ('event_type', models.IntegerField()), - ('is_violation', models.BooleanField()), - ('small_image', models.CharField(max_length=50)), - ('relative_time', models.IntegerField()), - ('video_dir', models.CharField(max_length=50)), - ('car_number', models.CharField(max_length=50)), - ('ai_analysis', models.CharField(max_length=50)), - ], - ), - ] diff --git a/app/migrations/0002_auto_20230526_1003.py b/app/migrations/0002_auto_20230526_1003.py deleted file mode 100644 index 8a62cd8..0000000 --- a/app/migrations/0002_auto_20230526_1003.py +++ /dev/null @@ -1,23 +0,0 @@ -# Generated by Django 3.2.19 on 2023-05-26 10:03 - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('app', '0001_initial'), - ] - - operations = [ - migrations.AlterField( - model_name='mymodel', - name='ai_analysis', - field=models.CharField(max_length=255), - ), - migrations.AlterField( - model_name='mymodel', - name='relative_time', - field=models.FloatField(), - ), - ] diff --git a/app/migrations/0003_auto_20230529_1446.py b/app/migrations/0003_auto_20230529_1446.py deleted file mode 100644 index 91603ed..0000000 --- a/app/migrations/0003_auto_20230529_1446.py +++ /dev/null @@ -1,35 +0,0 @@ -# Generated by Django 3.2.19 on 2023-05-29 14:46 - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('app', '0002_auto_20230526_1003'), - ] - - operations = [ - migrations.CreateModel( - name='TP_Api', - fields=[ - ('uid', models.AutoField(primary_key=True, serialize=False)), - ('video_hash', models.CharField(max_length=50)), - ('record_time', models.DateTimeField()), - ('police_id', models.CharField(max_length=50)), - ('event_type', models.IntegerField()), - ('is_violation', models.BooleanField()), - ('small_image', models.CharField(max_length=50)), - ('relative_time', models.FloatField()), - ('video_dir', models.CharField(max_length=50)), - ('car_number', models.CharField(max_length=50)), - ('ai_analysis', models.CharField(max_length=255)), - ('add_time', models.DateTimeField()), - ('update_time', models.DateTimeField()), - ('is_display', models.BooleanField()), - ], - ), - migrations.DeleteModel( - name='MyModel', - ), - ] diff --git a/app/migrations/0004_auto_20230531_1032.py b/app/migrations/0004_auto_20230531_1032.py deleted file mode 100644 index 86bdddc..0000000 --- a/app/migrations/0004_auto_20230531_1032.py +++ /dev/null @@ -1,23 +0,0 @@ -# Generated by Django 3.2.19 on 2023-05-31 10:32 - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('app', '0003_auto_20230529_1446'), - ] - - operations = [ - migrations.AlterField( - model_name='tp', - name='small_image', - field=models.CharField(max_length=100), - ), - migrations.AlterField( - model_name='tp', - name='video_dir', - field=models.CharField(max_length=100), - ), - ] diff --git a/app/migrations/0005_alter_tp_event_type.py b/app/migrations/0005_alter_tp_event_type.py deleted file mode 100644 index 7a8312a..0000000 --- a/app/migrations/0005_alter_tp_event_type.py +++ /dev/null @@ -1,18 +0,0 @@ -# Generated by Django 3.2.19 on 2023-05-31 14:21 - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('app', '0004_auto_20230531_1032'), - ] - - operations = [ - migrations.AlterField( - model_name='tp', - name='event_type', - field=models.CharField(max_length=50), - ), - ] diff --git a/app/migrations/0006_auto_20230531_1757.py b/app/migrations/0006_auto_20230531_1757.py deleted file mode 100644 index 6608e93..0000000 --- a/app/migrations/0006_auto_20230531_1757.py +++ /dev/null @@ -1,28 +0,0 @@ -# Generated by Django 3.2.19 on 2023-05-31 17:57 - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('app', '0005_alter_tp_event_type'), - ] - - operations = [ - migrations.AlterField( - model_name='tp', - name='add_time', - field=models.DateTimeField(auto_now=True), - ), - migrations.AlterField( - model_name='tp', - name='is_display', - field=models.BooleanField(default=True), - ), - migrations.AlterField( - model_name='tp', - name='update_time', - field=models.DateTimeField(auto_now_add=True), - ), - ] diff --git a/app/migrations/0007_auto_20230601_1042.py b/app/migrations/0007_auto_20230601_1042.py deleted file mode 100644 index 2e68c39..0000000 --- a/app/migrations/0007_auto_20230601_1042.py +++ /dev/null @@ -1,23 +0,0 @@ -# Generated by Django 3.2.19 on 2023-06-01 10:42 - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('app', '0006_auto_20230531_1757'), - ] - - operations = [ - migrations.AlterField( - model_name='tp', - name='add_time', - field=models.DateTimeField(auto_now_add=True), - ), - migrations.AlterField( - model_name='tp', - name='update_time', - field=models.DateTimeField(auto_now=True), - ), - ] diff --git a/db.sqlite3 b/db.sqlite3 deleted file mode 100644 index fa04171..0000000 Binary files a/db.sqlite3 and /dev/null differ diff --git a/logs/.gitkeep b/logs/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/manage.py b/manage.py index 1a237fd..366b772 100644 --- a/manage.py +++ b/manage.py @@ -6,7 +6,7 @@ import sys def main(): """Run administrative tasks.""" - os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'TP_Api.settings') + os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'TP_API.settings') try: from django.core.management import execute_from_command_line except ImportError as exc: diff --git a/pip.conf b/pip.conf new file mode 100644 index 0000000..c969f0d --- /dev/null +++ b/pip.conf @@ -0,0 +1,6 @@ +[global] +index-url = https://pypi.tuna.tsinghua.edu.cn/simple +[install] +trusted-host = https://pypi.tuna.tsinghua.edu.cn +[list] +format=columns \ No newline at end of file diff --git a/requirements.txt b/requirements.txt new file mode 100644 index 0000000..1697ec3 Binary files /dev/null and b/requirements.txt differ diff --git a/start.sh b/start.sh new file mode 100644 index 0000000..91c5dd5 --- /dev/null +++ b/start.sh @@ -0,0 +1,8 @@ +#!/bin/bash + +python manage.py makemigrations&& +python manage.py migrate&& +uwsgi --ini /home/myproject/uwsgi.ini&& +echo 'TP项目启动完成' + +exec "$@" \ No newline at end of file diff --git a/uwsgi.ini b/uwsgi.ini new file mode 100644 index 0000000..da33f84 --- /dev/null +++ b/uwsgi.ini @@ -0,0 +1,38 @@ +[uwsgi] + +project=myproject +uid=www-data +gid=www-data +base=/home + +chdir=%(base)/%(project) +module=TP_API.wsgi:application +master=True +processes=2 + +http=0.0.0.0:8000 + +chown-socket=%(uid):www-data +chmod-socket=664 + +vacuum=True +max-requests=5000 + +pidfile=%(base)/%(project)/logs/%(project)-master.pid +daemonize=%(base)/%(project)/logs/%(project)-uwsgi.log + +#设置一个请求的超时时间(秒),如果一个请求超过了这个时间,则请求被丢弃 +harakiri = 60 +post buffering = 8192 +buffer-size= 65535 +#当一个请求被harakiri杀掉会,会输出一条日志 +harakiri-verbose = true + +#开启内存使用情况报告 +memory-report = true + +#设置平滑的重启(直到处理完接收到的请求)的长等待时间(秒) +reload-mercy = 10 + +#设置工作进程使用虚拟内存超过N MB就回收重启 +reload-on-as= 1024 \ No newline at end of file