mirror of https://github.com/fspc/workstand.git
Jonathan Rosenbaum
7 years ago
5 changed files with 229 additions and 0 deletions
@ -0,0 +1,10 @@ |
|||||
|
#################### |
||||
|
# workstand-nginx # |
||||
|
#################### |
||||
|
|
||||
|
FROM nginx:1.11-alpine |
||||
|
|
||||
|
MAINTAINER Jonathan Rosenbaum <gnuser@gmail.com> |
||||
|
|
||||
|
COPY default.conf /etc/nginx/conf.d |
||||
|
RUN mkdir /usr/share/nginx/html/static |
@ -0,0 +1,61 @@ |
|||||
|
server { |
||||
|
listen 80; |
||||
|
server_name localhost; |
||||
|
|
||||
|
#charset koi8-r; |
||||
|
#access_log /var/log/nginx/log/host.access.log main; |
||||
|
|
||||
|
|
||||
|
location / { |
||||
|
# checks for static file, if not found proxy to app |
||||
|
try_files $uri @proxy_to_app; |
||||
|
} |
||||
|
|
||||
|
location /static { |
||||
|
root /usr/share/nginx/html; |
||||
|
} |
||||
|
|
||||
|
location @proxy_to_app { |
||||
|
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; |
||||
|
# enable this if and only if you use HTTPS |
||||
|
# proxy_set_header X-Forwarded-Proto https; |
||||
|
proxy_set_header Host $http_host; |
||||
|
# we don't want nginx trying to do something clever with |
||||
|
# redirects, we set the Host: header above already. |
||||
|
proxy_redirect off; |
||||
|
proxy_pass http://workstand:8000; |
||||
|
} |
||||
|
|
||||
|
#error_page 404 /404.html; |
||||
|
|
||||
|
# redirect server error pages to the static page /50x.html |
||||
|
# |
||||
|
error_page 500 502 503 504 /50x.html; |
||||
|
location = /50x.html { |
||||
|
root /usr/share/nginx/html; |
||||
|
} |
||||
|
|
||||
|
# proxy the PHP scripts to Apache listening on 127.0.0.1:80 |
||||
|
# |
||||
|
#location ~ \.php$ { |
||||
|
# proxy_pass http://127.0.0.1; |
||||
|
#} |
||||
|
|
||||
|
# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000 |
||||
|
# |
||||
|
#location ~ \.php$ { |
||||
|
# root html; |
||||
|
# fastcgi_pass 127.0.0.1:9000; |
||||
|
# fastcgi_index index.php; |
||||
|
# fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name; |
||||
|
# include fastcgi_params; |
||||
|
#} |
||||
|
|
||||
|
# deny access to .htaccess files, if Apache's document root |
||||
|
# concurs with nginx's one |
||||
|
# |
||||
|
#location ~ /\.ht { |
||||
|
# deny all; |
||||
|
#} |
||||
|
} |
||||
|
|
@ -0,0 +1,88 @@ |
|||||
|
# The environment is setup to use jwilder/nginx-proxy and |
||||
|
# JrCs/docker-letsencrypt-nginx-proxy-companion but can easily be |
||||
|
# modified to be served by an alternative http server. |
||||
|
|
||||
|
# docker-compose build |
||||
|
# docker-compose up -d |
||||
|
|
||||
|
# bikeshop/settings/production.py will need ALLOWED_HOSTS altered correctly |
||||
|
|
||||
|
version: "2" |
||||
|
services: |
||||
|
|
||||
|
nginx: |
||||
|
container_name: workstand-nginx |
||||
|
image: workstand-nginx |
||||
|
build: |
||||
|
context: . |
||||
|
dockerfile: Dockerfile-nginx |
||||
|
volumes: |
||||
|
- static:/usr/share/nginx/html/static |
||||
|
links: |
||||
|
- workstand |
||||
|
network_mode: "bridge" |
||||
|
environment: |
||||
|
- VIRTUAL_HOST=workstand.bikelover.org |
||||
|
- LETSENCRYPT_HOST=workstand.bikelover.org |
||||
|
- LETSENCRYPT_EMAIL=bike@bikelover.org |
||||
|
restart: always |
||||
|
logging: |
||||
|
driver: "json-file" |
||||
|
options: |
||||
|
max-size: "10m" |
||||
|
max-file: "3" |
||||
|
|
||||
|
workstand: |
||||
|
container_name: workstand |
||||
|
build: |
||||
|
context: . |
||||
|
dockerfile: Dockerfile |
||||
|
command: 'bash -c "PYTHONUNBUFFERED=TRUE python manage.py migrate --no-input && python manage.py collectstatic --no-input && python manage.py rebuild_index --noinput && python manage.py loaddata fixtures.yaml && gunicorn --log-file=- -b 0.0.0.0:8000 bikeshop.wsgi:application"' |
||||
|
network_mode: "bridge" |
||||
|
image: bcbc/workstand:production |
||||
|
links: |
||||
|
- redis |
||||
|
- db |
||||
|
environment: |
||||
|
- DJANGO_SETTINGS_MODULE=bikeshop.settings.production |
||||
|
- PORT=8000 |
||||
|
volumes: |
||||
|
- static:/code/static |
||||
|
restart: always |
||||
|
logging: |
||||
|
driver: "json-file" |
||||
|
options: |
||||
|
max-size: "10m" |
||||
|
max-file: "3" |
||||
|
|
||||
|
redis: |
||||
|
container_name: workstand-redis |
||||
|
network_mode: "bridge" |
||||
|
image: redis:latest |
||||
|
volumes: |
||||
|
- redis:/data |
||||
|
restart: always |
||||
|
logging: |
||||
|
driver: "json-file" |
||||
|
options: |
||||
|
max-size: "10m" |
||||
|
max-file: "3" |
||||
|
|
||||
|
db: |
||||
|
container_name: workstand-db |
||||
|
network_mode: "bridge" |
||||
|
image: postgres:latest |
||||
|
volumes: |
||||
|
- pgdata:/var/lib/postgresql/data/ |
||||
|
restart: always |
||||
|
logging: |
||||
|
driver: "json-file" |
||||
|
options: |
||||
|
max-size: "10m" |
||||
|
max-file: "3" |
||||
|
|
||||
|
volumes: |
||||
|
pgdata: |
||||
|
external: false |
||||
|
redis: |
||||
|
static: |
@ -0,0 +1,69 @@ |
|||||
|
import os |
||||
|
import sys |
||||
|
import rollbar |
||||
|
|
||||
|
from .base import * # noqa |
||||
|
|
||||
|
|
||||
|
# SECURITY WARNING: keep the secret key used in production secret! |
||||
|
WSGI_APPLICATION = 'bikeshop.wsgi.application' |
||||
|
|
||||
|
SECRET_KEY = os.environ.get('DJANGO_SECRET_KEY', 'secret') |
||||
|
|
||||
|
# SECURITY WARNING: don't run with debug turned on in production! |
||||
|
DEBUG = False |
||||
|
|
||||
|
ALLOWED_HOSTS = ['workstand.bikelover.org'] |
||||
|
|
||||
|
LOGGING = { |
||||
|
'version': 1, |
||||
|
'disable_existing_loggers': False, |
||||
|
'handlers': { |
||||
|
'console': { |
||||
|
'class': 'logging.StreamHandler', |
||||
|
'formatter': 'verbose' |
||||
|
}, |
||||
|
}, |
||||
|
'formatters': { |
||||
|
'verbose': { |
||||
|
'format': '%(levelname)s %(asctime)s %(pathname)s %(message)s' |
||||
|
}, |
||||
|
}, |
||||
|
'loggers': { |
||||
|
'django': { |
||||
|
'handlers': ['console'], |
||||
|
'level': os.getenv('DJANGO_LOG_LEVEL', 'ERROR'), |
||||
|
}, |
||||
|
'bikeshop': { |
||||
|
'handlers': ['console'], |
||||
|
'level': os.getenv('DJANGO_LOG_LEVEL', 'INFO'), |
||||
|
} |
||||
|
}, |
||||
|
} |
||||
|
|
||||
|
WEBPACK_LOADER = { |
||||
|
'DEFAULT': { |
||||
|
'CACHE': True, |
||||
|
'BUNDLE_DIR_NAME': 'dist/', # must end with slash |
||||
|
'STATS_FILE': os.path.join(BASE_DIR, '../webpack-stats-prod.json'), # noqa |
||||
|
'POLL_INTERVAL': 0.1, |
||||
|
'IGNORE': ['.+\.hot-update.js', '.+\.map'] |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
# Covers regular testing and django-coverage |
||||
|
if 'test' in sys.argv or 'test_coverage' in sys.argv: |
||||
|
DATABASES['default']['ENGINE'] = 'django.db.backends.sqlite3' # noqa |
||||
|
|
||||
|
MIDDLEWARE_CLASSES += ['rollbar.contrib.django.middleware.RollbarNotifierMiddleware'] |
||||
|
|
||||
|
ROLLBAR = { |
||||
|
'access_token': '91808a727b9a4679a89720132071391a', |
||||
|
'environment': 'production', |
||||
|
'root': BASE_DIR, |
||||
|
} |
||||
|
|
||||
|
rollbar.init(**ROLLBAR) |
||||
|
|
||||
|
MAILCHIMP_API_KEY = os.environ.get('MAILCHIMP_API_KEY') |
||||
|
MAILCHIMP_USERNAME = 'drew@bcbc.bike' |
Loading…
Reference in new issue