Як отримати ресурси Oracle cloud Always Free

Oracle Cloud Free Tier – too good to be true?

  1. Проходимо реєстрацію тут – https://www.oracle.com/cloud/free/
  2. Створюємо VCN https://cloud.oracle.com/networking/vcns
  3. Переходимо в створену VCN, створюємо Subnet
  4. Далі переходимо в створену Subnet, створюємо Security List якщо відсутній, переходимо в нього
  5. Видаляємо всі наявні Ingress Rules, створюємо нове: 0.0.0.0/0, All protocols
  6. Резервуємо статичну IP адресу для сервера https://cloud.oracle.com/networking/ip-management/public-ips
  7. Створюємо сервер […]
  8. Прив’язуємо до створеного сервера зарезервовану IP адресу тут: Compute -> Instances -> Instance details -> Attached VNICs -> VNIC Details -> IPv4 Addresses

 

systemctl stop iptables

systemctl disable iptables

sudo apt install nginx

sudo ufw allow ‘Nginx HTTP’

sudo ufw allow 22

 

sudo ufw show added

sudo ufw enable

sudo ufw status

sudo apt install certbot

sudo nano /etc/ssh/sshd_config

PasswordAuthentication yes

PermitRootLogin yes

sudo service sshd restart

sudo apt install mysql-server

sudo apt install php-fpm php-mysql

.

MVLAB TEST Script error: the ionCube Loader for PHP needs to be installed. The ionCube Loader is the industry standard PHP extension for running protected PHP code, and can usually be added easily to a PHP installation. For Loaders please visit get-loader.ioncube.com and for an instructional video please see http://ioncu.be/LV localhost self-signed certificate on nginx

sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/ssl/private/nginx-selfsigned.key -out /etc/ssl/certs/nginx-selfsigned.crt

Необхідно заповнити всі поля

sudo openssl dhparam -out /etc/ssl/certs/dhparam.pem 2048

Створити файл etc/ssl/options-ssl-nginx.conf з наступним вмістом:

ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_prefer_server_ciphers on;
ssl_ciphers “EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH”;
ssl_ecdh_curve secp384r1;
ssl_session_cache shared:SSL:10m;
ssl_session_tickets off;
ssl_stapling on;
ssl_stapling_verify on;
resolver 8.8.8.8 8.8.4.4 valid=300s;
resolver_timeout 5s;
# Disable preloading HSTS for now. You can use the commented out header line that includes
# the “preload” directive if you understand the implications.
#add_header Strict-Transport-Security “max-age=63072000; includeSubdomains; preload”;
add_header Strict-Transport-Security “max-age=63072000; includeSubdomains”;
add_header X-Frame-Options DENY;
add_header X-Content-Type-Options nosniff;

Додати в server { … } секцію конфігу наступне:

listen [::]:443 ssl;
listen 443 ssl;

ssl_certificate /etc/ssl/certs/nginx-selfsigned.crt;
ssl_certificate_key /etc/ssl/private/nginx-selfsigned.key;
include /etc/ssl/options-ssl-nginx.conf;
ssl_dhparam /etc/ssl/certs/dhparam.pem;

 

Як встановити GEOIP на NGINX та PHP (FPM)

Перевіримо, чи NGINX має вбудований модуль –with-http_geoip_module:

nginx -V

Якщо має, продовжуємо:

mkdir /etc/nginx/geoip

cd /etc/nginx/geoip

Завантажте і помістіть в папку /etc/nginx/geoip файли GeoLiteCity.dat та GeoIP.dat Їх можна завантажити тут: https://mirrors-cdn.liferay.com/geolite.maxmind.com/download/geoip/database/

Відредагуйте файл /etc/nginx/nginx.conf та додайте в секцію http { … } наступні рядки:

geoip_country /etc/nginx/geoip/GeoIP.dat; # the country IP database
geoip_city /etc/nginx/geoip/GeoLiteCity.dat; # the city IP database

Відредагуйте файл /etc/nginx/fastcgi.conf  та додайте наступні рядки:

