Production [Tested on server with Hyperbola GNU + Linux-libre]
$ git clone https://git.sr.ht/~heckyel/personal-site
virtualenv
.$ cd personal-site && virtualenv ./venv/
$ source ./venv/bin/activate
pip
.$ pip install -r django/requirements_prod.txt
$ sudo su - postgres
$ createdb namebase
$ createuser -P username
$ psql -d namebase
$ GRANT ALL PRIVILEGES ON DATABASE namebase TO username;
$ psql -l
$ dropdb namebase
settings.py.example
to settings.py
and modify.
Make sure to uncomment the appropriate database section (either sqlite or
PostgreSQL).$ cp -v django/personalsite/settings.py.example django/personalsite/settings.py
Replace sqlite configuartion to postgres, example:
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.postgresql_psycopg2',
'NAME': 'namebase',
'USER': 'username',
'PASSWORD': 'pass',
'HOST': '127.0.0.1',
'PORT': '5432',
}
}
$ python django/manage.py check --deploy
$ python django/manage.py makemigrations
$ python django/manage.py migrate
$ python django/manage.py createsuperuser
$ sudo pacman -S mod_wsgi
httpd.conf
, example:$ sudo nano -w /etc/httpd/conf/httpd.conf
Added line:
LoadModule wsgi_module modules/mod_wsgi.so
$ sudo nano -w /etc/httpd/conf/extra/httpd-vhosts.conf
and inside write the configuration, example:
<IfModule ssl_module>
<VirtualHost *:80>
ServerAdmin example@dominio.com
ServerName example.com
ServerAlias example.com
Alias /media /path/to/site/media/
Alias /static /path/to/site/core/static/
<Directory /path/to/site/core/static>
Require all granted
</Directory>
<Directory /path/to/site/media>
Require all granted
</Directory>
<Directory /path/to/site/personalsite>
<Files wsgi.py>
Require all granted
</Files>
</Directory>
WSGIDaemonProcess personalsite python-home=/path/to/site/venv python-path=/path/to/site
WSGIProcessGroup personalsite
WSGIScriptAlias / /path/to/site/wsgi.py
</VirtualHost>
</IfModule>
ALLOWED_HOSTS = []
on setting.py to:
ALLOWED_HOSTS = ["example.com", "localhost"]
STATIC_ROOT = '/path/to/site/core/static'
$ python django/manage.py collectstatic
$ cd /path/to/personalsite
$ mkdir media/
$ sudo chown -R http:http media/
$ sudo rc-service httpd restart
# security.W004
SECURE_HSTS_SECONDS = 31536000
SECURE_HSTS_INCLUDE_SUBDOMAINS = True
SECURE_HSTS_PRELOAD = True
# security.W006
SECURE_CONTENT_TYPE_NOSNIFF = True
# security.W007
SECURE_BROWSER_XSS_FILTER = True
# security.W008
SECURE_SSL_REDIRECT = True
# security.W012
SESSION_COOKIE_SECURE = True
# security.W016、security.W017
CSRF_COOKIE_SECURE = True
CSRF_COOKIE_HTTPONLY = True
# security.W019
X_FRAME_OPTIONS = 'DENY'
Uncomment in project/urls.py
from django.urls import path
from . import views
urlpatterns = [
path('', views.home, name="home"),
path('filename', views.i2pfile, name='i2pfile') # eepsite
]
also project/views.py
def i2pfile(request):
return render(request, 'trabajo/filename')
and add project/templates/trabajo/filename