Skip to content

Commit

Permalink
Draft production configuration
Browse files Browse the repository at this point in the history
  • Loading branch information
mrEvgenX committed Jul 4, 2020
1 parent f47c7e4 commit 6d63636
Show file tree
Hide file tree
Showing 11 changed files with 104 additions and 17 deletions.
2 changes: 1 addition & 1 deletion .github/workflows/django.yml
Expand Up @@ -24,7 +24,7 @@ jobs:
- name: Install Dependencies
run: |
python -m pip install --upgrade pip
pip install -r requirements.txt
pip install -r requirements.dev.txt
- name: Run Tests
run: |
cd django
Expand Down
3 changes: 2 additions & 1 deletion .gitignore
Expand Up @@ -24,4 +24,5 @@ yarn-error.log*

**/venv
**/__pycache__
**/*.sqlite3
**/*.sqlite3
**/static/*
23 changes: 23 additions & 0 deletions Dockerfile
@@ -0,0 +1,23 @@
FROM phusion/baseimage

RUN mkdir -p /easytrack/react
COPY ./django ./static ./requirements.*.txt /easytrack/
COPY ./react/build /easytrack/react

RUN apt-get -y update
RUN apt-get install -qy \
nginx \
postgresql-client \
python3 \
python3-pip
RUN pip3 install --upgrade pip
RUN pip3 install -r /easytrack/requirements.dev.txt
COPY runit/uwsgi /etc/service/uwsgi
COPY nginx/easytrack.conf /etc/nginx/sites-available/easytrack.conf
RUN rm /etc/nginx/sites-enabled/*
RUN ln -s /etc/nginx/sites-available/easytrack.conf /etc/nginx/sites-enabled/easytrack.conf
COPY runit/nginx /etc/service/nginx

RUN apt-get clean && rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/*

This comment has been minimized.

Copy link
@php-coder

php-coder Jul 27, 2020

В данном случае, чистить уже поздно и даже вредно так как это приведет к дополнительному слою и не уменьшит размер изображения. apt-get clean нужно делать в том же слое что и остальные команды apt-get. Кстати, apt-get update -y я бы тоже объединил с apt-get install.

Также команды COPY по возможности выполняют после установки пакетов и окружения -- в этом случае изображения собираются быстрее так как Docker может брать слои из кэша. Если же COPY выполняется до команд установки, то это может сбросить кэш и все будет устанавливаться заново каждый раз. (Но лучше это все проверить лично, на случае, если я ошибаюсь или в Docker-е что-нибудь поменяли.)

This comment has been minimized.

Copy link
@mrEvgenX

mrEvgenX Aug 21, 2020

Author Owner

Очень круто получилось, благодаря этому комментарию.
Спасибо.


EXPOSE 80
14 changes: 8 additions & 6 deletions django/config/settings_dev.py
Expand Up @@ -13,14 +13,13 @@
]

DATABASES['default'].update({
'ENGINE': 'django.db.backends.sqlite3',
'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
'NAME': 'easytrack',
'USER': 'easytrack_dev',
'PASSWORD': 'development',
'HOST': 'localhost',
'PORT': '5432',
})

CORS_ORIGIN_WHITELIST = [
'http://localhost:3000'
]

# python -m smtpd -n -c DebuggingServer localhost:1025
EMAIL_HOST='localhost'
EMAIL_PORT=1025
Expand All @@ -31,3 +30,6 @@
INTERNAL_IPS = [
'127.0.0.1',
]


STATIC_ROOT='static'
4 changes: 4 additions & 0 deletions django/uwsgi.ini
@@ -0,0 +1,4 @@
[uwsgi]
module=config.wsgi:application
#http=127.0.0.1:8000
socket=127.0.0.1:8000
29 changes: 29 additions & 0 deletions nginx/easytrack.conf
@@ -0,0 +1,29 @@
upstream django {
#server unix:///home/evgene-petrenko/Projects/easy-track/django/easytrack.sock;
server 127.0.0.1:8000;
}

server {
listen 8080;
server_name _;

charset utf-8;

location /static {
root /home/evgene-petrenko/Projects/easy-track/;
}

location /api/ {
include uwsgi_params;
uwsgi_pass django;
}

location /admin {
include uwsgi_params;
uwsgi_pass django;
}

location / {
root /home/evgene-petrenko/Projects/easy-track/react/build;
}
}
11 changes: 4 additions & 7 deletions react/src/AppContainer.js
Expand Up @@ -51,6 +51,7 @@ export default class AppContainer extends Component {
authenticationAttemptFailed: false,
registrationFailed: null
},
needToFetchData: true,
folders: [],
trackedItems: [],
trackEntries: [],
Expand All @@ -66,15 +67,11 @@ export default class AppContainer extends Component {
}

populateStateIfNecessary = () => {
const { auth: { isAuthenticated }, folders, trackedItems, trackEntries } = this.state;
const { auth: { isAuthenticated }, needToFetchData } = this.state;
if (
isAuthenticated
&& (
folders.length === 0
|| trackedItems.length === 0
|| trackEntries.length === 0
)
isAuthenticated && needToFetchData
) {
this.setState({needToFetchData: false});
actOrRefreshToken(
populateState, this.state.auth.refresh, this.accessRefresher
)(this.state.auth.access)
Expand Down
2 changes: 1 addition & 1 deletion react/src/asyncOperations.js
@@ -1,4 +1,4 @@
const baseAPIUrl = 'http://localhost:8000/api/v1/';
const baseAPIUrl = '/api/v1/';


export class AccessTokenExpiredError extends Error {
Expand Down
2 changes: 1 addition & 1 deletion requirements.common.txt
@@ -1,5 +1,5 @@
django==3.0.7
django-cors-headers==3.3.0
# django-cors-headers==3.3.0
djangorestframework==3.11.0
unidecode==1.1.1
djangorestframework-simplejwt==4.4.0
3 changes: 3 additions & 0 deletions runit/nginx/run
@@ -0,0 +1,3 @@
#!/usr/bin/env bash

exec /usr/sbin/nginx -c /etc/nginx/nginx.conf -g "daemon off;"
28 changes: 28 additions & 0 deletions runit/uwsgi/run
@@ -0,0 +1,28 @@
#!/usr/bin/env bash

source /mymdb/venv/bin/activate

export PGPASSWORD="$DJANGO_DB_PASSWORD"
psql \
-h "$DJANGO_DB_HOST" \
-p "$DJANGO_DB_PORT" \
-U "$DJANGO_DB_USER" \
-d "$DJANGO_DB_NAME"

if [[ $? != 0 ]]; then
echo "no db server"
exit 1
fi

pushd /mymdb/django

python manage.py migrate

if [[ $? != 0 ]]; then
"echo can't migrate"
exit 2
fi

popd

exec /sbin/setuser www-data uwsgi --ini /etc/uwsgi/apps-enabled/mymdb.ini

0 comments on commit 6d63636

Please sign in to comment.