From e29bfd0799638fc025ccf7dcac54fdda3931ed4e Mon Sep 17 00:00:00 2001 From: Elizabeth Hunt Date: Sat, 23 Mar 2024 17:43:50 -0400 Subject: [PATCH] add gitea role --- TODO.md | 4 +- deploy.yml | 3 + docs/PEOPLE_PLAYBOOK.md | 4 + group_vars/gitea.yml | 5 + group_vars/host_domains.yml | 5 +- inventory | 7 ++ playbooks/deploy-gitea.yml | 6 + playbooks/roles/common/tasks/main.yml | 17 +-- .../gitea/files/public/assets/img/favicon.png | Bin 0 -> 32158 bytes .../gitea/files/public/assets/img/favicon.svg | 1 + .../gitea/files/public/assets/img/logo.png | Bin 0 -> 32158 bytes .../gitea/files/public/assets/img/logo.svg | 1 + playbooks/roles/gitea/tasks/main.yml | 47 ++++++++ playbooks/roles/gitea/templates/app.ini.j2 | 105 ++++++++++++++++++ .../gitea/templates/docker-compose.yml.j2 | 19 ++++ .../http.git.hatecomputers.club.conf | 8 ++ .../https.git.hatecomputers.club.conf | 21 ++++ secrets.txt | 3 + 18 files changed, 243 insertions(+), 13 deletions(-) create mode 100644 group_vars/gitea.yml create mode 100644 playbooks/deploy-gitea.yml create mode 100644 playbooks/roles/gitea/files/public/assets/img/favicon.png create mode 100644 playbooks/roles/gitea/files/public/assets/img/favicon.svg create mode 100644 playbooks/roles/gitea/files/public/assets/img/logo.png create mode 100644 playbooks/roles/gitea/files/public/assets/img/logo.svg create mode 100644 playbooks/roles/gitea/tasks/main.yml create mode 100644 playbooks/roles/gitea/templates/app.ini.j2 create mode 100644 playbooks/roles/gitea/templates/docker-compose.yml.j2 create mode 100644 playbooks/roles/nginx/templates/himmel.hatecomputers.club/http.git.hatecomputers.club.conf create mode 100644 playbooks/roles/nginx/templates/himmel.hatecomputers.club/https.git.hatecomputers.club.conf diff --git a/TODO.md b/TODO.md index 906fc5b..086234a 100644 --- a/TODO.md +++ b/TODO.md @@ -1,2 +1,4 @@ - [ ] nameservers for users -- [ ] create dmarc.report, postmaster email users, give access to infra users +- [ ] read email for service accounts dmarc.report, postmaster email users, give access to infra users +- [ ] allow infra users to ssh into any machine in infra, regular users into their tilde account on himmel +- [ ] allow ufw and setup wireguard on himmel diff --git a/deploy.yml b/deploy.yml index 1d57439..68c3e5e 100644 --- a/deploy.yml +++ b/deploy.yml @@ -14,3 +14,6 @@ - name: Mail ansible.builtin.import_playbook: playbooks/deploy-mail.yml + +- name: Gitea + ansible.builtin.import_playbook: playbooks/deploy-gitea.yml diff --git a/docs/PEOPLE_PLAYBOOK.md b/docs/PEOPLE_PLAYBOOK.md index 958baf9..2eb468b 100644 --- a/docs/PEOPLE_PLAYBOOK.md +++ b/docs/PEOPLE_PLAYBOOK.md @@ -13,3 +13,7 @@ kanidm person posix set --name idm_admin --shell /bin/zsh kanidm person update --legalname "" --mail @hatecomputers.club kanidm group add-members mail ``` + +groups you'll probably want to add people: ++ gitea-access ++ mail diff --git a/group_vars/gitea.yml b/group_vars/gitea.yml new file mode 100644 index 0000000..5be01d7 --- /dev/null +++ b/group_vars/gitea.yml @@ -0,0 +1,5 @@ +--- + +gitea_app_name: HateComputers' Gitea +gitea_domain: git.hatecomputers.club +gitea_auth_domain: auth.hatecomputers.club diff --git a/group_vars/host_domains.yml b/group_vars/host_domains.yml index cf16d66..5167211 100644 --- a/group_vars/host_domains.yml +++ b/group_vars/host_domains.yml @@ -2,6 +2,9 @@ host_domains: fern.hatecomputers.club: - - fern.hatecomputers.club + # - fern.hatecomputers.club - auth.hatecomputers.club - mail.hatecomputers.club + himmel.hatecomputers.club: + # - himmel.hatecomputers.club + - git.hatecomputers.club diff --git a/inventory b/inventory index a1b4dcc..c8384cc 100644 --- a/inventory +++ b/inventory @@ -1,17 +1,24 @@ [docker] fern.hatecomputers.club ansible_user=root ansible_connection=ssh +himmel.hatecomputers.club ansible_user=root ansible_connection=ssh [host_domains] fern.hatecomputers.club ansible_user=root ansible_connection=ssh +himmel.hatecomputers.club ansible_user=root ansible_connection=ssh [nginx] fern.hatecomputers.club ansible_user=root ansible_connection=ssh +himmel.hatecomputers.club ansible_user=root ansible_connection=ssh [certbot] fern.hatecomputers.club ansible_user=root ansible_connection=ssh +himmel.hatecomputers.club ansible_user=root ansible_connection=ssh [kanidm] fern.hatecomputers.club ansible_user=root ansible_connection=ssh [mail] fern.hatecomputers.club ansible_user=root ansible_connection=ssh + +[gitea] +himmel.hatecomputers.club ansible_user=root ansible_connection=ssh diff --git a/playbooks/deploy-gitea.yml b/playbooks/deploy-gitea.yml new file mode 100644 index 0000000..700b919 --- /dev/null +++ b/playbooks/deploy-gitea.yml @@ -0,0 +1,6 @@ +--- + +- name: Gitea setup + hosts: gitea + roles: + - gitea diff --git a/playbooks/roles/common/tasks/main.yml b/playbooks/roles/common/tasks/main.yml index d8444a4..8b72cf9 100644 --- a/playbooks/roles/common/tasks/main.yml +++ b/playbooks/roles/common/tasks/main.yml @@ -22,11 +22,17 @@ - systemd-resolved - vim - git + - rsync state: latest update_cache: true notify: - Enable systemd-timesyncd +## DNS +- name: Configure systemd-resolved + ansible.builtin.include_tasks: + file: "systemd-resolved.yml" + ## SSH - name: Copy sshd_config ansible.builtin.copy: @@ -61,14 +67,3 @@ state: "enabled" notify: - Reload ufw - -## DNS -- name: Configure systemd-resolved - ansible.builtin.include_tasks: - file: "systemd-resolved.yml" - -## RSYNC -- name: Install rsync - ansible.builtin.apt: - name: rsync - state: present diff --git a/playbooks/roles/gitea/files/public/assets/img/favicon.png b/playbooks/roles/gitea/files/public/assets/img/favicon.png new file mode 100644 index 0000000000000000000000000000000000000000..3f04562c07a559def64a9846aa3294d1b65e1249 GIT binary patch literal 32158 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�c_0%c4soGnT#Pg|wK1e#S8pZU?Bdd~UmssgByt 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 No~h}o)+^ga{vU{FlvDr! literal 0 HcmV?d00001 diff --git a/playbooks/roles/gitea/files/public/assets/img/favicon.svg b/playbooks/roles/gitea/files/public/assets/img/favicon.svg new file mode 100644 index 0000000..8451def --- /dev/null +++ b/playbooks/roles/gitea/files/public/assets/img/favicon.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/playbooks/roles/gitea/files/public/assets/img/logo.png b/playbooks/roles/gitea/files/public/assets/img/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..3f04562c07a559def64a9846aa3294d1b65e1249 GIT binary patch literal 32158 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�c_0%c4soGnT#Pg|wK1e#S8pZU?Bdd~UmssgByt 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 No~h}o)+^ga{vU{FlvDr! literal 0 HcmV?d00001 diff --git a/playbooks/roles/gitea/files/public/assets/img/logo.svg b/playbooks/roles/gitea/files/public/assets/img/logo.svg new file mode 100644 index 0000000..8451def --- /dev/null +++ b/playbooks/roles/gitea/files/public/assets/img/logo.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/playbooks/roles/gitea/tasks/main.yml b/playbooks/roles/gitea/tasks/main.yml new file mode 100644 index 0000000..243f28e --- /dev/null +++ b/playbooks/roles/gitea/tasks/main.yml @@ -0,0 +1,47 @@ +--- +- name: Ensure gitea docker/compose exist + ansible.builtin.file: + path: /etc/docker/compose/gitea + state: directory + owner: root + group: root + mode: 0700 + +- name: Ensure gitea docker/compose/data/gitea/conf exist + ansible.builtin.file: + path: /etc/docker/compose/gitea/data/gitea/conf + state: directory + owner: 1000 + group: 1000 + mode: 0700 + recurse: true + +- name: Build gitea configuration + ansible.builtin.template: + src: app.ini.j2 + dest: /etc/docker/compose/gitea/data/gitea/conf/app.ini + owner: 1000 + group: 1000 + mode: 0700 + +- name: Copy public assets + ansible.builtin.copy: + src: public/ + dest: /etc/docker/compose/gitea/data/gitea/public + owner: 1000 + group: 1000 + mode: 0700 + +- name: Build gitea docker-compose.yml.j2 + ansible.builtin.template: + src: docker-compose.yml.j2 + dest: /etc/docker/compose/gitea/docker-compose.yml + owner: root + group: root + mode: 0700 + +- name: Daemon-reload and enable gitea + ansible.builtin.systemd_service: + state: restarted + enabled: true + name: docker-compose@gitea diff --git a/playbooks/roles/gitea/templates/app.ini.j2 b/playbooks/roles/gitea/templates/app.ini.j2 new file mode 100644 index 0000000..0f9d041 --- /dev/null +++ b/playbooks/roles/gitea/templates/app.ini.j2 @@ -0,0 +1,105 @@ +APP_NAME = {{ gitea_app_name }} +RUN_MODE = prod +RUN_USER = git +WORK_PATH = /data/gitea + +[repository] +ROOT = /data/git/repositories + +[repository.local] +LOCAL_COPY_PATH = /data/gitea/tmp/local-repo + +[repository.upload] +TEMP_PATH = /data/gitea/uploads + +[server] +APP_DATA_PATH = /data/gitea +DOMAIN = {{ gitea_domain }} +SSH_DOMAIN = {{ gitea_domain }} +HTTP_PORT = 3000 +ROOT_URL = https://{{ gitea_domain }}/ +DISABLE_SSH = false +SSH_PORT = 22 +SSH_LISTEN_PORT = 22 +LFS_START_SERVER = true +LFS_JWT_SECRET = {{ gitea_jwt_secret }} +OFFLINE_MODE = false +LANDING_PAGE = explore + +[database] +PATH = /data/gitea/gitea.db +DB_TYPE = sqlite3 +HOST = localhost:3306 +NAME = gitea +USER = root +PASSWD = +LOG_SQL = false +SCHEMA = +SSL_MODE = disable + +[indexer] +ISSUE_INDEXER_PATH = /data/gitea/indexers/issues.bleve + +[session] +PROVIDER_CONFIG = /data/gitea/sessions +PROVIDER = file + +[picture] +AVATAR_UPLOAD_PATH = /data/gitea/avatars +REPOSITORY_AVATAR_UPLOAD_PATH = /data/gitea/repo-avatars + +[attachment] +PATH = /data/gitea/attachments + +[log] +MODE = console +LEVEL = info +ROOT_PATH = /data/gitea/log + +[security] +INSTALL_LOCK = true +SECRET_KEY = +REVERSE_PROXY_LIMIT = 1 +REVERSE_PROXY_TRUSTED_PROXIES = * +INTERNAL_TOKEN = {{ gitea_internal_token }} +PASSWORD_HASH_ALGO = pbkdf2 + +[service] +DISABLE_REGISTRATION = false +REQUIRE_SIGNIN_VIEW = false +REGISTER_EMAIL_CONFIRM = false +ENABLE_NOTIFY_MAIL = false +ALLOW_ONLY_EXTERNAL_REGISTRATION = true +SHOW_REGISTRATION_BUTTON = false +ENABLE_CAPTCHA = false +DEFAULT_KEEP_EMAIL_PRIVATE = false +DEFAULT_ALLOW_CREATE_ORGANIZATION = true +DEFAULT_ENABLE_TIMETRACKING = true +NO_REPLY_ADDRESS = noreply.localhost + +[lfs] +PATH = /data/git/lfs + +[mailer] +ENABLED = false + +[openid] +ENABLE_OPENID_SIGNIN = false +ENABLE_OPENID_SIGNUP = true +WHITELISTED_URIS = {{ gitea_auth_domain }} + +[cron.update_checker] +ENABLED = false + +[repository.pull-request] +DEFAULT_MERGE_STYLE = merge + +[repository.signing] +DEFAULT_TRUST_MODEL = committer + +[oauth2] +JWT_SECRET = {{ gitea_oauth2_jwt_secret }} + +[webhook] +; Allow insecure certification +SKIP_TLS_VERIFY = true diff --git a/playbooks/roles/gitea/templates/docker-compose.yml.j2 b/playbooks/roles/gitea/templates/docker-compose.yml.j2 new file mode 100644 index 0000000..e16f9f7 --- /dev/null +++ b/playbooks/roles/gitea/templates/docker-compose.yml.j2 @@ -0,0 +1,19 @@ +version: "3" + +networks: + gitea: + external: false + +services: + server: + image: gitea/gitea:latest + restart: always + networks: + - gitea + volumes: + - ./data:/data + - /etc/timezone:/etc/timezone:ro + - /etc/localtime:/etc/localtime:ro + ports: + - "127.0.0.1:9966:3000" + - "0.0.0.0:222:22" diff --git a/playbooks/roles/nginx/templates/himmel.hatecomputers.club/http.git.hatecomputers.club.conf b/playbooks/roles/nginx/templates/himmel.hatecomputers.club/http.git.hatecomputers.club.conf new file mode 100644 index 0000000..befd993 --- /dev/null +++ b/playbooks/roles/nginx/templates/himmel.hatecomputers.club/http.git.hatecomputers.club.conf @@ -0,0 +1,8 @@ +server { + listen 80; + server_name git.hatecomputers.club; + + location / { + rewrite ^ https://git.hatecomputers.club$request_uri? permanent; + } +} diff --git a/playbooks/roles/nginx/templates/himmel.hatecomputers.club/https.git.hatecomputers.club.conf b/playbooks/roles/nginx/templates/himmel.hatecomputers.club/https.git.hatecomputers.club.conf new file mode 100644 index 0000000..73111e6 --- /dev/null +++ b/playbooks/roles/nginx/templates/himmel.hatecomputers.club/https.git.hatecomputers.club.conf @@ -0,0 +1,21 @@ +server { + server_name git.hatecomputers.club; + listen 443 ssl; + + ssl_dhparam /etc/nginx/dhparams.pem; + + ssl_session_timeout 1d; + ssl_session_tickets off; + ssl_protocols TLSv1.2 TLSv1.3; + ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:DHE-RSA-CHACHA20-POLY1305; + ssl_prefer_server_ciphers off; + + ssl_certificate /etc/letsencrypt/live/git.hatecomputers.club/fullchain.pem; + ssl_certificate_key /etc/letsencrypt/live/git.hatecomputers.club/privkey.pem; + + location / { + proxy_pass http://127.0.0.1:9966; + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header Host $host; + } +} diff --git a/secrets.txt b/secrets.txt index 581af2b..2910054 100644 --- a/secrets.txt +++ b/secrets.txt @@ -3,3 +3,6 @@ certbot_email email_ldap_api_token roundcube_oauth2_client_id roundcube_oauth2_client_basic_secret +gitea_jwt_secret +gitea_oauth2_jwt_secret +gitea_internal_token