【Docker】nginx+uwsgi+django+postgresql
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了【Docker】nginx+uwsgi+django+postgresql,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含3402字,纯文字阅读大概需要5分钟。
内容图文
./docker-compose.yml
version: "3"
services:
db:
image: postgres
expose:
- "5432"
environment:
POSTGRES_PASSWORD: 'a1s2d3'
POSTGRES_USER: 'postgres'
POSTGRES_DB: 'miniserver'
PGDATA: '/var/lib/postgresql/data/pgdata'
volumes:
- ./postgres/data:/var/lib/postgresql/data/pgdata
restart: always
web:
build: ./web
expose:
- "8000"
volumes:
- ./web/media:/usr/local/lib/python3.8/site-packages/miniserver/media
- ./uwsgi:/tmp # 挂载uwsgi日志
depends_on:
- db
# environment:
# - DEBUG=False
tty: true #同docker run指令参数,表示分配tty设备,该可以支持终端登录
stdin_open: true
nginx:
build: ./nginx
restart: always
ports:
- "80:80"
expose:
- "80"
depends_on:
- web
links:
- web
./web/Dockerfile
FROM python:3.8.5
ENV PYTHONUNBUFFERED 1
RUN pip install -i https://test.pypi.org/simple/ miniserver==0.0.7
WORKDIR /usr/local/lib/python3.8/site-packages/miniserver
RUN pip install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple
COPY uwsgi.ini /usr/local/lib/python3.8/site-packages/miniserver
COPY start.sh /usr/local/lib/python3.8/site-packages/miniserver
RUN sed -i 's/\r//' start.sh \
&& chmod +x start.sh
./web/start.sh
#python manage.py collectstatic --noinput&& #收集静态文件到根目录,
python manage.py makemigrations&&
python manage.py migrate&&
uwsgi --ini /usr/local/lib/python3.8/site-packages/miniserver/uwsgi.ini
./web/uwsgi.ini
[uwsgi]
project=miniserver
uid=www-data
gid=www-data
base=/usr/local/lib/python3.8/site-packages
chdir=%(base)/%(project)
module=%(project).wsgi:application
master=True
processes=2
socket=0.0.0.0:8000
chown-socket=%(uid):www-data
chmod-socket=664
vacuum=True
max-requests=5000
pidfile=/tmp/%(project)-master.pid
daemonize=/tmp/%(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
python-autoreload=1
./nginx/Dockerfile
FROM nginx:latest
# 删除原有配置文件,创建静态资源文件夹和ssl证书保存文件夹
RUN rm /etc/nginx/conf.d/default.conf
# && mkdir -p /usr/share/nginx/html/static \
# && mkdir -p /usr/share/nginx/html/media
# && mkdir -p /usr/share/nginx/ssl
# 设置Media文件夹用户和用户组为Linux默认www-data, 并给予可读和可执行权限,
# 否则用户上传的图片无法正确显示。
# RUN chown -R www-data:www-data /usr/share/nginx/html/media \
# && chmod -R 775 /usr/share/nginx/html/media
# 添加配置文件
ADD ./nginx.conf /etc/nginx/conf.d/
# 关闭守护模式
CMD ["nginx", "-g", "daemon off;"]
./nginx/nginx.conf
upstream django {
ip_hash;
server web:8000; # Docker-compose web服务端口
}
server {
listen 80; # 监听80端口
server_name localhost; # 可以是nginx容器所在ip地址或127.0.0.1,不能写宿主机外网ip地址
charset utf-8;
client_max_body_size 102400M; # 限制用户上传文件大小
# client_body_buffer_size 100M;
#location /static {
location / {
include /etc/nginx/uwsgi_params;
uwsgi_pass django;
uwsgi_read_timeout 600;
uwsgi_connect_timeout 600;
uwsgi_send_timeout 600;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
proxy_redirect off;
proxy_set_header X-Real-IP $remote_addr;
# proxy_pass http://django; # 使用uwsgi通信,而不是http,所以不使用proxy_pass。
}
}
access_log /var/log/nginx/access.log main;
error_log /var/log/nginx/error.log warn;
server_tokens off;
内容总结
以上是互联网集市为您收集整理的【Docker】nginx+uwsgi+django+postgresql全部内容,希望文章能够帮你解决【Docker】nginx+uwsgi+django+postgresql所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。