mirror of
				https://github.com/CPunch/openpunk-ansible.git
				synced 2025-10-31 04:40:12 +00:00 
			
		
		
		
	Compare commits
	
		
			6 Commits
		
	
	
		
			v1.0.1
			...
			ca6fdaeff3
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| ca6fdaeff3 | |||
| 1028023b8b | |||
| 5e2c4850e1 | |||
| a971e7d065 | |||
| abaa4c9639 | |||
| d435ab80ac | 
							
								
								
									
										50
									
								
								.github/workflows/deploy.yaml
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										50
									
								
								.github/workflows/deploy.yaml
									
									
									
									
										vendored
									
									
								
							| @@ -1,27 +1,27 @@ | |||||||
| name: Run Playbook | # name: Run Playbook | ||||||
|  |  | ||||||
| on: | # on: | ||||||
|   push: | #   push: | ||||||
|     tags: | #     tags: | ||||||
|       - "v*.*.*" | #       - "v*.*.*" | ||||||
|  |  | ||||||
| jobs: | # jobs: | ||||||
|   deploy: | #   deploy: | ||||||
|     runs-on: ubuntu-latest | #     runs-on: ubuntu-latest | ||||||
|     steps: | #     steps: | ||||||
|       - name: Set up Git repository | #       - name: Set up Git repository | ||||||
|         uses: actions/checkout@v3 | #         uses: actions/checkout@v3 | ||||||
|         with: | #         with: | ||||||
|           ssh-key: ${{ secrets.SSH_PRIVATE_KEY }} | #           ssh-key: ${{ secrets.SSH_PRIVATE_KEY }} | ||||||
|           submodules: recursive | #           submodules: recursive | ||||||
|       - name: Run Ansible-Playbook | #       - name: Run Ansible-Playbook | ||||||
|         uses: dawidd6/action-ansible-playbook@v2 | #         uses: dawidd6/action-ansible-playbook@v2 | ||||||
|         with: | #         with: | ||||||
|           playbook: run.yml | #           playbook: run.yml | ||||||
|           key: ${{ secrets.SSH_PRIVATE_KEY }} | #           key: ${{ secrets.SSH_PRIVATE_KEY }} | ||||||
|           inventory: | | #           inventory: | | ||||||
|             [hosts] | #             [hosts] | ||||||
|             openpunk-vps ansible_host=96.30.199.68 ansible_user=root ansible_connection=ssh | #             openpunk-vps ansible_host=96.30.199.68 ansible_user=root ansible_connection=ssh | ||||||
|           vault_password: ${{ secrets.VAULT_PASSWORD }} | #           vault_password: ${{ secrets.VAULT_PASSWORD }} | ||||||
|           options: | | #           options: | | ||||||
|             --extra-vars domain=openpunk.com | #             --extra-vars domain=openpunk.com | ||||||
|   | |||||||
							
								
								
									
										5
									
								
								.vscode/settings.json
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										5
									
								
								.vscode/settings.json
									
									
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,5 @@ | |||||||
|  | { | ||||||
|  |     "yaml.schemas": { | ||||||
|  |         "https://raw.githubusercontent.com/ansible/ansible-lint/main/src/ansiblelint/schemas/ansible.json#/$defs/tasks": "file:///home/cpunch/projects/openpunk-ansible/roles/nginx/tasks/main.yml" | ||||||
|  |     } | ||||||
|  | } | ||||||
							
								
								
									
										11
									
								
								README.md
									
									
									
									
									
								
							
							
						
						
									
										11
									
								
								README.md
									
									
									
									
									
								
							| @@ -1,12 +1,11 @@ | |||||||
