half done docker
This commit is contained in:
parent
455cbf921d
commit
a29095b68b
|
@ -0,0 +1,9 @@
|
|||
APP_DEBUG=false
|
||||
APP_PORT=80
|
||||
|
||||
DB_HOST=db
|
||||
DB_PORT=3306a
|
||||
DB_PASSWORD=
|
||||
DB_DATABASE=pairent
|
||||
|
||||
DJANGO_KEY=
|
|
@ -28,7 +28,4 @@ local_settings.py
|
|||
db.sqlite3
|
||||
|
||||
# macOS moment
|
||||
pairent_backend/.DS_Store
|
||||
# macOS moment жиза
|
||||
.DS_Store
|
||||
|
||||
|
|
81
README.md
81
README.md
|
@ -1,76 +1,7 @@
|
|||
# Аренда квартир для студентов
|
||||
<h1 align='center'>Точка</h1>
|
||||
Добро пожаловать в репозиторий проекта "точка"
|
||||
|
||||
В проекте есть три ветки:
|
||||
|
||||
- main — в эту ветку загружается код после положительного тестирования и ревью.
|
||||
- dev_stable — в эту ветку загружается стабильный код, который будет использоваться в продашкене.
|
||||
- dev_unstable — основная ветка для разработчиков.
|
||||
|
||||
## ТУТ НАЗВАНЫ ПАПКИ ПОД РАЗРАБОТКУ И ФРОНТ В БЕК НЕ ЗАХОДИТ И НИЧЕГО НЕ МЕНЯЕТ!
|
||||
|
||||
## Как начать работать?
|
||||
|
||||
- Устанавливаем [python](https://www.python.org/downloads/) версия 3.11.1 и [git](https://git-scm.com/)
|
||||
- [Настройте git](https://tproger.ru/curriculum/git-guide/). В основном нужно только ввести имя пользователя и почту, пароль запросит при клонировании
|
||||
|
||||
Если не хотите заморачиваться с терминалом. Советую использовать [GitHub Desktop](https://desktop.github.com/)
|
||||
|
||||
### Клонирование проекта через терминал
|
||||
|
||||
Команды написаны под windows. Вводить в командную строку. Проверяйте, что в терминале вы находитесь в правильной директории
|
||||
|
||||
- Клонируем репозиторий
|
||||
|
||||
```bash
|
||||
git clone https://github.com/vvsu-rent-project/dev_rent.github
|
||||
```
|
||||
|
||||
- В консоли переходим в папку проекта
|
||||
- Далее переходим на ветку unstable
|
||||
|
||||
```bash
|
||||
git switch dev_unstable
|
||||
```
|
||||
|
||||
### Клонирование проекта через GitHub Desktop
|
||||
|
||||
- Заходим в настройки
|
||||
|
||||
![Заходим в настройки](misc/1_step.png)
|
||||
|
||||
- Входим в аккаунт
|
||||
|
||||
![Входим в аккаунт](misc/2_step.png)
|
||||
|
||||
- Клонируем репозиторий
|
||||
|
||||
![Клонируем репозиторий](misc/3_step.png)
|
||||
|
||||
![Клонируем репозиторий](misc/4_step.png)
|
||||
|
||||
### Подготовка проекта к работе
|
||||
|
||||
- Открываем VS Code, открываем папку проекта и запускаем терминал
|
||||
- В терминале переходим в папку pairent_backend
|
||||
|
||||
```bash
|
||||
cd pairent_backend
|
||||
```
|
||||
|
||||
- Создаем виртуальное окружение
|
||||
|
||||
```bash
|
||||
python -m venv venv
|
||||
```
|
||||
|
||||
- Активируем виртуальное окружение. Активировать окружение нужно: когда запускаете сервер, устанавливаете зависимости, добавляете новое django приложение
|
||||
|
||||
```bash
|
||||
venv\Scripts\activate
|
||||
```
|
||||
|
||||
- После активации, устанавливаем зависимости.
|
||||
|
||||
```bash
|
||||
pip install -r requirements.txt
|
||||
```
|
||||
# Запуск локального сайта
|
||||
1. Создайте `.env` файл, рекомендуем использовать для этого шаблон `.env.example`
|
||||
2. Сгенерируйте ключи `genkeys.sh`
|
||||
3. Поднимите контейнеры `docker-compose up -d`
|
|
@ -0,0 +1,2 @@
|
|||
*
|
||||
!.gitignore
|
|
@ -0,0 +1,48 @@
|
|||
types {
|
||||
text/html html htm shtml;
|
||||
text/css css;
|
||||
text/xml xml rss;
|
||||
image/gif gif;
|
||||
image/jpeg jpeg jpg;
|
||||
application/x-javascript js;
|
||||
text/plain txt;
|
||||
text/x-component htc;
|
||||
text/mathml mml;
|
||||
image/png png;
|
||||
image/x-icon ico;
|
||||
image/x-jng jng;
|
||||
image/vnd.wap.wbmp wbmp;
|
||||
application/java-archive jar war ear;
|
||||
application/mac-binhex40 hqx;
|
||||
application/pdf pdf;
|
||||
application/x-cocoa cco;
|
||||
application/x-java-archive-diff jardiff;
|
||||
application/x-java-jnlp-file jnlp;
|
||||
application/x-makeself run;
|
||||
application/x-perl pl pm;
|
||||
application/x-pilot prc pdb;
|
||||
application/x-rar-compressed rar;
|
||||
application/x-redhat-package-manager rpm;
|
||||
application/x-sea sea;
|
||||
application/x-shockwave-flash swf;
|
||||
application/x-stuffit sit;
|
||||
application/x-tcl tcl tk;
|
||||
application/x-x509-ca-cert der pem crt;
|
||||
application/x-xpinstall xpi;
|
||||
application/zip zip;
|
||||
application/octet-stream deb;
|
||||
application/octet-stream bin exe dll;
|
||||
application/octet-stream dmg;
|
||||
application/octet-stream eot;
|
||||
application/octet-stream iso img;
|
||||
application/octet-stream msi msp msm;
|
||||
audio/mpeg mp3;
|
||||
audio/x-realaudio ra;
|
||||
video/mpeg mpeg mpg;
|
||||
video/quicktime mov;
|
||||
video/x-flv flv;
|
||||
video/x-msvideo avi;
|
||||
video/x-ms-wmv wmv;
|
||||
video/x-ms-asf asx asf;
|
||||
video/x-mng mng;
|
||||
}
|
|
@ -0,0 +1,38 @@
|
|||
user nobody nobody;
|
||||
worker_processes 5;
|
||||
error_log logs/error.log;
|
||||
pid logs/nginx.pid;
|
||||
worker_rlimit_nofile 8192;
|
||||
|
||||
events {
|
||||
worker_connections 4096;
|
||||
}
|
||||
|
||||
http {
|
||||
include mime.types;
|
||||
include /etc/nginx/proxy.conf;
|
||||
index index.html index.htm;
|
||||
|
||||
default_type application/octet-stream;
|
||||
log_format main '$remote_addr - $remote_user [$time_local] $status '
|
||||
'"$request" $body_bytes_sent "$http_referer" '
|
||||
'"$http_user_agent" "$http_x_forwarded_for"';
|
||||
access_log logs/access.log main;
|
||||
sendfile on;
|
||||
tcp_nopush on;
|
||||
gzip on;
|
||||
server_names_hash_bucket_size 128; # this seems to be required for some vhosts
|
||||
|
||||
server {
|
||||
listen 80;
|
||||
|
||||
location / {
|
||||
proxy_pass http://back;
|
||||
}
|
||||
|
||||
location /static {
|
||||
root /var/www/static;
|
||||
try_files $uri $uri/ index.html;
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,10 @@
|
|||
proxy_redirect off;
|
||||
proxy_set_header Host $host;
|
||||
proxy_set_header X-Real-IP $remote_addr;
|
||||
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
|
||||
client_max_body_size 10m;
|
||||
client_body_buffer_size 128k;
|
||||
proxy_connect_timeout 90;
|
||||
proxy_send_timeout 90;
|
||||
proxy_read_timeout 90;
|
||||
proxy_buffers 32 4k;
|
|
@ -0,0 +1,2 @@
|
|||
*
|
||||
!.gitignore
|
|
@ -0,0 +1,45 @@
|
|||
version: '3'
|
||||
services:
|
||||
nginx:
|
||||
image: nginx:alpine
|
||||
volumes:
|
||||
- './conf/nginx:/etc/nginx'
|
||||
- './static:/var/www/html'
|
||||
restart: always
|
||||
ports:
|
||||
- '${APP_PORT:-80}:80'
|
||||
networks:
|
||||
pairent:
|
||||
aliases:
|
||||
- nginx
|
||||
depends_on:
|
||||
- back
|
||||
back:
|
||||
build:
|
||||
context: ./pairent_backend
|
||||
dockerfile: Dockerfile
|
||||
networks:
|
||||
pairent:
|
||||
aliases:
|
||||
- back
|
||||
volumes:
|
||||
- './pairent_backend:/opt/code'
|
||||
environment:
|
||||
DB_PASS: '${DB_PASSWORD}'
|
||||
depends_on:
|
||||
- db
|
||||
db:
|
||||
image: mariadb
|
||||
networks:
|
||||
pairent:
|
||||
aliases:
|
||||
- db
|
||||
volumes:
|
||||
- './data/db:/etc/mysql'
|
||||
environment:
|
||||
MARIADB_ROOT_PASSWORD: '${DB_PASSWORD}'
|
||||
MARIADB_DATABASE: 'pairent_db'
|
||||
|
||||
networks:
|
||||
pairent:
|
||||
driver: bridge
|
|
@ -0,0 +1,97 @@
|
|||
#!/bin/bash
|
||||
|
||||
# ----- 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
|
||||
|
||||
if ! [ -x "$(command -v python3)" ]; then
|
||||
fatal_err
|
||||
echo -e " Python is not installed."
|
||||
echo -e " Please install Python 3.11 on your system"
|
||||
exit -1
|
||||
fi
|
||||
|
||||
# ----- End safeguards -----
|
||||
|
||||
|
||||
|
||||
# ----- Start bootstrap back -----
|
||||
|
||||
echo Generating keys...
|
||||
KEY=$(python -c 'from django.core.management.utils import get_random_secret_key; print(get_random_secret_key())')
|
||||
sed -Ei "s/^DJANGO_KEY=.*$/DJANGO_KEY=/" .env
|
||||
sed -Ei "s/^DJANGO_KEY=.*$/DJANGO_KEY='$KEY'/" .env
|
||||
|
||||
DB_PASS=$(tr -dc A-Za-z0-9 </dev/urandom | head -c $(( $RANDOM % 32 + 32 )))
|
||||
sed -Ei "s/DB_PASSWORD=\w*/DB_PASSWORD=$DB_PASS/" .env
|
||||
|
||||
echo Using these keys:
|
||||
echo -e " \033[32mDjango key: \033[0m$KEY"
|
||||
echo -e " \033[32mDatabase key: \033[0m$DB_PASS"
|
||||
|
||||
ln -s .env pairent_backend/.env
|
||||
|
||||
# ----- End bootstrap back -----
|
||||
|
||||
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 -----
|
BIN
misc/1_step.png
BIN
misc/1_step.png
Binary file not shown.
Before Width: | Height: | Size: 47 KiB |
BIN
misc/2_step.png
BIN
misc/2_step.png
Binary file not shown.
Before Width: | Height: | Size: 60 KiB |
BIN
misc/3_step.png
BIN
misc/3_step.png
Binary file not shown.
Before Width: | Height: | Size: 87 KiB |
BIN
misc/4_step.png
BIN
misc/4_step.png
Binary file not shown.
Before Width: | Height: | Size: 15 KiB |
|
@ -0,0 +1,17 @@
|
|||
FROM python:alpine
|
||||
|
||||
RUN apk add --no-cache \
|
||||
gcc musl-dev \
|
||||
mysql mariadb-connector-c-dev && \
|
||||
mkdir /opt/code
|
||||
|
||||
COPY requirements.txt /opt/code/requirements.txt
|
||||
WORKDIR /opt/code
|
||||
|
||||
RUN pip install -r requirements.txt
|
||||
|
||||
USER nobody
|
||||
|
||||
COPY . /opt/code
|
||||
|
||||
CMD [ "/bin/sh", "docker-entry.sh" ]
|
|
@ -0,0 +1,6 @@
|
|||
#!/bin/sh
|
||||
|
||||
PYTHON='/usr/bin/env python3'
|
||||
|
||||
$PYTHON manage.py migrate
|
||||
$PYTHON manage.py runserver 0.0.0.0:80
|
|
@ -10,6 +10,7 @@ For the full list of settings and their values, see
|
|||
https://docs.djangoproject.com/en/4.1/ref/settings/
|
||||
"""
|
||||
|
||||
from dotenv import dotenv_values
|
||||
from pathlib import Path
|
||||
|
||||
# Build paths inside the project like this: BASE_DIR / 'subdir'.
|
||||
|
@ -19,11 +20,12 @@ BASE_DIR = Path(__file__).resolve().parent.parent
|
|||
# Quick-start development settings - unsuitable for production
|
||||
# See https://docs.djangoproject.com/en/4.1/howto/deployment/checklist/
|
||||
|
||||
# SECURITY WARNING: keep the secret key used in production secret!
|
||||
SECRET_KEY = 'django-insecure-=(7b+4ka=5jak-mokuh4#-6_14f58#^0kjwqsz7wyon$4i@sel'
|
||||
DOTENV = dotenv_values(BASE_DIR / '..' / '.env');
|
||||
|
||||
# SECURITY WARNING: keep the secret key used in production secret!
|
||||
SECRET_KEY = DOTENV['DJANGO_KEY']
|
||||
# SECURITY WARNING: don't run with debug turned on in production!
|
||||
DEBUG = True
|
||||
DEBUG = DOTENV['APP_DEBUG'] == 'true'
|
||||
|
||||
ALLOWED_HOSTS = ['*']
|
||||
|
||||
|
|
|
@ -0,0 +1,20 @@
|
|||
<!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>
|
|
@ -13,10 +13,15 @@ Including another URLconf
|
|||
1. Import the include() function: from django.urls import include, path
|
||||
2. Add a URL to urlpatterns: path('blog/', include('blog.urls'))
|
||||
"""
|
||||
from django.template import loader
|
||||
from django.contrib import admin
|
||||
from django.urls import path, include
|
||||
|
||||
def root_url(req):
|
||||
return loader.get_template('index.html').render()
|
||||
|
||||
urlpatterns = [
|
||||
path('admin/', admin.site.urls),
|
||||
path('api/', include('pairent_app.urls')),
|
||||
path('', root_url)
|
||||
]
|
||||
|
|
|
@ -5,3 +5,4 @@ django-cors-headers
|
|||
Pillow
|
||||
requests
|
||||
python-ipware
|
||||
python-dotenv
|
|
@ -5,5 +5,6 @@ export default {
|
|||
plugins: [
|
||||
react()
|
||||
],
|
||||
publicDir: '/static/dist'
|
||||
|
||||
}
|
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
|
@ -0,0 +1,20 @@
|
|||
<!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>
|
Loading…
Reference in New Issue