Install PHP 8.2 on Ubuntu with Nginx

PHP 8.2 is work well with WordPress, i tested already on my site josuamarcelc.com

josuamarcelc

ALL IN ONE CODE

sudo apt update && apt upgrade -y
sudo add-apt-repository ppa:ondrej/php
sudo apt update
sudo apt install php8.2 -y
sudo apt-get install -y php8.2-cli php8.2-common php8.2-fpm php8.2-mysql php8.2-zip php8.2-gd php8.2-mbstring php8.2-curl php8.2-xml php8.2-bcmath php8.2-pgsql

1. Run system updates

The first thing to do in a new system is to update our repositories in order to make them up to date. Run upgrade command also.

sudo apt update && apt upgrade -y

2. Add Ondrej sury PPA repository

To run PHP 8.2 on Ubuntu 22.04, we need to add Ondrej sury PPA into our system. This is the maintainer of the PHP repository at the moment. This PPA is not currently checked so installing from it will not be guaranteed 100% results.

To add this PPA use the following command on our terminal.

sudo add-apt-repository ppa:ondrej/php

After installation is complete we need to update the repositories again for the changes to take effect.

sudo apt update

3. Install PHP 8.2 on Ubuntu 22.04

We should now be able to install PHP 8.2 on Ubuntu 22.04 Linux machine. The commands to run are as shared below:

sudo apt install php8.2 -y

Check for the currently active version of PHP with the following command:

php --version

4. Install PHP 8.2 Extensions

Besides PHP itself, you will likely want to install some additional PHP modules. You can use this command to install additional modules, replacing PACKAGE_NAME with the package you wish to install:

sudo apt-get install php8.2-PACKAGE_NAME

You can also install more than one package at a time. Here are a few suggestions of the most common modules you will most likely want to install:

sudo apt-get install -y php8.2-cli php8.2-common php8.2-fpm php8.2-mysql php8.2-zip php8.2-gd php8.2-mbstring php8.2-curl php8.2-xml php8.2-bcmath php8.2-pgsql

This command will install the following modules:

  • php8.2-cli – command interpreter, useful for testing PHP scripts from a shell or performing general shell scripting tasks
  • php8.2-common – documentation, examples, and common modules for PHP
  • php8.2-mysql – for working with MySQL databases
  • php8.2-zip – for working with compressed files
  • php8.2-gd – for working with images
  • php8.2-mbstring – used to manage non-ASCII strings
  • php8.2-curl – lets you make HTTP requests in PHP
  • php8.2-xml – for working with XML data
  • php8.2-bcmath – used when working with precision floats
  • php8.2-pgsql – for working with PostgreSQL databases

Best DNS Servers List

DNSIPv4IPv6
Google Public DNS8.8.8.8
8.8.4.4
2001:4860:4860::8888
2001:4860:4860::8844
OpenDNS208.67.222.222
208.67.220.220
Quad9 (Malware Blocking Enabled)9.9.9.9
149.112.112.112
2620:fe::fe
2620:fe::9
DNS.Watch84.200.69.80
84.200.70.40
2001:1608:10:25::1c04:b12f
2001:1608:10:25::9249:d69b
Comodo Secure DNS8.26.56.26
8.20.247.20
Cloudflare1.1.1.1
1.0.0.1

What is DNS propagation?

DNS propagation is the time DNS changes take to be updated across the internet on the globe. It can take up to 72 hours to propagate worldwide. You can check your DNS propagation results from here.

What is DNS resolution?

DNS resolution translates the domain name into the site’s IP address. You need a site’s IP address to know where it’s on the internet. A website could have IPv4 or IPv6 addresses or both. Where the IPv4 address comes in the form of an A record and the IPv6 address comes in an AAAA record.

How do DNS records propagate?

When you update your DNS records, it may take up to 72 hours for the changes to take effect. During this period, the ISPs worldwide update their DNS cache with new DNS information for your domain.

However, due to different DNS cache level, after DNS records changes, some of the visitors might be redirected to the old DNS server, for some time, and other can see the website from new DNS server, shortly after the changes. You can perform the A, AAAA, CNAME, and additional DNS records lookup.

Why DNS propagation takes time?

Suppose you changed your domain’s nameservers, and you requested to open your domain on the web browser. Your request will not go to the hosting directly.

Each of the ISP nodes first checks its DNS cache, whether it has the DNS information for that domain. If it is not there, it will look it up to save it for future use to speed up the DNA lookup process.

Thus, the new nameservers will not propagate instantly – ISPs have different cache refreshing levels, so some will still have the old DNS information in their cache.

But if after that time interval, still, your new DNS changes are not reflecting, then you go for a DNS health check to ensure that your DNS changes are up to the mark and are following the standards.

How does the DNS process work?

