From 993697be3753be25f3d05617c53d66c64b0e97b5 Mon Sep 17 00:00:00 2001 From: Luke Hoersten Date: Mon, 29 Jun 2020 18:38:49 -0500 Subject: Added mercurial web hosting --- .../aws-s3-backup/files/mercurial-s3-backup.sh | 10 ++++++ mercurial/aws-s3-backup/handlers/main.yaml | 5 +++ mercurial/aws-s3-backup/tasks/main.yaml | 19 +++++++++++ .../templates/mercurial-s3-backup@.service.j2 | 9 +++++ mercurial/files/mercurial-s3-backup.sh | 10 ------ mercurial/handlers/main.yaml | 5 --- mercurial/tasks/main.yaml | 23 ------------- .../templates/mercurial-s3-backup@.service.j2 | 9 ----- mercurial/web/handlers/main.yaml | 5 +++ mercurial/web/tasks/main.yaml | 38 ++++++++++++++++++++++ mercurial/web/templates/hgweb.config.j2 | 6 ++++ mercurial/web/templates/hgweb.ini.j2 | 8 +++++ mercurial/web/templates/hgweb.nginx.conf.j2 | 33 +++++++++++++++++++ mercurial/web/templates/hgweb.wsgi.j2 | 18 ++++++++++ 14 files changed, 151 insertions(+), 47 deletions(-) create mode 100644 mercurial/aws-s3-backup/files/mercurial-s3-backup.sh create mode 100644 mercurial/aws-s3-backup/handlers/main.yaml create mode 100644 mercurial/aws-s3-backup/tasks/main.yaml create mode 100644 mercurial/aws-s3-backup/templates/mercurial-s3-backup@.service.j2 delete mode 100644 mercurial/files/mercurial-s3-backup.sh delete mode 100644 mercurial/handlers/main.yaml delete mode 100644 mercurial/tasks/main.yaml delete mode 100644 mercurial/templates/mercurial-s3-backup@.service.j2 create mode 100644 mercurial/web/handlers/main.yaml create mode 100644 mercurial/web/tasks/main.yaml create mode 100644 mercurial/web/templates/hgweb.config.j2 create mode 100644 mercurial/web/templates/hgweb.ini.j2 create mode 100644 mercurial/web/templates/hgweb.nginx.conf.j2 create mode 100644 mercurial/web/templates/hgweb.wsgi.j2 (limited to 'mercurial') diff --git a/mercurial/aws-s3-backup/files/mercurial-s3-backup.sh b/mercurial/aws-s3-backup/files/mercurial-s3-backup.sh new file mode 100644 index 0000000..b5ba305 --- /dev/null +++ b/mercurial/aws-s3-backup/files/mercurial-s3-backup.sh @@ -0,0 +1,10 @@ +#!/bin/bash + +BUCKET=$1 +DATE=`date --iso-8601` +BACKUP_DIR=$2 +BACKUP_TAR="/tmp/$BUCKET-$DATE.tgz" + +tar -zc -f $BACKUP_TAR $BACKUP_DIR +aws s3 mb "s3://$BUCKET/" +aws s3 cp $BACKUP_TAR "s3://$BUCKET/" diff --git a/mercurial/aws-s3-backup/handlers/main.yaml b/mercurial/aws-s3-backup/handlers/main.yaml new file mode 100644 index 0000000..8c3315b --- /dev/null +++ b/mercurial/aws-s3-backup/handlers/main.yaml @@ -0,0 +1,5 @@ +--- + +- name: reload s3 backup service + systemd: name="mercurial-s3-backup@{{mercurial_s3_backup_bucket}}.service" enabled="yes" daemon_reload="yes" + become: yes diff --git a/mercurial/aws-s3-backup/tasks/main.yaml b/mercurial/aws-s3-backup/tasks/main.yaml new file mode 100644 index 0000000..45a3457 --- /dev/null +++ b/mercurial/aws-s3-backup/tasks/main.yaml @@ -0,0 +1,19 @@ +--- + +- name: create mercurial s3 backup shell script + become: yes + copy: + src: "mercurial-s3-backup.sh" + dest: "/usr/local/bin/mercurial-s3-backup.sh" + mode: "0755" + +- name: configure mercurial s3 backup systemd service + become: yes + template: + src: "mercurial-s3-backup@.service.j2" + dest: "/lib/systemd/system/mercurial-s3-backup@{{mercurial_s3_backup_bucket}}.service" + notify: reload s3 backup service + +- name: ensure mercurial s3 backup service is started + become: yes + systemd: name="mercurial-s3-backup@{{mercurial_s3_backup_bucket}}.service" enabled="yes" diff --git a/mercurial/aws-s3-backup/templates/mercurial-s3-backup@.service.j2 b/mercurial/aws-s3-backup/templates/mercurial-s3-backup@.service.j2 new file mode 100644 index 0000000..ba6ca80 --- /dev/null +++ b/mercurial/aws-s3-backup/templates/mercurial-s3-backup@.service.j2 @@ -0,0 +1,9 @@ +[Unit] +Description=Mercurial s3 backup for "%I" + +[Service] +Type=oneshot +ExecStart=/usr/local/bin/mercurial-s3-backup.sh %i "{{mercurial_s3_backup_dir}}" + +[Install] +WantedBy=aws-s3-backup.target diff --git a/mercurial/files/mercurial-s3-backup.sh b/mercurial/files/mercurial-s3-backup.sh deleted file mode 100644 index b5ba305..0000000 --- a/mercurial/files/mercurial-s3-backup.sh +++ /dev/null @@ -1,10 +0,0 @@ -#!/bin/bash - -BUCKET=$1 -DATE=`date --iso-8601` -BACKUP_DIR=$2 -BACKUP_TAR="/tmp/$BUCKET-$DATE.tgz" - -tar -zc -f $BACKUP_TAR $BACKUP_DIR -aws s3 mb "s3://$BUCKET/" -aws s3 cp $BACKUP_TAR "s3://$BUCKET/" diff --git a/mercurial/handlers/main.yaml b/mercurial/handlers/main.yaml deleted file mode 100644 index 8c3315b..0000000 --- a/mercurial/handlers/main.yaml +++ /dev/null @@ -1,5 +0,0 @@ ---- - -- name: reload s3 backup service - systemd: name="mercurial-s3-backup@{{mercurial_s3_backup_bucket}}.service" enabled="yes" daemon_reload="yes" - become: yes diff --git a/mercurial/tasks/main.yaml b/mercurial/tasks/main.yaml deleted file mode 100644 index e766752..0000000 --- a/mercurial/tasks/main.yaml +++ /dev/null @@ -1,23 +0,0 @@ ---- - -- name: install mercurial - become: yes - apt: name="mercurial" - -- name: create mercurial s3 backup shell script - become: yes - copy: - src: "mercurial-s3-backup.sh" - dest: "/usr/local/bin/mercurial-s3-backup.sh" - mode: "0755" - -- name: configure mercurial s3 backup systemd service - become: yes - template: - src: "mercurial-s3-backup@.service.j2" - dest: "/lib/systemd/system/mercurial-s3-backup@{{mercurial_s3_backup_bucket}}.service" - notify: reload s3 backup service - -- name: ensure mercurial s3 backup service is started - become: yes - systemd: name="mercurial-s3-backup@{{mercurial_s3_backup_bucket}}.service" enabled="yes" diff --git a/mercurial/templates/mercurial-s3-backup@.service.j2 b/mercurial/templates/mercurial-s3-backup@.service.j2 deleted file mode 100644 index ba6ca80..0000000 --- a/mercurial/templates/mercurial-s3-backup@.service.j2 +++ /dev/null @@ -1,9 +0,0 @@ -[Unit] -Description=Mercurial s3 backup for "%I" - -[Service] -Type=oneshot -ExecStart=/usr/local/bin/mercurial-s3-backup.sh %i "{{mercurial_s3_backup_dir}}" - -[Install] -WantedBy=aws-s3-backup.target diff --git a/mercurial/web/handlers/main.yaml b/mercurial/web/handlers/main.yaml new file mode 100644 index 0000000..9efe84d --- /dev/null +++ b/mercurial/web/handlers/main.yaml @@ -0,0 +1,5 @@ +--- + +- name: restart uwsgi + systemd: name="uwsgi.service" enabled="yes" daemon_reload="yes" state="restarted" + become: yes diff --git a/mercurial/web/tasks/main.yaml b/mercurial/web/tasks/main.yaml new file mode 100644 index 0000000..088a8fb --- /dev/null +++ b/mercurial/web/tasks/main.yaml @@ -0,0 +1,38 @@ +--- + +- name: pip install mercurial + become: yes + pip: name="mercurial" executable="pip3" + +- name: apt install uwsgi + become: yes + apt: name="{{item}}" + loop: + - "uwsgi" + - "uwsgi-plugin-python3" + notify: restart uwsgi + +- name: configure hgweb + become: yes + template: src="{{item}}.j2" dest="{{mercurial_uwsgi_root}}/{{item}}" + loop: + - "hgweb.config" + - "hgweb.wsgi" + notify: restart uwsgi + +- name: install uwsgi site + become: yes + template: src="hgweb.ini.j2" dest="/etc/uwsgi/apps-available/hgweb.ini" + notify: restart uwsgi + +- name: enable uwsgi site + become: yes + file: + src: "/etc/uwsgi/apps-available/hgweb.ini" + dest: "/etc/uwsgi/apps-enabled/hgweb.ini" + state: "link" + notify: restart uwsgi + +- name: ensure uwsgi service is started + become: yes + systemd: name="uwsgi.service" enabled="yes" diff --git a/mercurial/web/templates/hgweb.config.j2 b/mercurial/web/templates/hgweb.config.j2 new file mode 100644 index 0000000..881f8e4 --- /dev/null +++ b/mercurial/web/templates/hgweb.config.j2 @@ -0,0 +1,6 @@ +[paths] +/ = {{mercurial_uwsgi_repos}} + +[web] +deny_push = * +allow_archive = gz bz2 zip diff --git a/mercurial/web/templates/hgweb.ini.j2 b/mercurial/web/templates/hgweb.ini.j2 new file mode 100644 index 0000000..f65d440 --- /dev/null +++ b/mercurial/web/templates/hgweb.ini.j2 @@ -0,0 +1,8 @@ +[uwsgi] +processes = 2 +socket = unix:/run/uwsgi/app/hgweb/socket +chdir = {{mercurial_uwsgi_root}} +wsgi-file = hgweb.wsgi +uid = www-data +gid = www-data +plugins = python3 diff --git a/mercurial/web/templates/hgweb.nginx.conf.j2 b/mercurial/web/templates/hgweb.nginx.conf.j2 new file mode 100644 index 0000000..fbe6d21 --- /dev/null +++ b/mercurial/web/templates/hgweb.nginx.conf.j2 @@ -0,0 +1,33 @@ +server { + listen 80; + listen [::]:80; + server_name {{nginx_server_name}}; + return 301 https://$host$request_uri; +} + +server { + listen 443 ssl http2; +# listen [::]:443 ssl ipv6only=on; + server_name {{nginx_server_name}}; + + ssl_certificate {{nginx_ssl_cert}}; + ssl_certificate_key {{nginx_ssl_privkey}}; + include /etc/letsencrypt/options-ssl-nginx.conf; + ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; + + ssl_ecdh_curve X25519:prime256v1:secp384r1:secp521r1; + ssl_stapling on; + ssl_stapling_verify on; + + location / { + include uwsgi_params; + uwsgi_param REMOTE_PORT $remote_port; + uwsgi_param SERVER_PORT $server_port; + uwsgi_param SERVER_PROTOCOL $server_protocol; + uwsgi_param UWSGI_SCHEME $scheme; + uwsgi_param SCRIPT_NAME /; + uwsgi_param AUTH_USER $remote_user; + uwsgi_param REMOTE_USER $remote_user; + uwsgi_pass unix:/run/uwsgi/app/hgweb/socket; + } +} diff --git a/mercurial/web/templates/hgweb.wsgi.j2 b/mercurial/web/templates/hgweb.wsgi.j2 new file mode 100644 index 0000000..16cc9fa --- /dev/null +++ b/mercurial/web/templates/hgweb.wsgi.j2 @@ -0,0 +1,18 @@ +# An example WSGI for use with mod_wsgi, edit as necessary +# See https://mercurial-scm.org/wiki/modwsgi for more information + +# Path to repo or hgweb config to serve (see 'hg help hgweb') +config = "{{mercurial_uwsgi_root}}/hgweb.config" + +# Uncomment and adjust if Mercurial is not installed system-wide +# (consult "installed modules" path from 'hg debuginstall'): +#import sys; sys.path.insert(0, "/path/to/python/lib") + +# Uncomment to send python tracebacks to the browser if an error occurs: +import cgitb; cgitb.enable() + +# enable demandloading to reduce startup time +from mercurial import demandimport; demandimport.enable() + +from mercurial.hgweb import hgweb +application = hgweb(config.encode()) -- cgit v1.2.3