Настраиваем простой Git сервер

Допустим у нас есть домашний сервер с ip 8.8.8.8 и нам надо на нем развернуть git сервер, для этого необходимо на сервере выполнить:

  1. sudo adduser git - создадим пользователя git
  2. su git
  3. cd ~
  4. mkdir .ssh && chmod 700 .ssh - создадим каталог .ssh
  5. touch .ssh/authorized_keys && chmod 600 .ssh/authorized_keys
  6. cat /путь к ключу одного из разрабов/id_rsa.pub >> ~/.ssh/authorized_keys - добавляем открытые SSH-ключи разработчиков (столько ключей, сколько разработчиков) в файл authorized_keys.
  7. mkdir git
  8. cd git
  9. mkdir project.git
  10. cd project.git
  11. git init --bare - создаем репозиторий без рабочего каталога. Это самая главная строчка по сути с ее помощью мы и создали git сервер. Заметьте, что кто-то должен заходить на сервер и создавать голый репозиторий каждый раз, когда вы хотите добавить новый проект.

Допустим на локальном компе Васи есть проект и он послужит первоисточником:

  1. cd myproject
  2. git init
  3. git add .
  4. git commit -m 'Initial commit'
  5. git remote add origin git@8.8.8.8:/home/git/git/project.git - файлы проекта залиты на сервер.

Теперь все остальные могут клонировать проект: git clone git@8.8.8.8:/home/git/git/project.git


4.4 Git на сервере - Настраиваем сервер

Проброс портов на Mikrotik

Для наглядности представим что у нас есть внешний статический ip и допустим у нас есть локальный компьютер с ip 192.168.0.10. Мы хотим сделать возможным подключаться к нему по ssh (22 порт) через интернет. Но мы хотим чтоб из интернета подключались например к порту 9022.

Читать дальше...

Базовые заметки про docker

Шпаргалка по командам докера

  • docker system prune - удалит остановленные контейнеры, все висячие образы и все неиспользуемые сети

контейнер

  • docker run имя_контейнера - запуск контейнера (можно указать образ:тэг, тогда поднимется новый контейнер)

    • -d - в фоновом режиме
    • --name название_контейнера - со своим названием контейнера
    • -p 8080:80 - проброска порта (портНаХостовойМашине:портКонтейнера)
    • -e MYSQL_ROOT_PASSWORD=123456 - пробрасывает переменные окружения внутрь контейнера
  • docker stop имя_контейнера - остановка контейнера (вместо имени можно указывать id)

  • docker rm имя_контейнера - удаление контейнера

  • docker exec -ti название_контейнера /bin/sh - заходим в запущенный контейнер

  • docker logs -f название_контейнера - посмотреть логи внутри контейнера

  • docker ps - отображает список запущенных контейнеров

    • -a - отображать все, в том числе и не запущенные контейнеры
  • docker inspect название_контейнера - показать данные контейнера (ip, пути к volumes и т.д.)

  • docker container prune - удаляет ВСЕ остановленные контейнеры.

Читать дальше...

frontend

Установка Gulp:

  1. Устанавливаем Node.js (если не установлено)
  2. Устанавливаем gulp npm install gulp -g (один раз - глобально) ??? нужно??
  3. Открываем папку с проектом в консоле
  4. npm init - создает файл package.json, который содержит информацию о проекте (описание проекта и зависимости).
  5. npm install gulp --save-dev - устанавливаем gulp в папку с проектом

Примечание: npm install gulp --save-dev === npm i gulp -D (алисы не везде работают)
6. Перечень необходимых пакетов:
* npm i browserify -D - позволяет вам использовать стиль node.js модулей для работы в браузере. Мы определяем зависимости и потом Browserify собирает их в один маленький и чистенький JavaScript файл.
* npm i vinyl-source-stream -D - виртуальная файловая система для чтения/записи файлов. Получаем выходные данные Browserify и сохранить их в файл с помощью Gulp.
* npm i rimraf -D - полностью очищает каталог
* npm i stringify -D - позволяет подключать статические файлы, например шаблоны.
* npm i gulp-sftp -D - закачиваем изменения по ssh
Примечание: При установки все скаченые модули располагаются в папке node_modules, зависимости прописываются в файл package.json. Если папка node_modules удалена, но в package.json прописаны зависимости, установить все пакеты можно командой npm install.
7. Создаем в корне проекта файл gulpfile.js Ниже показано содержимое файла.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
// импорт npm модулей в проект
var gulp = require('gulp'),
browserify = require('browserify'),
source = require('vinyl-source-stream'),
rimraf = require('rimraf'),
stringify = require('stringify');

