mirror of
https://github.com/getnamingo/registry.git
synced 2025-07-21 10:06:05 +02:00
Merge pull request #149 from getnamingo/dev
Merge from dev in preparation for v1.0.1
This commit is contained in:
commit
af157bd6e7
6 changed files with 83 additions and 68 deletions
34
README.md
34
README.md
|
@ -16,31 +16,25 @@ Namingo is optimally designed for the upcoming ICANN application round, providin
|
||||||
|
|
||||||
**Namingo** version 1.0.0 is now complete, thanks to our dedicated community. The journey doesn't end here, and we invite volunteers to help us continue testing and improving Namingo.
|
**Namingo** version 1.0.0 is now complete, thanks to our dedicated community. The journey doesn't end here, and we invite volunteers to help us continue testing and improving Namingo.
|
||||||
|
|
||||||
Currently, Namingo is able to manage 150,000 domains on a VPS setup featuring 2 cores, 4GB RAM, and a 100GB SSD. It is compatible with Ubuntu 22.04/24.04 LTS and Debian 12, supporting MariaDB/MySQL databases. We are also seeking testers for new operating systems and database setups, including AlmaLinux, Alpine Linux, FreeBSD 14, and Windows, with both MariaDB/MySQL and PostgreSQL options.
|
Namingo is compatible with Ubuntu 22.04/24.04 LTS and Debian 12, supporting MariaDB/MySQL databases. We are also seeking testers for new operating systems and database setups, including AlmaLinux, Alpine Linux, FreeBSD 14, and Windows, with both MariaDB/MySQL and PostgreSQL options.
|
||||||
|
|
||||||
|
Namingo efficiently manages up to 150,000 domains on a VPS setup with 2 cores, 4GB RAM, and an 11GB SSD. It can handle up to 1,000,000 domains on a more robust VPS configuration with 8 cores, 32GB RAM, and a 125GB NVMe SSD, though a few minor issues are noted in the [issues tab](https://github.com/getnamingo/registry/issues?q=is%3Aissue+is%3Aopen+label%3A%221+000+000+domains+issue%22). Zone generation for 1 million domains takes approximately 6 minutes.
|
||||||
|
|
||||||
Additionally, we are looking for assistance from gTLD operators to test Namingo by providing access to ICANN and other relevant systems. Your contributions are invaluable in refining and expanding Namingo's capabilities. Join us in ensuring Namingo remains the best in its class.
|
Additionally, we are looking for assistance from gTLD operators to test Namingo by providing access to ICANN and other relevant systems. Your contributions are invaluable in refining and expanding Namingo's capabilities. Join us in ensuring Namingo remains the best in its class.
|
||||||
|
|
||||||
### EPP Benchmark Summary (per registrar)
|
### EPP Benchmark Summary (per registrar)
|
||||||
|
|
||||||
- VPS Setup: 2 virtual CPU cores (AMD EPYC-Rome, 2 GHz), 2 GB RAM, SSD drive, Ubuntu 24.04
|
| **Metric** | 2 vCPU, 2 GB RAM, SSD | 8 vCPU, 32 GB RAM, NVMe |
|
||||||
|
|---------------------------------|-----------------------|-------------------------|
|
||||||
#### Domain Check:
|
| _Domain Check_ | | |
|
||||||
|
| Operations per Second (Ops/sec) | 217.55 | 462.58 |
|
||||||
- Operations per Second: 217.55
|
| Average Time per Operation (ms) | 4.596 | 2.16 |
|
||||||
|
| _Domain Info_ | | |
|
||||||
- Average Time per Operation: 4.596 ms
|
| Operations per Second (Ops/sec) | 94.65 | 225.55 |
|
||||||
|
| Average Time per Operation (ms) | 10.57 | 4.43 |
|
||||||
#### Domain Info:
|
| _Domain Create_ | | |
|
||||||
|
| Operations per Second (Ops/sec) | 42.17 | 120.62 |
|
||||||
- Operations per Second: 94.65
|
| Average Time per Operation (ms) | 23.72 | 8.29 |
|
||||||
|
|
||||||
- Average Time per Operation: 10.57 ms
|
|
||||||
|
|
||||||
#### Domain Create:
|
|
||||||
|
|
||||||
- Operations per Second: 42.17
|
|
||||||
|
|
||||||
- Average Time per Operation: 23.72 ms
|
|
||||||
|
|
||||||
## Features
|
## Features
|
||||||
|
|
||||||
|
|
|
@ -132,7 +132,7 @@ Coroutine::create(function () use ($pool, $log, $c) {
|
||||||
$dsRecord = new ResourceRecord;
|
$dsRecord = new ResourceRecord;
|
||||||
$dsRecord->setName($dname_clean . '.');
|
$dsRecord->setName($dname_clean . '.');
|
||||||
$dsRecord->setClass(Classes::INTERNET);
|
$dsRecord->setClass(Classes::INTERNET);
|
||||||
$dsRecord->setRdata(Factory::Ds($keytag, $alg, $digest, $digesttype));
|
$dsRecord->setRdata(Factory::Ds($keytag, $alg, hex2bin($digest), $digesttype));
|
||||||
$zone->addResourceRecord($dsRecord);
|
$zone->addResourceRecord($dsRecord);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -75,6 +75,7 @@ class HomeController extends Controller
|
||||||
$dates = [];
|
$dates = [];
|
||||||
$counts = [];
|
$counts = [];
|
||||||
|
|
||||||
|
if (is_array($domainsCount) || is_object($domainsCount)) {
|
||||||
foreach ($domainsCount as $row) {
|
foreach ($domainsCount as $row) {
|
||||||
// Extract just the date part from the datetime string
|
// Extract just the date part from the datetime string
|
||||||
$date = (new \DateTime($row['date']))->format('Y-m-d');
|
$date = (new \DateTime($row['date']))->format('Y-m-d');
|
||||||
|
@ -83,6 +84,10 @@ class HomeController extends Controller
|
||||||
$dates[] = $date;
|
$dates[] = $date;
|
||||||
$counts[] = $count;
|
$counts[] = $count;
|
||||||
}
|
}
|
||||||
|
} else {
|
||||||
|
$dates[] = 'No data';
|
||||||
|
$counts[] = 0;
|
||||||
|
}
|
||||||
|
|
||||||
$query = "
|
$query = "
|
||||||
SELECT
|
SELECT
|
||||||
|
@ -135,11 +140,17 @@ class HomeController extends Controller
|
||||||
$answeredData = [];
|
$answeredData = [];
|
||||||
$unansweredData = [];
|
$unansweredData = [];
|
||||||
|
|
||||||
|
if (is_array($results) || is_object($results)) {
|
||||||
foreach ($results as $row) {
|
foreach ($results as $row) {
|
||||||
$labels3[] = $row['ticket_date'];
|
$labels3[] = $row['ticket_date'];
|
||||||
$answeredData[] = (int) $row['answered']; // Cast to int for ApexCharts
|
$answeredData[] = (int) $row['answered']; // Cast to int for ApexCharts
|
||||||
$unansweredData[] = (int) $row['unanswered']; // Cast to int for ApexCharts
|
$unansweredData[] = (int) $row['unanswered']; // Cast to int for ApexCharts
|
||||||
}
|
}
|
||||||
|
} else {
|
||||||
|
$labels3[] = 0;
|
||||||
|
$answeredData[] = 0;
|
||||||
|
$unansweredData[] = 0;
|
||||||
|
}
|
||||||
|
|
||||||
$domains = $db->selectValue('SELECT count(id) as domains FROM domain');
|
$domains = $db->selectValue('SELECT count(id) as domains FROM domain');
|
||||||
$latest_domains = $db->select('SELECT name, crdate FROM domain ORDER BY crdate DESC LIMIT 10');
|
$latest_domains = $db->select('SELECT name, crdate FROM domain ORDER BY crdate DESC LIMIT 10');
|
||||||
|
|
|
@ -253,6 +253,7 @@
|
||||||
</div>
|
</div>
|
||||||
{% include 'partials/footer.twig' %}
|
{% include 'partials/footer.twig' %}
|
||||||
</div>
|
</div>
|
||||||
|
{% if registrars %}
|
||||||
<script>
|
<script>
|
||||||
document.addEventListener("DOMContentLoaded", function () {
|
document.addEventListener("DOMContentLoaded", function () {
|
||||||
var dates = JSON.parse('{{ dates|raw }}');
|
var dates = JSON.parse('{{ dates|raw }}');
|
||||||
|
@ -448,4 +449,5 @@
|
||||||
})).render();
|
})).render();
|
||||||
});
|
});
|
||||||
</script>
|
</script>
|
||||||
|
{% endif %}
|
||||||
{% endblock %}
|
{% endblock %}
|
|
@ -14,7 +14,7 @@
|
||||||
<a href="https://namingo.org" target="_blank" class="link-secondary" rel="noopener">Namingo</a>
|
<a href="https://namingo.org" target="_blank" class="link-secondary" rel="noopener">Namingo</a>
|
||||||
</li>
|
</li>
|
||||||
<li class="list-inline-item">
|
<li class="list-inline-item">
|
||||||
v1.0.0
|
v1.0.1
|
||||||
</li>
|
</li>
|
||||||
</ul>
|
</ul>
|
||||||
</div>
|
</div>
|
||||||
|
|
|
@ -11,15 +11,16 @@ prompt_for_password() {
|
||||||
echo $password
|
echo $password
|
||||||
}
|
}
|
||||||
|
|
||||||
# Function to edit or add a configuration line in php.ini
|
# Function to ensure a setting is present, uncommented, and correctly set
|
||||||
edit_php_ini() {
|
set_php_ini_value() {
|
||||||
local file=$1
|
local ini_file=$1
|
||||||
local setting=$2
|
local key=$2
|
||||||
local value=$3
|
local value=$3
|
||||||
if grep -q "^;\?\s*${setting}\s*=" "$file"; then
|
|
||||||
sed -i "s/^\(;?\s*${setting}\s*=\).*/\1 ${value}/" "$file"
|
if grep -qE "^\s*;?\s*${key}\s*=" "$ini_file"; then
|
||||||
|
sed -i "s/^\s*;?\s*${key}\s*=.*/${key} = ${value}/" "$ini_file"
|
||||||
else
|
else
|
||||||
echo "${setting} = ${value}" >> "$file"
|
echo "${key} = ${value}" >> "$ini_file"
|
||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -92,35 +93,42 @@ if [[ ("$OS" == "Ubuntu" && "$VER" == "22.04") || ("$OS" == "Ubuntu" && "$VER" =
|
||||||
timedatectl set-timezone UTC
|
timedatectl set-timezone UTC
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# Edit php.ini files
|
# Determine PHP configuration files based on OS and version
|
||||||
if [[ "$OS" == "Ubuntu" && "$VER" == "24.04" ]]; then
|
if [[ "$OS" == "Ubuntu" && "$VER" == "24.04" ]]; then
|
||||||
phpIniCli='/etc/php/8.3/cli/php.ini'
|
phpIniCli='/etc/php/8.3/cli/php.ini'
|
||||||
phpIniFpm='/etc/php/8.3/fpm/php.ini'
|
phpIniFpm='/etc/php/8.3/fpm/php.ini'
|
||||||
|
phpIniOpcache='/etc/php/8.3/mods-available/opcache.ini'
|
||||||
else
|
else
|
||||||
phpIniCli='/etc/php/8.2/cli/php.ini'
|
phpIniCli='/etc/php/8.2/cli/php.ini'
|
||||||
phpIniFpm='/etc/php/8.2/fpm/php.ini'
|
phpIniFpm='/etc/php/8.2/fpm/php.ini'
|
||||||
|
phpIniOpcache='/etc/php/8.2/mods-available/opcache.ini'
|
||||||
fi
|
fi
|
||||||
|
|
||||||
echo "Updating PHP configuration..."
|
# Update php.ini files
|
||||||
for file in "$phpIniCli" "$phpIniFpm"; do
|
set_php_ini_value "$phpIniCli" "opcache.enable" "1"
|
||||||
edit_php_ini "$file" "opcache.enable" "1"
|
set_php_ini_value "$phpIniCli" "opcache.enable_cli" "1"
|
||||||
edit_php_ini "$file" "opcache.enable_cli" "1"
|
set_php_ini_value "$phpIniCli" "opcache.jit_buffer_size" "100M"
|
||||||
edit_php_ini "$file" "opcache.jit_buffer_size" "100M"
|
set_php_ini_value "$phpIniCli" "opcache.jit" "1255"
|
||||||
edit_php_ini "$file" "opcache.jit" "1255"
|
set_php_ini_value "$phpIniCli" "session.cookie_secure" "1"
|
||||||
edit_php_ini "$file" "session.cookie_secure" "1"
|
set_php_ini_value "$phpIniCli" "session.cookie_httponly" "1"
|
||||||
edit_php_ini "$file" "session.cookie_httponly" "1"
|
set_php_ini_value "$phpIniCli" "session.cookie_samesite" "\"Strict\""
|
||||||
edit_php_ini "$file" "session.cookie_samesite" "\"Strict\""
|
set_php_ini_value "$phpIniCli" "session.cookie_domain" "\"$REGISTRY_DOMAIN,cp.$REGISTRY_DOMAIN,whois.$REGISTRY_DOMAIN\""
|
||||||
edit_php_ini "$file" "session.cookie_domain" "example.com"
|
set_php_ini_value "$phpIniCli" "memory_limit" "2G"
|
||||||
edit_php_ini "$file" "memory_limit" "512M"
|
|
||||||
done
|
|
||||||
|
|
||||||
if [[ "$OS" == "Ubuntu" && "$VER" == "24.04" ]]; then
|
# Repeat the same settings for php-fpm
|
||||||
edit_php_ini "/etc/php/8.3/mods-available/opcache.ini" "opcache.jit" "1255"
|
set_php_ini_value "$phpIniFpm" "opcache.enable" "1"
|
||||||
edit_php_ini "/etc/php/8.3/mods-available/opcache.ini" "opcache.jit_buffer_size" "100M"
|
set_php_ini_value "$phpIniFpm" "opcache.enable_cli" "1"
|
||||||
else
|
set_php_ini_value "$phpIniFpm" "opcache.jit_buffer_size" "100M"
|
||||||
edit_php_ini "/etc/php/8.2/mods-available/opcache.ini" "opcache.jit" "1255"
|
set_php_ini_value "$phpIniFpm" "opcache.jit" "1255"
|
||||||
edit_php_ini "/etc/php/8.2/mods-available/opcache.ini" "opcache.jit_buffer_size" "100M"
|
set_php_ini_value "$phpIniFpm" "session.cookie_secure" "1"
|
||||||
fi
|
set_php_ini_value "$phpIniFpm" "session.cookie_httponly" "1"
|
||||||
|
set_php_ini_value "$phpIniFpm" "session.cookie_samesite" "\"Strict\""
|
||||||
|
set_php_ini_value "$phpIniFpm" "session.cookie_domain" "\"$REGISTRY_DOMAIN,cp.$REGISTRY_DOMAIN,whois.$REGISTRY_DOMAIN\""
|
||||||
|
set_php_ini_value "$phpIniFpm" "memory_limit" "2G"
|
||||||
|
|
||||||
|
# Update opcache.ini
|
||||||
|
set_php_ini_value "$phpIniOpcache" "opcache.jit" "1255"
|
||||||
|
set_php_ini_value "$phpIniOpcache" "opcache.jit_buffer_size" "100M"
|
||||||
|
|
||||||
# Restart PHP-FPM service
|
# Restart PHP-FPM service
|
||||||
echo "Restarting PHP FPM service..."
|
echo "Restarting PHP FPM service..."
|
||||||
|
@ -216,7 +224,7 @@ fi
|
||||||
wget "http://www.adminer.org/latest.php" -O /usr/share/adminer/latest.php
|
wget "http://www.adminer.org/latest.php" -O /usr/share/adminer/latest.php
|
||||||
ln -s /usr/share/adminer/latest.php /usr/share/adminer/adminer.php
|
ln -s /usr/share/adminer/latest.php /usr/share/adminer/adminer.php
|
||||||
|
|
||||||
git clone https://github.com/getnamingo/registry /opt/registry
|
git clone --branch v1.0.1 --single-branch https://github.com/getnamingo/registry /opt/registry
|
||||||
mkdir -p /var/log/namingo
|
mkdir -p /var/log/namingo
|
||||||
chown -R www-data:www-data /var/log/namingo
|
chown -R www-data:www-data /var/log/namingo
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue