From 47326069b1a6b5b10b6df9a55407308cbfdd534f Mon Sep 17 00:00:00 2001 From: tonyrewin Date: Tue, 14 Jun 2022 08:41:40 +0300 Subject: [PATCH] localdev works --- .gitignore | 4 +- README.md | 21 +++++-- nginx.conf | 180 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 199 insertions(+), 6 deletions(-) create mode 100644 nginx.conf diff --git a/.gitignore b/.gitignore index 65200daa..17aee341 100644 --- a/.gitignore +++ b/.gitignore @@ -139,4 +139,6 @@ migration/data migration/content/**/*.md .obsidian -*.zip \ No newline at end of file +*.zip + +.DS_Store \ No newline at end of file diff --git a/README.md b/README.md index 52e5363c..1abd261b 100644 --- a/README.md +++ b/README.md @@ -9,27 +9,38 @@ Tech stack: # Local development -Install redis and poetry (or any python env manager) first +Install deps first on osx ``` -brew install redis poetry +brew install redis poetry nginx brew services start redis ``` on debian/ubuntu ``` -apt install redis python-poetry +apt install redis python-poetry nginx ``` -Then run API server +Then run nginx, redis and API server ``` +redis-server + +cp nginx.conf /usr/local/etc/nginx/. +nginx -s reload + poetry install poetry run python server.py ``` -Also see `Dockerfile` +## Data prepare + +Notice: you need db.sqlite3 file in your root folder or you have to migrate some data to see. + +``` +poetry run python migrate.py all +``` # How to do an authorized request diff --git a/nginx.conf b/nginx.conf new file mode 100644 index 00000000..fd7e762d --- /dev/null +++ b/nginx.conf @@ -0,0 +1,180 @@ + +#user nobody; +worker_processes 1; + +#error_log logs/error.log; +#error_log logs/error.log notice; +error_log error.log info; + +#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"'; + + #access_log logs/access.log main; + + sendfile on; + #tcp_nopush on; + + #keepalive_timeout 0; + keepalive_timeout 65; + + #gzip on; + + map $http_origin $allow_origin { + ~^https?://(.*\.)?localhost:3000|new.discours.io|discours.io()(:\d+)?$ $http_origin; + default ""; + } + + upstream discoursio-api-8080 { + server 0.0.0.0:8080; + } + + server { + listen 8000; + #server_name localhost; + #charset koi8-r; + # access_log logs/host.access.log main; + + #location / { + # root html; + # index index.html index.htm; + #} + + location / { + gzip on; + gzip_min_length 1100; + gzip_buffers 4 32k; + gzip_types text/css text/javascript text/xml text/plain text/x-component application/javascript application/x-javascript application/json application/xml application/rss+xml font/truetype application/x-font-ttf font/opentype application/vnd.ms-fontobject image/svg+xml; + gzip_vary on; + gzip_comp_level 6; + + proxy_pass http://discoursio-api-8080; + http2_push_preload on; + proxy_http_version 1.1; + proxy_read_timeout 60s; + proxy_buffer_size 4096; + proxy_buffering on; + proxy_buffers 8 4096; + proxy_busy_buffers_size 8192; + proxy_set_header Upgrade $http_upgrade; + proxy_set_header Connection $http_connection; + proxy_set_header Host $http_host; + proxy_set_header X-Forwarded-For $remote_addr; + proxy_set_header X-Forwarded-Port $server_port; + proxy_set_header X-Forwarded-Proto $scheme; + proxy_set_header X-Request-Start $msec; + + + if ($request_method = 'OPTIONS') { + add_header 'Access-Control-Allow-Origin' '*' always; + add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS'; + # + # Custom headers and headers various browsers *should* be OK with but aren't + # + add_header 'Access-Control-Allow-Headers' 'DNT,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Range'; + add_header 'Access-Control-Allow-Credentials' 'true'; + # + # Tell client that this pre-flight info is valid for 20 days + # + add_header 'Access-Control-Max-Age' 1728000; + add_header 'Content-Type' 'text/plain; charset=utf-8'; + add_header 'Content-Length' 0; + return 204; + } + + if ($request_method = 'POST') { + add_header 'Access-Control-Allow-Origin' '*' always; + add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS' always; + add_header 'Access-Control-Allow-Headers' 'DNT,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Range' always; + add_header 'Access-Control-Expose-Headers' 'Content-Length,Content-Range' always; + add_header 'Access-Control-Allow-Credentials' 'true' always; + } + + if ($request_method = 'GET') { + add_header 'Access-Control-Allow-Origin' '*:' always; + add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS' always; + add_header 'Access-Control-Allow-Headers' 'DNT,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Range' always; + add_header 'Access-Control-Expose-Headers' 'Content-Length,Content-Range' always; + add_header 'Access-Control-Allow-Credentials' 'true' always; + } + } + + # redirect server error pages to the static page /50x.html + # + error_page 500 502 503 504 /50x.html; + location = /50x.html { + root 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; + #} + } + + + # another virtual host using mix of IP-, name-, and port-based configuration + # + #server { + # listen 8000; + # listen somename:8080; + # server_name somename alias another.alias; + + # location / { + # root html; + # index index.html index.htm; + # } + #} + + + # HTTPS server + # + #server { + # listen 443 ssl; + # server_name localhost; + + # ssl_certificate cert.pem; + # ssl_certificate_key cert.key; + + # ssl_session_cache shared:SSL:1m; + # ssl_session_timeout 5m; + + # ssl_ciphers HIGH:!aNULL:!MD5; + # ssl_prefer_server_ciphers on; + + # location / { + # root html; + # index index.html index.htm; + # } + #} + include servers/*; +} \ No newline at end of file