# Personal-site | Production [Tested on server with Hyperbola GNU + Linux-libre] # Python dependencies - Django - Pillow - psycopg2-binary - pytz # Production Installation 1. Clone **Personal-site** git clone https://gitlab.com/heckyel-ng/personal-site /path/to/site 2. Run `virtualenv`. cd /path/to/site && virtualenv ./venv/ 3. Activate the virtualenv. source ./env/bin/activate 4. Install dependencies through `pip`. pip install -r requirements_prod.txt # Configuration Postgres 1. Logion as postgres sudo su - postgres 2. Create base createdb namebase 3. Create User (place a password for our user) createuser -P username 4. Inside the database psql -d namebase 5. Give permissions to the created user GRANT ALL PRIVILEGES ON DATABASE namebase TO username; # Conecting to Postgres 1. Copy `settings.py.example` to `settings.py` and modify. Make sure to uncomment the appropriate database section (either sqlite or PostgreSQL). Replace sqlite configuartion to postgres, example: DATABASES = { 'default': { 'ENGINE': 'django.db.backends.postgresql', 'NAME': 'namebase', 'USER': 'username', 'PASSWORD': 'pass', 'HOST': '127.0.0.1', 'PORT': '5432', } } 2. Check syntax. ./manage.py check --deploy 3. Migrate changes. ./manage.py migrate 4. Create superUSER ./manage.py createsuperuser # Run with Apache server and wsgi 1. Install WSGI for Apache sudo pacman -S mod_wsgi 2. To install mod_wsgi, add the following line in `httpd.conf`, example: sudo nano /etc/httpd/conf/httpd.conf Added line: LoadModule wsgi_module modules/mod_wsgi.so 3. Create vhosts, for example: sudo emacs /etc/httpd/conf/extra/httpd-vhosts.conf and inside write the configuration, example: ServerAdmin example@dominio.com ServerName example.com ServerAlias example.com Alias /media /path/to/site/media/ Alias /static /path/to/site/core/static/ Require all granted Require all granted Require all granted WSGIDaemonProcess personalsite python-home=/path/to/site/venv python-path=/path/to/site WSGIProcessGroup personalsite WSGIScriptAlias / /path/to/site/wsgi.py 4. Replace `ALLOWED_HOSTS = []` on setting.py to: ALLOWED_HOSTS = ["example.com", "localhost"] 5. Added on setting.py: STATIC_ROOT = '/path/to/site/core/static' 6. Generated files static of Admin Django (you must be inside the virtualenv). ./manage.py collectstatic 7. Create the media/ directory ``` cd /path/to/personalsite ``` ``` mkdir media/ ``` 8. Change Permition to media/ at group http sudo chown -R http:http media/ 9. Restart Apache server sudo service httpd restart 10. Done! # Security on settings.py [SSL, HTTPS, COOKIE, etc] ``` # 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' ```