Docer实现Django Uwsgi部署

Deploy django-nginx-uwsgi

针对一些单位简单企业站使用docker 完成django uwsgi 部署

docker-nginx django-ruunserver

Django settings.py

ALLOWED_HOSTS = ['*']
...
STATIC_URL = '/static/'
STATIC_ROOT = '/statics'

STATICFILES_DIRS = [
    os.path.join(BASE_DIR, "static")
]

LOGGING = {
    'version': 1,
    'disable_existing_loggers': False,
    'formatters': {
        'verbose': {
            'format': '{levelname} {asctime} {module} {process:d} {thread:d} {message}',
            'style': '{',
        },
    },
    'handlers': {
        'file': {
            'level': 'INFO',
            'formatter': 'verbose',
            'class': 'logging.handlers.TimedRotatingFileHandler',
            'filename': '/Users/kurong/Desktop/deploydemo/debug.log',
            'when': 'midnight',
            'interval': 1
        },
    },
    'loggers': {
        'django': {
            'handlers': ['file'],
            'level': 'INFO',
            'propagate': True,
        },
    },
}
python manage.py runserver 0.0.0.0:8000

nginx

upstream website {
   server 192.168.50.229:8000;
}

server {
   listen   80;
   server_name 192.168.50.229;
   charset     utf-8;

   location / {
      proxy_pass http://website;
   }

   access_log /var/log/nginx/access.log main;
   error_log /var/log/nginx/error.log warn;
}
docker run -itd --name nginx -p 80:80 -v /Users/kurong/Desktop/site.conf:/etc/nginx/conf.d/default.conf nginx
docker-nginx django-uwsgi

测试uwsgi

# test.py
def application(env, start_response):
   start_response('200 OK', [('Content-Type','text/html')])
   return [b"Hello World"]
uwsgi --http :8000 --wsgi-file test.py

浏览器访问127.0.0.1:8000显示Hello World成功

测试uwsgi+django

uwsgi --http :8000 --module deploydemo.wsgi

浏览器访问127.0.0.1:8000显示Django index页面成功

测试nginx+uwsgi+django

upstream website {
   server 192.168.50.229:8000;
}

server {
   listen   80;
   server_name 192.168.50.229;
   charset  utf-8;

   client_max_body_size 75M;


   # location /media  {
   #    alias /path/to/your/mysite/media;
   # }

   location /static {
      alias /path/to/your/mysite/static;
   }

   location / {
      uwsgi_pass  website;
      include     /etc/nginx/uwsgi_params;
   }
}
docker run -itd --name nginx -p 80:80 -v /Users/kurong/Desktop/site.conf:/etc/nginx/conf.d/default.conf nginx
uwsgi --socket :8000 --module deploydemo.wsgi

浏览器访问192.168.50.229显示Django index页面成功

使用uwsgi.ini启动服务

[uwsgi]
chdir = /Users/kurong/Desktop/project/deploydemo
module = deploydemo.wsgi
socket = 0.0.0.0:8000
master = True
processes = 4
harakiri = 60
max-requests = 5000
vacuum = True
; pidfile = /data/uwsgi.pid
; daemonize = /www_data/uwsgi.log
uwsgi --ini uwsgi.ini

浏览器访问192.168.50.229显示Django index页面成功

(py3) ➜  deploydemo ls -alR
total 24
drwxr-xr-x  9 kurong  staff  288  4  8 12:14 .
drwxr-xr-x  8 kurong  staff  256  4  8 09:26 ..
-rw-r--r--  1 kurong  staff    0  4  8 09:27 db.sqlite3
drwxr-xr-x  8 kurong  staff  256  4  8 09:27 deploydemo
srw-rw-rw-  1 kurong  staff    0  4  8 12:14 deploydemo.sock
-rwxr-xr-x  1 kurong  staff  666  4  8 09:26 manage.py
drwxr-xr-x  2 kurong  staff   64  4  8 10:53 static
-rw-r--r--  1 kurong  staff  124  4  8 11:48 test.py
-rw-r--r--  1 kurong  staff  242  4  8 12:53 uwsgi.ini