| # OpenPunk's Ansible playbook | # OpenPunk's Ansible playbook | ||||||
| <p align="center"> |  | ||||||
|     <a href="https://github.com/CPunch/openpunk-ansible/actions/workflows/deploy.yaml"><img src="https://github.com/CPunch/openpunk-ansible/actions/workflows/deploy.yaml/badge.svg?branch=main" alt="Workflow"></a> |  | ||||||
| </p> |  | ||||||
|  |  | ||||||
| This is my failsafe (and also my helpful migration tool) for restoring the OpenPunk server. This handles setting everything back up, including: | This is my failsafe (and also my helpful migration tool) for restoring the OpenPunk server. This handles setting everything back up, including: | ||||||
|  |  | ||||||
| - gitea | - gitea | ||||||
|  |     - sadly, no db migration is supported right now. maybe a future todo? | ||||||
| - blog | - blog | ||||||
|  |     - cron job for grabbing the `HEAD` of https://github.com/CPunch/openpunk && building the hugo site | ||||||
| - tor mirror | - tor mirror | ||||||
| - nginx (for the above mentioned) | - nginx (for the above mentioned) | ||||||
| - my shell theme (zsh + powerlevel10k) | - my shell theme (zsh + powerlevel10k) | ||||||
| @@ -14,12 +13,12 @@ This is my failsafe (and also my helpful migration tool) for restoring the OpenP | |||||||
|  |  | ||||||
| This playbook assumes the target VPS is running the latest debian stable release. | This playbook assumes the target VPS is running the latest debian stable release. | ||||||
|  |  | ||||||
| ## Automatic deployment |  | ||||||
| On new release tags the playbook is automatically ran on the production openpunk vps. For more info checkout the `.github/workflows/deploy.yaml` workflow |  | ||||||
|  |  | ||||||
| ## Notes to my future self | ## Notes to my future self | ||||||
| The deadswitch has the deadtrigger setup every run, so you have a 14-day timer to add a one-liner to your crontab to keep that deadtrigger set. | The deadswitch has the deadtrigger setup every run, so you have a 14-day timer to add a one-liner to your crontab to keep that deadtrigger set. | ||||||
|  |  | ||||||
|  | Some DNS records also need to be set: | ||||||
|  | - an A record with a `git.*` subdomain | ||||||
|  |  | ||||||
| ## Usage | ## Usage | ||||||
| ```sh | ```sh | ||||||
| ansible-playbook -i hosts --ask-vault-pass run.yml | ansible-playbook -i hosts --ask-vault-pass run.yml | ||||||
|   | |||||||
| @@ -1,2 +1,3 @@ | |||||||
| --- | --- | ||||||
| contact_email: openpunk@proton.me | contact_email: openpunk@proton.me | ||||||
|  | onionDomain: http://opnpnk6eutjiqy4ndpyvwxd5pncj2g2cmz6fkocr5uh3omnn4utvspad.onion | ||||||
| @@ -4,6 +4,7 @@ | |||||||
|     repo: "https://github.com/CPunch/openpunk.git" |     repo: "https://github.com/CPunch/openpunk.git" | ||||||
|     dest: "/var/www/{{ domain }}" |     dest: "/var/www/{{ domain }}" | ||||||
| 
 | 
 | ||||||
|  | # TODO: make idempotent (call the updateBlog script !!) | ||||||
| - name: Build blog | - name: Build blog | ||||||
|   command: |   command: | ||||||
|     cmd: hugo |     cmd: hugo | ||||||
| @@ -11,7 +12,7 @@ | |||||||
| 
 | 
 | ||||||
| - name: Install updateBlog script | - name: Install updateBlog script | ||||||
|   template: |   template: | ||||||
|     src: templates/blog/updateBlog |     src: templates/updateBlog | ||||||
|     dest: /usr/local/bin/updateBlog |     dest: /usr/local/bin/updateBlog | ||||||
|     mode: u+rx |     mode: u+rx | ||||||
| 
 | 
 | ||||||
							
								
								
									
										8
									
								
								roles/blog/templates/updateBlog
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										8
									
								
								roles/blog/templates/updateBlog
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,8 @@ | |||||||
|  | #!/bin/bash | ||||||
|  | cd /var/www/{{ domain }} | ||||||
|  | /usr/bin/git fetch origin | ||||||
|  | /usr/bin/git reset --hard origin/main | ||||||
|  |  | ||||||
|  | # build sites | ||||||
|  | /usr/bin/hugo --cleanDestinationDir --minify -d public -b https://{{ domain }} | ||||||
|  | /usr/bin/hugo --cleanDestinationDir --minify -d tor -b {{ onionDomain }} | ||||||
| @@ -2,7 +2,7 @@ | |||||||
| 
 | 
 | ||||||
