Wednesday, January 18, 2023

Lumen Back-end , Angularjs, Vuejs front-end AWS deployment instructions

https://www.digitalocean.com/community/tutorials/how-to-install-linux-apache-mysql-php-lamp-stack-on-ubuntu-20-04


sudo apt update
sudo apt install apache2

--------no need to do this----------
sudo ufw status
sudo ufw app list

sudo ufw allow 'Apache Full'
press 'y' and enter continue'

sudo ufw enable
-------------------------------
check: http://server ip

-------------------------------------------

install mysql

    $ sudo apt install mysql-server

switch its authentication method from auth_socket to mysql_native_password

        sudo mysql
        SELECT user,authentication_string,plugin,host FROM mysql.user;


         ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'fabrica@mysupply';
        FLUSH PRIVILEGES;
        TEST
        SELECT user,authentication_string,plugin,host FROM mysql.user;
        exit

 
    $ sudo mysql_secure_installation

--VALIDATE PASSWORD PLUGIN.-NO
REST- YES
---------------------------------------------------

Install PHP8.1

---------------------------------------------------------------------------------------------------

Add PPA for PHP 8.1
    sudo apt install software-properties-common

    sudo add-apt-repository ppa:ondrej/php

    sudo apt-get update

    sudo apt install php8.1

    sudo apt install php8.1-common php8.1-mysql php8.1-xml php8.1-xmlrpc php8.1-curl php8.1-gd php8.1-imagick php8.1-cli php8.1-dev php8.1-imap php8.1-mbstring php8.1-opcache php8.1-soap php8.1-zip php8.1-intl -y
    
    
    
    ----------------------------------------------------------------------------------------------
INSTALL MONGODB in ubuntu 20, php8.1

https://www.mongodb.com/docs/manual/tutorial/install-mongodb-on-ubuntu/?_ga=2.242670018.1950484347.1673427386-451534989.1673427383

sudo apt remove mongodb-org*
sudo apt autoremove mongodb-org*
sudo apt purge mongodb-org*



wget -qO - https://www.mongodb.org/static/pgp/server-6.0.asc | sudo apt-key add -
echo "deb [ arch=amd64,arm64 ] https://repo.mongodb.org/apt/ubuntu focal/mongodb-org/6.0 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-6.0.list
sudo apt-get update
sudo apt-get install -y mongodb-org
sudo systemctl start mongod
sudo systemctl daemon-reload
sudo systemctl status mongod



sudo apt-get install php8.1-mongodb

how to work with mongodb

sudo systemctl start mongod
mongosh
show databases;
use testing_api
db.dropDatabase()
//db.logs.remove({});//deprecated
show collections


-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------



cd /etc/apache2/sites-available

Step 2 — Modify the new api.domain.work.conf file

    -
<VirtualHost *:80>
ServerName api.domain.work
ServerAdmin admin@domain.work
DocumentRoot /var/www/html/api/public
<Directory /var/www/html/api>
AllowOverride All
</Directory>
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
RewriteEngine on
RewriteCond %{SERVER_NAME} =api.domain.work
RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [END,NE,R=permanent]
</VirtualHost>


--------------------------
<VirtualHost *:80>
ServerName domain.work
ServerAdmin admin@domain.work
DocumentRoot /var/www/html/user
<Directory /var/www/html/user>
AllowOverride All
</Directory>
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
RewriteEngine on
RewriteCond %{SERVER_NAME} =domain.work
RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [END,NE,R=permanent]
</VirtualHost>
-------------------------------------------------------------------------------------
<VirtualHost *:80>
ServerName dashboard.domain.com
ServerAdmin admin@domain.com
DocumentRoot /var/www/html/dashboard.domain.com
<Directory /var/www/html/dashboard.domain.com>
AllowOverride All
</Directory>
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
RewriteEngine on
RewriteCond %{SERVER_NAME} =dashboard.domain.com
RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [END,NE,R=permanent]
</VirtualHost>
---------------------------------------------------------------------------------------
set up domain name in godaddy
set up ssl using certbot:

$ sudo snap install --classic certbot


$ sudo certbot --apache -d domain.solutions -d www.domain.solutions
dashboard.medicalfactory.org
$ sudo certbot --apache -d supplier.domain.org -d supplier.domain.org
$ systemctl  restart apache2
mongo
sudo a2ensite api.domain.com.conf
sudo apachectl configtest
-------------------------------------------------------
-to enable the site
        sudo a2ensite <directoryname>
    -to test for syntax errors
        sudo apachectl configtest
