From 4058d52114c3000faa0c6e601e56b312e2725952 Mon Sep 17 00:00:00 2001
From: Giancarlo Razzolini <grazzolini@archlinux.org>
Date: Fri, 2 Dec 2016 15:44:59 -0200
Subject: [PATCH] group_vars: Added the archweb_db_password. roles/archweb:
 Nginx deployment, domain variable and other improvements.

---
 group_vars/all/archweb.yml                   | 18 +++---
 roles/archweb/tasks/main.yml                 | 20 +++++--
 roles/archweb/templates/local_settings.py.j2 | 60 +++++++++++++++-----
 roles/archweb/templates/nginx.d.conf.j2      | 36 ++++++++++++
 roles/uwsgi/templates/archweb.j2             | 20 -------
 5 files changed, 105 insertions(+), 49 deletions(-)
 create mode 100644 roles/archweb/templates/nginx.d.conf.j2
 delete mode 100644 roles/uwsgi/templates/archweb.j2

diff --git a/group_vars/all/archweb.yml b/group_vars/all/archweb.yml
index 72d63ecf1..44bdccadf 100644
--- a/group_vars/all/archweb.yml
+++ b/group_vars/all/archweb.yml
@@ -1,9 +1,11 @@
 $ANSIBLE_VAULT;1.1;AES256
-32336337623936643161653739636138303332326366363963393436396465633137616266653463
-3663343535306333323332366338623463363030663534630a326336333065633333333230663130
-32656537326537313336343136316338346464386237626230663236343865336562363562363739
-6163396332343032340a653739353436656139396336623539643431366462363164646361336436
-36316238336535323864383537613964373666656465636562613530356566303139383230643761
-65663030323464623230626330633538303436363664383839623334333837666435323466666638
-64353061613234373966636266613763366364386334323333663933616534333937396539376562
-38623139323463336363
+61373130666134363630336235326331396634393437353839653163313238633833353661613662
+3562663866666337656161663330383665643839626139300a376437613930303562623264363664
+63323236383034616566316334323439663166636361333338383536333866323437306264623363
+3362663536623735320a313434643866363336346636303431306230383665663566636530666432
+38333932353535646666626637363431316631356439623134336439396631323162613432323137
+64653534616263623139373561306461353739613963303639636139386131383861363338313636
+30653234643865343833663835663662383636353535623063333162356533643430306134326239
+39343462623962643830623131326138353865306137343137333338323738373666623361336332
+66386334376537313162373564386534656135343266303239333662643938653330616638333337
+6437383736313733663062663230663530633361376633373631
diff --git a/roles/archweb/tasks/main.yml b/roles/archweb/tasks/main.yml
index 8d33d3c96..92e4241d4 100644
--- a/roles/archweb/tasks/main.yml
+++ b/roles/archweb/tasks/main.yml
@@ -4,28 +4,36 @@
   pacman: name=git,memcached,python2,python2-virtualenv,uwsgi-plugin-python2 state=present
 
 - name: make archweb user
-  user: name=archweb shell=/bin/false home="{{ archweb_home }}" createhome=no groups=uwsgi
+  user: name=archweb shell=/bin/false home="{{ archweb_dir }}" createhome=no groups=uwsgi
 
 - name: fix home permissions
-  file: state=directory owner=archweb group=archweb path="{{ archweb_home }}"
+  file: state=directory owner=archweb group=archweb path="{{ archweb_dir }}"
+
+- name: set up nginx
+  template: src=nginx.d.conf.j2 dest=/etc/nginx/nginx.d/archweb.conf owner=root group=root mode=644
+  notify:
+    - restart nginx
+
+- name: make nginx log dir
+  file: path=/var/log/nginx/{{ archweb_domain }} state=directory owner=http group=log mode=755
 
 - name: clone archweb repo
-  git: repo=git://git.archlinux.org/archweb.git dest="{{ archweb_home }}"
+  git: repo=git://git.archlinux.org/archweb.git dest="{{ archweb_dir }}"
   become: true
   become_user: archweb
 
 - name: make virtualenv
-  command: virtualenv2 "{{ archweb_home }}"/env creates="{{ archweb_home }}/env/bin/python"
+  command: virtualenv2 "{{ archweb_dir }}"/env creates="{{ archweb_dir }}/env/bin/python"
   become: true
   become_user: archweb
 
 - name: install stuff into virtualenv
-  pip: requirements="{{ archweb_home }}/requirements_prod.txt" virtualenv="{{ archweb_home }}/env"
+  pip: requirements="{{ archweb_dir }}/requirements_prod.txt" virtualenv="{{ archweb_dir }}/env"
   become: true
   become_user: archweb
 
 - name: fix home permissions
-  file: state=directory owner=archweb group=archweb path="{{ archweb_home }}"
+  file: state=directory owner=archweb group=archweb path="{{ archweb_dir }}"
 
 - name: copy archweb services
   copy: src="{{ item }}" dest="/etc/systemd/system/{{ item }}" owner=root group=root mode=0644
