From 21a5b1b4f6756d09c7efac3eadf09f3401463f29 Mon Sep 17 00:00:00 2001 From: Yi-Ting Shih Date: Sun, 6 Apr 2025 18:11:00 +0800 Subject: [PATCH] Feat(domserver): docker compose testing --- ansible.cfg | 4 ++ group_vars/domserver/main.yml | 4 ++ hosts | 13 +++++++ .../files/config/mysql/domjudge.conf | 4 ++ .../files/config/php/domjudge.conf | 5 +++ roles/configure_domserver/handlers/main.yml | 6 +++ roles/configure_domserver/tasks/main.yml | 38 +++++++++++++++++++ .../templates/docker-compose.yml.jinja | 28 ++++++++++++++ roles/configure_judgehost/tasks/main.yml | 9 +++++ roles/install_packages/handlers/main.yml | 4 ++ roles/install_packages/tasks/main.yml | 9 +++++ 11 files changed, 124 insertions(+) create mode 100644 ansible.cfg create mode 100644 group_vars/domserver/main.yml create mode 100644 hosts create mode 100644 roles/configure_domserver/files/config/mysql/domjudge.conf create mode 100644 roles/configure_domserver/files/config/php/domjudge.conf create mode 100644 roles/configure_domserver/handlers/main.yml create mode 100644 roles/configure_domserver/tasks/main.yml create mode 100644 roles/configure_domserver/templates/docker-compose.yml.jinja create mode 100644 roles/configure_judgehost/tasks/main.yml create mode 100644 roles/install_packages/handlers/main.yml create mode 100644 roles/install_packages/tasks/main.yml diff --git a/ansible.cfg b/ansible.cfg new file mode 100644 index 0000000..98ff67c --- /dev/null +++ b/ansible.cfg @@ -0,0 +1,4 @@ +[defaults] +roles_path=./roles/ +inventory=./hosts +remote_user=root diff --git a/group_vars/domserver/main.yml b/group_vars/domserver/main.yml new file mode 100644 index 0000000..bd6c46d --- /dev/null +++ b/group_vars/domserver/main.yml @@ -0,0 +1,4 @@ +--- +domjudge_base_dir: /opt/domjudge/midterm +mariadb_version: 11.7.2 +domserver_version: 8.3.1 diff --git a/hosts b/hosts new file mode 100644 index 0000000..b7e6d42 --- /dev/null +++ b/hosts @@ -0,0 +1,13 @@ +[control] +localhost ansible_connection=local + +[domserver] +10.4.2.226 +# 140.113.168.160 + +[judgehost] +10.4.2.227 +10.4.2.228 + +[all:vars] +ansible_python_interpreter=/usr/bin/python diff --git a/roles/configure_domserver/files/config/mysql/domjudge.conf b/roles/configure_domserver/files/config/mysql/domjudge.conf new file mode 100644 index 0000000..49cea30 --- /dev/null +++ b/roles/configure_domserver/files/config/mysql/domjudge.conf @@ -0,0 +1,4 @@ +[mariadb] +max_connections = 1000 +innodb_log_file_size = 4096MB +max_allowed_packet = 4096MB diff --git a/roles/configure_domserver/files/config/php/domjudge.conf b/roles/configure_domserver/files/config/php/domjudge.conf new file mode 100644 index 0000000..1ecc664 --- /dev/null +++ b/roles/configure_domserver/files/config/php/domjudge.conf @@ -0,0 +1,5 @@ +; Set these three to be at least the size of your largest testcase and +; largest expected program output. +php_admin_value[memory_limit] = 4096M +php_admin_value[upload_max_filesize] = 4096M +php_admin_value[post_max_size] = 4096M diff --git a/roles/configure_domserver/handlers/main.yml b/roles/configure_domserver/handlers/main.yml new file mode 100644 index 0000000..6555493 --- /dev/null +++ b/roles/configure_domserver/handlers/main.yml @@ -0,0 +1,6 @@ +--- +- name: Restart domjudge docker compose + community.docker.docker_compose_v2: + project_src: "{{ domjudge_base_dir }}" + state: restarted + remove_orphans: true diff --git a/roles/configure_domserver/tasks/main.yml b/roles/configure_domserver/tasks/main.yml new file mode 100644 index 0000000..eb763da --- /dev/null +++ b/roles/configure_domserver/tasks/main.yml @@ -0,0 +1,38 @@ +--- +- name: Install domjudge directory + ansible.builtin.file: + path: "{{ domjudge_base_dir }}" + state: directory + mode: '0755' + owner: root + group: root +- name: Install domjudge docker compose + notify: + - Restart domjudge docker compose + block: + - name: Install docker-compose.yml + ansible.builtin.template: + src: docker-compose.yml.jinja + dest: "{{ domjudge_base_dir }}/docker-compose.yml" + mode: '0644' + owner: root + group: root + - name: Install mysql config + ansible.builtin.copy: + src: config/mysql + dest: "{{ domjudge_base_dir }}/config/mysql" + mode: '0755' + owner: root + group: root + - name: Install domserver php config + ansible.builtin.copy: + src: config/php + dest: "{{ domjudge_base_dir }}/config/php" + mode: '0755' + owner: root + group: root +- name: Enable and start docker + ansible.builtin.systemd_service: + name: docker.service + state: started + enabled: true diff --git a/roles/configure_domserver/templates/docker-compose.yml.jinja b/roles/configure_domserver/templates/docker-compose.yml.jinja new file mode 100644 index 0000000..d892302 --- /dev/null +++ b/roles/configure_domserver/templates/docker-compose.yml.jinja @@ -0,0 +1,28 @@ +services: + mariadb: + image: mariadb:{{ mariadb_version }} + environment: + MYSQL_USER: domjudge + MYSQL_DATABASE: domjudge + MYSQL_PASSWORD: "{{ mysql_password }}" + MYSQL_ROOT_PASSWORD: "{{ mysql_root_password }}" + restart: always + volumes: + - "./data/mariadb:/var/lib/mysql" + - "./config/mysql:/etc/mysql/conf.d:ro" + domserver: + build: + context: . + dockerfile_inline: | + FROM domjudge/domserver:{{ domserver_version }} + COPY ./config/php/domjudge.conf /etc/php/8.2/fpm/pool.d/domjudge.conf + environment: + MYSQL_HOST: mariadb + MYSQL_USER: domjudge + MYSQL_DATABASE: domjudge + MYSQL_PASSWORD: "{{ mysql_password }}" + MYSQL_ROOT_PASSWORD: "{{ mysql_root_password }}" + CONTAINER_TIMEZONE: Asia/Taipei + restart: always + ports: + - "8080:80" diff --git a/roles/configure_judgehost/tasks/main.yml b/roles/configure_judgehost/tasks/main.yml new file mode 100644 index 0000000..98475e0 --- /dev/null +++ b/roles/configure_judgehost/tasks/main.yml @@ -0,0 +1,9 @@ +--- +- name: Add boot parameters + ansible.builtin.lineinfile: + path: /boot/loader/entries/arch.conf + line: >- + options + cgroup_enable=memory + swapaccount=1 + systemd.unified_cgroup_hierarchy=0 diff --git a/roles/install_packages/handlers/main.yml b/roles/install_packages/handlers/main.yml new file mode 100644 index 0000000..92f57c5 --- /dev/null +++ b/roles/install_packages/handlers/main.yml @@ -0,0 +1,4 @@ +--- +- name: Upgrade packages + community.general.pacman: + upgrade: true diff --git a/roles/install_packages/tasks/main.yml b/roles/install_packages/tasks/main.yml new file mode 100644 index 0000000..20e1355 --- /dev/null +++ b/roles/install_packages/tasks/main.yml @@ -0,0 +1,9 @@ +--- +- name: Update package cache + community.general.pacman: + update_cache: true +- name: Install docker + community.general.pacman: + pkg: + - docker + notify: Upgrade packages