ssh туннель (бесплатный VPN по SSH)

На удаленной машине:

Настраиваем ssh сервер.

sudo nvim /etc/ssh/sshd_config 

PermitTunnel yes

AllowTCPForwarding yes


Перезапускаем ssh сервер.

systemctl restart sshd



На локальной машине

sudo su

ssh -f -v -o Tunnel=point-to-point -o ServerAliveInterval=10 -o TCPKeepAlive=yes -w 100:100 root@IP-remote-host \

'/sbin/ifconfig tun100 172.16.40.1 netmask 255.255.255.252 pointopoint 172.16.40.2' && \

/sbin/ifconfig tun100 172.16.40.2 netmask 255.255.255.252 pointopoint 172.16.40.1


где IP-remote-host - IP удаленной машины.


Проверяем открыт-ли порт на удаленной машине

nc -zvw3 IP-remote-host

 Connection to IP-remote-host port [tcp/ssh] succeeded!

Изменить уровень запуска в systemd



В Ubuntu 16.04 вместо init используется systemd, поэтому понятие runlevelsзаменяется термином targets. Таким образом, действительно существует соответствие между уровнями запуска на основе init и целями на основе systemd: Mapping between runlevels and systemd targets
 ┌─────────┬───────────────────┐
 │Runlevel           │ Target                                           │ 
 ├─────────┼───────────────────┤
 │0                       │ poweroff.target                             │ 
 ├─────────┼───────────────────┤
 │1                       │ rescue.target                                 │ 
 ├─────────┼───────────────────┤
 │2, 3, 4               │ multi-user.target                           │
 ├─────────┼───────────────────┤ 
 │5                       │ graphical.target                            │ 
 ├─────────┼───────────────────┤ 
 │6                       │ reboot.target                                 │  
 └─────────┴───────────────────┘


Теперь, чтобы просто изменить «уровни запуска» в 16.04, вы можете использовать, например:

sudo systemctl isolate multi-user.target


Чтобы сделать это «уровнем запуска» по умолчанию, вы можете использовать:

sudo systemctl enable multi-user.target 
sudo systemctl set-default multi-user.target

remap caps lock ctrl

в консоли, а не в X11

sudo usermod -a -G input user

где user - имя пользователя


evtest

No device specified, trying to scan all of /dev/input/event*

Available devices:

/dev/input/event4:      AT Translated Set 2 keyboard 



evtest /dev/input/event4                                                                            


Input driver version is 1.0.1                                                                                                            

Input device ID: bus 0x11 vendor 0x1 product 0x1 version 0xab41                                                                          

Event: time 1630747582.938161, type 4 (EV_MSC), code 4 (MSC_SCAN), value 3a

Event: time 1630747582.938161, type 1 (EV_KEY), code 58 (KEY_CAPSLOCK), value 0



dmesg | grep input


sudo vim /lib/udev/hwdb.d/90-keyboard-changes.hwdb

evdev:input:b0011v0001p0001*KEYBOARD_KEY_3a=leftctrl


systemd-hwdb -s update

udevadm trigger /dev/input/event4


Тест

evtest /dev/input/event4

Event: time 1630751006.715770, type 4 (EV_MSC), code 4 (MSC_SCAN), value 3a

Event: time 1630751006.715770, type 1 (EV_KEY), code 29 (KEY_LEFTCTRL), value 1

Создание LVM на «горячей» машине

 Создать LVM раздел на уже установленной системе просто. Первым шагом будет убедиться, что раздел, который Вы хотите сделать LVM не примонтирован, а лучше вообще не создан. В случае, если он не создан, то нужно выполнить команды:


fdisk /dev/mb123, где /dev/mb123 — диск на котором мы создаём раздел.


Жмём d для удаления раздела. enter


Далее объявляем раздел LVM. Для этого жмём t, указываем номер раздела и вводим id lvm. Это 8e. Жмём w — записать изменения на диск.


Проделываем подобные операции со всеми дисками, которые планируется добавить в LVM массив. Что бы проверить успешность действий выше можно ввести команду:


fdisk -l /dev/mb123


В выводе мы увидим раздел с меткой LVM.


Теперь нужно создать физические разделы на LVM. Для этого воспользуемся командой:


pvcreate /dev/mb123  и для остальных дисков так же.


Ну и теперь объединяем их в один логический раздел:


vgcreate vg0 /dev/mb123 /dev/sdb1 (тут указываются все разделы, которые нужно объединить в один)


Далее нужно создать том на логическом разделе командой lvcreate:


lvcreate -L2G -nlogvol1 vg0 (где logvol1 метка тома)


Для монтирования LVM используются следующие конструкции, изменённые для конкретного случая:


mkfs.ext4 /dev/vg0/logvol1 — создаётся файловая система


И монтируем её

mount /dev/vg0/storage1 /home


Для постоянного монтирования раздела добавляем строку в fstab:

vi /etc/fstab

/dev/vg0/storage1  /home    ext4    defaults        1 2

Заменить текст во всех файлах

 sudo find . -type f -name "*.php" -print0 | xargs -0  sed -i 's/text1/текст один/g'

yii2 docker-compose.yml

На старте уже должны стоять docker, docker-compose, php и php-composer.

Создаем папку с проектом и в ней папку docker.


mkdir lk_site

cd lk_site && mkdir docker

cd docker


В папке docker создаем файл docker-compose.yml для поднятия окружения разработки.


vim docker-compose.yml

 

start____________________________________________________________

# Последняя версия docker-compose

version: '3'


# Создаем общую сеть deafult для всех контейнеров

networks:

  default:

    driver: bridge