| cd $HOME/deadman | cd $HOME/deadman | ||||||
| 
 | 
 | ||||||
| postPatch='../dead.patch' | postPatch='dead.patch' | ||||||
| pageName='content/pages/dead.md' | pageName='content/pages/dead.md' | ||||||
| currDate=$(date '+%Y-%m-%d') | currDate=$(date '+%Y-%m-%d') | ||||||
| 
 | 
 | ||||||
| @@ -16,3 +16,5 @@ sed -i 's/--DATE--/'$currDate'/g' $pageName | |||||||
| git add . | git add . | ||||||
| git commit -m "DeadSwitch: No response from CPunch in 14 days, posting dead.md" | git commit -m "DeadSwitch: No response from CPunch in 14 days, posting dead.md" | ||||||
| git push --force | git push --force | ||||||
|  | 
 | ||||||
|  | updateBlog | ||||||
| @@ -6,13 +6,13 @@ | |||||||
| 
 | 
 | ||||||
| - name: Install deadswitch script | - name: Install deadswitch script | ||||||
|   copy: |   copy: | ||||||
|     src: static/blog/deadswitch |     src: deadswitch | ||||||
|     dest: /usr/local/bin/deadswitch |     dest: /usr/local/bin/deadswitch | ||||||
|     mode: u+rx |     mode: u+rx | ||||||
| 
 | 
 | ||||||
| - name: Install imdead.sh | - name: Install imdead.sh | ||||||
|   copy: |   copy: | ||||||
|     src: static/blog/imdead.sh |     src: imdead.sh | ||||||
|     dest: /root/deadman/imdead.sh |     dest: /root/deadman/imdead.sh | ||||||
|     mode: u+rx |     mode: u+rx | ||||||
| 
 | 
 | ||||||
| @@ -22,6 +22,7 @@ | |||||||
|     dest: /root/deadman/dead.patch |     dest: /root/deadman/dead.patch | ||||||
|     mode: u+rw |     mode: u+rw | ||||||
| 
 | 
 | ||||||
|  | # TODO: make idempotent | ||||||
| - name: Install deadtrigger | - name: Install deadtrigger | ||||||
|   file: |   file: | ||||||
|     name: /root/.deadtrigger |     name: /root/.deadtrigger | ||||||
| @@ -1,7 +1,9 @@ | |||||||
| --- | --- | ||||||
|  | # TODO: make idempotent | ||||||
| - name: Add Gitea repo key | - name: Add Gitea repo key | ||||||
|   shell: curl -s https://packaging.gitlab.io/gitea/gpg.key | sudo gpg --no-default-keyring --keyring gnupg-ring:/etc/apt/trusted.gpg.d/morph027-gitea.gpg --import |   shell: curl -s https://packaging.gitlab.io/gitea/gpg.key | sudo gpg --no-default-keyring --keyring gnupg-ring:/etc/apt/trusted.gpg.d/morph027-gitea.gpg --import | ||||||
| 
 | 
 | ||||||
|  | # TODO: make idempotent | ||||||
| - name: Set key perms | - name: Set key perms | ||||||
|   shell: sudo chmod 644 /etc/apt/trusted.gpg.d/morph027-gitea.gpg |   shell: sudo chmod 644 /etc/apt/trusted.gpg.d/morph027-gitea.gpg | ||||||
| 
 | 
 | ||||||
| @@ -30,6 +32,7 @@ | |||||||
|       - zsh # :D |       - zsh # :D | ||||||
|       - python3-certbot-nginx |       - python3-certbot-nginx | ||||||
| 
 | 
 | ||||||
