6.6 docker基于二进制安装harbor-https方式
6.6.1 harbor-https playbook
6.6.1.1 docker基于二进制 playbook
[root@ansible-server ansible]# mkdir -p playbook/docker-binary[root@ansible-server ansible]# cd playbook/docker-binary/[root@ansible-server docker-binary]# wget https://mirrors.cloud.tencent.com/docker-ce/linux/static/stable/x86_64/docker-20.10.9.tgz -P files/[root@ansible-server docker-binary]# vim vars.ymlDOCKER_VERSION: 20.10.9[root@ansible-server docker-binary]# vim files/docker.service[Unit]Description=Docker Application Container EngineDocumentation=https://docs.docker.comAfter=network-online.target firewalld.serviceWants=network-online.target[Service]Type=notify# the default is not to use systemd for cgroups because the delegate issues still# exists and systemd currently does not support the cgroup feature set required# for containers run by dockerExecStart=/usr/bin/dockerd -H unix://var/run/docker.sockExecReload=/bin/kill -s HUP \$MAINPID# Having non-zero Limit*s causes performance problems due to accounting overhead# in the kernel. We recommend using cgroups to do container-local accounting.LimitNOFILE=infinityLimitNPROC=infinityLimitCORE=infinity# Uncomment TasksMax if your systemd version supports it.# Only systemd 226 and above support this version.#TasksMax=infinityTimeoutStartSec=0# set delegate yes so that systemd does not reset the cgroups of docker containersDelegate=yes# kill only the docker process, not all processes in the cgroupKillMode=process# restart the docker process if it exits prematurelyRestart=on-failureStartLimitBurst=3StartLimitInterval=60s[Install]WantedBy=multi-user.target[root@ansible-server docker-binary]# vim files/daemon.json{"registry-mirrors": ["https://hzw5xiv7.mirror.aliyuncs.com","https://docker.mirrors.ustc.edu.cn","http://f1361db2.m.daocloud.io","https://registry.docker-cn.com","https://dockerhub.azk8s.cn","https://reg-mirror.qiniu.com","https://hub-mirror.c.163.com","https://mirror.ccs.tencentyun.com"]}[root@ansible-server docker-binary]# vim install_docker.yml---- hosts: allvars_files:vars.ymltasks:- name: unarchive docker packageunarchive:src: "docker-{{ DOCKER_VERSION }}.tgz"dest: usr/local/src- name: move docker filesshell:cmd: mv usr/local/src/docker/* usr/bin/- name: copy docker.service filecopy:src: docker.servicedest: lib/systemd/system/docker.service- name: mkdir etc/dockerfile:path: etc/dockerstate: directory- name: set mirror_acceleratorcopy:src: daemon.jsondest: etc/docker/- name: set docker aliaslineinfile:path: ~/.bashrcline: "{{ item }}"loop:- "alias rmi=\"docker images -qa|xargs docker rmi -f\""- "alias rmc=\"docker ps -qa|xargs docker rm -f\""- name: start dockersystemd:name: dockerstate: startedenabled: yesdaemon_reload: yes- name: set WARNING No swap limit supportreplace:path: etc/default/grubregexp: '^(GRUB_CMDLINE_LINUX=.*)\"$'replace: '\1 swapaccount=1"'when:- ansible_distribution=="Ubuntu"- name: update-grubshell:cmd: update-grubwhen:- ansible_distribution=="Ubuntu"- name: reboot Ubuntu systemreboot:when:- ansible_distribution=="Ubuntu"[root@ansible-server docker-binary]# cd../../[root@ansible-server ansible]# ansible-playbook playbook/docker-binary/install_docker.ymlPLAY [all] ************************************************************************************************************************************TASK [Gathering Facts] ************************************************************************************************************************ok: [172.31.0.103]ok: [172.31.0.104]ok: [172.31.0.101]ok: [172.31.0.102]ok: [172.31.0.105]TASK [unarchive docker package] **************************************************************************************************************changed: [172.31.0.102]changed: [172.31.0.101]changed: [172.31.0.104]changed: [172.31.0.103]changed: [172.31.0.105]TASK [move docker files] **********************************************************************************************************************changed: [172.31.0.103]changed: [172.31.0.104]changed: [172.31.0.105]changed: [172.31.0.101]changed: [172.31.0.102]TASK [copy docker.service file] ***************************************************************************************************************changed: [172.31.0.103]changed: [172.31.0.104]changed: [172.31.0.105]changed: [172.31.0.102]changed: [172.31.0.101]TASK [mkdir etc/docker] **********************************************************************************************************************changed: [172.31.0.103]changed: [172.31.0.104]changed: [172.31.0.105]changed: [172.31.0.102]changed: [172.31.0.101]TASK [set mirror_accelerator] *****************************************************************************************************************changed: [172.31.0.103]changed: [172.31.0.104]changed: [172.31.0.105]changed: [172.31.0.102]changed: [172.31.0.101]TASK [set docker alias] ***********************************************************************************************************************changed: [172.31.0.103] => (item=alias rmi="docker images -qa|xargs docker rmi -f")changed: [172.31.0.104] => (item=alias rmi="docker images -qa|xargs docker rmi -f")changed: [172.31.0.105] => (item=alias rmi="docker images -qa|xargs docker rmi -f")changed: [172.31.0.102] => (item=alias rmi="docker images -qa|xargs docker rmi -f")changed: [172.31.0.101] => (item=alias rmi="docker images -qa|xargs docker rmi -f")changed: [172.31.0.103] => (item=alias rmc="docker ps -qa|xargs docker rm -f")changed: [172.31.0.104] => (item=alias rmc="docker ps -qa|xargs docker rm -f")changed: [172.31.0.105] => (item=alias rmc="docker ps -qa|xargs docker rm -f")changed: [172.31.0.101] => (item=alias rmc="docker ps -qa|xargs docker rm -f")changed: [172.31.0.102] => (item=alias rmc="docker ps -qa|xargs docker rm -f")TASK [start docker] ***************************************************************************************************************************changed: [172.31.0.103]changed: [172.31.0.101]changed: [172.31.0.102]changed: [172.31.0.104]changed: [172.31.0.105]TASK [set WARNING No swap limit support] ******************************************************************************************************skipping: [172.31.0.101]skipping: [172.31.0.102]skipping: [172.31.0.103]changed: [172.31.0.104]changed: [172.31.0.105]TASK [update-grub] ****************************************************************************************************************************skipping: [172.31.0.101]skipping: [172.31.0.102]skipping: [172.31.0.103]changed: [172.31.0.104]changed: [172.31.0.105]TASK [reboot Ubuntu system] *******************************************************************************************************************skipping: [172.31.0.101]skipping: [172.31.0.102]skipping: [172.31.0.103]changed: [172.31.0.104]changed: [172.31.0.105]PLAY RECAP ************************************************************************************************************************************172.31.0.101 : ok=8 changed=7 unreachable=0 failed=0 skipped=3 rescued=0 ignored=0172.31.0.102 : ok=8 changed=7 unreachable=0 failed=0 skipped=3 rescued=0 ignored=0172.31.0.103 : ok=8 changed=7 unreachable=0 failed=0 skipped=3 rescued=0 ignored=0172.31.0.104 : ok=11 changed=10 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0172.31.0.105 : ok=11 changed=10 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
6.6.1.2 docker-compose playbook
[root@ansible-server ansible]# mkdir playbook/docker-compose[root@ansible-server ansible]# cd playbook/docker-compose/[root@ansible-server docker-compose]# mkdir files[root@ansible-server docker-compose]# wget https://github.com/docker/compose/releases/download/1.29.2/docker-compose-Linux-x86_64 -P files[root@ansible-server docker-compose]# vim install_docker_compose.yml---- hosts: alltasks:- name: copy docker compose filecopy:src: docker-compose-linux-x86_64dest: usr/bin/docker-composemode: 755[root@ansible-server docker-compose]# cd ../../[root@ansible-server ansible]# ansible-playbook playbook/docker-compose/install_docker_compose.ymlPLAY [all] ************************************************************************************************************************************TASK [Gathering Facts] ************************************************************************************************************************ok: [172.31.0.103]ok: [172.31.0.101]ok: [172.31.0.104]ok: [172.31.0.102]ok: [172.31.0.105]TASK [copy docker compose file] ***************************************************************************************************************changed: [172.31.0.103]changed: [172.31.0.105]changed: [172.31.0.104]changed: [172.31.0.102]changed: [172.31.0.101]PLAY RECAP ************************************************************************************************************************************172.31.0.101 : ok=2 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0172.31.0.102 : ok=2 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0172.31.0.103 : ok=2 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0172.31.0.104 : ok=2 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0172.31.0.105 : ok=2 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0[root@rocky8-client ~]# docker-compose --versiondocker-compose version 1.29.2, build 5becea4c[root@centos8-client ~]# docker-compose --versiondocker-compose version 1.29.2, build 5becea4c[root@centos7-client ~]# docker-compose --versiondocker-compose version 1.29.2, build 5becea4croot@ubuntu1804-client:~# docker-compose --versiondocker-compose version 1.29.2, build 5becea4croot@ubuntu2004-client:~# docker-compose --versiondocker-compose version 1.29.2, build 5becea4c
6.6.1.3 harbor-https playbook
[root@ansible-server ansible]# mkdir playbook/harbor-https[root@ansible-server ansible]# cd playbook/harbor-https/[root@ansible-server harbor-https]# mkdir files[root@ansible-server harbor-https]# wget https://github.com/goharbor/harbor/releases/download/v2.3.5/harbor-offline-installer-v2.3.5.tgz -P files/[root@ansible-server harbor-https]# vim vars.ymlHARBOR_INSTALL_DIR: appsHARBOR_VERSION: 2.3.5HARBOR_ADMIN_PASSWORD: 123456DOMAIN: raymonds.ccHARBOR_DOMAIN: harbor.raymonds.cc[root@ansible-server harbor-https]# mkdir templates[root@ansible-server harbor-https]# vim templates/harbor.servicej2[Unit]Description=HarborAfter=docker.service systemd-networkd.service systemd-resolved.serviceRequires=docker.serviceDocumentation=http://github.com/vmware/harbor[Service]Type=simpleRestart=on-failureRestartSec=5ExecStart=/usr/bin/docker-compose -f {{ HARBOR_INSTALL_DIR }}/harbor/docker-compose.yml upExecStop=/usr/bin/docker-compose -f {{ HARBOR_INSTALL_DIR }}/harbor/docker-compose.yml down[Install]WantedBy=multi-user.target[root@ansible-server harbor-https]# vim install_harbor.yml---- hosts: allvars_files:vars.ymltasks:- name: create HARBOR_INSTALL_DIR directoryfile:path: "{{ HARBOR_INSTALL_DIR }}"state: directory- name: unarchive harbor packageunarchive:src: "harbor-offline-installer-v{{ HARBOR_VERSION }}.tgz"dest: "{{ HARBOR_INSTALL_DIR }}/"creates: "{{ HARBOR_INSTALL_DIR }}/harbor"- name: touch filefile:path: root/.rndstate: touch- name: create certs directoryfile:path: "{{ HARBOR_INSTALL_DIR }}/harbor/certs/"state: directory- name: create ca.crt fileshell:chdir: "{{ HARBOR_INSTALL_DIR }}/harbor/certs/"cmd: openssl req -newkey rsa:4096 -nodes -sha256 -keyout ca.key -x509 -subj "/CN=ca.{{ DOMAIN }}" -days 365 -out ca.crt- name: create hostname.csr fileshell:chdir: "{{ HARBOR_INSTALL_DIR }}/harbor/certs/"cmd: openssl req -newkey rsa:4096 -nodes -sha256 -subj "/CN={{ HARBOR_DOMAIN }}" -keyout {{ HARBOR_DOMAIN }}.key -out {{ HARBOR_DOMAIN }}.csr- name: create hostname.csr fileshell:chdir: "{{ HARBOR_INSTALL_DIR }}/harbor/certs/"cmd: openssl x509 -req -in {{ HARBOR_DOMAIN }}.csr -CA ca.crt -CAkey ca.key -CAcreateserial -out {{ HARBOR_DOMAIN }}.crt- name: mv harbor.ymlshell:cmd: mv {{ HARBOR_INSTALL_DIR }}/harbor/harbor.yml.tmpl {{ HARBOR_INSTALL_DIR }}/harbor/harbor.ymlcreates: "{{ HARBOR_INSTALL_DIR }}/harbor/harbor.yml"- name: set harbor.yml file 'hostname' string linereplace:path: "{{ HARBOR_INSTALL_DIR }}/harbor/harbor.yml"regexp: '^(hostname:) .*'replace: '\1 {{ ansible_default_ipv4.address }}'- name: set harbor.yml file 'harbor_admin_password' string linereplace:path: "{{ HARBOR_INSTALL_DIR }}/harbor/harbor.yml"regexp: '^(harbor_admin_password:) .*'replace: '\1 {{ HARBOR_ADMIN_PASSWORD }}'- name: set harbor.yml file 'certificate' string linereplace:path: "{{ HARBOR_INSTALL_DIR }}/harbor/harbor.yml"regexp: ' (certificate:) .*'replace: ' \1 {{ HARBOR_INSTALL_DIR }}/harbor/certs/{{ HARBOR_DOMAIN }}.crt'- name: set harbor.yml file 'private_key' string linereplace:path: "{{ HARBOR_INSTALL_DIR }}/harbor/harbor.yml"regexp: ' (private_key:) .*'replace: ' \1 {{ HARBOR_INSTALL_DIR }}/harbor/certs/{{ HARBOR_DOMAIN }}.key'- name: install CentOS or Rocky pythonyum:name: python3when:- (ansible_distribution=="CentOS" or ansible_distribution=="Rocky")- name: delete lock filesfile:path: "{{ item }}"state: absentloop:- var/lib/dpkg/lock- var/lib/apt/lists/lock- var/cache/apt/archives/lockwhen:- ansible_distribution=="Ubuntu"- name: apt updateapt:update_cache: yesforce: yeswhen:- ansible_distribution=="Ubuntu"- name: install Ubuntu pythonapt:name: python3when:- ansible_distribution=="Ubuntu"- name: install harborshell:cmd: "{{ HARBOR_INSTALL_DIR }}/harbor/install.sh"- name: copy harbor.servicetemplate:src: harbor.service.j2dest: lib/systemd/system/harbor.service- name: service enablesystemd:name: harborstate: startedenabled: yesdaemon_reload: yes[root@ansible-server harbor-https]# cd ../../[root@ansible-server ansible]# ansible-playbook playbook/harbor-https/install_harbor.ymlPLAY [all] ************************************************************************************************************************************TASK [Gathering Facts] ************************************************************************************************************************ok: [172.31.0.103]ok: [172.31.0.104]ok: [172.31.0.101]ok: [172.31.0.105]ok: [172.31.0.102]TASK [create HARBOR_INSTALL_DIR directory] ****************************************************************************************************changed: [172.31.0.103]changed: [172.31.0.104]changed: [172.31.0.105]changed: [172.31.0.101]changed: [172.31.0.102]TASK [unarchive harbor package] **************************************************************************************************************changed: [172.31.0.102]changed: [172.31.0.103]changed: [172.31.0.101]changed: [172.31.0.104]changed: [172.31.0.105]TASK [touch file] *****************************************************************************************************************************changed: [172.31.0.104]changed: [172.31.0.105]changed: [172.31.0.103]changed: [172.31.0.101]changed: [172.31.0.102]TASK [create certs directory] *****************************************************************************************************************changed: [172.31.0.104]changed: [172.31.0.103]changed: [172.31.0.105]changed: [172.31.0.102]changed: [172.31.0.101]TASK [create ca.crt file] *********************************************************************************************************************changed: [172.31.0.105]changed: [172.31.0.101]changed: [172.31.0.103]changed: [172.31.0.104]changed: [172.31.0.102]TASK [create hostname.csr file] ***************************************************************************************************************changed: [172.31.0.101]changed: [172.31.0.103]changed: [172.31.0.104]changed: [172.31.0.105]changed: [172.31.0.102]TASK [create hostname.csr file] ***************************************************************************************************************changed: [172.31.0.103]changed: [172.31.0.104]changed: [172.31.0.105]changed: [172.31.0.101]changed: [172.31.0.102]TASK [mv harbor.yml] **************************************************************************************************************************changed: [172.31.0.104]changed: [172.31.0.103]changed: [172.31.0.101]changed: [172.31.0.105]changed: [172.31.0.102]TASK [set harbor.yml file 'hostname' string line] *********************************************************************************************changed: [172.31.0.104]changed: [172.31.0.105]changed: [172.31.0.103]changed: [172.31.0.102]changed: [172.31.0.101]TASK [set harbor.yml file 'harbor_admin_password' string line] ********************************************************************************changed: [172.31.0.104]changed: [172.31.0.103]changed: [172.31.0.105]changed: [172.31.0.102]changed: [172.31.0.101]TASK [set harbor.yml file 'certificate' string line] ******************************************************************************************changed: [172.31.0.103]changed: [172.31.0.104]changed: [172.31.0.105]changed: [172.31.0.101]changed: [172.31.0.102]TASK [set harbor.yml file 'private_key' string line] ******************************************************************************************changed: [172.31.0.103]changed: [172.31.0.104]changed: [172.31.0.105]changed: [172.31.0.101]changed: [172.31.0.102]TASK [install CentOS or Rocky python] *********************************************************************************************************skipping: [172.31.0.104]skipping: [172.31.0.105]changed: [172.31.0.102]changed: [172.31.0.101]changed: [172.31.0.103]TASK [delete lock files] **********************************************************************************************************************skipping: [172.31.0.101] => (item=/var/lib/dpkg/lock)skipping: [172.31.0.101] => (item=/var/lib/apt/lists/lock)skipping: [172.31.0.101] => (item=/var/cache/apt/archives/lock)skipping: [172.31.0.102] => (item=/var/lib/dpkg/lock)skipping: [172.31.0.102] => (item=/var/lib/apt/lists/lock)skipping: [172.31.0.102] => (item=/var/cache/apt/archives/lock)skipping: [172.31.0.103] => (item=/var/lib/dpkg/lock)skipping: [172.31.0.103] => (item=/var/lib/apt/lists/lock)skipping: [172.31.0.103] => (item=/var/cache/apt/archives/lock)changed: [172.31.0.105] => (item=/var/lib/dpkg/lock)changed: [172.31.0.104] => (item=/var/lib/dpkg/lock)changed: [172.31.0.105] => (item=/var/lib/apt/lists/lock)changed: [172.31.0.104] => (item=/var/lib/apt/lists/lock)changed: [172.31.0.105] => (item=/var/cache/apt/archives/lock)changed: [172.31.0.104] => (item=/var/cache/apt/archives/lock)TASK [apt update] *****************************************************************************************************************************skipping: [172.31.0.101]skipping: [172.31.0.102]skipping: [172.31.0.103]changed: [172.31.0.104]changed: [172.31.0.105]TASK [install Ubuntu python] ******************************************************************************************************************skipping: [172.31.0.101]skipping: [172.31.0.102]skipping: [172.31.0.103]ok: [172.31.0.105]ok: [172.31.0.104]TASK [install harbor] *************************************************************************************************************************changed: [172.31.0.102]changed: [172.31.0.101]changed: [172.31.0.103]changed: [172.31.0.104]changed: [172.31.0.105]TASK [copy harbor.service] ********************************************************************************************************************changed: [172.31.0.103]changed: [172.31.0.102]changed: [172.31.0.101]changed: [172.31.0.105]changed: [172.31.0.104]TASK [service enable] *************************************************************************************************************************changed: [172.31.0.103]changed: [172.31.0.104]changed: [172.31.0.102]changed: [172.31.0.101]changed: [172.31.0.105]PLAY RECAP ************************************************************************************************************************************172.31.0.101 : ok=17 changed=16 unreachable=0 failed=0 skipped=3 rescued=0 ignored=0172.31.0.102 : ok=17 changed=16 unreachable=0 failed=0 skipped=3 rescued=0 ignored=0172.31.0.103 : ok=17 changed=16 unreachable=0 failed=0 skipped=3 rescued=0 ignored=0172.31.0.104 : ok=19 changed=17 unreachable=0 failed=0 skipped=1 rescued=0 ignored=0172.31.0.105 : ok=19 changed=17 unreachable=0 failed=0 skipped=1 rescued=0 ignored=0[root@rocky8-client ~]# grep "^hostname" /apps/harbor/harbor.ymlhostname: harbor.raymonds.cc[root@rocky8-client ~]# grep "^harbor_admin_password" /apps/harbor/harbor.ymlharbor_admin_password: 123456[root@rocky8-client ~]# grep "#http" /apps/harbor/harbor.yml#http:[root@rocky8-client ~]# grep "port: 80" /apps/harbor/harbor.yml# port: 80[root@rocky8-client ~]# grep "certificate:" /apps/harbor/harbor.ymlcertificate: /apps/harbor/certs/harbor.raymonds.cc.crt[root@rocky8-client ~]# grep "private_key:" /apps/harbor/harbor.ymlprivate_key: /apps/harbor/certs/harbor.raymonds.cc.key[root@rocky8-client ~]# ll /apps/harbor/certs/total 24-rw-r--r-- 1 root root 1822 Dec 28 17:46 ca.crt-rw------- 1 root root 3272 Dec 28 17:46 ca.key-rw-r--r-- 1 root root 41 Dec 28 17:46 ca.srl-rw-r--r-- 1 root root 1704 Dec 28 17:46 harbor.raymonds.cc.crt-rw-r--r-- 1 root root 1598 Dec 28 17:46 harbor.raymonds.cc.csr-rw------- 1 root root 3272 Dec 28 17:46 harbor.raymonds.cc.key[root@rocky8-client ~]# systemctl status harbor● harbor.service - HarborLoaded: loaded (/usr/lib/systemd/system/harbor.service; enabled; vendor preset: disabled)Active: active (running) since Tue 2021-12-28 17:47:44 CST; 2min 9s agoDocs: http://github.com/vmware/harborMain PID: 6869 (docker-compose)Tasks: 12 (limit: 4783)Memory: 55.7MCGroup: /system.slice/harbor.service├─6869 /usr/bin/docker-compose -f /apps/harbor/docker-compose.yml up└─6886 /usr/bin/docker-compose -f /apps/harbor/docker-compose.yml upDec 28 17:49:32 rocky8-client.example.local docker-compose[6869]: harbor-portal | 172.18.0.8 - - [28/Dec/2021:09:49:32 +0000] "GET / HTTP/1.1>Dec 28 17:49:32 rocky8-client.example.local docker-compose[6869]: registry | 172.18.0.8 - - [28/Dec/2021:09:49:32 +0000] "GET / HTTP/1.1>Dec 28 17:49:32 rocky8-client.example.local docker-compose[6869]: registryctl | 172.18.0.8 - - [28/Dec/2021:09:49:32 +0000] "GET /api/healt>Dec 28 17:49:33 rocky8-client.example.local docker-compose[6869]: nginx | 127.0.0.1 - "GET / HTTP/1.1" 308 171 "-" "curl/7.78.0" 0.00>Dec 28 17:49:42 rocky8-client.example.local docker-compose[6869]: registry | 172.18.0.8 - - [28/Dec/2021:09:49:42 +0000] "GET / HTTP/1.1>Dec 28 17:49:42 rocky8-client.example.local docker-compose[6869]: harbor-portal | 172.18.0.8 - - [28/Dec/2021:09:49:42 +0000] "GET / HTTP/1.1>Dec 28 17:49:42 rocky8-client.example.local docker-compose[6869]: registryctl | 172.18.0.8 - - [28/Dec/2021:09:49:42 +0000] "GET /api/healt>Dec 28 17:49:52 rocky8-client.example.local docker-compose[6869]: harbor-portal | 172.18.0.8 - - [28/Dec/2021:09:49:52 +0000] "GET / HTTP/1.1>Dec 28 17:49:52 rocky8-client.example.local docker-compose[6869]: registry | 172.18.0.8 - - [28/Dec/2021:09:49:52 +0000] "GET / HTTP/1.1>Dec 28 17:49:52 rocky8-client.example.local docker-compose[6869]: registryctl | 172.18.0.8 - - [28/Dec/2021:09:49:52 +0000] "GET /api/healt>#在windows系统“C:\Windows\System32\drivers\etc\hosts”文件里添加下面内容172.31.0.101 harbor.raymonds.cc

文章转载自Raymond运维云原生技术交流,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