fastcgi_param GEOIP_COUNTRY_CODE $geoip_country_code;
fastcgi_param GEOIP_COUNTRY_CODE3 $geoip_country_code3;

Перезапустіть NGINX та PHP:

service nginx restart

service php7.3-fpm restart

Ваша версія PHP може відрізнятися.

Тепер ви можете отримати код країни у вашому PHP скрипті:

echo $_SERVER[‘GEOIP_COUNTRY_CODE ‘]; // two-letter country code like US, UA..

 

Всі можливі параметри GEOIP:

fastcgi_param GEOIP_COUNTRY_CODE $geoip_country_code;
fastcgi_param GEOIP_COUNTRY_CODE3 $geoip_country_code3;
fastcgi_param GEOIP_COUNTRY_NAME $geoip_country_name;

fastcgi_param GEOIP_CITY_COUNTRY_CODE $geoip_city_country_code;
fastcgi_param GEOIP_CITY_COUNTRY_CODE3 $geoip_city_country_code3;
fastcgi_param GEOIP_CITY_COUNTRY_NAME $geoip_city_country_name;
fastcgi_param GEOIP_REGION $geoip_region;
fastcgi_param GEOIP_CITY $geoip_city;
fastcgi_param GEOIP_POSTAL_CODE $geoip_postal_code;
fastcgi_param GEOIP_CITY_CONTINENT_CODE $geoip_city_continent_code;
fastcgi_param GEOIP_LATITUDE $geoip_latitude;
fastcgi_param GEOIP_LONGITUDE $geoip_longitude;

