понедельник, 30 декабря 2024 г.

Nginx + Let's Crypt

Шаг 1. Установка Certbot

# apt-get install python3-acme python3-certbot python3-mock python3-openssl python3-pkg-resources python3-pyparsing python3-zope.interface -y

# apt-get install python3-certbot-nginx -y



Шаг 2. Проверка имени домена

# vim /etc/nginx/suite-available/default

server {
    ...
    server_name rus-notes.ru www.rus-notes.ru;
    ...
}



Шаг 3. Получение SSL-сертификата
# certbot --nginx -d rus-notes.ru -d www.rus-notes.ru

...
Account registered.
Requesting a certificate for rus-notes.ru and www.rus-notes.ru
Successfully received certificate.
Certificate is saved at: /etc/letsencrypt/live/rus-notes.ru/fullchain.pem
Key is saved at:         /etc/letsencrypt/live/rus-notes.ru/privkey.pem
This certificate expires on 2025-03-30.
These files will be updated when the certificate renews.
Certbot has set up a scheduled task to automatically renew this certificate in the background.
Deploying certificate
Successfully deployed certificate for rus-notes.ru to /etc/nginx/sites-enabled/default
Successfully deployed certificate for www.rus-notes.ru to /etc/nginx/sites-enabled/default
Congratulations! You have successfully enabled HTTPS on https://rus-notes.ru and https://www.rus-notes.ru
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
If you like Certbot, please consider supporting our work by:
 * Donating to ISRG / Let's Encrypt:   https://letsencrypt.org/donate
 * Donating to EFF:                    https://eff.org/donate-le
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -



Шаг 4. Проверка автоматического обновления сертификата

# certbot renew --dry-run



Шаг 5. Настройка сертификатов в Nginx

После выполнения всех вышеперечисленных действия сертификаты автоматически прописывают в /etc/nginx/suite-availabe/default.

вторник, 10 декабря 2024 г.

TypeScript, Node.js

Возникла необходимость разбираться с Node.js, при чтении книги "TypeScript Быстро" Яков Файн и Антон Моисеев.

Node.js - среда выполнения кода, написанного на JavaScript.


1. Установка NodeJS

1.1. С официального сайта скачиваем и устанавливаем NodeJS https://nodejs.org/en/


1.2 Проверяем версию NodeJS "node -v":

C:\Users\user>node -v

v22.12.0


1.3. Проверяем версию Node Package Manager "npm -v":

C:\Users\user>npm -v

10.9.0


2. Установка nvm-windows