|  | # TODO: make idempotent | ||||||
| - name: Setup default shell (zsh) | - name: Setup default shell (zsh) | ||||||
|   shell: chsh -s /usr/bin/zsh |   shell: chsh -s /usr/bin/zsh | ||||||
| 
 | 
 | ||||||
| @@ -41,6 +44,6 @@ | |||||||
| 
 | 
 | ||||||
| - name: Install .zshrc | - name: Install .zshrc | ||||||
|   copy: |   copy: | ||||||
|     src: static/.zshrc |     src: .zshrc | ||||||
|     dest: /root/.zshrc |     dest: /root/.zshrc | ||||||
|     force: no |     force: no | ||||||
| @@ -23,7 +23,7 @@ | |||||||
| 
 | 
 | ||||||
| - name: Copy fail2ban jail config | - name: Copy fail2ban jail config | ||||||
|   copy: |   copy: | ||||||
|     src: static/fail2ban/jails.local |     src: jails.local | ||||||
|     dest: /etc/fail2ban/jail.d/jails.local |     dest: /etc/fail2ban/jail.d/jails.local | ||||||
| 
 | 
 | ||||||
| - name: Enable fail2ban service | - name: Enable fail2ban service | ||||||
| @@ -1,7 +1,7 @@ | |||||||
| --- | --- | ||||||
| - name: Setup git config | - name: Setup git config | ||||||
|   copy: |   copy: | ||||||
|     src: static/.gitconfig |     src: .gitconfig | ||||||
|     dest: /root/.gitconfig |     dest: /root/.gitconfig | ||||||
|     owner: root |     owner: root | ||||||
|     mode: u=rw,g=,o= |     mode: u=rw,g=,o= | ||||||
| @@ -9,6 +9,7 @@ | |||||||
| # make sure our vps trusts the github.com key signature. we pipe the output | # make sure our vps trusts the github.com key signature. we pipe the output | ||||||
| # of ssh-keyscan into .ssh/known_hosts | # of ssh-keyscan into .ssh/known_hosts | ||||||
| 
 | 
 | ||||||