Suppose you request to open the URL https://abc.com in your web browser’s bar.

  1. The web browser first checks in its local cache whether it has the requested domain’s IP address. If it’s not present, then it will send the request to the Name Resolving Server.
  2. The Name Resolving Server checks its cache against that request. If it fails to find the requested domain’s IP address, it will send that request to the Root Server.
  3. The Root Server only contains the server’s IP address with TLD (Top Level Domain) related information. It will redirect the Name Resolving Server to the TLD server containing .com information.
  4. The TLD server provides the server’s IP address (authoritative servers for requested URL https://abc.com) to the Name Resolving Server.
  5. The Name Resolving Server caches that information for a specific period (TTL) and passes that information to the requested’s computer.
  6. The client’s computer builds the connection with the authoritative server (containing the requested URL https://abc.com) for the requested content and caches the IP address’s information in its browser for further use.

Why is DNS not propagating?

The ISPs across the world have a different caching level. The DNS client or the server may cache the information the DNS records in its DNS cache. That information is temporarily cached, and DNS servers will go for the updated DNS information when TTL (Time to Live) expires.

What will happen if the domain name does not exist?

The DNS server will return a name error, also known as an NXDomain response (for non-existent domain), to symbolize that the query’s domain name does not exist.

What is the port used by DNS?

DNS uses both TCP and UDP port 53. However, the most frequently used port for DNS is UDP 53. That is used when the client’s computer communicates with the DNS server for resolving the specific domain name. Be sure, when using the UDP 53 for DNS, the maximum size of the query packet is 512 bytes.

TCP 53 is used primarily for Zone Transfers and when the query packet exceeds 512 bytes. That is true when DNSSEC is used, which adds extra overhead to the DNS query packet.

What is DNS failure?

DNS failure means that the DNS server cannot convert the domain name into an IP address in a TCP/IP network. That failure may occur within the company’s private network or the internet.

Backup And Restore Database MySQL All Schema Data Routine Trigger Specific Database

It is necessary to make a backup of the database before reinstalling the server or just in case something unexpected happens. We can actually do backups through Phpmyadmin by exporting all databases. But what if we haven’t installed Phpmyadmin on the Server?

How to Backup All Databases

1. Backup Schema and Data

mysqldump -u username -p --all-databases > backup.sql
or
mysqldump -u username -p -A > backup.sql

2. Backup only the Schemas

mysqldump -u username -p --all-databases --no-data > backup_schema.sql
or
mysqldump -u username -p -A -d > backup_schema.sql

3. Backup by Remote Server

mysqldump -u root -h 128.168.1.1 -p -A > backup.sql

4. Backup Routines

mysqldump -u username -p db_name --routines > backup_routinetrigger.sql
or
mysqldump -u username -p db_name -R > backup_routinetrigger.sql

5. Backup Routines and Triggers

mysqldump -u username -p db_name --routines --triggers > backup_routinetrigger.sql

6. Backup Specific Database

mysqldump -u username -p --database db_name > backup_db_name.sql
or
mysqldump -u username -p db_name > backup_db_name.sql

7. Backup Specific Table in Specific Database

mysqldump -u username -p --database db_name table_name > backup_db_name_table_name.sql
or
mysqldump -u username -p db_name table_name > backup_db_name_table_name.sql

How To Restore Database

8. Restore all Databases

mysql -u username -p < backup.sql

9. Restore one database

mysql -u username -p db_name < backup_db_name.sql

10. Manual command line for mysql

man mysqldump
man mysql

11. References

https://dev.mysql.com/doc/refman/8.0/en/mysql.html

https://dev.mysql.com/doc/refman/8.0/en/mysqldump.html

Install PostgreSQL 14 and Remote on Ubuntu – Easy Install

Install PostgreSQL 14

1. Update Ubuntu and get PostgreSQL requirements

sudo apt update
wget --quiet -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc | sudo apt-key add -
echo "deb http://apt.postgresql.org/pub/repos/apt/ $(lsb_release -cs)-pgdg main" | sudo tee /etc/apt/sources.list.d/postgresql-pgdg.list > /dev/null

sudo apt update

2. Get PostgreSQL 14 installed on your Ubuntu system

sudo apt install postgresql-14

3. PostgreSQL’s default port (5432) should not be held hostage by any other system process.

sudo ss -atnp | grep 5432

4. Next, restart, enable PostgreSQL so that it keeps running even after your Ubuntu system reboots, and check on the status of PostgreSQL to make sure it is running.

sudo systemctl restart postgresql
sudo systemctl enable postgresql
sudo systemctl status postgresql 

5. Connecting to PostgreSQL 14 Database in Ubuntu

sudo -u postgres psql

6. For example, to create a PostgreSQL admin superuser that has all the database user privileges, we would execute the following query.

CREATE ROLE <username> WITH LOGIN SUPERUSER CREATEDB CREATEROLE PASSWORD  '<password>';

<username> : any usernames , <password> : any passwords

7. To confirm the existence of the PostgreSQL superuser, execute the following command.

\du

8. To exit PostgreSQL shell, run the command

exit;

Remote Configuration PostgreSQL 14

1. Edit the configuration file to allow remote access

vi /etc/postgresql/14/main/postgresql.conf

Look for this line in the file:

listen_addresses = 'localhost'

Uncomment, and change the value to '*', this will allow Postgres connections from anyone.

listen_addresses = '*'

2. Save and exit the file. Next, modify pg_hba.conf to also allow connections from everyone. Open the file with your preferred editor:

vi /etc/postgresql/14/main/pg_hba.conf

Modify this section:

# IPv4 local connections:
host    all             all             127.0.0.1/32            scram-sha-256

To this:

# IPv4 local connections:
host    all             all             0.0.0.0/0            scram-sha-256

3. Allow PostgreSQL port from Firewall

sudo ufw allow 5432/tcp

4. Restart PostgreSQL

sudo systemctl restart postgresql

Cannot sudo apt update failed to update UBUNTU

1. Edit netplan File

sudo vi /etc/netplan50-cloud-init.yaml

2. Add Nameserver Google / Cloudflare or any, on nameserver

network:
    ethernets:
        [network-device]:
            ...
            nameservers:
                addresses:
                - 2001:4860:4860::8888
                - 2001:4860:4860::8844
                - 8.8.8.8
                - 8.8.4.4
                - 1.1.1.1

notes: don’t use tab on this file, only space allowed.

3. Apply and Test the Network

sudo netplan apply
systemd-resolve --status

PuTTY Fatal Error – No Supported Authentication methods available (server sent: publickey)

I already tried the ways to fix this by restart the Pageant, remove the key, re add the key, redownload the key, restart my PC and still this issue come up! After one centuries, I found the solution of this issue.

If you experienced this exhibit: PuTTY Fatal Error; when accessing the server. You may try to download the the latest PuTTY itself and update your PuTTY in this URL: https://www.chiark.greenend.org.uk/~sgtatham/putty/latest.html then your problem will be fixed.

The project you were looking for could not be found or you don’t have permission to view it. | GITLAB VSCode


This article helps me to fix git push to gitlab. It’s been a long time i didn’t to commit to gitlab 😀
remote: The project you were looking for could not be found or you don't have permission to view it. fatal: repository 'https://gitlab.com/josuamarcelc/myproject.git/' not found

git remote set-url origin https://{your_gitlab_username}@gitlab.com/{repo_owner_gitlab_username}/project_repo.git


1. Check Your Remote Origin by

 git remote -v

Result

origin  https://gitlab.com/josuamarcelc/myproject.git (fetch)
origin  https://gitlab.com/josuamarcelc/myproject.git (push)

2. Delete and Add another remote origin

git remote set-url --delete origin https://gitlab.com/josuamarcelc/myproject.git
git remote set-url --add origin https://josuamarcelc@gitlab.com/josuamarcelc/myproject.git

3. Or Shortcut set-url origin

git remote set-url origin https://josuamarcelc@gitlab.com/josuamarcelc/myproject.git

Reference: https://gitlab.com/gitlab-org/gitlab-foss/-/issues/35440

SHOW FULL PROCESSLIST in PostgreSQL


MySQL has show full processlist; to see a list of currently running queries.

PostgreSQL has a similar shell like select * from pg_stat_activity;

1. Simple Command

select * from pg_stat_activity;

2. Second Option

SELECT user, pid, client_addr, query, query_start, NOW() - query_start AS elapsed
FROM pg_stat_activity
WHERE query != '<IDLE>'
-- AND EXTRACT(EPOCH FROM (NOW() - query_start)) > 1
ORDER BY elapsed DESC;

3. Third Option

SELECT pid, age(clock_timestamp(), query_start), usename, query 
FROM pg_stat_activity
WHERE query != '<IDLE>' AND query NOT ILIKE '%pg_stat_activity%'
ORDER BY query_start desc;

4. Finding Long Processing Time / Stuck Queries

SELECT pid, now() - pg_stat_activity.query_start AS duration, query, state
FROM pg_stat_activity
WHERE (now() - pg_stat_activity.query_start) > interval '5 minutes';

5. Cancelling Long Running Queries

SELECT pg_cancel_backend(pid);

6. Kill Process ID / Terminate Stuck Queries

SELECT pg_terminate_backend(pid);

Reference: SHOW FULL PROCESSLIST in PostgreSQL

iptables Command Insert and Delete an IP

Result of DROP is Connection Refused

Iptables is a firewall, installed by default on all official Ubuntu distributions (Ubuntu, Kubuntu, Xubuntu). When you install Ubuntu, iptables is there, but it allows all traffic by default. Ubuntu comes with ufw – a program for managing the iptables firewall easily.

  • Reject Specific IP in iptables
    • sudo iptables -I INPUT -s 111.111.111.111 -j DROP
  • Show IP List in iptables
    • iptables -L INPUT --line-numbers
Chain INPUT (policy ACCEPT)
num             target        prot        opt          source          destination
1               DROP          all         --           111.111.111.111 anywhere
  • Delete IP on IP List in iptables
    • iptables -D INPUT 1
  • Flushing the List in iptables
    • sudo iptables -F -t nat -v
Flushing chain PREROUTING'
Flushing chain INPUT'
Flushing chain OUTPUT'
Flushing chain POSTROUTING'

Exit mobile version