-syntax ok

    -restart apache services
        sudo systemctl restart apache2
---------------------------------------------------------------------
install swap space

https://www.digitalocean.com/community/tutorials/how-to-add-swap-space-on-ubuntu-20-04#step-6-tuning-your-swap-settings



sudo swapon --show
free -h
df -h
sudo fallocate -l 4G /swapfile
sudo chmod 600 /swapfile
ls -lh /swapfile
sudo mkswap /swapfile
sudo swapon /swapfile
sudo swapon --show
free -h
sudo cp /etc/fstab /etc/fstab.bak
sudo nano /etc/fstab
echo '/swapfile none swap sw 0 0' | sudo tee -a /etc/fstab
cat /proc/sys/vm/swappiness
sudo sysctl vm.swappiness=10
sudo nano/etc/sysctl.conf
at the bottom add vm.swappiness=10
vm.vfs_cache_pressure=50

sudo sysctl vm.vfs_cache_pressure=50
cat /proc/sys/vm/vfs_cache_pressure





-------------------------------------------------------------------------

download tar.gz newapi backend files from gitlab
take backup of humhum.work storage and DB and upload to server
copy .env file
install composer ---https://getcomposer.org/download/
Steps to install a composer:

1. sudo apt install wget php-cli php-zip unzip
2. php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');"
    1. php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');"
    2. HASH="$(wget -q -O - https://composer.github.io/installer.sig)"
    3. php -r "if (hash_file('SHA384', 'composer-setup.php') === '$HASH') { echo 'Installer verified'; } else { echo 'Installer corrupt'; unlink('composer-setup.php'); } echo PHP_EOL;"
Out put: Installer verified
    4. sudo php composer-setup.php --install-dir=/usr/local/bin --filename=composer
Out put: All settings correct for using Composer
Downloading...
Composer (version 2.0.14) successfully installed to: /usr/local/bin/composer
Use it: php /usr/local/bin/composer


--------------------------------------------------------------------------
sudo api.domain.com

cp .env.prod .env
copy public/.htaccess
copy storage

sudo chmod 777 -R storage
sudo chmod 777 -R storage
sudo ln -s /var/www/html/api.medicalfactory.org/storage/app/public /var/www/html/api.medicalfactory.org/public/storage
sudo ln -s /var/www/html/api.sqdesignz.com/storage/app/public /var/www/html/api.sqdesignz.com/public/storage

sudo chown www-data:www-data -R storage

composer install
----showing php extension errors------

sudo a2enmod php8.1

systemctl restart apache2

$ sudo update-alternatives --set php /usr/bin/php8.1
-----------------------------------------
mysql -u root -p;
fabrica@mysupply
create database api;

/var/www/html/newapi/database/seeders/DatabaseSeeder.php , uncomment all seeders
please comment this line
Permission::truncate();

php artisan migrate --seed
---------------------------------------------------------------------------------
sudo nano public/.htaccess


cron job automation documentation

----------------------------------------------------------------------------------------
Front end: supplier portal angularjs

# Build Instructions (node version 16)

sudo rm -rf node
sudo npm install