services:

  web:

    build: ./web

    # Подключаем к общей сети с другими контейнерами

    networks: 

       - default

    # Запускаем только после db

    depends_on: 

      - db    

    # Линкуем внешнюю папку с исходниками внутрь

    volumes:

      - ${APP_PATH_HOST}:${APP_PATH_CONTAINER}

      - "../conf/apache2:/etc/apache2/sites-available"

    ports:

      - 8085:80

    working_dir: ${APP_PATH_CONTAINER}

  db:

    image: mariadb

    # Подключаем к общей сети с другими контейнерами

    networks: 

      - default

    restart: always

    environment:

      MARIADB_ROOT_PASSWORD: example

      MARIADB_DATABASE: yii2db

      MARIADB_USER: userdb

      MARIADB_PASSWORD: secret

    volumes:

      - ${DB_PATH_HOST}:/var/lib/mysql

  adminer:

    image: adminer

    restart: always

    ports:

      - 8088:8080 

  composer:

    image: composer:2.0.8

    volumes:

      - ${APP_PATH_HOST}:${APP_PATH_CONTAINER}

    working_dir: ${APP_PATH_CONTAINER}

    command: composer install

  nvim:

    build: ./nvim

    tty: true

    volumes:

      - ${APP_PATH_HOST}:${APP_PATH_CONTAINER}

    working_dir: ${APP_PATH_CONTAINER}


end____________________________________________________________

    

В папке docker создаем файл .ENV

vim .ENV


start____________________________________________________________

#PATHS

DB_PATH_HOST= ../databases

APP_PATH_HOST= ../www

APP_PATH_CONTAINER= /var/www/html/

end____________________________________________________________


В папке web создаем файл конфигурации нашего контейнера Dockerfile.

    

mkdir web

cd web


vim Dockerfile


start____________________________________________________________

FROM php:7.4-apache


# Install system dependencies

RUN apt-get update && apt-get install -y \

    curl \

    libpng-dev \

    libonig-dev \

    libxml2-dev \

    zip \

    unzip


# Clear cache

RUN apt-get clean && rm -rf /var/lib/apt/lists/*


# Install PHP extensions

RUN docker-php-ext-install pdo_mysql mbstring exif pcntl bcmath gd

# gd with-freetype требуется для капчи в yii2. После для проверки "php -r 'var_dump(gd_info());'"

RUN docker-php-ext-configure gd --with-freetype   && docker-php-ext-install gd


WORKDIR /var/www/html/

end____________________________________________________________


В папке nvim создаем файл конфигурации нашего контейнера Dockerfile astronvim.

    

cd .. && mkdir nvim

cd nvim


vim Dockerfile


start____________________________________________________________

FROM alpine:edge


# Install system dependencies

RUN apk add bash git lua nodejs npm lazygit bottom python3 go neovim ripgrep alpine-sdk --update


RUN git clone https://github.com/AstroNvim/AstroNvim ~/.config/nvim


RUN nvim --headless -c "autocmd User PackerComplete quitall"


WORKDIR /var/www/html/

end____________________________________________________________



Для apache2 создаем папку lk_site/conf/apache2 и файл 000-default.conf в ней. Файлик может изменяться, в зависимости от того, как вы хотите настроить apache2 на своем проекте. Его можно менять локально, т.к. он подключается через volume. Но надо не забывать внутри контейнера перезагружать apache2: service apache2 reload


cd ../.. && mkdir conf

cd conf && mkdir apache2

cd apache2


vim 000-default.conf


start____________________________________________________________

<VirtualHost *:80>                                                                              

        ServerName lk.site.ru


        ServerAdmin webmaster@localhost

        DocumentRoot /var/www/html


        ErrorLog ${APACHE_LOG_DIR}/error.log

        CustomLog ${APACHE_LOG_DIR}/access.log combined

        #Include conf-available/serve-cgi-bin.conf

</VirtualHost>

end____________________________________________________________


Все команды выполняются из корневой папки.


cd ..


Выполняем команду создания проекта:

composer create-project --prefer-dist yiisoft/yii2-app-advanced:2.0.47 www


В файле composer.json меняем это

    "repositories": [

        {

            "type": "composer",

            "url": "https://asset-packagist.org"

        }

    ]

на это

    "repositories": [

        {

            "type": "composer",

            "url": "https://asset-packagist.org",

            "options": {

            "ssl": {

          "verify_peer": false

            }

            }

        }

    ]


Запускаем окружение:

docker-compose -f docker/docker-compose.yml up -d --build


Инициализируем проект:

www/init --env=Development --overwrite=All


Открываем в редакторе файл www/common/config/main-local.php и заполняем его данными для подключения к БД.


Подключаемся к контейнеру:

docker exec -it docker_web_1 bash


Выполняем команду миграции БД:

php /var/www/html/yii migrate


Создаем папку для логов mkdir /var/www/html/log


И выходим exit



Тормозим сервис:

docker-compose -f docker/docker-compose.yml down


Запускаем его заново:

docker-compose -f docker/docker-compose.yml up -d


Открываем localhost:8085 в браузере и смотрим на новый сайт.


Шпаргалка:

Из папки doker

docker-compose ps - вывести список контенеров в папке docker

docker-compose stop web

docker-compose stop db

docker-compose rm web - удуалить



Применение

Основные команды для Docker:


docker-compose up -d

чтобы запустить все службы в вашем стеке в фоновом режиме


docker-compose ps

вывести список запущенных сервисов


docker-compose logs -f

просматривать журналы для всех служб, непрерывно


docker-compose stop

чтобы изящно остановить все службы в вашем стеке


docker-compose kill

немедленно остановить все службы в вашем стеке


docker-compose down -v

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


Для запуска команд в контейнере


docker-compose run --rm web composer install

запускает установку композитора в новом контейнере


docker-compose exec web bash

выполняет bash в запущенной php службе

Поиск по этому блогу