./deploydemo:
total 32
drwxr-xr-x  8 kurong  staff   256  4  8 09:27 .
drwxr-xr-x  9 kurong  staff   288  4  8 12:14 ..
-rw-r--r--  1 kurong  staff     0  4  8 09:26 __init__.py
drwxr-xr-x  8 kurong  staff   256  4  8 11:54 __pycache__
-rw-r--r--  1 kurong  staff   397  4  8 09:26 asgi.py
-rw-r--r--  1 kurong  staff  3956  4  8 10:55 settings.py
-rw-r--r--  1 kurong  staff   752  4  8 09:26 urls.py
-rw-r--r--  1 kurong  staff   397  4  8 09:26 wsgi.py
...
docker nginx+uwsgi+django 服务器部署
# uwsgi.ini
[uwsgi]
chdir = /ggjsfw
module = backend.wsgi
socket = 0.0.0.0:8000
master = True
processes = 4
harakiri = 60
max-requests = 5000
vacuum = True
pidfile = /data/uwsgi.pid
# Dockerfile
FROM freeyeti/dev-in-docker:pyinstaller-4.5-poetry AS django

RUN mkdir /statics && mkdir /data

RUN mkdir -p /deploydemo

WORKDIR /deploydemo

COPY . .

ENV DJANGO_SETTINGS_MODULE "deploydemo.settings_build"

RUN poetry export --output requirements.txt \
   && yes | pip3 install --no-cache-dir -i https://mirrors.cloud.tencent.com/pypi/simple -r requirements.txt \
   && python3 manage.py collectstatic --noinput

ENV DJANGO_SETTINGS_MODULE "deploydemo.settings"

ENV DJANGO_LOG_FILE "/data/logs/debug.log"

RUN chmod +x ./docker/start.sh

CMD ["sh", "./docker/start.sh"]

EXPOSE 8000

FROM nginx:mainline-alpine AS nginx

COPY --from=django /statics /statics

COPY ./docker/site.conf /etc/nginx/conf.d/default.conf

WORKDIR /

CMD ["nginx", "-g", "daemon off;"]

EXPOSE 80
# site.conf
upstream website {
   server 10.0.24.2:8000;  # 10.0.24.2:内网IP
}

server {
   listen   80;
   server_name localhost;
   charset  utf-8;

   client_max_body_size 75M;


   location /media  {
      alias /media;
   }

   location /static {
      alias /statics;
   }

   location / {
      uwsgi_pass  website;
      include     /etc/nginx/uwsgi_params;
   }
}
# start.sh
#!/bin/bash
mkdir -p /data/logs

if [ -f "$DJANGO_LOG_FILE" ]; then
    echo "$DJANGO_LOG_FILE exists."
else 
    touch $DJANGO_LOG_FILE
    echo "$DJANGO_LOG_FILE does not exist. created"
fi

python3 manage.py migrate && uwsgi --ini uwsgi.ini
# serverup.sh
CODETYPE=fullstack
DOMAINNAME=westdc.cn
EMAIL=service@westdc.cn
HOSTNAME=ggjsfw
IMAGESERVER=cr.westdc.cn
PROJECTNAME=ggjsfw
CI_COMMIT_SHORT_SHA=12766a

cp docker/* ./

docker build --target django -t deploydemo-django .

docker build --target nginx -t deploydemo-nginx .

docker run -itd --name $PROJECTNAME-django -p 8000:8000 \
-v /mnt/disk2/projects/ggjsfw/media:/ggjsfw/media \
-v /mnt/disk2/projects/ggjsfw/statics:/statics \
-v /mnt/disk2/projects/ggjsfw/data:/data \
$IMAGESERVER/$PROJECTNAME/django:$CI_COMMIT_SHORT_SHA

docker run -itd -p 8010:80 --name $PROJECTNAME-nginx \
-v /mnt/disk2/projects/ggjsfw/media:/media \
$IMAGESERVER/$PROJECTNAME/nginx:$CI_COMMIT_SHORT_SHA
➜  ggjsfw git:(ciupdate) ✗ tree -L 1
.
├── README.md
├── apps
├── backend
├── db.sqlite3
├── deploy
├── dev
├── docker
├── manage.py
├── media
├── poetry.lock
├── pyproject.toml
├── serverup.sh
├── static
├── templates
├── tmp
├── uwsgi.ini
└── yarn.lock

➜  ggjsfw git:(ciupdate)cd dockerdocker git:(ciupdate) ✗ tree -L 1
.
├── Dockerfile
├── docker-compose.dev.yml
├── docker-entrypoint.sh
├── freed.sh
├── site.conf
├── site.conf.backup
├── start.sh
├── startdjango.sh
└── startnginx.sh
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值