var sourceFile = './src/main.js', // местоположение главного нашего js файла, точки входа
destFolder = './dist', // местоположение финального файла
destFile = 'bundle.js'; // имя, которое мы хотим дать нашему финальному файлу

// Сбор проекта в один файл
gulp.task('build', function() { // [0]
return browserify(sourceFile) // [1]
.transform(stringify({extensions: ['.tpl'], minify: true})) // [2]
.bundle() // [3]
.pipe(source(destFile)) // [4]
.pipe(gulp.dest(destFolder)); // [5]
});

[0] данная функция вызывается в консоле так: gulp build. В формальных параметрах могут также указываться функции, которые необходимо выполнить до начала работы данной функции, например gulp.task('build', ['copy-static'], function() { вызываем сначала функцию copy-static.

[1] главное тут в Browserify, ему передаем точку входа в наше приложение

[2] transform - метод Node, с которым можно работать благодаря browserify. Преобразует поток нужным образом.
stringify - позволяет подключать статические файлы, например шаблоны.
extensions: [‘.html’, ‘.tpl’, ‘.hbs’] - указываем форматы каких статических файлов можно подключать и позволяет складывать их в переменную
minify - минимизирует файлы
Пимечание: если в gulpfile.js не указать stringify, то в файлах проекта нельзя будет подключать шаблоны: var AppTpl = require('./../templates/App.tpl');

[3] используем потоковый Browserify API для того, чтобы вернуть поток с нашим JS контентом

[4] [5] перекидываем информацию из потока в файл и сохраняем его в директорию.

Примечание: Функции require, pipe и transform относятся к Node:

1) require - метод для импорта модулей, JSON-файлов, папок и т.д.
2) pipe - принимает поток, который используется для передачи читаемого потока в записываемый.
3) transform - метод Node, с которым можно работать благодаря browserify. Преобразует поток нужным образом.


args = require(‘yargs’).argv;

gulp.task(‘test’, function () {

var env      = args.env || 'prod'; // команда в консоле: gulp test --env df (выводит df)
console.log(env);

});












https://loftblog.ru/material/gulp-js-rabotaem-s-css-concat-minify-rename-notify-watch-dest/
https://www.8host.com/blog/nachalo-raboty-s-gulp-js/
http://www.creative-seo.ru/blog/gulp-dlya-nachinayushchih/
http://pugofka.com/blog/technology/the-prepared-starting-package-front-end-development-on-gulp/
http://getinstance.info/articles/tools/introduction-to-gulp/
https://habrahabr.ru/post/224825/ !!!!!

http://www.creative-seo.ru/blog/gulp-dlya-nachinayushchih/

Миграции в yii2

Консольные команы (подробнее):

  1. yii migrate/create <name> - создаст миграцию
  2. yii migrate/create **create_**news**_table** - создаст миграцию с кодом для создания таблицы news
  3. yii migrate - выведет список всех миграций, которые не применялись до сих пор и спросит выполнить ли их.
  4. yii migrate 3 - явно указывает сколько миграций необходимо применить к БД.
  5. yii migrate/to 150101_185401 - с помощью временной метки указывает какую миграцию применить.
  6. yii migrate/down - отменяет самую последнюю применённую миграцию
  7. yii migrate/down 3 - отменяет 3 последних применённых миграции
  8. yii migrate/redo - перезагрузить последнюю применённую миграцию
  9. yii migrate/redo 3 - перезагрузить 3 последние применённые миграции
  10. yii migrate/history - показать последних 10 применённых миграций
  11. yii migrate/history 5 - показать последних 5 применённых миграций
  12. yii migrate/history all - показать все применённые миграции
  13. yii migrate/new - показать первых 10 новых миграций
  14. yii migrate/new 5 - показать первых 5 новых миграций
  15. yii migrate/new all - показать все новые миграции
  16. yii migrate/mark m150101_185401_create_news_table - Вместо применения или отката миграций, есть возможность просто отметить, что база данных была обновлена до определенной миграции. Указывается временная метка или полное имя миграции.