|  | # TODO: make idempotent | ||||||
| - name: Scan for SSH host keys | - name: Scan for SSH host keys | ||||||
|   command: ssh-keyscan github.com 2>/dev/null |   command: ssh-keyscan github.com 2>/dev/null | ||||||
|   register: ssh_scan |   register: ssh_scan | ||||||
| @@ -1,7 +1,7 @@ | |||||||
| --- | --- | ||||||
| - name: Configure Gitea | - name: Configure Gitea | ||||||
|   template: |   template: | ||||||
|     src: templates/gitea/app.ini |     src: app.ini | ||||||
|     dest: /etc/gitea/app.ini |     dest: /etc/gitea/app.ini | ||||||
|     owner: gitea |     owner: gitea | ||||||
|     force: no # we don't want to kill our existing config D: |     force: no # we don't want to kill our existing config D: | ||||||
| @@ -1,5 +1,5 @@ | |||||||
| --- | --- | ||||||
| - name: Copy goaccess config | - name: Copy goaccess config | ||||||
|   copy: |   copy: | ||||||
|     src: static/goaccess/goaccess.conf |     src: goaccess.conf | ||||||
|     dest: /etc/goaccess/goaccess.conf |     dest: /etc/goaccess/goaccess.conf | ||||||
							
								
								
									
										4
									
								
								roles/nginx/handlers/main.yml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										4
									
								
								roles/nginx/handlers/main.yml
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,4 @@ | |||||||
|  | --- | ||||||
|  | - name: setup-nginx | ||||||
|  |   include_tasks: setup.yml | ||||||
|  |   listen: "setup nginx" | ||||||
							
								
								
									
										35
									
								
								roles/nginx/tasks/main.yml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										35
									
								
								roles/nginx/tasks/main.yml
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,35 @@ | |||||||
|  | --- | ||||||
|  | - name: Install system nginx config | ||||||
|  |   copy: | ||||||
|  |     src: nginx.conf | ||||||
|  |     dest: /etc/nginx/nginx.conf | ||||||
|  |   notify: setup nginx | ||||||
|  |  | ||||||
|  | # setup our configs for each host (we don't want to  | ||||||
|  | # overwrite certbot's changes, so if it already exists, | ||||||
|  | # don't copy!) | ||||||
|  |  | ||||||
|  | - name: Install nginx config for {{ domain }} | ||||||
|  |   template: | ||||||
|  |     src: templates/site.conf | ||||||
|  |     dest: /etc/nginx/conf.d/{{ domain }}.conf | ||||||
|  |     force: no | ||||||
|  |   notify: setup nginx | ||||||
|  |  | ||||||
|  | - name: Install nginx config for git.{{ domain }} | ||||||
|  |   template: | ||||||
|  |     src: templates/gitea.conf | ||||||
|  |     dest: /etc/nginx/conf.d/git.{{ domain }}.conf | ||||||
|  |     force: no | ||||||
|  |   notify: setup nginx | ||||||
|  |  | ||||||
|  | - name: Install nginx config for our Hidden Service | ||||||
|  |   template: | ||||||
|  |     src: templates/tor.conf | ||||||
|  |     dest: /etc/nginx/conf.d/tor-{{ domain }}.conf | ||||||
|  |  | ||||||
|  | - name: Enable Nginx | ||||||
|  |   systemd: | ||||||
|  |     name: nginx | ||||||
|  |     enabled: yes | ||||||
|  |     state: started | ||||||
							
								
								
									
										9
									
								
								roles/nginx/tasks/setup.yml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										9
									
								
								roles/nginx/tasks/setup.yml
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,9 @@ | |||||||
|  | --- | ||||||
|  | - name: Setup certbot | ||||||
|  |   shell: "certbot --nginx --non-interactive --agree-tos -m {{ contact_email }} -d {{ domain }} -d git.{{ domain }}" | ||||||
|  |  | ||||||
|  | - name: Reload Nginx | ||||||
|  |   systemd: | ||||||
|  |     name: nginx | ||||||
|  |     enabled: yes | ||||||
|  |     state: restarted | ||||||
| @@ -1,5 +1,5 @@ | |||||||
| server { | server { | ||||||
|     root /var/www/{{ domain }}/public; |     root /var/www/{{ domain }}/tor; | ||||||
|     index index.html index.htm; |     index index.html index.htm; | ||||||
| 
 | 
 | ||||||
|     location / { |     location / { | ||||||
| @@ -1,7 +1,7 @@ | |||||||
| --- | --- | ||||||
| - name: Install torrc | - name: Install torrc | ||||||
|   template: |   template: | ||||||
|     src: templates/tor/torrc |     src: torrc | ||||||
|     dest: /etc/tor/torrc |     dest: /etc/tor/torrc | ||||||
|     owner: root |     owner: root | ||||||
|     group: root |     group: root | ||||||
| @@ -23,7 +23,7 @@ | |||||||
|     group: debian-tor |     group: debian-tor | ||||||
|     mode: u=rw,g=,o= |     mode: u=rw,g=,o= | ||||||
| 
 | 
 | ||||||
| - name: Reload Tor | - name: Enable Tor Service | ||||||
|   systemd: |   systemd: | ||||||
|     name: tor |     name: tor | ||||||
|     enabled: yes |     enabled: yes | ||||||
							
								
								
									
										20
									
								
								run.yml
									
									
									
									
									
								
							
							
						
						
									
										20
									
								
								run.yml
									
									
									
									
									
								
							| @@ -9,13 +9,13 @@ | |||||||
|       prompt: domain pointing to the vps |       prompt: domain pointing to the vps | ||||||
|       private: no |       private: no | ||||||
|  |  | ||||||
|   tasks: |   roles: | ||||||
|     - import_tasks: tasks/essential.yml |     - essential | ||||||
|     - import_tasks: tasks/firewall.yml |     - git | ||||||
|     - import_tasks: tasks/blog.yml |     - deadswitch | ||||||
|     - import_tasks: tasks/gitea.yml |     - firewall | ||||||
|     - import_tasks: tasks/tor.yml |     - blog | ||||||
|     - import_tasks: tasks/nginx.yml |     - gitea | ||||||
|     - import_tasks: tasks/git.yml |     - nginx | ||||||
|     - import_tasks: tasks/goaccess.yml |     - goaccess | ||||||
|     - import_tasks: tasks/deadswitch.yml |     - tor | ||||||
							
								
								
									
										2
									
								
								secrets
									
									
									
									
									
								
							
							
								
								
								
								
								
							
						
						
									
										2
									
								
								secrets
									
									
									
									
									
								
							 Submodule secrets updated: 585d0fd7dd...e643deb62e
									
								
							| @@ -1,52 +0,0 @@ | |||||||
| --- |  | ||||||
| - name: Remove default nginx config |  | ||||||
|   file: |  | ||||||
|     name: /etc/nginx/sites-enabled |  | ||||||
|     state: absent |  | ||||||
|  |  | ||||||
| - name: Restore sites-enabled |  | ||||||
|   file: |  | ||||||
|     name: /etc/nginx/sites-enabled |  | ||||||
|     state: directory |  | ||||||
|  |  | ||||||
| - name: Install system nginx config |  | ||||||
|   copy: |  | ||||||
|     src: static/nginx/nginx.conf |  | ||||||
|     dest: /etc/nginx/nginx.conf |  | ||||||
|  |  | ||||||
| # setup our configs for each host (we don't want to  |  | ||||||
| # overwrite certbot's changes, so if it already exists, |  | ||||||
| # don't copy!) |  | ||||||
|  |  | ||||||
| - name: Install nginx config for {{ domain }} |  | ||||||
|   template: |  | ||||||
|     src: templates/nginx/site.conf |  | ||||||
|     dest: /etc/nginx/conf.d/{{ domain }}.conf |  | ||||||
|     force: no |  | ||||||
|  |  | ||||||
| - name: Install nginx config for git.{{ domain }} |  | ||||||
|   template: |  | ||||||
|     src: templates/nginx/gitea.conf |  | ||||||
|     dest: /etc/nginx/conf.d/git.{{ domain }}.conf |  | ||||||
|     force: no |  | ||||||
|  |  | ||||||
| - name: Install nginx config for our Hidden Service |  | ||||||
|   template: |  | ||||||
|     src: templates/nginx/tor.conf |  | ||||||
|     dest: /etc/nginx/conf.d/tor-{{ domain }}.conf |  | ||||||
|     force: no |  | ||||||
|  |  | ||||||
| - name: Reload Nginx to install LetsEncrypt |  | ||||||
|   service: |  | ||||||
|     name: nginx |  | ||||||
|     state: restarted |  | ||||||
|  |  | ||||||
| # certbot is a life saver. thank you certbot devs! |  | ||||||
| - name: Setup certbot |  | ||||||
|   shell: "certbot --nginx --non-interactive --agree-tos -m {{ contact_email }} -d {{ domain }} -d git.{{ domain }}" |  | ||||||
|  |  | ||||||
| - name: Reload Nginx with LetsEncrypt installed |  | ||||||
|   systemd: |  | ||||||
|     name: nginx |  | ||||||
|     enabled: yes |  | ||||||
|     state: restarted |  | ||||||
| @@ -1,5 +0,0 @@ | |||||||
| #!/bin/bash |  | ||||||
| cd /var/www/{{ domain }} |  | ||||||
| /usr/bin/git fetch origin |  | ||||||
| /usr/bin/git reset --hard origin/main |  | ||||||
| /usr/bin/hugo |  | ||||||
		Reference in New Issue
	
	Block a user