Merge pull request #149 from getnamingo/dev

Merge from dev in preparation for v1.0.1
This commit is contained in:
Pinga 2024-08-23 18:19:34 +03:00 committed by GitHub
commit af157bd6e7
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
6 changed files with 83 additions and 68 deletions

View file

@ -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

View file

@ -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);
} }
} }

View file

@ -75,13 +75,18 @@ class HomeController extends Controller
$dates = []; $dates = [];
$counts = []; $counts = [];
foreach ($domainsCount as $row) { if (is_array($domainsCount) || is_object($domainsCount)) {
// Extract just the date part from the datetime string foreach ($domainsCount as $row) {
$date = (new \DateTime($row['date']))->format('Y-m-d'); // Extract just the date part from the datetime string
$count = (int)$row['count']; // Ensure count is an integer $date = (new \DateTime($row['date']))->format('Y-m-d');
$count = (int)$row['count']; // Ensure count is an integer
$dates[] = $date; $dates[] = $date;
$counts[] = $count; $counts[] = $count;
}
} else {
$dates[] = 'No data';
$counts[] = 0;
} }
$query = " $query = "
@ -135,10 +140,16 @@ class HomeController extends Controller
$answeredData = []; $answeredData = [];
$unansweredData = []; $unansweredData = [];
foreach ($results as $row) { if (is_array($results) || is_object($results)) {
$labels3[] = $row['ticket_date']; foreach ($results as $row) {
$answeredData[] = (int) $row['answered']; // Cast to int for ApexCharts $labels3[] = $row['ticket_date'];
$unansweredData[] = (int) $row['unanswered']; // Cast to int for ApexCharts $answeredData[] = (int) $row['answered']; // 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');

View file

@ -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 %}

View file

@ -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>

View file

@ -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