Читать дальше...

Установка yii2 advanced на Raspberry и локальную машину, связка с Bitbucket

Задача:
Установить на рабочий компьютер расширенную версию yii2, создать репозиторий на Bitbucket и выложить проект туда. В качестве боевого сервера настроить Raspberry и склонировать с Bitbucket проект. Дальнейшие обновления будут через Bitbucket, посредством git pull из ветки мастер.

  1. Устанавливаем Composer, если нужно, на локальную машину.

  2. Устанавливаем yii2, расширенную версию. В папке с проектами запустить команду, где name-project – имя проекта:
    composer create-project --prefer-dist yiisoft/yii2-app-advanced name-project

  3. php init - инициализируем проект, для разработки выбираем [0] Development.

  4. Инициализируем Git (в папке с проектом), индексируем и делаем первый коммит.

    1
    2
    3
    git init
    git add .
    git commit -m "fist commit"
  5. Перезапустите IDE (Актуально для phpShtorm)

    Если используете MAMP в MAC OS, то настройки для БД в common/config/main-local.php
    должны быть следующие: 'dsn' => 'mysql:host=localhost:8889;dbname=nameDB, (MAMP вешает MySQL на 8889 порт)

  6. Настройка Bitbucket.

    1. Создаем новый приватный репозиторий
    2. Заходим в раздел Обзор и следуем инструкции “Я начинаю полностью с нуля”

    Пример:

    1
    2
    3
    4
    cd /path/to/my/repo
    git remote add origin https://Falbin@bitbucket.org/Falbin/authorization.git
    git push -u origin --all # pushes up the repo and its refs for the first time
    git push origin --tags # pushes up any tags

    В локальном файле конфига (.git/config) добавилась строчка, для связи проекта с Bitbucket (более того вы уже сделали пушь проекта на Bitbucket):

    1
    2
    3
    4
    remote "origin"]
    url = https://Falbin@bitbucket.org/Falbin/authorization.git
    fetch = +refs/heads/*:refs/remotes/origin/*
    ]
  7. ssh root@192.168.0.100 - подключаемся по ssh к Raspberry

  8. Устанавливаем Git на Raspberry, если нужно.

  9. Настраиваем ssh ключ

  10. git clone git@bitbucket.org:Falbin/authorization.git - клонируем репозиторий с Bitbucket

  11. Устанавливаем composer на Raspberry, если нужно. Устанавливаем глобально:

    1. cd ~
    2. curl -sS https://getcomposer.org/installer | php
    3. sudo mv composer.phar /usr/bin/composer
  12. Перед установкой всех нужных пакетов, убедитесь что у вас настроин токен для GitHub. Без токена, GitHub ставит ограничения на колличестов запросов.

    1. Нужно авторизоваться на github.com и перейти по ссылке., затем сгенерировать ключ.
    2. Можно заранне настроить: composer config -g github-oauth.github.com <токен>, либо ввести, когда у вас запросит токе, в поле Token (hidden)
  13. composer install - Устанавливаем все пакеты, нужные нашему yii2

    После чего возникают гребанные проблемы, описанные тут.
    Мне помогло composer global require "fxp/composer-asset-plugin:~1.1.1"

Алгоритм по разработке проекта:

  1. На локальной машине создаем ветку под разные задачи, после выполнения задачи мержим с мастером.
  2. На сервере (Raspberry) делаем git pull из ветки мастер. Никаких правок на серваке вручную (иначе будут конфликты).
  3. Отличная статья, как отменять коммиты.

Полезные ссылки:

  1. Composer
  2. Документация по yii2
  3. Настраиваем ssh ключ
  4. Composer. Установка под Linux.

Сетевой адрес (IPv4, MAC, порт)

Материал сознательно упрощен чтобы создать относительно полную картину, без лишних подробностей.

Существуют два вида адресов:

  • MAC-адрес – уникальный номер любого физического устройства в сети. Состоит из двух частей:
    1. Производитель оборудования
    2. Уникальный номер устройства для данного производителя
  • IP-адрес - уникальный сетевой адрес узла. Состоит из двух частей:
    1. Адрес подсети
    2. Адрес узла (устройства) в пределах подсети.

IPv4

IP бывают 2 видов:

  1. Внешние (белые, анонсированные и т.д.) – используются в Интернете.
  2. Локальные (серые, неанонсированные, внутренние и т.д.) – не используются в Интернете.

Один из локальных диапазонов IP сетей: 192.168.0.0 — 192.168.255.255 (маска подсети: 255.255.0.0).
Здесь 192.168.x.x – адрес подсети, а 192.168.x.x – адреса устройств в пределах подсети. Но здесь необходимо исключить первый и последний узел.

  • 192.168.0.0 – первый «узел» является адресом самой сети.
  • 192.168.255.255 – последний «узел» широковещательный или broadcast, адрес сети, на который в теории должны отвечать все хосты сети.
  • Также стоит помнить об оборудовании, например, роутеры часто используют такие ip адреса: 192.168.1.1, 192.168.0.1, 192.168.2.1, 192.168.88.1 и т.д.

В классическом виде, до CIDR (маски) IP делился на классы: A.B.C.x, где:

  1. A – сеть верхнего уровня
  2. B – подсеть сети A
  3. C – подсеть сети B
  4. x – адреса узлов

С появлением маски подсети стало возможным изменять часть IP адреса, отвечающего за адреса узлов. К примеру маска 255.255.0.0, означает что первые две части IP адреса (192.168.) отводятся за сеть, а узлы могут занимать весь диапазон двух оставшихся частей IP (192.168.0.0 — 192.168.255.255). При желании с помощью маски можно часть пространства отведенных под узлы отдать сети.

Если необходимо обеспечить доступ вашему локальному серверу в Интернет, необходимо осуществить подмену (например, в настройках роутера) локального ip на внешний, который выдается провайдером.

Порт

Порт - число, которое идентифицирует программу, желающую принимать данные из сети. Любая программа, стремящаяся передать данные другой, должна занать номер порта, который закреплен за последней. Диапазон портов от 0 до 65535 (2 байта).

Пример доступа к базе данных из локальной подсети к узлу 1.10: 192.168.1.10:3306

Номера портов разделены на три диапазона:

  1. Системные (от 0 до 1023)
  2. Зарегистрированные (от 1024 до 49151)
  3. Динамические или частные (от 49152 до 65535)

Список системных портов:

  • 21: FTP
  • 22: SSH
  • 25: Простой протокол передачи почты (SMTP).
  • 53: Система доменных имен (DNS).
  • 80: Протокол передачи гипертекста (HTTP).
  • 443: HTTPS (HTTP Secure) криптографический протокол SSL.
  • Полный список портов

Шпора по командам терминала

Консольные команды для Linux

  • chmod 777 -R blog - рекусивно меняем права у папки blog
  • chown -R pi:root blog - рекурсивно меняем владельца у паки blog на pi и группу на root
  • rm -R blog - Удалить папку blog (рекурсивно)
  • rm -R * - Удалить все содержимое текущей папки (рекурсивно)
  • mkdir blog - Создать директорию blog
  • stat blog - Подробная информация о файле/директории
  • mv - Переместить или переименовать файлы
  • nslookup ya.ru - DNS-клиент позволяющий узнать ip адресс сайта и не только
  • cat /etc/*release* - данные об ОС (версия и т.д.).

    Читать дальше...

Настраиваем ftp на raspberry pi

Если надо удалить ftp сервер, выполняем следующую команду:
apt-get --purge remove vsftpd

  1. Установите vsftpd: sudo apt-get install vsftpd
  2. Отредактируйте файл vsftpd.conf: sudo nano /etc/vsftpd.conf
  3. Необходимо закомментировать атрибут anonymous_enable (комментарий #)
  4. В конец файла добовляем следующие настройки:
    1
    2
    3
    4
    5
    6
    7
    anonymous_enable=NO
    local_enable=YES
    write_enable=YES
    local_umask=0002
    anon_upload_enable=YES
    anon_mkdir_write_enable=YES
    file_open_mode=0777
    Данные настройки позваляют закачивать файлы на сервер с правами доступа: rwxrwxr-x
    Обычно права доступа у залитых по ftp файлов будут: rw- - - - - - -
  5. Сохраните настройки и выйдите, нажав CTRL-O, CTRL-X.
  6. Теперь перезапустите vsftpd: sudo service vsftpd restart