- change `src/environments/environment.prod.ts`
  ```json
  {
    "baseURL": "https://{{api_domain}}/api/v1/",
    "baseStorage": "https://{{api_domain}}/storage/",
    "baseHREF": "{{base for front domain}}"
  }
 
"ng build -c production --prod --base-href https://supplier.domain.work"
ng build -c production --configuration production --base-href https://supplier.domain.com
ng build -c production --configuration production --base-href https://supplier.domain.com
ng build -c production --configuration production --base-href https://supplier.domain.org
run `npm run build {{base_href for front domain}}`
- upload `dist` folder content to server
--------------------------------------------------
copy to server
sudo nano .htaccess
<IfModule mod_rewrite.c>
        RewriteEngine On

        # -- REDIRECTION to https (optional):
        # If you need this, uncomment the next two commands
        # RewriteCond %{HTTPS} !on
        # RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI}
        # --

        RewriteCond %{DOCUMENT_ROOT}%{REQUEST_URI} -f [OR]
        RewriteCond %{DOCUMENT_ROOT}%{REQUEST_URI} -d

        RewriteRule ^.*$ - [NC,L]
        RewriteRule ^(.*) index.html [NC,L]
</IfModule>

-------------------------------------------------------------
Front end: admin portal angularjs

# Build Instructions (node version 16)

sudo rm -rf node
sudo npm install

- change `src/environments/environment.prod.ts`
  ```json
  {
    "baseURL": "https://{{api_domain}}/api/v1/",
    "baseStorage": "https://{{api_domain}}/storage/",
    "baseHREF": "{{base for front domain}}"
  }
 
  export const environment = {
  production: true,
  baseURL: 'https://api.domain.com/api/v1/',
  // baseURL: 'https://domain.work/newapi/public/api/v1/',
  baseStorage: 'https://api.domain.com/storage/',
  baseHREF: '/humhum/',
  firebase: {
    apiKey: 'AIzaSyBvDfgkv2VnrIMbrT9oJYgtlL6XGthURdY',
    projectId: 'humhum-d8850',
    messagingSenderId: '569896873041',
    appId: '1:569896873041:web:9551d54e2e7056fcacdc70',
    vapidKey:
      'BCg19OadFV9lZNChEu1nhKI9zW2HRqiVls8U_4UVQyRLz5rVf3-2qzUSBWdTB7U0nqa-O7lho69FM8VdRsQW970',
  },
  defaultPerPage: 20,
};

 
"ng build -c production --prod --base-href https://supplier.domain.work"
ng build -c production --configuration production --base-href https://dashboard.domain.com
ng build -c production --configuration production --base-href https://dashboard.domain.org
run `npm run build {{base_href for front domain}}`
- upload `dist` folder content to server
---------------------------------------------------------------------------------------------------------------
Front end: admin portal vuejs

# Build Instructions (node version 16)

sudo rm -rf node_modules/
sudo npm install
npm run build

- change .env
-find and remove humhum-user/
  --------------------------------------------------


copy to server
sudo nano .htaccess
<IfModule mod_rewrite.c>
        RewriteEngine On

        # -- REDIRECTION to https (optional):
        # If you need this, uncomment the next two commands
        # RewriteCond %{HTTPS} !on
        # RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI}
        # --

        RewriteCond %{DOCUMENT_ROOT}%{REQUEST_URI} -f [OR]
        RewriteCond %{DOCUMENT_ROOT}%{REQUEST_URI} -d

        RewriteRule ^.*$ - [NC,L]
        RewriteRule ^(.*) index.html [NC,L]
</IfModule>
-------------------------------------------------------------
Solution for all npm ERR! code EINTEGRITY errors 🙏

$ cd <project_directory>
$ rm -rf package-lock.json npm-shrinkwrap.json node_modules
$ npm cache clean --force
$ npm cache verify
$ npm install
---------------------------------------------------------------

FIXING MYSQL ISSUES:

show columns from tokens;
show column_name from table_name;

Admin login , tokens table error:
ALTER TABLE tokens MODIFY client_id bigint UNSIGNED;
ALTER TABLE tokens MODIFY user_id bigint UNSIGNED;



Admin login , after login popup error:
SET GLOBAL sql_mode=(SELECT REPLACE(@@sql_mode,'ONLY_FULL_GROUP_BY',''));

-------------------------------------------------------------------------

git pull then run
php artisan migrate:fresh --seed
then
php artisan permission:cache-reset


------------------------------------------------------------------------------



Monday, January 16, 2023

AWS Instance to reserved insance

 

The way to get to Reserved billing is counterintuitive.

Basically, you have to pretend that you’re buying a new instance, of the Reserved type, with the exact same attributes of the one you want to convert. Upon making the purchase you will have converted the other one.

 


 

Basically, you have to pretend that you’re buying a new instance, of the Reserved type, with the exact same attributes of the one you want to convert. Upon making the purchase you will have converted the other one.

It’s gross, but it works.

  1. Navigate to https://console.aws.amazon.com/ec2/v2/home.
  2. Click on Reserved Instances.
  3. Select an instance that matches the one you want to replace the billing on, for both instance type/size and instance availability zone. For example, mine was T2.Medium and US-East-1a.
  4. Make the purchase.

So what then happens is that Amazon finds your running On Demand instance and converts it to a Reserved instance. And now if you go into billing you should see that reflected.

And more importantly, if you go into your instances dashboard you’ll just see the same ones you had before. You haven’t actually purchased a new box; you’ve just converted the one that matched those specs from On Demand to Reserved.

For anyone running a box in EC2 that isn’t likely to change in size or location over one to three years, I highly recommend you check out Reserved Instances. They could save you a massive amount of money, just like it did for me.

 

References:

https://danielmiessler.com/blog/saved-ec2-bill-5-minutes-switching-reserved-instance/