configure nginx and front

This commit is contained in:
b1ek 2023-05-17 06:57:23 +10:00
parent a29095b68b
commit 0ffd513a2f
Signed by: blek
GPG Key ID: 14546221E3595D0C
14 changed files with 102 additions and 74 deletions

View File

@ -4,4 +4,5 @@
# Запуск локального сайта # Запуск локального сайта
1. Создайте `.env` файл, рекомендуем использовать для этого шаблон `.env.example` 1. Создайте `.env` файл, рекомендуем использовать для этого шаблон `.env.example`
2. Сгенерируйте ключи `genkeys.sh` 2. Сгенерируйте ключи `genkeys.sh`
3. Постройте статичные файлы `build.sh`
3. Поднимите контейнеры `docker-compose up -d` 3. Поднимите контейнеры `docker-compose up -d`

74
build.sh Executable file
View File

@ -0,0 +1,74 @@
#!/bin/sh
# ----- Start commands -----
fatal_err() {
echo -e "\033[31mFatal error $*\033[0m"
}
# ----- End commands -----
# ----- Start safeguards -----
if [[ "$1" != '-a' ]]; then
fatal_err
echo " This script will potentially break any existing instance of Pairent."
echo " To execute this script, re-run it with option -a as first argument."
exit -1
fi
if ! [ -f .env ]; then
fatal_err
echo -e " No .env file was found."
echo -e " Please use the \033[32m.env.example\033[0m to create a dotenv file:"
echo -e " 1. \033[34mcp .env.example .env\033[0m"
echo -e " 2. Edit your \033[32m.env\033[0m in your favourite editor"
exit -1
fi
# ----- End safeguards -----
# ----- Start bootstrap front -----
echo Building frontend static files...
cd pairent_frontend_react
NPMS=('npm' 'pnpm' 'yarn')
NPM='None'
for n in ${NPMS[@]}; do
if [ -x "$(command -v "$n")" ]; then
NPM=$n
fi
done
if [[ "$NPM" == 'None' ]]; then
fatal_err
echo ' No node package manager was found in your system.'
echo ' Please install one of the following:'
for n in ${NPMS[@]}; do
echo -e " $n"
done
exit -1
fi
rm -rf node_modules
$NPM install
$NPM run build
DIST_FOLDER=$(realpath dist)
cd ..
cp -r $DIST_FOLDER/* static
cp $DIST_FOLDER/index.html pairent_backend/pairent_app/templates
cp $DIST_FOLDER/../public/* static -r
echo Done building frontend static files
# ----- End bootstrap front -----

View File

@ -26,13 +26,17 @@ http {
server { server {
listen 80; listen 80;
location / { location ~ ^/(api|admin|index.html|/)$ {
proxy_pass http://back; proxy_pass http://back;
} }
location /static { location / {
root /var/www/static; root /var/www/html;
try_files $uri $uri/ index.html; try_files $uri $uri/ index.html;
} }
location ~ ^/\. {
deny all;
}
} }
} }

View File

@ -56,42 +56,3 @@ ln -s .env pairent_backend/.env
# ----- End bootstrap back ----- # ----- End bootstrap back -----
exit exit
# ----- Start bootstrap front -----
echo Building frontend static files...
cd pairent_frontend_react
NPMS=('npm' 'pnpm' 'yarn')
NPM='None'
for n in ${NPMS[@]}; do
if [ -x "$(command -v "$n")" ]; then
NPM=$n
fi
done
if [[ "$NPM" == 'None' ]]; then
fatal_err
echo ' No node package manager was found in your system.'
echo ' Please install one of the following:'
for n in ${NPMS[@]}; do
echo -e " $n"
done
exit -1
fi
rm -rf node_modules
$NPM install
$NPM run build
DIST_FOLDER=$(realpath dist)
cd ..
cp -r $DIST_FOLDER/* static
echo Done building frontend static files
# ----- End bootstrap front -----

View File

@ -3,4 +3,4 @@
PYTHON='/usr/bin/env python3' PYTHON='/usr/bin/env python3'
$PYTHON manage.py migrate $PYTHON manage.py migrate
$PYTHON manage.py runserver 0.0.0.0:80 $PYTHON -m gunicorn -w 3 -b 0.0.0.0:80 pairent_backend.wsgi

View File

@ -0,0 +1 @@
templates/index.html

View File

@ -21,7 +21,7 @@ from .serializer import (ApartamentListSerializer,
from .authlib import * from .authlib import *
import json, math, random, re, requests, oidc_client, base64, uuid, time, ipware as iplib import json, math, random, re, requests, base64, uuid, time, ipware as iplib
ipware = iplib.IpWare(); ipware = iplib.IpWare();
class ApartamentViewSet(viewsets.ReadOnlyModelViewSet): class ApartamentViewSet(viewsets.ReadOnlyModelViewSet):

View File

@ -20,12 +20,12 @@ BASE_DIR = Path(__file__).resolve().parent.parent
# Quick-start development settings - unsuitable for production # Quick-start development settings - unsuitable for production
# See https://docs.djangoproject.com/en/4.1/howto/deployment/checklist/ # See https://docs.djangoproject.com/en/4.1/howto/deployment/checklist/
DOTENV = dotenv_values(BASE_DIR / '..' / '.env'); DOTENV = dotenv_values(BASE_DIR / '.env');
# SECURITY WARNING: keep the secret key used in production secret! # SECURITY WARNING: keep the secret key used in production secret!
SECRET_KEY = DOTENV['DJANGO_KEY'] SECRET_KEY = DOTENV['DJANGO_KEY']
# SECURITY WARNING: don't run with debug turned on in production! # SECURITY WARNING: don't run with debug turned on in production!
DEBUG = DOTENV['APP_DEBUG'] == 'true' DEBUG = True#DOTENV['APP_DEBUG'] == 'true'
ALLOWED_HOSTS = ['*'] ALLOWED_HOSTS = ['*']
@ -74,7 +74,9 @@ ROOT_URLCONF = 'pairent_backend.urls'
TEMPLATES = [ TEMPLATES = [
{ {
'BACKEND': 'django.template.backends.django.DjangoTemplates', 'BACKEND': 'django.template.backends.django.DjangoTemplates',
'DIRS': [], 'DIRS': [
'templates/'
],
'APP_DIRS': True, 'APP_DIRS': True,
'OPTIONS': { 'OPTIONS': {
'context_processors': [ 'context_processors': [
@ -97,10 +99,10 @@ DATABASES = {
'default': { 'default': {
'ENGINE': 'django.db.backends.mysql', 'ENGINE': 'django.db.backends.mysql',
'NAME': 'pairent_db', 'NAME': 'pairent_db',
'USER': 'django', 'USER': DOTENV['DB_USER'],
'PASSWORD': 'Budnya1924$', 'PASSWORD': DOTENV['DB_PASSWORD'],
'HOST': '178.20.44.123', 'HOST': DOTENV['DB_HOST'],
'PORT': '3306', 'PORT': DOTENV['DB_PORT'],
'OPTIONS': { 'OPTIONS': {
'init_command': "SET sql_mode='STRICT_TRANS_TABLES'" 'init_command': "SET sql_mode='STRICT_TRANS_TABLES'"
} }

View File

@ -1,20 +0,0 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8" />
<title>Pairent</title>
<link rel="preconnect" href="https://fonts.googleapis.com" />
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin />
<link
href="https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700&display=swap"
rel="stylesheet"
/>
<script type="module" crossorigin src="/assets/index-dc786e36.js"></script>
<link rel="stylesheet" href="/assets/index-b130f2c5.css">
</head>
<body>
<noscript>You need to enable JavaScript to run this app.</noscript>
<div id="root"></div>
</body>
</html>

View File

@ -16,9 +16,10 @@ Including another URLconf
from django.template import loader from django.template import loader
from django.contrib import admin from django.contrib import admin
from django.urls import path, include from django.urls import path, include
from django.http import HttpResponse
def root_url(req): def root_url(req):
return loader.get_template('index.html').render() return HttpResponse(loader.get_template('index.html').render())
urlpatterns = [ urlpatterns = [
path('admin/', admin.site.urls), path('admin/', admin.site.urls),

View File

@ -6,3 +6,4 @@ Pillow
requests requests
python-ipware python-ipware
python-dotenv python-dotenv
gunicorn

View File

@ -3,6 +3,7 @@
"version": "0.1.0", "version": "0.1.0",
"private": true, "private": true,
"type": "module", "type": "module",
"homepage": "/static/dist",
"dependencies": { "dependencies": {
"axios": "^1.4.0", "axios": "^1.4.0",
"bootstrap": "^5.2.3", "bootstrap": "^5.2.3",

View File

@ -5,6 +5,6 @@ export default {
plugins: [ plugins: [
react() react()
], ],
publicDir: '/static/dist' publicDir: 'static/dist',
} }

2
static/.gitignore vendored Normal file
View File

@ -0,0 +1,2 @@
*
!.gitignore