add previous collections
All checks were successful
continuous-integration/drone/push Build is passing
All checks were successful
continuous-integration/drone/push Build is passing
This commit is contained in:
parent
a94840a584
commit
c1fc9d0d23
@ -0,0 +1,19 @@
|
||||
---
|
||||
updatedAt: 2022-11-26T02:30:08.184Z
|
||||
layout: post
|
||||
title: SharpeTronics LLC Becomes Official
|
||||
subheading: Winding Roads
|
||||
slug: sharpe-tronics-llc-becomes-official
|
||||
date: 2022-05-23
|
||||
author: Charles
|
||||
author_image: /uploads/c_avatar_30ba895a14.webp
|
||||
banner_image: /uploads/pillars_face_art_973bf824dd.webp
|
||||
banner_image_description: A pillar with a head holding up the ceiling.
|
||||
category: Company
|
||||
tags: Contribute, Technology,
|
||||
---
|
||||
We as in SharpeTronics LLC are proud to announce our business is official with the mountain state of West Virginia on March 17, 2021.
|
||||
|
||||
We also have our very own mailbox provided by the beloved Postmaster.
|
||||
|
||||
Furthermore, we now have pillars in place to begin building and creating avenues to bee of service with our community. It has been a long road to this point and we have many more to travel.
|
@ -0,0 +1,27 @@
|
||||
---
|
||||
updatedAt: 2022-10-11T22:16:18.403Z
|
||||
layout: post
|
||||
title: Welcome To An Appalachian Technology Company
|
||||
subheading: Where light travels at high altitudes.
|
||||
slug: welcome-to-an-appalachian-technology-company
|
||||
date: 2022-05-23
|
||||
author: Charles
|
||||
author_image: /uploads/c_avatar_30ba895a14.webp
|
||||
banner_image: /uploads/wv_seneca_rocks_sky_0d5928baa9.webp
|
||||
banner_image_description: An image of the night sky in West Virginia.
|
||||
category: Company
|
||||
tags: Celebration, Linux, Open Source, Technology,
|
||||
---
|
||||
Welcome to SharpeTronics, where light travels at high altitudes. We are a mountain made company in the Appalachians of West Virginia that strives with software and hardware technologies. We are statewide leaders in our area of expertise and invite you to support local business.
|
||||
|
||||
Our mission is to enable a modern web architecture that empowers the user and enables accessibility for both beginners and experts. We are a technology business that challenges the status quo of web development and shares technical knowledge for both local and remote stations.
|
||||
|
||||
Our commitment to you is quality satisfaction, affordable and lightweight performance for worldwide availability with no strings attached.
|
||||
|
||||
We provide solutions that create resilient, secure and portable online infrastructure built to last the future, while enabling straight-forward seamless integration's for happy developers and editors alike.
|
||||
|
||||
We say NO to the complex insecurities and inaccessible culture created around hefty JavaScript frameworks like Angular, React or heavy database integration's like WordPress or Joomla. These structures create more resistance than needed and end up crafting solutions that are complicated, costly and unfriendly.
|
||||
|
||||
Our web stack delivers headless content management, worldwide availability, resiliency, accessibility and scalability, while maintaining simplicity, affordability and lightning performance. We remove unneeded barriers and strengthen connections between the user and developer.
|
||||
|
||||
Some keywords that are associated with our software stack include: JAMstack, progressive web apps (PWA), content management systems (CMS), ecommerce, newsletters and static websites. If you are eager to learn, get in touch or join our team, please contact us via email. We are available 5 days a week Monday - Friday.
|
@ -0,0 +1,49 @@
|
||||
---
|
||||
updatedAt: 2022-10-11T22:12:00.118Z
|
||||
layout: post
|
||||
title: Big Startups Without Big Tech
|
||||
subheading: Liquid Democracy Empowering Network Users
|
||||
slug: big-startups-without-big-tech
|
||||
date: 2022-05-24
|
||||
author: Charles
|
||||
author_image: /uploads/c_avatar_30ba895a14.webp
|
||||
banner_image: /uploads/decentralized_385bd5a376.webp
|
||||
banner_image_description: Transparent cubes and a high tech lighting backdrop
|
||||
category: How-to
|
||||
tags: Blockchain,
|
||||
---
|
||||
Welcome to the Blockchain Internet called DFINITY. In my spare time, I have been tinkering and learning **Motoko**. It is a language built for the Internet Computer (IC) that can be used to interface applications, websites and other various software.
|
||||
|
||||
Motoko is a programming typed language that compiles into WebAssembly (WA) and is created by **Andreas Rossberg** & the **Dfinity Foundation**
|
||||
|
||||
> "To offer a seamless developer experience, we wanted to create a specialized programming language, called Motoko, that is designed to directly support the programming model of the Internet Computer, making it easier to efficiently build applications and take advantage of some of the more unusual features of this platform." -Andreas Rossberg
|
||||
|
||||
|
||||
To begin development of the open decentralized Internet called Dfinity, I needed to install the Software Developer Kit (SDK).
|
||||
I ran into a few challenges initially with using the **"dfx"** command after installing. I needed to setup my PATH and let **.bashrc** know where the program dfx is installed.
|
||||
Knowing how to do this is important and enables more flow with development. Normally, these things are done by default when installing the program, but in unique scenarios, the installed location of that application may not be added to your .bashrc or profile.
|
||||
|
||||
|
||||
### Let's begin,
|
||||
|
||||
0. Open up Linux terminal
|
||||
1. `nano ~/.bashrc`
|
||||
2. Scroll down to end of page and type the following code to add "dfx" command to your profile or .bashrc.
|
||||
3. Rerun the updated .bashrc or .profile script via . ~/.bashrc, then test *"dfx --version"* again.
|
||||
```
|
||||
# DFINITY MOTOKO
|
||||
export PATH=$HOME/bin:$PATH.
|
||||
```
|
||||

