使用时,注意各services启动配置文件与此文件路径对应
version: '3.3' # cocker compose版本号
# 可以使用当前目录下的 .env 文件中的变量
# 带变量文件启动命令:docker-compose --env-file=dk.env up -d
services:
postgres:
container_name: pgsql #生成的容器名称。【后面的pgadmin4连接时使用此名称】
image: postgres:12.3-alpine
privileged: true #解决权限
ports:
- 127.0.0.1:5432:5432
#env_file:
# - dk.env
environment:
PGDATA: /var/lib/postgresql/data #数据存储文件夹
POSTGRES_DB: simple_db #在此填写postgres的数据库名,默认是postgres
POSTGRES_USER: postgres # psql 用户
POSTGRES_PASSWORD: ${POSTGRES_PASSWORD} # psql 密码
volumes:
- /etc/localtime:/etc/localtime
- /data/pg_data:/var/lib/postgresql/data #将数据映射到对应的路径----【冒号后不能有空格】
#- /etc/passwd:/etc/passwd:ro
#user: $UID:$UID
restart: always
pgadmin:
image: dpage/pgadmin4:snapshot
container_name: pgadmin4_dk
restart: always
environment:
PGADMIN_DEFAULT_EMAIL: aa@bb.com #在此填写pgAdmin登录账户邮箱
PGADMIN_DEFAULT_PASSWORD: ${POSTGRES_PASSWORD} #在此填写pgAdmin密码
volumes:
- /etc/localtime:/etc/localtime
ports:
- 8093:80
depends_on:
- postgres
redis:
# Redis 的密码需要自己在与容器共享的配置 redis.conf 中加入,即更改配置中 requirepass
# 或 command 增加选项:--requirepass yourpassword
# 指定镜像
image: redis:6-alpine
container_name: my_redis
restart: always
ports:
# 端口映射
- 6379:6379
volumes:
- /etc/localtime:/etc/localtime
- ${REDIS_DIR}/data:/data
- ${REDIS_DIR}/redis.conf:/etc/redis/redis.conf # 配置文件必须自定义,否则启动不了
#- ${REDIS_DIR}/redis.conf:/usr/local/etc/redis/redis.conf # 配置文件
command: redis-server /etc/redis/redis.conf # 执行的命令
tty: true
nginx: # 服务的名称
image: nginx:1.19.0-alpine
container_name: my_nginx
volumes: # 文件夹映射
- /data/html:/usr/share/nginx/html:ro # 宿主:docker:只读 ,www目录
- /data/nglogs:/data/nglogs # log.txt
- ./nginx_conf/nginx.conf:/etc/nginx/nginx.conf:ro # nginx配置文件
ports: # 端口转发 宿主:docker 【注意nginx.conf文件中端口配置】
- "8080:80"
- "8081:81"
# environment:
# - NGINX_HOST=foobar.com
# - NGINX_PORT=80
# command: /bin/bash -c "envsubst < /etc/nginx/conf.d/mysite.template > /etc/nginx/conf.d/default.conf && exec nginx -g 'daemon off;'"#利用环境变量动态修改配置文件
#networks: ## 定义网络
# nn: ## 加入的网络的名称
# ipv4_address: 192.168.5.101 ## ipv4的ip地址
#-----------需测试
uwsgi:
image: py37:slim_uwsgi
container_name: myuwsgi
restart: always
#working_dir: /code/web
volumes:
- ./code:/uwsgi/code
- ./uwsgi_conf:/uwsgi
- ./uwsgi_entrypoint:/data
expose:
- 809
ports:
- 890:809
depends_on:
- postgres
- redis
#command: uwsgi --ini uwsgi.ini #容器入口为Entrypoint.sh 此处仅需传递参数
command: --ini /uwsgi/uwsgi.ini
networks: ##定义网络组
nn: ## 网络组名称
driver: bridge ## 网络的模式
ipam: ## 配置网络
driver: default
config:
- subnet: 192.168.5.0/24 ## ip地址网络 这里宿主机一般会是该网段的 192.168.5.1,所以不要设置自网段为1
redis.conf
port 6379
#bind 127.0.0.1
#cluster-enabled yes
#cluster-config-file nodes.conf
#cluster-node-timeout 5000
deamonize no
appendonly yes
#requirepass 1111111
nginx.conf:
#user nobody;
worker_processes 4;
error_log /data/nglogs/error.log;
#error_log logs/error.log notice;error_log类型如下(从左到右:debug最详细 crit最少)[ debug | info | notice | warn | error | crit ]
#error_log /dev/null crit; #关闭日志输出,即把存储位置设置到Linux的黑洞中去
#pid logs/nginx.pid;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
#log_format access '$remote_addr - $remote_user [$time_local] "$request" '
# '$status $body_bytes_sent "$http_referer" '
# '"$http_user_agent" $http_x_forwarded_for '
# '"$upstream_addr" "$upstream_status" "$upstream_response_time" "$request_time"';
access_log /data/nglogs/host.access.log main;
limit_conn_zone $binary_remote_addr zone=one:10m;
server_tokens off;
sendfile on;
#tcp_nopush on;
keepalive_timeout 65;
#gzip on;
upstream myweb {
ip_hash;
server 127.0.0.1:8090;
}
upstream mytel {
#ip_hash;
server 127.0.0.1:8797;
}
server {
listen 80;
server_name localhost;
charset utf-8;
#access_log /data/nglogs/access8999.log access;
client_body_timeout 20s;
client_header_timeout 10s;
keepalive_timeout 60s;
send_timeout 30s;
limit_conn one 30; #这将指定一个地址只能同时存在一个连接。“one”与上面的对应,也可以自定义命名
limit_rate 500k;
location / {
root /usr/share/nginx/html/;
index index.htm;
}
#error_page 404 /404.html;
# redirect server error pages to the static page /50x.html
#
error_page 400 401 402 403 404 405 408 410 412 413 414 415 500 501 502 503 504 506 /50x.html;
location = /50x.html {
#放错误页面的目录路径。
root /data/html;
}
location ~* ^/(mobapi|index|api|user|upload)/ {
#include /usr/local/nginx/conf/uwsgi_params;
#uwsgi_pass unix:/tmp/pgadmin4.sock;
include uwsgi_params;
uwsgi_pass mytel;
}
}
}
uwsgi.conf
[uwsgi]
#socket = /tmp/pgadmin4.sock
#chmod-socket = 755
socket = 127.0.0.1:8797
#http-socket = 127.0.0.1:8097
#指定socket文件,也可以指定为127.0.0.1:9000,这样就会监听到网络套接字
processes = 4
threads = 8
chdir = /data/bottle_telnum/
mount = /=main:app
manage-script-name = true
pidfile = /data/uwsgi/uwsgi_m.pid
#daemonize = /var/log/my_uwsgi.log
logto = /data/uwsgi/my_uwsgi_m.log
# 使进程在后台运行,并将日志打到指定的日志文件或者udp服务器
master = true
#序列化接受的内容,如果可能的话
thunder-lock = true
#启用线程
enable-threads = true
vacuum = true
disable-logging = true