2.1. Устанавливаем nvm-install.exe (https://github.com/coreybutler/nvm-windows);

2.2. Проверяем список установленных версий Node.js "nvm list":

C:\Users\user>nvm list
No installations recognized.


2.3. Перезапускаем cmd или ps;

2.4. Просматриваем версии, доступные для установки "nvm list available":

|   CURRENT    |     LTS      |  OLD STABLE  | OLD UNSTABLE |
|--------------|--------------|--------------|--------------|
|    23.3.0    |   22.12.0    |   0.12.18    |   0.11.16    |
|    ...       |    ...       |   ...        |        ...   |


2.5. Для большей совместимости, устанавливаем TLS версию "nvm install 22.12.00":

C:\Users\user>nvm install 22.12.0
Downloading node.js version 22.12.0 (64-bit)...
Extracting node and npm...
Complete
npm v10.9.0 installed successfully.
Installation complete. If you want to use this version, type
nvm use 22.12.0

2.6. Проверяем список установленных версий Node.js "nvm list":

C:\Users\user>nvm list
22.12.0


3. Установка TypeScript (tsc)

3.1. Установка tsc "npm install -g typescript" ("-g" - глобально):

C:\Users\user>npm install -g typescript

added 1 package in 11s
npm notice
npm notice New patch version of npm available! 10.9.0 -> 10.9.2
npm notice Changelog: https://github.com/npm/cli/releases/tag/v10.9.2
npm notice To update run: npm install -g npm@10.9.2
npm notice

3.2. Смотрим версию tsc "tsc -v":

C:\Users\user>tsc -v

Version 5.7.2


4. Пишем программу на TypeScript

4.1. Создаем каталог "demo01" в котором создаём файл main.ts со следующим содержимым:

function getFinalPrice(price: number, discount: number) {
return price - price /discount;
}
console.log(getFinalPrice(100, 10));


4.2. Компилируем main.ts в main.js "tsc main.ts

D:\library\projects\typescript\demo01>tsc main


4.3. Выполняем файл main.js "node main.js":

D:\library\projects\typescript\demo01>node main.js
90


Опции компиляции: при добавлении в main.ts строки "console.log(getFinalPrice(100, "10%"))" файл main.js будет сгенерирован, не смотря на ошибку передачи строкового аргумента "10%" в тип :numeric. Если не обходимо не выполнять компиляцию при ошибке, то необходимо выполнить компиляцию с опцией "--onEmitonError true":

D:\library\projects\typescript\demo01>tsc main.ts --onEmitOnError true

в этом случае, при наличии ошибки в тексе main.ts, файл main.js сформирован не будет.

Компилировать main.ts в main.js версии ECMAScript5:

D:\...> tsc --t ES5 main.ts


5. Создание нового проекта

5.1. В пустом каталоге для нового проекта выполните команду "tsc --init", в результате будет создан файл "tsconfig.json" со значениями компиляции по умолчанию.

понедельник, 14 октября 2024 г.

Arduino IDE (Esp32s3)

1. Установка Arduino IDE (arduino.cc).


Подготовка для программирования Esp32S3.

2. Additional board manager URLs: "https://raw.githubusercontent.com/espressif/arduino-esp32/gh-pages/package_esp32_index.json"

3. Во вкладке Board Manager ищем и устанавливаем "Esp32" (by Espressif Systems)

понедельник, 1 апреля 2024 г.

Docker. Первые контейнеры

Источник: php.dragomano.ru

Структура каталогов:

~/develop/web/project/

                 nginx/      - сервис web-сервера

               php-fpm/      - сервис php8.2

                 mysql/      - сервис mysql


I. Создание сервиса Nginx

i.1. Узнаем версию docker compose:

$ docker compose version

Docker Compose version v2.25.0


i.2. В каталоге сервиса nginx создаем docker-compose.yml-файл следующего содержания:

version: '2.25.0'

# Services

    services:

        # Nginx Service

        nginx:

            image: nginx:1.21

            ports:

                - 80:80


i.3. Переходим  каталог `~/develop/web/project/nginx`:

$ cd ~/develop/web/project/nginx


i.4. Запускаем наш контейнер на выполнение в фоновом (`-d`) режиме:

$ docker compose up -d


i.5. Просматриваем контейнеры запущенные в данный момент:

$ docker compose ps


i.6. Проверяем работу нашего сервиса:

$ wget http://localhost:80

В результате выполнения в каталоге */nginx появится файл index.html, его можно прочитать любым текстовым редактором nano, vim или др.

i.7. Для остановки контейнера выполняем:

$ docker compose stop


P.S. Разница между контейнером и сервисом следующая, сервис — один из компонентов приложения, перечисленных в docker-compose.yml. Каждый сервис ссылается на образ, который используется для запуска и остановки контейнеров на основе этого образа.


i.8. Доступ к оболочке командной строки выполняемого контейнера:

$ docker compose exec nginx bash


II. Создание сервиса Nginx + PHP-FPM

ii.1. Перейдите в каталог `project/php-fpm`:

$ cd ~/develop/web/project/php-fpm

... и создайте docker-compose.yml - файл, следующего содержания:


Docker. Подсказки по работе с контейнерами

Источник: www.ruanyifeng.com


Место хранения образов Docker и данные контейнеров:

/var/lib/docker


Проверка состояния работы сервиса Docker:

$ systemctl status docker


Перечислить образы docker на устройстве:

$ docker image ls


Удалить файл образа с устройства:

$ docker image rm [image-name]


I. Пример использования Docker

1. Переносим образ в локальное хранилище:

$ docker image pull library/hello-world

library - группа, в которой находится образ `hello-world`, её можно опустить:

$ docker image pull hello-world


2. Просмотр образа в локальном хранилище:

$ docker image ls


3. Сгенерировать работающий экземпляр контейнера из файла образа (запуск образа):

$ docker container run hello-world

, в случае, если к этому шагу docker image pull - не был выполнен, то имя указанного образа будет скопировано из хранилища Docker.

, если запуск контейнера произойдёт успешно, мы увидим на экране:

Hello from Docker!

This message shows that your installation appears to be working correctly.

...

После вывода на экран, работа контейнера завершится. В случае, если в контейнере выполняется служба, то контейнер не будет завершен.

4. Для тех контейнеров, которые автоматически не завершаются, можно выполнить команду:

$ docker container kill


5. При запуске запуске файла образа получаем выполняемый контейнер, т.е. на устройстве имеем два файла.

# Перечислить контейнеры, запущенные на устройстве

$ docker container ls

# Перечислить контейнеры, запущенных и остановленных на устройстве

$ docker container ls --all


6.  При остановке контейнера, его файл образ занимает место на диске, для удаления образа с диска устройства:

$ docker container rm [container-id]


7. Проверить удаленный файл образа можно с помощью команды:

$ docker container ls --all


II. Файл Dockerfile

Dockerfile - файл, используемый для настройки образа. Docker генерирует двоичный файл образа на основе этого файла.

...

GNU\Linux. Debian. Установка Docker

Источник: docs.docker.com

Источник: help.reg.ru

Источник: www.ruanyifeng.com


1. Обновляем пакеты:

$ sudo apt update


2. Установите пакеты, которые необходимы для работы пакетного менеджера apt по протоколу HTTPS:

$ sudo apt install apt-transport-https ca-certificates curl software-properties-common


3. Добавьте GPG-ключ репозитория Docker:

curl -fsSL https://download.docker.com/linux/debian/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg


4. Добавьте репозиторий Docker:

$ echo "deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/debian $(lsb\_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null


5. Снова обновляем пакеты:

$ sudo apt update


6.  Переключитесь в репозиторий Docker, чтобы его установить (docker-community edition):

$ apt-cache policy docker-ce


7. Установить Docker:

$ sudo apt install docker-ce


8. Проверяем работоспособность Docker:

$ sudo systemctl status docker


9. Чтобы использовать утилиту docker, нужно добавить ваше имя пользователя в группу Docker. Для этого введите в терминале команду:

$ sudo usermod -aG docker ${user}

Где user — имя пользователя.


10. Переходим в учётную запись пользователя:

$ su - ${user}

Где user — имя пользователя.


11. После завершения установки выполняем проверку версии Docker:

sudo docker version

$ sudo docker info


12. Выполняем проверку работоспособности Docker:

$ sudo docker run hello-world


13. Для обработки командной строки, необходимо выполнить проверку работы службы Docker:

$ sudo systemctl status docker


P.S. ? Дополнительно, возможно, имеет смысл установить docker-compose (пока не изучил для чего он) 

GNU\Linux. Debian. Обновление golang

Источник: тут

1. Подготавливаем каталог для скачивания новой версии языка:

# mkdir -p ~/distrib/golang && cd ~/distrib/golang

2. На официальном сайте "https://golang.org/dl/ " определяемся с номером последней версии языка go и скачиваем её:

wget https://golang.org/dl/go1.<VERSION_NUMBER>.linux-amd64.tar.gz

... в моём случае последняя версия "1.22.1":

# wget https://golang.org/dl/go1.22.1.linux-amd64.tar.gz

3. Если скачивание выполнено успешно, имеет смысл удалить прежнюю версию языка Golang:

# rm -rf /usr/local/go
# rm -rf /usr/bin/go

Проверяем есть ли еще пути, которые могут содержать каталог "go":

# which go

если найден каталог, убедитесь, что он принадлежит языку программирования "go" и удалите его тоже

4. Распаковка новой версии языка go:

# tar -C /usr/local -xzf ~/distrib/go/go1.22.1.linux-amd64.tar.gz

5. Установка переменных окружения:

# echo "export PATH=$PATH:/usr/local/go/bin" >> ~/.profile
# echo "export GOPATH=~/.go" >> ~/.profile

6. Перезагрузка переменных окружения

# source ~/.profile

7. Проверяем версию "go":

# go version
go version go1.22.1 linux/amd64

Nginx + Let's Crypt

Шаг 1. Установка Certbot # apt-get install python3-acme python3-certbot python3-mock python3-openssl python3-pkg-resources python3-pyparsing...