Вирішення проблеми недійсного сертифікату на WebOS
  1. Отримаємо root-права, для цього використовуючи браузер телевізора, заходимо на https://rootmy.tv/
  2. Натискаємо 5 на пульті або тягнемо слайдер внизу сторінки, підтверджуємо запит, телевізор перезавантажиться
  3. Використовуючи комп’ютер та клієнт PuTTY в режимі Telnet підключаємося до телевізора, який має бути під’єднаний до інтернету спільним з вашим комп’ютером роутером. В адмін-панелі роутера необхідно також дізнатися локальну IP адресу телевізора для з’єднання через Telnet
  4. Після з’єднання по Telnet з вашим телевізором (пароль не встановлено) послідовно вводимо наступні команди:
    mkdir -p /media/cryptofs/root/mozilla
    cp -r /usr/share/ca-certificates/mozilla/* /media/cryptofs/root/mozilla
    mount -o bind /media/cryptofs/root/mozilla/ /usr/share/ca-certificates/mozilla/
    curl -k https://letsencrypt.org/certs/isrgrootx1.pem.txt | tee /usr/share/ca-certificates/mozilla/ISRG_Root_X1.crt
    mkdir -p /media/cryptofs/root/etc
    cp -r /etc/* /media/cryptofs/root/etc
    mount -o bind /media/cryptofs/root/etc /etc
  5. Далі необхідно виправити конфігураційні файли, використаємо консольний редактор vi. Після відкриття файлу, для режиму редагування необхідно натиснути на клавіатурі літеру “i“, для збереження змін і виходу – клавішу Esc, далі ввести команду :wq! та натиснути Enter, для виходу без збереження використовується команда :q!

    Оновлення стартового скрипта:
    vi /media/cryptofs/apps/usr/palm/services/com.palmdts.devmode.service/start-devmode.sh

  6. vi /etc/ca-certificates.conf
Перенос сайту Magento 2 на інший сервер (домен)
  1. Створіть архів файлів Magento CMS на вашому старому сервері ( орієнтовна команда для терміналу: zip -r /var/www/html/bak.zip /var/www/html )
  2. Зробіть дамп бази даних MySQL ( sudo mysqldump –no-tablespaces -uUSER -pPASSWORD DBNAME | gzip > dump_name.sql.gz )
  3. Вивантажте і розпакуйте архів файлів сайту на новий сервер. Для перекидання архіву між серверами можна скористатися wget. Наприклад: wget -O /var/www/html https://example.com/bak.zip
  4. Розпакуйте і залийте дамп бази даних в нову базу (на новому сервері). Команда для терміналу: sudo mysql -p -u USER DBNAME < dump_name.sql
  5. В папці з файлами Magento відредагуйте файл app/etc/env.php, замініть дані доступу до бази даних на відповідні нові
  6. В базі даних знайдіть таблицю core_config_data та замініть значення рядків web/unsecure/base_url та web/secure/base_url на ваш новий домен (відповідно, з http:// та https://)
  7. В консолі перейдіть в кореневу папку Magento (наприклад, cd /var/www/html) та послідовно виконайте наступні команди:
    php bin/magento setup:upgrade
    php bin/magento setup:static-content:deploy -f
    php bin/magento cache:flush
    php bin/magento cache:clean
  8. Перевірте права доступу на файли, та власника, за потреби змініть (наприклад: sudo chown -R www-data:www-data /var/www/html )

Готово.

A different origin subframe tried to create a JavaScript dialog. This is no longer allowed and was blocked

A different origin subframe tried to create a JavaScript dialog. This is no longer allowed and was blocked. See https://www.chromestatus.com/feature/5148698084376576 for more details.

Автоматичний полив рослин | ESP8266

pinMode(myclock, OUTPUT);
analogWriteFreq(10000); ШИМ, запобігає писку мотора кулера тощо

ESP8266 (NodeMCU) + CSS811 | CJMCU-811

https://mysku.ru/blog/aliexpress/76702.html

 

VCC – 3V3

GND – GND

WAK (wakeup) – GND

SCL – D1

SDA – D2

 

#include <Arduino.h>

/******************************************************************************
Read basic CO2 and TVOCs on alternate Wire ports

Marshall Taylor @ SparkFun Electronics
Nathan Seidle @ SparkFun Electronics

April 4, 2017

https://github.com/sparkfun/CCS811_Air_Quality_Breakout
https://github.com/sparkfun/SparkFun_CCS811_Arduino_Library

Read the TVOC and CO2 values from the SparkFun CSS811 breakout board

This shows how to begin communication with the sensor on a different Wire port.
Helpful if you have platform that is a slave to a larger system and need
a dedicated Wire port or if you need to talk to many sensors at the same time.

A new sensor requires at 48-burn in. Once burned in a sensor requires
20 minutes of run in before readings are considered good.

Hardware Connections (Breakoutboard to Arduino):
3.3V to 3.3V pin
GND to GND pin
SDA to A4
SCL to A5

Resources:
Uses Wire.h for i2c operation

Development environment specifics:
Arduino IDE 1.8.1

This code is released under the [MIT License](http://opensource.org/licenses/MIT).

Please review the LICENSE.md file included with this example. If you have any questions
or concerns with licensing, please contact techsupport@sparkfun.com.

Distributed as-is; no warranty is given.
******************************************************************************/
#include <Wire.h>

#include “SparkFunCCS811.h”

//#define CCS811_ADDR 0x5B //Default I2C Address
#define CCS811_ADDR 0x5A //Alternate I2C Address

CCS811 mySensor(CCS811_ADDR);

void setup()
{
Serial.begin(115200);
Serial.println(“CCS811 Basic Example”);

Wire.begin(); //Compilation will fail here if your hardware doesn’t support additional Wire ports

//This begins the CCS811 sensor and prints error status of .beginWithStatus()
CCS811Core::CCS811_Status_e returnCode = mySensor.beginWithStatus(Wire); //Pass Wire1 into the library
Serial.print(“CCS811 begin exited with: “);
Serial.println(mySensor.statusString(returnCode));
}

void loop()
{
//Check to see if data is ready with .dataAvailable()
if (mySensor.dataAvailable())
{
//If so, have the sensor read and calculate the results.
//Get them later
mySensor.readAlgorithmResults();

Serial.print(“CO2[“);
//Returns calculated CO2 reading
Serial.print(mySensor.getCO2());
Serial.print(“] tVOC[“);
//Returns calculated TVOC reading
Serial.print(mySensor.getTVOC());
Serial.print(“] millis[“);
//Simply the time since program start
Serial.print(millis());
Serial.print(“]”);
Serial.println();
}

delay(10); //Don’t spam the I2C bus
}