diff --git a/roles/archweb/templates/local_settings.py.j2 b/roles/archweb/templates/local_settings.py.j2
index 397061635..3292ff961 100644
--- a/roles/archweb/templates/local_settings.py.j2
+++ b/roles/archweb/templates/local_settings.py.j2
@@ -1,28 +1,58 @@
 # Django settings for archlinux project.
 
+## Debug settings
+DEBUG = False
+TEMPLATE_DEBUG = False
+
+## Notification admins
+ADMINS = (
+    ('Archweb Bugs', 'dan@archlinux.org'),
+)
+
+SERVER_EMAIL = 'archweb@archlinux.org'
 
-## Database settings
 DATABASES = {
     'default': {
         'ENGINE'  : 'django.db.backends.postgresql_psycopg2',
+        'PORT'    : 5432,
         'NAME'    : 'archweb',
-        'USER'    : 'archweb_update',
-        'PASSWORD': '{{ postgres_users.archweb_update }}',
-        'HOST'    : 'gudrun.archlinux.org',
-        'OPTIONS' : {
-            'autocommit': True,
-            'application_name': 'archweb',
-            'sslmode': 'require',
-        }
+        'USER'    : 'archweb',
+        'PASSWORD': '{{ archweb_db_password }}',
+        'OPTIONS' : {'autocommit': True, 'application_name': 'archweb'},
+    },
+}
+
+## Define cache settings
+CACHES = {
+    'default': {
+        'BACKEND' : 'django.core.cache.backends.memcached.MemcachedCache',
+        'LOCATION': '127.0.0.1:11211',
     }
 }
 
-## Make this unique, and don't share it with anybody.
-SECRET_KEY = '{{ archweb_secret_key }}'
+## Use secure session cookies? Make this true if you want all
+## logged-in actions to take place over HTTPS only. If developing
+## locally, you will want to use False.
+SESSION_COOKIE_SECURE = True
+
+## static files URL
+STATIC_URL = '/static/'
+STATIC_URL = 'https://d11xdyzr0div58.cloudfront.net/static/'
+
+## location for saving dev pictures
+MEDIA_ROOT = '/srv/http/vhosts/archlinux.org/img'
+
+## web url for serving image files
+MEDIA_URL = '/img/'
+MEDIA_URL = 'https://d11xdyzr0div58.cloudfront.net/img/'
+
+# Make this unique, and don't share it with anybody.
+SECRET_KEY = {{ archweb_secret_key }}
+
+# Hostnames we allow this site to be served under
+ALLOWED_HOSTS = ['{{ archweb_domain }}']
 
-## Cache settings
-CACHE_BACKEND = 'memcached://gudrun.archlinux.org:11211'
-CACHE_MIDDLEWARE_SECONDS = 300
-CACHE_MIDDLEWARE_KEY_PREFIX = 'arch'
+## CDN settings
+CDN_ENABLED = True
 
 # vim: set ts=4 sw=4 et:
diff --git a/roles/archweb/templates/nginx.d.conf.j2 b/roles/archweb/templates/nginx.d.conf.j2
new file mode 100644
index 000000000..e6de420b0
--- /dev/null
+++ b/roles/archweb/templates/nginx.d.conf.j2
@@ -0,0 +1,36 @@
+upstream archweb {
+    server unix:///run/uwsgi/archweb.sock;
+}
+
+server {
+    listen       80;
+    listen       [::]:80;
+    server_name  {{ archweb_domain }};
+
+    access_log   /var/log/nginx/{{ archweb_domain }}/access.log;
+    error_log    /var/log/nginx/{{ archweb_domain }}/error.log;
+
+    include snippets/letsencrypt.conf;
+
+    location / {
+        rewrite ^(.*) https://$server_name$1 permanent;
+    }
+}
+
+server {
+    listen       443 ssl http2;
+    listen       [::]:443 ssl http2;
+    server_name  {{ archweb_domain }};
+
+    access_log   /var/log/nginx/{{ archweb_domain }}/access.log;
+    error_log    /var/log/nginx/{{ archweb_domain }}/error.log;
+
+    ssl_certificate      /etc/letsencrypt/live/{{ archweb_domain }}/fullchain.pem;
+    ssl_certificate_key  /etc/letsencrypt/live/{{ archweb_domain }}/privkey.pem;
+    ssl_trusted_certificate /etc/letsencrypt/live/{{ archweb_domain }}/chain.pem;
+
+    location / {
+        include uwsgi_params;
+        uwsgi_pass archweb;
+    }
+}
diff --git a/roles/uwsgi/templates/archweb.j2 b/roles/uwsgi/templates/archweb.j2
deleted file mode 100644
index 92d42161c..000000000
--- a/roles/uwsgi/templates/archweb.j2
+++ /dev/null
@@ -1,20 +0,0 @@
-[uwsgi]
-project = archweb 
-base = /srv/http/archweb
-
-chdir = %(base)
-home = /srv/http/archweb
-module = %(project).wsgi
-
-master = true
-processes = 4
-threads = 2
-reload-on-rss = 600
-
-socket = /run/uwsgi/%(project).sock
-chown-socket = root:nginx
-chmod-socket = 660
-vacuum = true
-logto = /var/log/archweb.log
-
-plugins = python2
-- 
GitLab