andrewthenerd

a nerd enjoying life

professional -> software development

Software Development

Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.

Python

As part of my professional career I have never used Python, but everyone under 30 that I talk to seems to only ever seems to use it, so I am going to take the journey of discovery.

This section of my website will start off with setting up the development environment and starting to learn how to code. Eventually I will get on to some projects I want to explore too.

C Coding

Simple File Set Up

/*
Write a program that takes two numeric arguments
and displays their sum.
*/

#include <stdio.h>
#include <stdlib.h> //needed for exit()

void main(int argc, char *argv[]) {

  if (argc != 3) exit(1);
    printf("The sum of the two arguments (%s, %s) is %d\n", argv[1], argv[2], (atoi(argv[1]) + atoi(argv[2])));
}

Server Set-Up

Adding a new website to the server. In these examples we are going to set up a website called website.com

Add a directory

sudo mkdir -p /var/www/html/website.com
sudo chown -R $USER:$USER /var/www/html/website.com
sudo chmod -R 755 /var/www/html
sudo vi /var/www/html/website.com/index.html

Temporary Home Page

Lets create a blank index.html page for the website.

sudo vi /var/www/html/website.com/index.html

You just need some simple details for the site for now, so the contents of the html file will be:

<html>
  <head>
    <title>website.com</title>
  </head>
  <body>
    <h1>Welcome to website.com</h1>
  </body>
</html>

Virtual Host File

This tells apache how to deal with requests for a website, and where to redirect it on the server.

First of all we need to copy the default file, and open it up for editing.

sudo cp /etc/apache2/sites-available/000-default.conf /etc/apache2/sites-available/website.com.conf
sudo vi /etc/apache2/sites-available/website.com.conf

Below is the typical contents of this file (ignoring the commented out sections that are present), and the details added, in red.

<VirtualHost *:80>

  ServerAdmin webmaster@localhost
  DocumentRoot /var/www/html/website.com
  ServerName website.com
  ServerAlias www.website.com
  ErrorLog ${APACHE_LOG_DIR}/error.log
  CustomLog ${APACHE_LOG_DIR}/access.log combined

</VirtualHost>

Enable the Virtual Host

Once all of the .conf files have been set up for each of the websites the a2ensite needs to be enabled for each site. Plus the default .conf file needs to be disabled before relaoding the server.

sudo a2ensite website.com.conf
sudo a2dissite 000-default.conf

Now you can restart the server

sudo systemctl restart apache2

DNS Records

An A record with website.com pointing to your server’s public IP address.

An A record with www.website.com pointing to your server’s public IP address.

Website Certification

Install certbot

~ sudo apt install certbot python3-certbot-apache

Virtual Host Configuration Validation

~ sudo nano /etc/apache2/sites-available/website.com.conf

HTTPS via Firewall

Need to check what traffic is allowed to the site

~ sudo ufw status

Note: the ufw might conflict with server service provider security settings. So in that case you will want to deactivate the ufw.

~ sudo systemctl stop ufw
~ sudo ufw status
Status: inactive

SSL Certificate Generation

~ sudo certbot --apache

Certbot Auto-Renewal Verification

~ sudo systemctl status certbot.timer

To test what will happen on a certificate renewal you can process a dry run.

~ sudo certbot renew --dry-run

The output from this will look something similar to:

Saving debug log to /var/log/letsencrypt/letsencrypt.log
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Processing /etc/letsencrypt/renewal/website.com.conf
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Simulating renewal of an existing certificate for website.com and 1 more domain
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Congratulations, all simulated renewals succeeded:
  /etc/letsencrypt/live/2fatokens.com/fullchain.pem (success)
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

PHP

Installation of php

~ sudo apt update
~ sudo apt install --no-install-recommends php8.1

The --no-install-recommends just means that php8.1 is installed and no other packages that it may try to install, such as apache.

Testing php

To make sure that php is installed, and view the version just type:

~ php -v

The resulting output will look like:

PHP 8.1.2-1ubuntu2.19 (cli) (built: Sep 30 2024 16:25:25) (NTS)
Copyright (c) The PHP Group
Zend Engine v4.1.2, Copyright (c) Zend Technologies
    with Zend OPcache v8.1.2-1ubuntu2.19, Copyright (c), by Zend Technologies

php modules

To see what modules are installed, so you can determine which ones you may need, type the following:

~ php -m

The output will look something like this:

[PHP Modules]
bcmath
calendar
...
zip
zlibrary

Depending on what type of php code is to be executed additional modules might need to be installed

The full list of modules that can be installed on php can be found at https://www.php.net/manual/en/extensions.alphabetical.php

To install a module use the module name, for example mysql, in the following way:

~ sudo apt-get install -y php8.1-mysql

FTP Host

Installation of ftp

Adding a user

Setting up a client