|
||||
|
||||
What we have enabled here is the command **"dfx --version"** to work without having to type the entire path to execute the dfx program.
|
||||
As an example, without setting up our PATH, we would type the full path of where the program is located in the terminal; this would be **"/home/username/bin/dfx --version"** to run the program each time we need it.
|
||||
|
||||
*If for some reason your dfx installed in a different location, all you need to do is run "which dfx" and it will provide the installed location of that program.*
|
||||
|
||||
I hope this quick tutorial aided in your Linux administration talents. I will begin sharing short tutorials like this. It will enable my own glossary of experience and also aid in other curious programmers and Linux users seeking answers. 🖖
|
||||
|
||||
#### Sources:
|
||||
* Internet Computer Genesis Launch Event - <https://youtu.be/xiupEw4MfxY> - Premiered May 7, 2021
|
||||
* The Dfinity Foundation - <https://dfinity.org/>
|
||||
* Adding a Path to the Linux PATH variable - <https://www.baeldung.com/linux/path-variable> - May 13th, 2021
|
@ -0,0 +1,143 @@
|
||||
---
|
||||
updatedAt: 2022-10-11T22:35:18.838Z
|
||||
layout: post
|
||||
title: Configure a Static Qt5 from Source on Ubuntu 18.04 with X11 Support
|
||||
subheading: Compiling & Configuring Qt from Source
|
||||
slug: configure-a-static-qt5-from-source-on-ubuntu-18-04-with-x11-support
|
||||
date: 2022-05-24
|
||||
author: Charles
|
||||
author_image: /uploads/c_avatar_30ba895a14.webp
|
||||
banner_image: /uploads/quantum_qt5_41fa19c935.webp
|
||||
banner_image_description: A golden circuit board.
|
||||
category: Devops
|
||||
tags: Linux, Qt5, ARM64, Raspberry Pi 400, X11,
|
||||
---
|
||||
### Configure, Build, Install & Setup Qt 5.15.2 Source on Ubuntu 18.04 with X11 Support
|
||||
|
||||
This tutorial will teach you how to compile from source via CLI (command-line interface) and enable customization for building Qt5 apps on different operating systems andor hardware architectures like RPI400.
|
||||
|
||||
When compiling Qt5 yourself, you are empowered with a configuration that is constant throughout the Linux Universe. This process is also very similar with compiling Qt apps on your (AArch64) ARM64 devices like RPi 400, Rock64 & PineBook64.
|
||||
|
||||
*Note: This tutorial doesn't include json Qtwebengine*
|
||||
|
||||
### What is Qt?
|
||||
"Qt is a cross-platform application development framework for desktop, embedded and mobile." [Qt Wiki]
|
||||
|
||||
### What is a Static Qt?
|
||||
In general, a static Qt option includes libraries locally. This aids in having an application run on different versions of Linux distros. When the application is compiled, we check the app with *ldd yourapp* to list what the binary is dependent on to run. Essentially, the Qt libraries are included in the binary. Decovar.dev has a great explanation on advantages and disadvantages of building a static Qt. [At last, let's build Qt statically]
|
||||
|
||||
### Let's Begin!
|
||||
|
||||
#### Remove & purge all Qt packages
|
||||
```
|
||||
sudo apt -y remove qt5* libqt5* qtcreator && sudo autoremove
|
||||
```
|
||||
|
||||
#### Download Qt 5.15.2 Source to qt5-sources folder
|
||||
```
|
||||
mkdir qt5-sources && cd qt5-sources && mkdir build-shadow
|
||||
|
||||
wget https://download.qt.io/official_releases/qt/5.15/5.15.2/single/qt-everywhere-src-5.15.2.tar.xz
|
||||
```
|
||||
|
||||
##### Verify MD5 hash
|
||||
```
|
||||
md5sum qt-everywhere-src-5.15.2.tar.xz
|
||||
```
|
||||
```
|
||||
e1447db4f06c841d8947f0a6ce83a7b5 qt-everywhere-src-5.15.2.tar.xz
|
||||
```
|
||||
|
||||
##### Un-tar Qt5 archive
|
||||
```
|
||||
tar xf qt-everywhere-src-5.15.2.tar.xz
|
||||
```
|
||||
|
||||
##### Move into build-shadow directory to configure your Qt 5.15.2
|
||||
```
|
||||
cd build-shadow
|
||||
```
|
||||
|
||||
#### Install Qt5 Minimal Dependencies
|
||||
```
|
||||
sudo apt update
|
||||
|
||||
sudo apt install build-essential libfontconfig1-dev libdbus-1-dev libfreetype6-dev libicu-dev libinput-dev libxkbcommon-dev libsqlite3-dev libssl-dev libpng-dev libjpeg-dev libglib2.0-dev
|
||||
```
|
||||
|
||||
##### (Optional) Install VC4 Drivers for RPi 4 type devices (i.e. cortex-a53 & cortex-a72)
|
||||
```
|
||||
sudo apt install libgles2-mesa-dev libgbm-dev libdrm-dev
|
||||
```
|
||||
#### (Optional) Install X11 Support Dependencies
|
||||
```
|
||||
sudo apt install libx11-dev libxcb1-dev libxext-dev libxi-dev libxcomposite-dev libxcursor-dev libxtst-dev libxrandr-dev libfontconfig1-dev libfreetype6-dev libx11-xcb-dev libxext-dev libxfixes-dev libxi-dev libxrender-dev libxcb1-dev libxcb-glx0-dev libxcb-keysyms1-dev libxcb-image0-dev libxcb-shm0-dev libxcb-icccm4-dev libxcb-sync-dev libxcb-xfixes0-dev libxcb-shape0-dev libxcb-randr0-dev libxcb-render-util0-dev libxcb-util0-dev libxcb-xinerama0-dev libxcb-xkb-dev libxkbcommon-dev libxkbcommon-x11-dev
|
||||
```
|
||||
|
||||
#### Configure Qt 5.15.2
|
||||
```
|
||||
../qt-everywhere-src-5.15.2/configure -static -release -openssl-linked -opensource -confirm-license -qt-zlib -qt-libpng -bundled-xcb-xinput \
|
||||
-skip qtlocation -skip qtmacextras -skip qtpurchasing -skip qtscript -skip qtsensors -skip qtserialbus -skip qtserialport -skip qtspeech -skip qtdatavis3d -skip qtdoc -skip qtcharts -skip qtdeclarative -skip qt3d -skip qtwebengine -skip qtandroidextras -skip qtwebview -skip qtgamepad -skip qtquickcontrols -skip qtquickcontrols2 -skip qtremoteobjects -skip qtwebview -skip qtwebchannel -skip qtwebglplugin \
|
||||
-nomake examples -nomake tests -feature-fontconfig -no-feature-getentropy -v
|
||||
```
|
||||
|
||||
*If you would like to see a full list of options, we can do **../qt-everywhere-src-5.15.2/configure -h**
|
||||
|
||||
##### Make the configuration *(-j 4 is number of cpus you want to use)*
|
||||
```
|
||||
make -j 4
|
||||
```
|
||||
|
||||
##### Install Qt5 into: *(default) /usr/local/*
|
||||
```
|
||||
sudo make install
|
||||
```
|
||||
*Note: Check and make sure ./configure has required deps; if you installed the deps, but still receiving errors, remove config.cache and ./configure again.*
|
||||
|
||||
**Tip:** *If you want to view your configuration summary, you may do so via nano config.summary from build-shadow directory*
|
||||
|
||||
#### Update profile to know where Qt5.15.2 bins are
|
||||
```
|
||||
nano ~/.bashrc
|
||||
```
|
||||
|
||||
##### Add this at the bottom of your .bashrc file.
|
||||
```
|
||||
# set PATH for Qt 5.15.2
|
||||
export PATH="/usr/local/Qt-5.15.2/bin:$PATH"
|
||||
```
|
||||
|
||||
##### Reload your ~/.bashrc file & create new shell window.
|
||||
```
|
||||
source ~/.bashrc
|
||||
CTRL+SHIFT+T
|
||||
ALT+1
|
||||
exit
|
||||
```
|
||||
##### Verify Qt 5.15.2 has been installed
|
||||
```
|
||||
qmake --version
|
||||
```
|
||||
|
||||
```
|
||||
QMake version 3.1
|
||||
Using Qt version 5.15.2 in /usr/local/Qt-5.15.2/lib
|
||||
```
|
||||
#### Build your happy Qt5 app
|
||||
|
||||
```
|
||||
./build.sh
|
||||
```
|
||||
#### Support & Questions
|
||||
[sharpetronics.github](https://github.com/SharpeTronics/sharpetronics.github.io/issues)
|
||||
|
||||

|
||||
|
||||
#### References
|
||||
[tal.org/rpi](https://www.tal.org/tutorials/building-qt-515-raspberry-pi)
|
||||
|
||||
[doc.qt.io/qtmodules](https://doc.qt.io/qt-5/qtmodules.html)
|
||||
|
||||
[wiki.qt.io/about](https://wiki.qt.io/About_Qt)
|
||||
|
||||
[why-build-qt-statically](https://decovar.dev/blog/2018/02/17/build-qt-statically/#why-build-qt-statically)
|
179
collections/_posts/2022-05-24-linux-vps-hardening.md
Normal file
179
collections/_posts/2022-05-24-linux-vps-hardening.md
Normal file
@ -0,0 +1,179 @@
|
||||
---
|
||||
updatedAt: 2022-10-11T22:10:34.668Z
|
||||
layout: post
|
||||
title: Linux VPS Hardening
|
||||
subheading: Initializing a secure environment
|
||||
slug: linux-vps-hardening
|
||||
date: 2022-05-24
|
||||
author: Charles
|
||||
author_image: /uploads/c_avatar_30ba895a14.webp
|
||||
banner_image: /uploads/linux_admin_0def8999f2.webp
|
||||
banner_image_description: The back of a black hoodie hacking at software
|
||||
category: Devops
|
||||
tags: Linux, VPS, SSL, Security,
|
||||
---
|
||||
### Planting Seeds
|
||||
|
||||
Administration of a virtual private Linux server (VPS) without a GUI cpanel is the only way to go. Going through any graphical user interface (GUI) to run critical services for your company is like playing the telephone game. Securing our environment begins at the terminal & from terminal experience we create a deeper learning experience for ourselves and build confidence along the way.
|
||||
|
||||
This article will extrapolate on initializing a Ubuntu Linux VPS for the first time and how we secure our environment through the terminal. No Windows or MacOS pancakes here; only Linux.
|
||||
|
||||
When beginning a new server or garden, the soil is most important; we create an environment to protect and maximize growth potential. The VPS provider may give you an OS they installed, but I always create a fresh install myself.
|
||||
|
||||
### Logging in via SSH
|
||||
|
||||
##### Creating RSA Public Key
|
||||
Before you are able to login with SSH, you will most likely have to generate and add a RSA public key.
|
||||
|
||||
`ssh-keygen -t rsa -b 4096`
|
||||
|
||||
##### Copy / Paste Public Key
|
||||
After key is generated, we display the public key and add it to VPS account. *Optionally, you may have to add the key with ssh-copy-id user@ip_address.*
|
||||
|
||||
`cat ~/.ssh/id_rsa.pub`
|
||||
|
||||
```
|
||||
ssh-rsa AAAEXAMPLECAQDBn0Z88lqrtya0Nd7yYtP/1o90vwVxjvCm/txb+SW85JRRnrI616d2iWwtVCSiUX0s59FfIPxUJl6vPqmxY40DIrX9KZijVpaq/TzWXh2ktCTjT6uBNMBRz/2lxP3w2AZov65dygjW5eQT9K9YB13dr1B4RkQMmUW5xiFbdHM0WzBYM2CMtE+lnmebn7m+B3DcvNkuGdT9Qw1/J24dTuNJSzJXVxzTOTlnVKOVSp1NWzu0USFI6dkrz8YImSgP9hQX970zTnzQ1Ctei4xlR/IiCpVGG6zWeV4oT3sLf4E9mk9eYF/wU0AdA3mQ68yZvv+Bhlc75e9kmUFe+JbctKR4YaKGY6K6K/F1tHrKYkASEkfQQ0KJU/ez/wtSf21A6Z2bM/Gg28f/6owfIMPWnYuB9VOLqkdIHFUot40uMi9CBvkdwH69zAQfz4jFvmu588klE0usBclGAFs78KM6YWaXHYjHdWVRIUrAqdZw1IP0uYS3uSBUPsbBG/Aq0V+22dg8U5DSu5XmwLB5jT+3c4ScqH3kY5tomRLe+2Dx4K+mAHpgtf10xL6Ayx2y0GFZCf+LB1Va3Trk3ChcaKRF5KvyayFQNSY4AfA47B90asdv== user@hostname
|
||||
```
|
||||
|
||||
##### SSH into VPS
|
||||
Next, we login to our VPS and specify -i what key to use. The -i is only needed if you have more than one key. The -v displays verbose or details of what the command is doing in the terminal.
|
||||
|
||||
`ssh -i ~/.ssh/id_rsa root@123.123.123.123`
|
||||
|
||||
Success! Now, we are able to update and upgrade our packages.
|
||||
|
||||
### Prepping Linux Environment
|
||||
|
||||
##### Update Sources & Packages
|
||||
`apt-get update && apt-get upgrade`
|
||||
|
||||
##### Disable Ubuntu Sudo Timeout
|
||||
In Ubuntu, sudo has a timeout built in for ease of use. I personally remove this timeout; without knowing you are using sudo will create all kinds of headaches in the future. When you make use of root privileges, we must explicitly type sudo each command.
|
||||
|
||||
`sudo visudo`
|
||||
|
||||
add `Defaults env_reset, timestamp_timeout=00`
|
||||
|
||||
### Setting Up The Firewall
|
||||
After we have logged in via SSH for root user account. I recommend installing a powerful firewall called: **ufw**
|
||||
|
||||
`apt-get install ufw`
|
||||
|
||||
`ufw status`
|
||||
|
||||
`ufw allow ssh`
|
||||
|
||||
Display the status of the firewall and determine if ssh has been allowed. If nomenclature *ssh* doesn't add the ports, we do this manually with ufw allow 22/udp & ufw all 22/tcp. Port 22 is the common port SSH server makes use of; we are able to change this port for extra hardening, but for the sake of this tutorial, we will use port 22.
|
||||
`ufw status`
|
||||
|
||||
```
|
||||
To Action From
|
||||
-- ------ ----
|
||||
22/tcp ALLOW Anywhere
|
||||
22/udp ALLOW Anywhere
|
||||
```
|
||||
|
||||
Now, we enable the firewall **after** we allow port 22. The SSH connection should remain open. If it closes, SSH back into your VPS.
|
||||
`ufw enable`
|
||||
|
||||
##### Check If Port Is Open
|
||||
Once telnet is ran, ssh information should populate
|
||||
`telnet 123.123.123.123 22`
|
||||
|
||||
```
|
||||
Trying 123.123.123.123...
|
||||
Connected to 123.123.123.123.
|
||||
Escape character is '^]'.
|
||||
SSH-X.0-OpenSSH_X.2p1 Ubuntu-Xubuntu0.2
|
||||
|
||||
Invalid SSH identification string.
|
||||
Connection closed by foreign host.
|
||||
```
|
||||
|
||||
### Creating New Users & Permissions
|
||||
|
||||
To further expand on the garden, we must define a secure space for each plant or service we are running. To manage each service, like dns, mail, gitea, etc... we create a new user for each of these environments. This separation is important for operational security (OPSEC).
|
||||
|
||||
`adduser username` *Note: If we want to use Dockerfile or auto script without prompts, we make use of the **useradd** command.*
|
||||
|
||||
```
|
||||
Adding user `username' ...
|
||||
Adding new group `username' (1003) ...
|
||||
Adding new user `username' (1002) with group `username' ...
|
||||
Creating home directory `/home/username' ...
|
||||
Copying files from `/etc/skel' ...
|
||||
New password:
|
||||
```
|
||||
|
||||
Next, if the user should have sudo permission, we do the following.
|
||||
|
||||
`usermod -a -G sudo username`
|
||||
|
||||
##### Prove User was Created
|
||||
|
||||
`cat /etc/passwd`
|
||||
|
||||
```
|
||||
...
|
||||
username:x:1001:1002:User Name,,,:/home/username:/bin/bash
|
||||
...
|
||||
```
|
||||
|
||||
##### Logging In with New Username
|
||||
|
||||
`su username`
|
||||
|
||||
##### Update SSH Config
|
||||
`sudo nano /etc/ssh/sshd_config`
|
||||
|
||||
Add sudo to the **AllowGroups** like so:
|
||||
|
||||
`AllowGroups wheel root sudo`
|
||||
|
||||
Next, we disable root login since we will only have root privileges when using sudo.
|
||||
|
||||
`PermitRootLogin no`
|
||||
|
||||
##### SSH Directory Creation For New Username
|
||||
Creating new user access to SSH login.
|
||||
When you connect to new username@ip, the vps user needs the public key for verification of authorized user. Authorized users with correct **private key** will be able to login to vps via ssh protocol.
|
||||
|
||||
`mkdir ~/.ssh`
|
||||
|
||||
`nano ~/.ssh/authorized_keys`
|
||||
|
||||
Paste your public key we created earlier into the authorized_keys file.
|
||||
|
||||
##### Update file & folder permissions
|
||||
|
||||
`chmod 700 ~/.ssh`
|
||||
|
||||
`chmod 600 ~/.ssh/authorized_keys`
|
||||
|
||||
##### Restart SSH service
|
||||
|
||||
`sudo service ssh restart`
|
||||
|
||||
`exit`
|
||||
|
||||
In conclusion, we are now able to login via SSH with new user and have also disabled root user logins.
|
||||
This process will have to be done for each user that is created.
|
||||
|
||||
### Backups with Rsync Superpowers!
|
||||
|
||||
After all our hard work and focus, we should backup our VPS and create scheduled routines. Depending on your use case, I would recommend at least weekly backups.
|
||||
|
||||
The following command is quite complex, but, essentially we are discarding folders we don't need, backing up the entire VPS to our local machine and preserving all permissions and file integrity from the VPS.
|
||||
|
||||
- rsync - A fast, versatile, local and remote file-copying utility
|
||||
- -aAXv - The files are transferred in "archive" mode, which ensures that symbolic links, devices, permissions, ownerships, modification times, ACLs, and extended attributes are preserved.
|
||||
- / - Source directory
|
||||
- --exclude - Excludes the given directories from backup.
|
||||
|
||||
```
|
||||
sudo rsync -aAXv --rsh="ssh -i /home/user/.ssh/id_rsa" --recursive --progress --exclude={"/dev/*","/proc/*","/sys/*","/tmp/*","/run/*","/mnt/*","/media/*","/lost+found","/backups/*"} user@123.123.123.123:/ /home/user/VPS/Backups/
|
||||
```
|
||||
|
||||
#### Sources:
|
||||
* Full System Backup Using Rsync - <https://wiki.archlinux.org/title/Rsync#Full_system_backup>
|
106
collections/_posts/2022-05-24-our-privacy-policy.md
Normal file
106
collections/_posts/2022-05-24-our-privacy-policy.md
Normal file
@ -0,0 +1,106 @@
|
||||
---
|
||||
updatedAt: 2022-11-26T02:30:34.202Z
|
||||
layout: post
|
||||
title: Our Privacy Policy
|
||||
subheading: Your data is always yours.
|
||||
slug: our-privacy-policy
|
||||
date: 2022-05-24
|
||||
author: Charles
|
||||
author_image: /uploads/c_avatar_30ba895a14.webp
|
||||
banner_image: /uploads/terms_48bec2a697.webp
|
||||
banner_image_description: an image gradient of blue and white.
|
||||
category: Legal
|
||||
tags: Privacy,
|
||||
---
|
||||
<h2>Privacy Policy for SharpeTronics.com, LLC</h2>
|
||||
|
||||
<p>At SharpeTronics, accessible from https://www.sharpetronics.com, one of our main priorities is the privacy of our visitors. This Privacy Policy document contains types of information that is collected and recorded by SharpeTronics and how we use it.</p>
|
||||
|
||||
<p>If you have additional questions or require more information about our Privacy Policy, do not hesitate to contact us.</p>
|
||||
|
||||
<p>This Privacy Policy applies only to our online activities and is valid for visitors to our website with regards to the information that they shared and/or collect in SharpeTronics. This policy is not applicable to any information collected offline or via channels other than this website. </p>
|
||||
|
||||
<h3>Consent</h3>
|
||||
|
||||
<p>By using our website, you hereby consent to our Privacy Policy and agree to its terms.</p>
|
||||
|
||||
<h3>Information we collect</h3>
|
||||
|
||||
<p>The personal information that you are asked to provide, and the reasons why you are asked to provide it, will be made clear to you at the point we ask you to provide your personal information.</p>
|
||||
<p>If you contact us directly, we may receive additional information about you such as your name, email address, phone number, the contents of the message and/or attachments you may send us, and any other information you may choose to provide.</p>
|
||||
<p>When you register for an Account, we may ask for your contact information, including items such as name, company name, address, email address, and telephone number.</p>
|
||||
|
||||
<h3>How we use your information</h3>
|
||||
|
||||
<p>We use the information we collect in various ways, including to:</p>
|
||||
|
||||
<ul>
|
||||
<li>Provide, operate, and maintain our webste</li>
|
||||
<li>Improve, personalize, and expand our webste</li>
|
||||
<li>Understand and analyze how you use our webste</li>
|
||||
<li>Develop new products, services, features, and functionality</li>
|
||||
<li>Communicate with you, either directly or through one of our partners, including for customer service, to provide you with updates and other information relating to the webste, and for marketing and promotional purposes</li>
|
||||
<li>Send you emails</li>
|
||||
<li>Find and prevent fraud</li>
|
||||
</ul>
|
||||
|
||||
<h3>Log Files</h3>
|
||||
|
||||
<p>SharpeTronics follows a standard procedure of using log files. These files log visitors when they visit websites. All hosting companies do this and a part of hosting services' analytics. The information collected by log files include internet protocol (IP) addresses, browser type, Internet Service Provider (ISP), date and time stamp, referring/exit pages, and possibly the number of clicks. These are not linked to any information that is personally identifiable. The purpose of the information is for analyzing trends, administering the site, tracking users' movement on the website, and gathering demographic information.</p>
|
||||
|
||||
<h3>Cookies and Web Beacons</h3>
|
||||
|
||||
<p>Like any other website, SharpeTronics uses 'cookies'. These cookies are used to store information including visitors' preferences, and the pages on the website that the visitor accessed or visited. The information is used to optimize the users' experience by customizing our web page content based on visitors' browser type and/or other information.</p>
|
||||
|
||||
<p>For more general information on cookies, please read <a href="https://www.cookieconsent.com/what-are-cookies/">"What Are Cookies" from Cookie Consent</a>.</p>
|
||||
|
||||
|
||||
<h3>Our Advertising Partners</h3>
|
||||
|
||||
<p>Some of advertisers on our site may use cookies and web beacons. Our advertising partners are listed below. Each of our advertising partners has their own Privacy Policy for their policies on user data. For easier access, we hyperlinked to their Privacy Policies below.</p>
|
||||
|
||||
<ul>
|
||||
<li>
|
||||
<p>Google</p>
|
||||
<p><a href="https://policies.google.com/technologies/ads">https://policies.google.com/technologies/ads</a></p>
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
<h3>Advertising Partners Privacy Policies</h3>
|
||||
|
||||
<P>You may consult this list to find the Privacy Policy for each of the advertising partners of SharpeTronics.</p>
|
||||
|
||||
<p>Third-party ad servers or ad networks uses technologies like cookies, JavaScript, or Web Beacons that are used in their respective advertisements and links that appear on SharpeTronics, which are sent directly to users' browser. They automatically receive your IP address when this occurs. These technologies are used to measure the effectiveness of their advertising campaigns and/or to personalize the advertising content that you see on websites that you visit.</p>
|
||||
|
||||
<p>Note that SharpeTronics has no access to or control over these cookies that are used by third-party advertisers.</p>
|
||||
|
||||
<h3>Third Party Privacy Policies</h3>
|
||||
|
||||
<p>SharpeTronics's Privacy Policy does not apply to other advertisers or websites. Thus, we are advising you to consult the respective Privacy Policies of these third-party ad servers for more detailed information. It may include their practices and instructions about how to opt-out of certain options. </p>
|
||||
|
||||
<p>You can choose to disable cookies through your individual browser options. To know more detailed information about cookie management with specific web browsers, it can be found at the browsers' respective websites.</p>
|
||||
|
||||
<h3>CCPA Privacy Rights (Do Not Sell My Personal Information)</h3>
|
||||
|
||||
<p>Under the CCPA, among other rights, California consumers have the right to:</p>
|
||||
<p>Request that a business that collects a consumer's personal data disclose the categories and specific pieces of personal data that a business has collected about consumers.</p>
|
||||
<p>Request that a business delete any personal data about the consumer that a business has collected.</p>
|
||||
<p>Request that a business that sells a consumer's personal data, not sell the consumer's personal data.</p>
|
||||
<p>If you make a request, we have one month to respond to you. If you would like to exercise any of these rights, please contact us.</p>
|
||||
|
||||
<h3>GDPR Data Protection Rights</h3>
|
||||
|
||||
<p>We would like to make sure you are fully aware of all of your data protection rights. Every user is entitled to the following:</p>
|
||||
<p>The right to access – You have the right to request copies of your personal data. We may charge you a small fee for this service.</p>
|
||||
<p>The right to rectification – You have the right to request that we correct any information you believe is inaccurate. You also have the right to request that we complete the information you believe is incomplete.</p>
|
||||
<p>The right to erasure – You have the right to request that we erase your personal data, under certain conditions.</p>
|
||||
<p>The right to restrict processing – You have the right to request that we restrict the processing of your personal data, under certain conditions.</p>
|
||||
<p>The right to object to processing – You have the right to object to our processing of your personal data, under certain conditions.</p>
|
||||
<p>The right to data portability – You have the right to request that we transfer the data that we have collected to another organization, or directly to you, under certain conditions.</p>
|
||||
<p>If you make a request, we have one month to respond to you. If you would like to exercise any of these rights, please contact us.</p>
|
||||
|
||||
<h3>Children's Information</h3>
|
||||
|
||||
<p>Another part of our priority is adding protection for children while using the internet. We encourage parents and guardians to observe, participate in, and/or monitor and guide their online activity.</p>
|
||||
|
||||
<p>SharpeTronics does not knowingly collect any Personal Identifiable Information from children under the age of 13. If you think that your child provided this kind of information on our website, we strongly encourage you to contact us immediately and we will do our best efforts to promptly remove such information from our records.</p>
|
137
collections/_posts/2022-05-24-our-terms-and-conditions.md
Normal file
137
collections/_posts/2022-05-24-our-terms-and-conditions.md
Normal file
@ -0,0 +1,137 @@
|
||||
---
|
||||
updatedAt: 2022-10-11T22:20:58.472Z
|
||||
layout: post
|
||||
title: Our Terms & Conditions
|
||||
subheading: Our rules and regulations.
|
||||
slug: our-terms-and-conditions
|
||||
date: 2022-05-24
|
||||
author: Charles
|
||||
author_image: /uploads/c_avatar_30ba895a14.webp
|
||||
banner_image: /uploads/terms_48bec2a697.webp
|
||||
banner_image_description: an image gradient of blue and white.
|
||||
category: Legal
|
||||
tags: Terms & Conditions,
|
||||
---
|
||||
<h2><strong>Terms and Conditions</strong></h2>
|
||||
|
||||
<p>Welcome to SharpeTronics!</p>
|
||||
|
||||
<p>These terms and conditions outline the rules and regulations for the use of SharpeTronics's Website, located at https://www.sharpetronics.com.</p>
|
||||
|
||||
<p>By accessing this website we assume you accept these terms and conditions. Do not continue to use SharpeTronics if you do not agree to take all of the terms and conditions stated on this page.</p>
|
||||
|
||||
<p>The following terminology applies to these Terms and Conditions, Privacy Statement and Disclaimer Notice and all Agreements: "Client", "You" and "Your" refers to you, the person log on this website and compliant to the Company’s terms and conditions. "The Company", "Ourselves", "We", "Our" and "Us", refers to our Company. "Party", "Parties", or "Us", refers to both the Client and ourselves. All terms refer to the offer, acceptance and consideration of payment necessary to undertake the process of our assistance to the Client in the most appropriate manner for the express purpose of meeting the Client’s needs in respect of provision of the Company’s stated services, in accordance with and subject to, prevailing law of Netherlands. Any use of the above terminology or other words in the singular, plural, capitalization and/or he/she or they, are taken as interchangeable and therefore as referring to same.</p>
|
||||
|
||||
<h3><strong>Cookies</strong></h3>
|
||||
|
||||
<p>We employ the use of cookies. By accessing SharpeTronics, you agreed to use cookies in agreement with the SharpeTronics's Privacy Policy. </p>
|
||||
|
||||
<p>Most interactive websites use cookies to let us retrieve the user’s details for each visit. Cookies are used by our website to enable the functionality of certain areas to make it easier for people visiting our website. Some of our affiliate/advertising partners may also use cookies.</p>
|
||||
|
||||
<h3><strong>License</strong></h3>
|
||||
|
||||
<p>Unless otherwise stated, SharpeTronics and/or its licensors own the intellectual property rights for all material on SharpeTronics. All intellectual property rights are reserved. You may access this from SharpeTronics for your own personal use subjected to restrictions set in these terms and conditions.</p>
|
||||
|
||||
<p>You must not:</p>
|
||||
<ul>
|
||||
<li>Republish material from SharpeTronics</li>
|
||||
<li>Sell, rent or sub-license material from SharpeTronics</li>
|
||||
<li>Reproduce, duplicate or copy material from SharpeTronics</li>
|
||||
<li>Redistribute content from SharpeTronics</li>
|
||||
</ul>
|
||||
|
||||
<p>This Agreement shall begin on the date hereof.</p>
|
||||
|
||||
<p>Parts of this website offer an opportunity for users to post and exchange opinions and information in certain areas of the website. SharpeTronics does not filter, edit, publish or review Comments prior to their presence on the website. Comments do not reflect the views and opinions of SharpeTronics,its agents and/or affiliates. Comments reflect the views and opinions of the person who post their views and opinions. To the extent permitted by applicable laws, SharpeTronics shall not be liable for the Comments or for any liability, damages or expenses caused and/or suffered as a result of any use of and/or posting of and/or appearance of the Comments on this website.</p>
|
||||
|
||||
<p>SharpeTronics reserves the right to monitor all Comments and to remove any Comments which can be considered inappropriate, offensive or causes breach of these Terms and Conditions.</p>
|
||||
|
||||
<p>You warrant and represent that:</p>
|
||||
|
||||
<ul>
|
||||
<li>You are entitled to post the Comments on our website and have all necessary licenses and consents to do so;</li>
|
||||
<li>The Comments do not invade any intellectual property right, including without limitation copyright, patent or trademark of any third party;</li>
|
||||
<li>The Comments do not contain any defamatory, libelous, offensive, indecent or otherwise unlawful material which is an invasion of privacy</li>
|
||||
<li>The Comments will not be used to solicit or promote business or custom or present commercial activities or unlawful activity.</li>
|
||||
</ul>
|
||||
|
||||
<p>You hereby grant SharpeTronics a non-exclusive license to use, reproduce, edit and authorize others to use, reproduce and edit any of your Comments in any and all forms, formats or media.</p>
|
||||
|
||||
<h3><strong>Hyperlinking to our Content</strong></h3>
|
||||
|
||||
<p>The following organizations may link to our Website without prior written approval:</p>
|
||||
|
||||
<ul>
|
||||
<li>Government agencies;</li>
|
||||
<li>Search engines;</li>
|
||||
<li>News organizations;</li>
|
||||
<li>Online directory distributors may link to our Website in the same manner as they hyperlink to the Websites of other listed businesses; and</li>
|
||||
<li>System wide Accredited Businesses except soliciting non-profit organizations, charity shopping malls, and charity fundraising groups which may not hyperlink to our Web site.</li>
|
||||
</ul>
|
||||
|
||||
<p>These organizations may link to our home page, to publications or to other Website information so long as the link: (a) is not in any way deceptive; (b) does not falsely imply sponsorship, endorsement or approval of the linking party and its products and/or services; and (c) fits within the context of the linking party’s site.</p>
|
||||
|
||||
<p>We may consider and approve other link requests from the following types of organizations:</p>
|
||||
|
||||
<ul>
|
||||
<li>commonly-known consumer and/or business information sources;</li>
|
||||
<li>dot.com community sites;</li>
|
||||
<li>associations or other groups representing charities;</li>
|
||||
<li>online directory distributors;</li>
|
||||
<li>internet portals;</li>
|
||||
<li>accounting, law and consulting firms; and</li>
|
||||
<li>educational institutions and trade associations.</li>
|
||||
</ul>
|
||||
|
||||
<p>We will approve link requests from these organizations if we decide that: (a) the link would not make us look unfavorably to ourselves or to our accredited businesses; (b) the organization does not have any negative records with us; (c) the benefit to us from the visibility of the hyperlink compensates the absence of SharpeTronics; and (d) the link is in the context of general resource information.</p>
|
||||
|
||||
<p>These organizations may link to our home page so long as the link: (a) is not in any way deceptive; (b) does not falsely imply sponsorship, endorsement or approval of the linking party and its products or services; and (c) fits within the context of the linking party’s site.</p>
|
||||
|
||||
<p>If you are one of the organizations listed in paragraph 2 above and are interested in linking to our website, you must inform us by sending an e-mail to SharpeTronics. Please include your name, your organization name, contact information as well as the URL of your site, a list of any URLs from which you intend to link to our Website, and a list of the URLs on our site to which you would like to link. Wait 2-3 weeks for a response.</p>
|
||||
|
||||
<p>Approved organizations may hyperlink to our Website as follows:</p>
|
||||
|
||||
<ul>
|
||||
<li>By use of our corporate name; or</li>
|
||||
<li>By use of the uniform resource locator being linked to; or</li>
|
||||
<li>By use of any other description of our Website being linked to that makes sense within the context and format of content on the linking party’s site.</li>
|
||||
</ul>
|
||||
|
||||
<p>No use of SharpeTronics's logo or other artwork will be allowed for linking absent a trademark license agreement.</p>
|
||||
|
||||
<h3><strong>iFrames</strong></h3>
|
||||
|
||||
<p>Without prior approval and written permission, you may not create frames around our Webpages that alter in any way the visual presentation or appearance of our Website.</p>
|
||||
|
||||
<h3><strong>Content Liability</strong></h3>
|
||||
|
||||
<p>We shall not be hold responsible for any content that appears on your Website. You agree to protect and defend us against all claims that is rising on your Website. No link(s) should appear on any Website that may be interpreted as libelous, obscene or criminal, or which infringes, otherwise violates, or advocates the infringement or other violation of, any third party rights.</p>
|
||||
|
||||
<h3><strong>Your Privacy</strong></h3>
|
||||
|
||||
<p>Please read Privacy Policy</p>
|
||||
|
||||
<h3><strong>Reservation of Rights</strong></h3>
|
||||
|
||||
<p>We reserve the right to request that you remove all links or any particular link to our Website. You approve to immediately remove all links to our Website upon request. We also reserve the right to amen these terms and conditions and it’s linking policy at any time. By continuously linking to our Website, you agree to be bound to and follow these linking terms and conditions.</p>
|
||||
|
||||
<h3><strong>Removal of links from our website</strong></h3>
|
||||
|
||||
<p>If you find any link on our Website that is offensive for any reason, you are free to contact and inform us any moment. We will consider requests to remove links but we are not obligated to or so or to respond to you directly.</p>
|
||||
|
||||
<p>We do not ensure that the information on this website is correct, we do not warrant its completeness or accuracy; nor do we promise to ensure that the website remains available or that the material on the website is kept up to date.</p>
|
||||
|
||||
<h3><strong>Disclaimer</strong></h3>
|
||||
|
||||
<p>To the maximum extent permitted by applicable law, we exclude all representations, warranties and conditions relating to our website and the use of this website. Nothing in this disclaimer will:</p>
|
||||
|
||||
<ul>
|
||||
<li>limit or exclude our or your liability for death or personal injury;</li>
|
||||
<li>limit or exclude our or your liability for fraud or fraudulent misrepresentation;</li>
|
||||
<li>limit any of our or your liabilities in any way that is not permitted under applicable law; or</li>
|
||||
<li>exclude any of our or your liabilities that may not be excluded under applicable law.</li>
|
||||
</ul>
|
||||
|
||||
<p>The limitations and prohibitions of liability set in this Section and elsewhere in this disclaimer: (a) are subject to the preceding paragraph; and (b) govern all liabilities arising under the disclaimer, including liabilities arising in contract, in tort and for breach of statutory duty.</p>
|
||||
|
||||
<p>As long as the website and the information and services on the website are provided free of charge, we will not be liable for any loss or damage of any nature.</p>
|
@ -0,0 +1,202 @@
|
||||
---
|
||||
updatedAt: 2022-10-11T22:07:37.794Z
|
||||
layout: post
|
||||
title: Setup a Secure NGINX HTTPS Web Server with Let's Encrypt + Strapi 4.0 Headless CMS
|
||||
subheading: Static Websites with CMS
|
||||
slug: setup-a-secure-nginx-https-web-server-with-let-s-encrypt-strapi-4-0-headless-cms
|
||||
date: 2022-05-24
|
||||
author: Charles
|
||||
author_image: /uploads/c_avatar_30ba895a14.webp
|
||||
banner_image: /uploads/santa_rudolph_unsplash_0ae8e3d5a7.webp
|
||||
banner_image_description: Two feet wearing socks beside each other with faces of Santa Clause and another of Rudolph
|
||||
category: How-to
|
||||
tags: Nginx, Strapi, SSL, Headless CMS, JAMstack,
|
||||
---
|
||||
## General
|
||||
For this tutorial, we will launch a secure SSL NGINX web server for your website domain example.org and enable an API to be consumed from the subdomain i.e. api.example.org with Strapi 4.0.
|
||||
|
||||
*Tip:* For each reference, I add the **[reference name]** in brackets at the end of the "transmission." **[AWK example]**
|
||||
|
||||
## Requirements:
|
||||
- a Ubuntu Linux 20.04 VPS with SSH access
|
||||
- CLI knowledge
|
||||
- a registered web domain i.e. example.org
|
||||
- Basic knowledge of DNS and managing a VPS with SSH
|
||||
|
||||
## Dependencies & Packages
|
||||
- NodeJS v12 or v14 (v14 is recommended for Strapi 4.0)
|
||||
- Npm v6+ & Yarn (Yarn is optional)
|
||||
- Certbot with Let's Encrypt
|
||||
- Nano editor
|
||||
|
||||
## Prepare Operating System
|
||||
Let's Begin! We begin by installing nginx, certbot and verifying versions Strapi needs. Keep in mind, if you are reading this from the future, the versions will change.
|
||||
|
||||
### Update System
|
||||
|
||||
```sudo apt update```
|
||||
|
||||
### Install Nginx Certbot Packages
|
||||
|
||||
```sudo apt install certbot python3-certbot-nginx```
|
||||
|
||||
### Install NGINX & verify version
|
||||
|
||||
```sudo apt install nginx```
|
||||
|
||||
```node -v && nginx -v```
|
||||
|
||||
**Tip:** Strapi recommends nodejs v14, but v12 works.
|
||||
|
||||
### Install Yarn (Corepack)
|
||||
```npm i -g corepack``` **[Install Yarn]**
|
||||
|
||||
## Configure NGINX
|
||||
Next, we will configure your newly installed Nginx server. By default the configurations are located at: /etc/nginx/ & /etc/nginx/sites-available/. To keep things tidy and organized, we create a new api.example.org conf for each domain we are publicly facing to WWW.
|
||||
|
||||
### Make Directory & Copy Default HTML page
|
||||
|
||||
```sudo mkdir -p /var/www/api.example.org/html/```
|
||||
|
||||
```sudo cp -R /var/www/html/index.nginx-debian.html /var/www/api.example.org/html/index.html```
|
||||
|
||||
### Duplicate Default Config
|
||||
|
||||
```sudo cp /etc/nginx/sites-available/default /etc/nginx/sites-available/api.example.org```
|
||||
|
||||
### Update NGINX api.example.org Config File
|
||||
|
||||
The **Proxy Config** is important and allows the Strapi 4.0 server to run with nginx. In general, the rest allows SSL and redirects all HTTP traffic to HTTPS, plus denies automated user-agents like wget.
|
||||
```
|
||||
server {
|
||||
# Redirect all HTTP requests to HTTPS
|
||||
listen 80;
|
||||
server_name _;
|
||||
return 301 https://$host$request_uri;
|
||||
|
||||
# Deny Automated User-Agents
|
||||
if ($http_user_agent ~* (netcrawl|npbot|malicious|LWP::Simple|BBBike|wget)) {
|
||||
return 403;
|
||||
}
|
||||
}
|
||||
|
||||
server {
|
||||
# Listen HTTPS
|
||||
listen 443 ssl http2; # managed by Certbot
|
||||
listen [::]:443 ssl http2;
|
||||
server_name api.example.org www.api.example.org;
|
||||
|
||||
# sites document root
|
||||
root /var/www/api.example.org/html;
|
||||
index index.html index.htm;
|
||||
|
||||
# SSL Config
|
||||
ssl_certificate /etc/letsencrypt/live/api.example.org/fullchain.pem; # managed by Certbot
|
||||
ssl_certificate_key /etc/letsencrypt/live/api.example.org/privkey.pem; # managed by Certbot
|
||||
include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot
|
||||
ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot
|
||||
|
||||
# Proxy Config
|
||||
location / {
|
||||
proxy_pass http://strapi;
|
||||
proxy_http_version 1.1;
|
||||
proxy_set_header X-Forwarded-Host $host;
|
||||
proxy_set_header X-Forwarded-Server $host;
|
||||
proxy_set_header X-Real-IP $remote_addr;
|
||||
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
|
||||
proxy_set_header X-Forwarded-Proto $scheme;
|
||||
proxy_set_header Host $http_host;
|
||||
proxy_set_header Upgrade $http_upgrade;
|
||||
proxy_set_header Connection "Upgrade";
|
||||
proxy_pass_request_headers on;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
```
|
||||
``` CTRL+X, then Y for Yes to save```
|
||||
|
||||
### Symbolic Link to sites-enabled
|
||||
This creates a 'mirror' like reference to the sites-available folder.
|
||||
|
||||
```sudo ln -s /etc/nginx/sites-available/api.exampleorg /etc/nginx/sites-enabled/```
|
||||
|
||||
#### Verify Symbolic Link
|
||||
```ls /etc/nginx/sites-enabled/```
|
||||
|
||||
## DNS Configuration
|
||||
We now point our domain to the server we are hosting our Strapi on. i.e. 123.123.1.1
|
||||
|
||||
### Update DNS Settings
|
||||
Depending on your DNS provider or maybe you have your own Domain Name Server, we point our DNS settings for example.org to 123.123.1.1 as type A. I personally recommend Cloudflare.
|
||||
|
||||
## Create SSL Certs
|
||||
We run the automated tool Certbot and create all the needed files and update our *api.example.org* configuration file.
|
||||
|
||||
### Run Certbot
|
||||
```sudo certbot --nginx```
|
||||
|
||||
```Choose api.example.org for the site to create certs. for.```
|
||||
|
||||
```Choose option 1 to disable auto redirect HTTP traffic to HTTPS since we already redirected the traffic manually.```
|
||||
|
||||
**Note** sudo certbot renew --dry-run will test for automatic renewal for your certs. [Certbot Insturctions]
|
||||
|
||||
### Verify api.example.org Updated with Correct Domain
|
||||
|
||||
```sudo nano /etc/nginx/sites-enabled/api.example.org```
|
||||
|
||||
### Test Config & Restart Nginx
|
||||
|
||||
```sudo nginx -t```
|
||||
|
||||
```sudo systemctl restart nginx```
|
||||
|
||||
## Firewall Configuration
|
||||
Allow public to connect via HTTPS, we need to open up ports 80 & 443 (HTTP & HTTPS).
|
||||
|
||||
### Allow UFW Ports for Public Traffic
|
||||
```sudo ufw allow HTTPS```
|
||||
|
||||
```sudo ufw allow HTTP```
|
||||
|
||||
### Verify Status & Reload UFW
|
||||
```sudo ufw status```
|
||||
|
||||
```sudo ufw reload```
|
||||
|
||||
**Tip** sudo ufw allow 'Nginx Full' opens both port 80 & 443 (For SSL / TLS encryption).
|
||||
|
||||
## Getting Started with Strapi
|
||||
Now, we must install Strapi 4.0 on the server and launch the Strapi server.
|
||||
|
||||
### Strapi Default Installation
|
||||
Goto desired place to install Strapi project i.e. ~/development/my-strapi-project, then,
|
||||
|
||||
```yarn create strapi-app my-project```
|
||||
|
||||
**Note:** The default Strapi installation uses SQLite as the database. You are able to use other databases like PostgreSQL. See **[Strapi Installation]** for more details.
|
||||
|
||||
### Launch Strapi Development Server
|
||||
|
||||
```yarn develop```
|
||||
|
||||
### Launch Strapi from Domain URL
|
||||
|
||||
```Goto: api.example.com via web browser of your choice.```
|
||||
|
||||
```Follow the instructions and continue creating a new Strapi administrator.```
|
||||
|
||||
#### References:
|
||||
[Nginx Strapi Configuration](https://docs.strapi.io/developer-docs/latest/setup-deployment-guides/deployment/optional-software/nginx-proxy.html#nginx-upstream)
|
||||
|
||||
[Strapi Installation](https://docs.strapi.io/developer-docs/latest/setup-deployment-guides/installation/cli.html#creating-a-strapi-project)
|
||||
|
||||
[Nginx Server Blocks](https://www.digitalocean.com/community/tutorials/how-to-set-up-nginx-server-blocks-virtual-hosts-on-ubuntu-16-04)
|
||||
|
||||
[Install Yarn](https://yarnpkg.com/getting-started/install)
|
||||
|
||||
[Certbot Insturctions](https://certbot.eff.org/instructions?ws=nginx&os=ubuntufocal)
|
||||
|
||||
#### Donations Are Welcome
|
||||
[Cash App](https://cash.app/$sharpeee)
|
@ -0,0 +1,127 @@
|
||||
---
|
||||
updatedAt: 2022-10-11T22:35:01.620Z
|
||||
layout: post
|
||||
title: Compiling Fresh XMPP Ejabberd Server Binaries 22.05 on Ubuntu 20.04 with Erlang OTP 24
|
||||
subheading: Creating and host your own end-to-end encryption Instant Messenger app
|
||||
slug: compiling-fresh-xmpp-ejabberd-server-binaries-22-05-on-ubuntu-20-04-with-erlang-otp-24
|
||||
date: 2022-06-28
|
||||
author: Charles
|
||||
author_image: /uploads/c_avatar_30ba895a14.webp
|
||||
banner_image: /uploads/ejabberd_in_the_jungle_8a9f00e089.webp
|
||||
banner_image_description: A human male swinging above the trees in a jungle.
|
||||
category: Devops
|
||||
tags: Privacy, XMPP, Ejabberd,
|
||||
---
|
||||
# Compiling ejabberd v22.05
|
||||
### A XMPP server based on Erlang/OTP 24
|
||||
|
||||
**Note 1:** I personally took it upon myself to use the following format [Example-Reference] to *tag* references.
|
||||
|
||||
In this article, I will be sharing a *HOWTO* create your own end-to-end encrypted instant messenger(IM) XMPP service for your Company, family xor community. Having ownership of your data requires **work** and this setup allows any Human in the world to protect their digital data from those who sell it for profit.
|
||||
|
||||
> "Ejabberd is a complete open-source XMPP-based messaging solution that is for all human beings, but ideal for governments, police, military, banks, insurance, finance, and healthcare companies that value privacy and security."
|
||||
|
||||
The minimal cost is less than $100 per year and is portable with the *nifty* config option -with-rebar; this option packages the whole app for transport.
|
||||
|
||||
### Configure & compile Ejabberd
|
||||
|
||||
Please see [Ejabberd Configure] for setting up your Linux environment.
|
||||
|
||||
#### Requirements
|
||||
- A remove server that has been hardened [Linux VPS Hardening](https://www.sharpetronics.com/blog/tutorials/2021/07/26/linux-vps-hardening-init/)
|
||||
- Linux CLI knowledge
|
||||
- Patience
|
||||
|
||||
#### Operating System
|
||||
- This article is tested with `cat /etc/os-release` VERSION="20.04.4 LTS (Focal Fossa)"
|
||||
|
||||
#### Dependencies:
|
||||
- GNU Make `make -v`
|
||||
- GCC `sudo apt install build-essential && gcc -v`
|
||||
- Libexpat 1.95 or higher `sudo apt install -y expat && libexpat-dev`
|
||||
- Libyaml 0.1.4 or higher `sudo apt install -y libyaml-dev`
|
||||
- Erlang/OTP 19.3 or higher. We recommend using Erlang OTP 21.2. `sudo apt install -y erlang && erl -v`
|
||||
- OpenSSL 1.0.0 or higher, for STARTTLS, SASL and SSL encryption. `sudo apt install -y libssl-dev`
|
||||
- Zlib 1.2.3 or higher. Optional. For Zlib Stream Compression `sudo apt install -y zlib1g && zlib1g-dev`
|
||||
- ImageMagick’s Convert program and Ghostscript fonts. Optional. For CAPTCHA challenges. `sudo apt install -y imagemagick`
|
||||
|
||||
- PAM library. *Optional*. For PAM Authentication
|
||||
- Elixir 1.10.3 or higher. *Optional*. For Elixir Development
|
||||
|
||||
#### Extras Deps I needed
|
||||
- **PostgreSQL** `sudo apt install -y postgresql postgresql-contrib && sudo systemctl start postgresql.service`
|
||||
- **Erlang-dev** I had too also install erlang-dev for *erl_nif.h* was missing `sudo apt install -y erlang-dev`
|
||||
- **eunit_autoexport** was missing at compile `sudo apt-get install -y erlang-eunit`
|
||||
- **erlang-parsetools** was needed to create and assemble the 22.05.tar.gz. `sudo apt-get install -y erlang-parsetools`
|
||||
|
||||
### Clone Ejabberd 22.05
|
||||
```
|
||||
git clone https://github.com/processone/ejabberd.git && cd ejabberd
|
||||
git checkout tags/22.05 -b branch-name-example && git status
|
||||
```
|
||||
**Note 2-3:** the latest stable release is 22.05 on June 21, 2022. Verify you are on branch-name-example.
|
||||
|
||||
#### We begin compiling and installng **ejabberd** after the environment is ready
|
||||
|
||||
Below, I had to create my **configure** file with *autogen*. The **configure** options I have included are: postgresql database (default: mysql), zlib compression algos (optional), extra dev tools (optional) and rebar for packaging everything into one portable app.(optional) To see more options, please visit: [Ejabberd Configure](https://github.com/processone/ejabberd/blob/22.05/COMPILE.md)
|
||||
|
||||
```
|
||||
./autogen.sh
|
||||
./configure --enable-pgsql --with-rebar=rebar3 --enable-tools --enable-zlib --enable-debug
|
||||
make rel
|
||||
```
|
||||
**Note 4-6:** if you want to clean up the make after errors, use *make distclean* for dev files and clean for binaries. You are also able to see all the options for make via `make help`. Make rel creates a static portable binary release; no need to sudo make install, simply launch the app from the directory.
|
||||
|
||||
### Eureka! :party-hat
|
||||
```
|
||||
===> Release successfully assembled: _build/prod/rel/ejabberd
|
||||
===> Building release tarball ejabberd-22.05.tar.gz...
|
||||
===> Tarball successfully created: _build/prod/rel/ejabberd/ejabberd-22.05.tar.gz
|
||||
```
|
||||
### Prepare Ejabberd Binary
|
||||
|
||||
After we have successfully compiled ejabberd binaries on our own system, we have a system to create fresh binaries that are portable on the fly! Furthermore, we rename the ejabberd folder to ejabberd_builder and copy the created tar.gz to desired location.
|
||||
|
||||
```
|
||||
cd .. && mv ejabberd ejabberd_builder
|
||||
cp _build/prod/rel/ejabberd/ejabberd-22.05.tar.gz ~/nodes/
|
||||
|
||||
```
|
||||
|
||||
### Launch Ejabberd
|
||||
|
||||
Next, we untar or extract the data into the appropriate directory.
|
||||
```
|
||||
cd ~/nodes/ && mkdir ejabberd-20.05
|
||||
tar -xvkf ejabberd-20.05.tar.gz -C ./ejabberd-20.05
|
||||
cd ejabberd-20.05/ && ls bin/
|
||||
./bin/ejabberdctl start
|
||||
./bin/ejabberdctl status
|
||||
```
|
||||
|
||||
> NOW, the hard part... configuration of your fresh ejabberd binaries.
|
||||
|
||||
As you may have noticed, **ejabberdctl** status failed to start. This is because we now have to configure the server.
|
||||
|
||||
##### PART II - TBA
|
||||
|
||||
### References:
|
||||
|
||||
- [Ejabberd Source](https://github.com/processone/ejabberd/blob/22.05/COMPILE.md)
|
||||
- [Ejabberd Compile](https://docs.ejabberd.im/admin/installation/#source-code)
|
||||
- [Ejabberd Features](https://www.ejabberd.im/)
|
||||
- [Ejabberd Configure](https://www.process-one.net/blog/how-to-configure-ejabberd-to-get-100-in-xmpp-compliance-test/)
|
||||
- [Linux VPS Hardening](https://www.sharpetronics.com/blog/tutorials/2021/07/26/linux-vps-hardening-init/)
|
||||
- [OMEMO Extension](https://conversations.im/omemo/)
|
||||
- [XMPP Servers](https://xmpp.org/software/servers/)
|
||||
|
||||
### Support
|
||||
|
||||
If you have any questions, concerns, want to say hi, please join the following channel: [SharpeTronics Discord Support Channel]({{ site.data.social.discord_invite }}) Eventually, I plan on having a commenting system on here..
|
||||
|
||||
### Want to buy me a coffee?
|
||||
Recently, I have had many folk as about **how to send me a donation**. If you want to give back andor support my efforts, I have shared various ways to donate. Thank You!
|
||||
|
||||
- [Cash App]({{ site.data.payment.cashapp_acct }})
|
||||
- [Venmo]({{ site.data.payment.venmo_acct }})
|
||||
- [Open Collective]({{ site.data.payment.open_collective }})
|
@ -0,0 +1,145 @@
|
||||
---
|
||||
updatedAt: 2022-10-11T22:04:01.861Z
|
||||
layout: post
|
||||
title: How to Setup a Docker Drone CI with HTTPS
|
||||
subheading: Obiwon Can Oh Be! A digital C3-PO working beside you!
|
||||
slug: how-to-setup-a-docker-drone-ci-with-https
|
||||
date: 2022-06-28
|
||||
author: Charles
|
||||
author_image: /uploads/c_avatar_30ba895a14.webp
|
||||
banner_image: /uploads/r2d2_skywalker_c84e2364fe.webp
|
||||
banner_image_description: r2d2 and Luke lego people standing on a laptop
|
||||
category: How-to
|
||||
tags: VPS, SSL, Drone CI, Docker,
|
||||
---
|
||||
> R2D2, you know better than to trust a strange computer! [beeps]
|
||||
|
||||
In general, this Drone server enables continuous integration (CI) and is a stepping stone for continuous delivery (CD), including gh-pages and gh-actions like functionality.
|
||||
|
||||
For this to function correctly, you will need to have a working instance of Gitea running on your own system.
|
||||
|
||||
This tutorial doesn't guide you on how-to create your own HTTPS server using Let's Encrypt and Certbot. I have added the certbot resource below [Setting Up HTTPS Certs] I will document this in more detail in the near future. However, this article is similar to how to get https on your server setup.
|
||||
[How-to get HTTPS on your server](https://sharpetronics.com/blog/tutorials/2021/12/27/setup-nginx-https-web-server-with-lets-encrypt-plus-strapi-4.0-headless-cms/)
|
||||
|
||||
As a stack developer and business owner, I am working on so many things! It is difficult to remember everything, so documentation is critical for me to remember.
|
||||
|
||||
**Note 1:** If you see a [name-goes-here], I am linking to the references shared at the end of the article.
|
||||
**Note 2:** Be sure your firewall `sudo ufw status` allows port 80 and 443. `sudo ufw allow http` && `sudo ufw allow https`.
|
||||
**Note 3:** If you want to use Docker Engine without sudo, follow this url: [Linux Docker Post-Install](https://docs.docker.com/engine/install/linux-postinstall/)
|
||||
|
||||
### Requirements
|
||||
- Basic Linux CLI knowledge
|
||||
- A hardened remote SSH server [see Linux VPS hardening](https://sharpetronics.com/blog/tutorials/2021/07/26/linux-vps-hardening-init/)
|
||||
- A running Gitea server: Git with a cup of tea
|
||||
- [Docker Engine](https://docs.docker.com/engine/install/)
|
||||
- a basic understanding of how to use Docker Engine
|
||||
- basic Nginx, Gitea and Certbot/Let's Encrypt experience
|
||||
- openssl
|
||||
|
||||
### Let's Begin!
|
||||
|
||||
#### Preparing the Environment
|
||||
|
||||
##### Creating our super-duper-shared secret
|
||||
```
|
||||
openssl rand -hex 16
|
||||
bea26a2221fd8090ea38720fc445eca6
|
||||
```
|
||||
|
||||
##### Creating an OAuth application on Gitea
|
||||
1. Goto your git.example.com and login
|
||||
2. Navigate to your profile settings (not the administrator settings, but personal profile)
|
||||
3. At the top below the main navigation bar, click on **Applications**
|
||||
4. Scroll down to the bottom of the page and create a new App name and Redirect URI
|
||||
```
|
||||
Applications Name: drone
|
||||
Redirect URI: https://drone.example.com/login
|
||||
```
|
||||
5. Click **Create Application**
|
||||
6. Copy and save your **Client Secret**; you will only be able to see this secret one time.
|
||||
7. In the next section, we will use these credentials to authenticate with Gitea and launch the Drone server.
|
||||
|
||||
#### Create & configure the Docker Container
|
||||
|
||||
##### Download docker drone image from Dockerhub
|
||||
`docker pull drone/drone:2`
|
||||
`docker image`
|
||||
|
||||
##### Begin configuring and starting drone
|
||||
|
||||
*The below command creates a container and starts the Docker runner. Remember to replace the environment variables below with your Drone server details.*
|
||||
```
|
||||
docker run \
|
||||
--volume=/var/lib/drone:/data \
|
||||
--env=DRONE_TLS_AUTOCERT=true \
|
||||
--env=DRONE_HTTP_SSL_REDIRECT=true \
|
||||
--env=DRONE_HTTP_SSL_TEMPORARY_REDIRECT=true \
|
||||
--env=DRONE_HTTP_SSL_HOST=drone.example.com \
|
||||
--env=DRONE_HTTP_STS_SECONDS=315360000 \
|
||||
--env=DRONE_SERVER_CERT=/etc/letsencrypt/live/drone.example.com/fullchain.pem \
|
||||
--env=DRONE_SERVER_KEY=/etc/letsencrypt/live/drone.example.com/privkey.pem \
|
||||
--env=DRONE_GITEA_SERVER=https://git.example.com \
|
||||
--env=DRONE_GITEA_CLIENT_ID=e69c443c-6bc2-4a35-000b-a2f36a885400 \
|
||||
--env=DRONE_GITEA_CLIENT_SECRET=3aY2000000c2Np7zX4e1Z9nlYhelENfX7nmWyxsgVixRg \
|
||||
--env=DRONE_RPC_SECRET=bea26a2221fd80900000038720fc445eca6 \
|
||||
--env=DRONE_SERVER_HOST=drone.example.com \
|
||||
--env=DRONE_SERVER_PROTO=https \
|
||||
--env=DRONE_USER_FILTER=gitea-user-account \
|
||||
--publish=80:80 \
|
||||
--publish=443:443 \
|
||||
--restart=always \
|
||||
--detach=true \
|
||||
--name=st-drone-ssl \
|
||||
drone/drone:2
|
||||
```
|
||||
|
||||
###### Going the extra yards
|
||||
After you create the docker container, it will automatically restart to remember your configuration, but if you create a shell script, you are able to `./shell-script.sh` and run the Docker image.
|
||||
|
||||
```
|
||||
vi shell-script.sh
|
||||
copy/paste docker config via CTRL+SHIFT+V
|
||||
double check for typos
|
||||
hit ESC
|
||||
press SHIFT+Z,Z (saves and quits)
|
||||
chmod +x shell-script.sh (makes script executable)
|
||||
then, run the script with: ./shell-script.sh
|
||||
```
|
||||
|
||||
#### Verify
|
||||
```
|
||||
docker logs st-drone-ssl
|
||||
|
||||
INFO[0000] starting the server
|
||||
INFO[0000] successfully pinged the remote server
|
||||
```
|
||||
|
||||
#### Stop & Start Container
|
||||
```
|
||||
sudo docker container stop st-drone-ssl
|
||||
sudo docker container start st-drone-ssl
|
||||
```
|
||||
|
||||
### Part II - Configure a Drone Runner Pipeline with Docker Engine
|
||||
|
||||
This article will be shared at a later date.
|
||||
|
||||
### References
|
||||
|
||||
- [Setting up HTTPS certs](https://certbot.eff.org/instructions)
|
||||
- [Drone Configuration Options](https://docs.drone.io/server/reference/)
|
||||
- [Drone Gitea Setup](https://docs.drone.io/server/provider/gitea/)
|
||||
- [Drone Server Docker Installation](https://docs.drone.io/server/provider/gitea/)
|
||||
- [What is CI/CD](https://www.infoworld.com/article/3271126/what-is-cicd-continuous-integration-and-continuous-delivery-explained.html)
|
||||
- [Unsplash - Studbee](https://unsplash.com/@studbee)
|
||||
|
||||
### Support
|
||||
|
||||
If you have any questions, concerns, want to say hi, please join the following channel: [SharpeTronics Discord Support Channel]({{ site.data.social.discord_invite }}) Eventually, I plan on having a commenting system on here..
|
||||
|
||||
### Donations
|
||||
Recently, I have had many folk as about **how to send me a donation**. If you want to give back andor support my efforts, I have shared various ways to donate. Thank You!
|
||||
|
||||
- [Cash App]({{ site.data.payment.cashapp_acct }})
|
||||
- [Venmo]({{ site.data.payment.venmo_acct }})
|
||||
- [Open Collective]({{ site.data.payment.open_collective }})
|
@ -0,0 +1,144 @@
|
||||
---
|
||||
updatedAt: 2022-10-16T16:23:44.426Z
|
||||
layout: post
|
||||
title: How to Setup a Secure Docker Drone Runner with Drone CI
|
||||
subheading: BeeYoop BeeDeepBoom Weeop DEEpaEEya
|
||||
slug: how-to-setup-a-secure-docker-drone-runner-with-drone-ci
|
||||
date: 2022-06-28
|
||||
author: Charles
|
||||
author_image: /uploads/c_avatar_30ba895a14.webp
|
||||
banner_image: /uploads/c3po_a_friend_in_need_74a237a413.webp
|
||||
banner_image_description: a picture of c3po from Star Wars
|
||||
category: How-to
|
||||
tags: Linux, Drone CI, Docker,
|
||||
---
|
||||
> BeeYoop BeeDeepBoom Weeop DEEpaEEya
|
||||
|
||||
In general, this article describes how to setup SSL with a Drone Runner. This is part II of a part I series. If you would like to learn how-to setup the Drone Server, please visit: [Setup Drone CI Server](https://www.sharpetronics.com/blog/tutorials/2022/06/23/how-to-setup-a-docker-drone-ci-with-https/).
|
||||
|
||||
This part II creates a pipeline runner with a Docker machine; what that means is, like GitHub Actions, but with Drone super powers. The configuration file is stored as `.drone.yml` in the root of your site directory and drone server uses that application yml file to do a series of commands or actions within the virtual docker machine.
|
||||
|
||||
This is empowering because you can automate a fresh build every time. Also, you create a **drone trigger** for when you push to a branch master as an example. Here is the configuration of all the possible things you can do. [Docker Pipelines Overview](https://docs.drone.io/pipeline/docker/overview/)
|
||||
|
||||
**Note 1:** If you see a [name-goes-here], I am linking to the references I shared below.
|
||||
**Note 2:** If you want to use Docker Engine without sudo, follow this url: [Linux Docker Post-Install](https://docs.docker.com/engine/install/linux-postinstall/)
|
||||
|
||||
### Requirements
|
||||
- Basic Linux CLI knowledge
|
||||
- A hardened remote SSH server [see Linux VPS hardening](https://sharpetronics.com/blog/tutorials/2021/07/26/linux-vps-hardening-init/)
|
||||
- A running Gitea server: Git with a cup of tea
|
||||
- [Docker Engine](https://docs.docker.com/engine/install/)
|
||||
- a basic understanding of how to use Docker Engine
|
||||
- basic Nginx, Gitea and Certbot/Let's Encrypt experience
|
||||
- openssl
|
||||
- a running drone ci server [see part I](https://www.sharpetronics.com/blog/tutorials/2022/06/23/how-to-setup-a-docker-drone-ci-with-https/)
|
||||
|
||||
### Let's Begin!
|
||||
|
||||
#### Pull docker image from dockerhub
|
||||
`docker pull drone/drone-runner-docker:1`
|
||||
|
||||
#### Make public access to repo in drone GUI
|
||||
For testing, I made sure the repo was publicly available.
|
||||
|
||||

|
||||
|
||||
### Launch a Secure Docker Drone Runner
|
||||
|
||||
For the **DRONE_RPC_SECRET** use the same ssl secret we created in Part I. See [Configuration](https://docs.drone.io/runner/docker/configuration/reference/) for a complete list of configuration options.
|
||||
|
||||
Please see the reference to understand what this docker config is doing. That is important for you to do yourself.
|
||||
|
||||
```
|
||||
docker run --detach \
|
||||
--volume=/var/run/docker.sock:/var/run/docker.sock \
|
||||
--env=DRONE_RPC_PROTO=https \
|
||||
--env=DRONE_RPC_HOST=drone.example.com \
|
||||
--env=DRONE_RPC_SECRET=bea26a2221fd8090ea38720fc445eca6 \
|
||||
--env=DRONE_RUNNER_CAPACITY=2 \
|
||||
--env=DRONE_RUNNER_NAME=st-runner \
|
||||
--env=DRONE_UI_USERNAME=youruserhere \
|
||||
--env=DRONE_UI_PASSWORD=yourpasshere \
|
||||
--env=DRONE_DEBUG=true \
|
||||
--env=DRONE_TRACE=true \
|
||||
--publish=3000:3000 \
|
||||
--restart=always \
|
||||
--name=st-drone-runner \
|
||||
drone/drone-runner-docker:1
|
||||
```
|
||||
|
||||
#### A Pipeline Config Example
|
||||
|
||||
An example of a custom pipeline I have created. I ain't going to explain this to you in detail; I expect you to determine your own pipeline and this is only for a reference point. Essentially, what you will be doing is launching your own virtual machine for your specific use case scenario.
|
||||
|
||||
In this example, on drone.example.com, I have created a secret pass that needs to be passed to the virtual machine so I can package the build aka **_site** only, then auto push to www_data branch on my git server. Furthermore, I **rsync** this data through an ssh tunnel to a **Gitea Pages** server that serves the **WWW or edge** data.
|
||||
|
||||
**Note: 3:** The example configuration is a **.drone.yml** file stored in the root of your site project.
|
||||
|
||||
```
|
||||
---
|
||||
kind: pipeline
|
||||
type: docker
|
||||
name: build
|
||||
|
||||
workspace:
|
||||
path: /drone/src
|
||||
|
||||
platform:
|
||||
os: linux
|
||||
arch: amd64
|
||||
|
||||
trigger:
|
||||
branch:
|
||||
- master
|
||||
|
||||
steps:
|
||||
- name: build-website
|
||||
image: ruby:latest
|
||||
environment:
|
||||
SSH_USER:
|
||||
from_secret: ssh_user
|
||||
SSH_HOST:
|
||||
from_secret: ssh_host
|
||||
NO_HOSTKEY:
|
||||
from_secret: no_hostkey
|
||||
privileged: false
|
||||
volumes:
|
||||
- name: jekyll
|
||||
path: /srv/jekyll
|
||||
|
||||
commands:
|
||||
# general vm information for debugging
|
||||
- whoami
|
||||
- pwd
|
||||
- gem environment
|
||||
```
|
||||
|
||||
#### Verify
|
||||
```
|
||||
docker logs st-drone-runner
|
||||
|
||||
INFO[0000] starting the server
|
||||
INFO[0000] successfully pinged the remote server
|
||||
```
|
||||
#### Stop & Start Container
|
||||
```
|
||||
sudo docker container stop st-drone-ssl
|
||||
sudo docker container start st-drone-ssl
|
||||
```
|
||||
### References
|
||||
- [Drone Runner Configuration](https://docs.drone.io/runner/docker/configuration/reference/)
|
||||
- [Drone Runner Docker Installation](https://docs.drone.io/runner/docker/installation/linux/)
|
||||
- [Docker Pipelines Overview](https://docs.drone.io/pipeline/docker/overview/)
|
||||
- [Unsplash - Nice M Nshuti](https://unsplash.com/@nietzsche99)
|
||||
|
||||
### Support
|
||||
|
||||
If you have any questions, concerns, want to say hi, please join the following channel: [SharpeTronics Discord Support Channel]({{ site.data.social.discord_invite }}) Eventually, I plan on having a commenting system on here..
|
||||
|
||||
### Want to buy me a coffee?
|
||||
Recently, I have had many folk as about **how to send me a donation**. If you want to give back andor support my efforts, I have shared various ways to donate. Thank You!
|
||||
|
||||
- [Cash App]({{ site.data.payment.cashapp_acct }})
|
||||
- [Venmo]({{ site.data.payment.venmo_acct }})
|
||||
- [Open Collective]({{ site.data.payment.open_collective }})
|
@ -0,0 +1,53 @@
|
||||
---
|
||||
updatedAt: 2022-10-15T18:40:33.689Z
|
||||
layout: post
|
||||
title: Update your Strapi CMS with your own Favicon
|
||||
subheading: How-to replace the favicon
|
||||
slug: update-your-strapi-cms-with-your-own-favicon
|
||||
date: 2022-07-26
|
||||
author: Charles
|
||||
author_image: /uploads/c_avatar_30ba895a14.webp
|
||||
banner_image: /uploads/code_2b5ed5fa9c.webp
|
||||
banner_image_description: computer code matrix
|
||||
category: How-to
|
||||
tags: Jekyll, Strapi, Headless CMS,
|
||||
---
|
||||
In this article, we will be replacing the Strapi favicon with your own favicon. This same process is similar to how we replace the login logo `AuthLogo` and menu logo with `MenuLogo`. For more details, please visit Strapi documentations example configuration. [Strapi Documents]
|
||||
|
||||
> **Tip:** This same process may be used to replace the login logo `AuthLogo` and menu logo with `MenuLogo`.
|
||||
> For more details, please visit [Strapi Documents](https://docs.strapi.io/developer-docs/latest/development/admin-customization.html#logos)
|
||||
|
||||
1. Create an extensions folder at:
|
||||
`src/admin/extensions/`
|
||||
|
||||
2. Upload your favicon into:
|
||||
`src/admin/extensions/`
|
||||
|
||||
3. Replace the **favicon.ico** at:
|
||||
`Strapi app root` with custom favicon.ico
|
||||
|
||||
4. Update your `src/admin/app.js` with the following:
|
||||
|
||||
```
|
||||
// path: src/admin/app.js
|
||||
|
||||
import favicon from './extensions/favicon.png';
|
||||
|
||||
export default {
|
||||
config: {
|
||||
// replace favicon with custom icon
|
||||
head: {
|
||||
favicon: favicon,
|
||||
},
|
||||
}
|
||||
}
|
||||
```
|
||||
5. Rebuild, run & revisit your Strapi app
|
||||
`yarn build && yarn develop`
|
||||
|
||||
> **Note:**
|
||||
> Be certain that the cached favicon is cleared. It can be cached in your web browser and also with your domain management
|
||||
> tool like Cloudflare's CDN
|
||||
|
||||
#### References
|
||||
[Strapi Documents](https://docs.strapi.io/developer-docs/latest/development/admin-customization.html#configuration-options)
|
@ -0,0 +1,160 @@
|
||||
---
|
||||
updatedAt: 2022-10-21T17:38:49.434Z
|
||||
layout: post
|
||||
title: Upgrade your Crosshair VI Hero Motherboard Firmware with System76's PopOS!
|
||||
subheading: I was doing a bit of yak shaving this morning, and it looks like it might have paid off.
|
||||
slug: upgrade-your-crosshair-vi-hero-motherboard-firmware-with-system76-s-pop-os
|
||||
date: 2022-10-12
|
||||
author: Charles
|
||||
author_image: /uploads/c_avatar_30ba895a14.webp
|
||||
banner_image: /uploads/galactic_andromeda_workstation_393e5d94d4.webp
|
||||
banner_image_description: a fresh computer desk with monitors from the Andromeda Galaxy.
|
||||
category: How-to
|
||||
tags: Repairs, Debugging, Troubleshooting,
|
||||
---
|
||||
My grandpa always said: "if it ain't broke, it needs no fixin!"
|
||||
|
||||
I started having trouble with random occurrences of my computer crashing on both Linux and Window's operating systems. This article details some of the steps I mazed through and will expedite spacetime support for future dilemmas.
|
||||
|
||||
After tinkering and pondering on the possible reasons, I deduced it down to either the GPU, Motherboard or potentially the PSU voltage irregularities. The GPU & RAM worked like a champ while stress testing them. I was unable to reproduce the random occurrence of this hard crash, and both Ubuntu 22.04 and Windows 10 never provided any error logs I could trace through. After each crash, I would restart and save the logs to maybe find a pattern between all the crashes, but sorting through all this didn't even provide a solution!
|
||||
|
||||
The PopOS! logs:
|
||||
```
|
||||
sudo journalctl --since today --output=short > ~/Documents/System\ Logs/today-1.log
|
||||
journalctl -p 3 -xb
|
||||
```
|
||||
|
||||
The Windows 10 logs:
|
||||
```
|
||||
Windows key + R
|
||||
input: eventvwr and tap the enter key
|
||||
navigate through the GUI...
|
||||
```
|
||||
|
||||
To deduce it further, the physical symptoms were:
|
||||
* The computer visuals on screen would freeze for a few seconds and then the monitors would all turn off, but the computer fans and motherboard lights stayed online.
|
||||
* No error logs to trace on both Windows or Linux Ubuntu
|
||||
* Random occurrences with intense and normal visuals
|
||||
* It happened with more than one browser like Firefox and Google Chrome
|
||||
|
||||
Normally, I would do a hard reset after it would crash and mistakenly overlooked the error code that was displayed after the crash; anyhow, the QCODE I received was: **08**. Upon further investigation and mazing around with the software bios utilities, I discovered I had a little button that would do all this in a *Flash*.
|
||||
|
||||
## Requirements & Safety
|
||||
|
||||
* Linux OS; Windows 11 is similar, but the commands are different.
|
||||
* Basic electronic principles
|
||||
* Always make backups
|
||||
* Create a bootable drive in case bootloader messes up after update (see here)
|
||||
* Backup procedures in-case BIOS update fails
|
||||
* A official manual for your motherboard
|
||||
|
||||
*WARNING:* You are soley responsible for your own hardware; this article is the process of how I have successfully troubleshooted my own hardware.
|
||||
|
||||
1. Get BIOS & Motherboard Information
|
||||
```sudo dmidecode --type 0```
|
||||
|
||||
```
|
||||
# dmidecode 3.3
|
||||
Getting SMBIOS data from sysfs.
|
||||
SMBIOS 3.2.0 present.
|
||||
|
||||
Handle 0x0000, DMI type 0, 26 bytes
|
||||
BIOS Information
|
||||
Vendor: SharpeTronics Inc.
|
||||
Version: 1501
|
||||
Release Date: 07/3/2017
|
||||
Address: 0xF0000
|
||||
Runtime Size: 64 kB
|
||||
ROM Size: 16 MB
|
||||
Characteristics:
|
||||
PCI is supported
|
||||
APM is supported
|
||||
BIOS is upgradeable
|
||||
BIOS shadowing is allowed
|
||||
Boot from CD is supported
|
||||
Selectable boot is supported
|
||||
BIOS ROM is socketed
|
||||
EDD is supported
|
||||
5.25"/1.2 MB floppy services are supported (int 13h)
|
||||
3.5"/720 kB floppy services are supported (int 13h)
|
||||
3.5"/2.88 MB floppy services are supported (int 13h)
|
||||
Print screen service is supported (int 5h)
|
||||
8042 keyboard services are supported (int 9h)
|
||||
Serial services are supported (int 14h)
|
||||
Printer services are supported (int 17h)
|
||||
ACPI is supported
|
||||
USB legacy is supported
|
||||
BIOS boot specification is supported
|
||||
Targeted content distribution is supported
|
||||
UEFI is supported
|
||||
BIOS Revision: 1.17
|
||||
```
|
||||
|
||||
The above output allows us to verify the BIOS
|
||||
|
||||
```sudo dmidecode --type 2```
|
||||
|
||||
```
|
||||
Handle 0x0002, DMI type 2, 15 bytes
|
||||
Base Board Information
|
||||
Manufacturer: ASUSTeK COMPUTER INC.
|
||||
Product Name: CROSSHAIR VI HERO
|
||||
Version: Rev 1.xx
|
||||
Serial Number: 0x0x0x0x0x0x0x
|
||||
Asset Tag: Default string
|
||||
Location In Chassis: Default string
|
||||
Chassis Handle: 0x0003
|
||||
Type: Motherboard
|
||||
Contained Object Handles: 0
|
||||
```
|
||||
|
||||
2. Download the Firmware from Manufacturer's Website
|
||||
|
||||
Navigate to the firmware page and download the most recent firmware update for your CROSSHAIR VI HERO: [link](#sources)
|
||||
|
||||
3. After you download the new firmware, we open & rename the file to **C6H.CAP**, then *duplicate* or move it to the *root* of the *USB device*.
|
||||
|
||||
The instructions are provided by the manufacturer; you may discover this information online or the actual manual shipped with your motherboard. For this use case scenario, the ASUS Crosshair VI Hero motherboard has a BIOS button that sweeps or extracts the file and updates your firmware in about 3-5min with a ~17mb file.
|
||||
|
||||
4. Upgrade your Motherboard Firmware
|
||||
|
||||
If you're also upgrading the: ROG CROSSHAIR VI HERO Motherboard to *version 8601*, the page of reference is located in "**Chapter 2.2 BIOS update utility : USB BIOS Flashback**".
|
||||
|
||||
To use USB BIOS Flashback:
|
||||
```
|
||||
1.Download the latest BIOS file from the ASUS website.
|
||||
2.Extract and rename the BIOS image file to C6H.CAP.
|
||||
3.Copy C6H.CAP to the root directory of your USB storage device.
|
||||
4.Turn off the system and connect the USB storage device to the USB BIOS Flashback port.
|
||||
5.Press the USB BIOS Flashback button.
|
||||
```
|
||||
|
||||
The method above allows an owner to update their motherboard without mazing around in the BIOS software. You simply plug-in the USB device into the **correct port** and **press** the button.
|
||||
|
||||
The button will **blink blue slowly then speed up as time progress's**; I spent about 3-5 minutes flashing the BIOS this way; before, I have had horror stories flashing the BIOS with the BIOS. For example, I was unable to successfully make use of the other two tools the manufacturer provided because the software would bug out. The simplest and most effective method is using a USB BIOS Flashback button that is physically located on your motherboard.
|
||||
|
||||
## Other Misc. Testing
|
||||
|
||||
Some other things I spent doing before I reached a solution were the following:
|
||||
|
||||
* Upgraded all disk drivers
|
||||
* Lots of research
|
||||
* Re-seated all motherboard connections
|
||||
* Cleaned and dusted all dust on the grill and fans.
|
||||
* Cleaned and Reapplied thermal paste to CPU
|
||||
* Re-seated and clean the GPU
|
||||
* Reinstalled Windows and Linux OS
|
||||
* Contacted a support channel with another company
|
||||
* The bug could be related to AMD's fTPM feature. [link](#sources)
|
||||
* ...many more...
|
||||
|
||||
In conclusion, the entire machine has been revitalized, including both software and hardware. The bug has been resolved and I can get back to doing other cool stuff and things. In the future, I will include how to repair your bootloader on Ubuntu and Windows after upgrading your BIOS; in the meantime, if you need this ASAP, System76 has a well written article on the topic at hand at: [link](#sources).
|
||||
|
||||
### Sources
|
||||
|
||||
[Repair Your Linux Bootloaders - System76](https://support.system76.com/articles/bootloader/){:target="_blank"}
|
||||
|
||||
[AMD fTPM Stuttering Issues - Toms Hardware](https://www.tomshardware.com/news/amd-issues-fix-and-workaround-for-ftpm-stuttering-issues
|
||||
){:target="_blank"}
|
||||
|
||||
[ASUS Crosshair VI Hero Drivers & Manuals](https://rog.asus.com/us/motherboards/rog-crosshair/rog-crosshair-vi-hero-model/helpdesk_bios/){:target="_blank"}
|
@ -0,0 +1,41 @@
|
||||
---
|
||||
product_id: 8
|
||||
layout: product
|
||||
heading: chickenplatterrrr tasteyyum
|
||||
subheading: sadfasdf
|
||||
slug: chickenplatterrrr-tasteyyum
|
||||
date: 2022-10-05
|
||||
author: Charles
|
||||
author_image: /uploads/c_avatar_30ba895a14.webp
|
||||
banner_image: /uploads/terms_48bec2a697.webp
|
||||
banner_image_description: a short desc. about the banner image
|
||||
category: How-to
|
||||
gallery:
|
||||
- image_path: /uploads/code_2b5ed5fa9c.webp
|
||||
title: code_2b5ed5fa9c
|
||||
- image_path: /uploads/r2d2_skywalker_c84e2364fe.webp
|
||||
title: r2d2_skywalker_c84e2364fe
|
||||
|
||||
sizes: xs, sm, med, lg, xl,
|
||||
colors: red, blue, white, violet, gray,
|
||||
material_types: cotton, wool, polyster, nylon, plastic,
|
||||
shipping_companies: UPS, USPS, FedEx, DHL,
|
||||
shipping_rates: standard, express,
|
||||
currency_types: USD, CAN, JPN,
|
||||
tags: Jekyll,
|
||||
condition: new
|
||||
model_number: dafd
|
||||
part_number: asdfasdf
|
||||
is_featured: false
|
||||
is_software: true
|
||||
is_shippable: false
|
||||
is_taxable: false
|
||||
country_origin: USA
|
||||
unit_price: 2
|
||||
quantity: 2
|
||||
package_dimensions: 1x1x1mm
|
||||
weight: 1oz
|
||||
tax_code: txcd_00000000
|
||||
shipping_price: 0
|
||||
---
|
||||
A place to describe the product to your readers. af asdA place to describe the product to your readers. A place to describe the product to your readers. A place to describe the product to your readers. A place to describe the product to your readers. A place to describe the product to your readers. A place to describe the...j
|
39
collections/_products/2022-11-15-appleeetyyy.md
Normal file
39
collections/_products/2022-11-15-appleeetyyy.md
Normal file
@ -0,0 +1,39 @@
|
||||
---
|
||||
product_id: 11
|
||||
layout: product
|
||||
heading: Appleeetyyy
|
||||
subheading: A for apple
|
||||
slug: appleeetyyy
|
||||
date: 2022-11-15
|
||||
author: Charles
|
||||
author_image: /uploads/c_avatar_30ba895a14.webp
|
||||
banner_image: /uploads/galactic_andromeda_workstation_393e5d94d4.webp
|
||||
banner_image_description: a short desc. about the banner image
|
||||
category: How-to
|
||||
gallery:
|
||||
- image_path: /uploads/code_2b5ed5fa9c.webp
|
||||
title: code_2b5ed5fa9c
|
||||
|
||||
sizes: xs, sm, med, lg, xl,
|
||||
colors: white, black, cyan, green, red,
|
||||
material_types: gold, platinum, silver, cotton, charcoal,
|
||||
shipping_companies: UPS, USPS, FedEx, DHL,
|
||||
shipping_rates: standard, express,
|
||||
currency_types: USD, CAN, JPN,
|
||||
tags: Nginx,
|
||||
condition: reconditioned
|
||||
model_number: fgh-56hh
|
||||
part_number: abc
|
||||
is_featured: true
|
||||
is_software: true
|
||||
is_shippable: false
|
||||
is_taxable: false
|
||||
country_origin: USA
|
||||
unit_price: 9
|
||||
quantity: 3
|
||||
package_dimensions: 1x1x1mm
|
||||
weight: 3oz
|
||||
tax_code: txcd_00000000
|
||||
shipping_price: 99
|
||||
---
|
||||
A place to describe the product to your readers. A place to describe the product to your readers. A place to describe the product to your readers. A place to describe the product to your readers. A place to describe the product to your readers. A place to describe the product to your readers. A place to describe the product to your readers. A place to describe the product to your readers. A place to describe the product to your
|
Loading…
x
Reference in New Issue
Block a user