pacman -u
— обновить список пакетовpacman -S <packname>
— установить пакетpacman -R <packname>
— удаление конкретного пакета
Архивы за месяц: Февраль 2021
Docker справочник cli
docker images
— показать все локальные образы dockerdocker rmi [-f] <id|label>
— удалить образ c локальной машиныdocker rmi -f $(docker images -q)
— удалить все докер образыdocker build [-t <label>] <path>
— построить образ на основе докерфайлаdocker run [-dt] [--name <name>] [-v <path:path>] [-p <port:port>] [--...] <id|label> [cmd]
— запустить образ в контейнере c cmd-командой (необязательно)-
-d
— в фоновом режиме-t
— прикрепляет к контейнеру терминал-i
— перенаправляет ввод/вывод на текущий терминал--name
— явно указать имя контейнера, по которому можно будет обращаться к нему (иначе будет сгенерировано рэндомно)-p <external_port:internal_port>
— проброс портов-v --volume <external_path:internal_path>
— монтирует папки хоста в контейнер--rm
— удаляет контейнер после завершения работы--memory <n>
— позволяет указать количество ОЗУ, доступной контейнеру-P
— пробрасывает все порты контейнера в хост-систему--expose
— позволяет пробросить несколько портов из контейнера в хост-систему-e <"FOO=bar">
— добавляет переменную окружения в контейнер
-
docker ps [-a]
— показать все запущенные [существующие] докер контейнеры- `docker ps -q | xargs docker stats —no-stream` — посмотреть ресурсы, потребляемые запущенными контейнерами
docker stop <name>
— останавливает указанный образ (с сохранением данных)docker kill <name>
— то же самое без сохранения данныхdocker rm <name>
— удаляет указанный контейнерdocker attach <name>
— подключиться к выбранному докер-контейнеруdocker exec [-ti] <name> <cmd>
— выполняет команду в докер-контейнереdocker push <imagename>
— отправить образ в удаленный реестрdocker ps -q | xargs docker stats --no-stream
— посмотреть нагрузку на процессор и память каждого из контейнеровdocker stats
— похожа на предыдущую команду, но более короткаяdocker info --format '{{.LoggingDriver}}'
— посмотреть используемый по умолчанию лог драйвер (json-file)docker logs [<container_name>] [-f --tail 100]
— показать логи [конкретного контейнера] в терминал [последние 100 строк]docker inspect --format='{{.LogPath}}' <containername>
-показать, где хранятся логи для конкретного контейнера
Деплой на heroku
Развертывание:
Heroku — достаточно крутой сервис. У них есть свой собственный cli, который включает в себя множество консольных инструментов, в том числе для работы с git, docker и ssh. И есть несколько способов деплоя приложения:
- Деплой непосредственно в dynos-ы — легкие изолированные контейнеры (environments) с использованием готовых buildpack-ов. На странице быстрого старта есть достаточно простые инструкции, которые позволят автоматически развернуть бойлерплейт популярного фреймворка с со страницы хероку на гитхабе, внести несколько изменений и задеплоить на сервер (например, для джанго). Особенности:
- Деплой статики через
whitenoise
- Медиа файлы (и, вероятно, файлы в целом) не сохраняются в контейнере (не проверено)
- Не поддерживает sqlite (не проверено)
- Дефолтная бд —
postgresql
- Дополнительные сервисы системы можно устанавливать только в рамках существующих
buildpack
-ов
- Деплой статики через
- Деплой через docker — это деплой готового докер-контейнера.
Список основных команд:
heroku login
— залогиниться на сервере heroku с локальной машиныheroku create [--buildpack heroku/buildpackname]
— создать новое приложение heroku: cоздает новое приложение c репозиторием на сервере heroku и одновременно добавляет ссылку на удаленный репозиторий в локальный git remotegit push heroku main
— обычнаяgit push
команда, которая отправит на heroku изменения и автоматически запустить pipline (для django по дефолтуpip install -r requirements && python manage.py collectstatic
и запуск/перезапуск веб-сервера (по дефолтуgunicorn
))heroku logs --tail
— показать последние логи с сервера (терминальную сессию)heroku ps
— показывает остаток по месячной квоте и список запущенных процессовheroku ps:scale web=1
— запустить buildpack, указав явно тип;heroku ps:scale web=0
— остановить buildpack c явным указанием типа, предопределенного в Procfile.heroku open
— открыть приложение в браузереheroku local web
— запустить web buildpack локально на сервере разработкиheroku addons
— посмотреть расширения (addons) приложения на heroku (по дефолту только postresql). Addons — это преопределнные доступные удаленные сервисы на хероку, которые работают независимо от вашего dynos (либо контейнера)heroku addons:create <add-on name>
— добавить add-on.heroku run <cmd>
— запустить linux приложение или shell скрипт в терминале dynos, перенаправив ввод/вывод на текущий терминалheroku config:set VARNAME=value [-a <appname>]
— устанавливает переменную окружения на сервере [для конкретного приложения, напримерblooming-hollows-52049
]heroku config
— посмотреть все переменные окружения. По дефолту содержитDATABASE_URL
c атрибутами дефолтной базы данныхheroku pg
— посмотреть детальную информацию об используемой базе данных (postgres). См так же heroku pg:psqlheroku buildpacks:set <heroku/buildpack_name>
— установка buildpack для приложенияheroku buildpacks:remove <heroku/buildpack_name>
— удалить buildpack из приложенияheroku buildpacks:clear
— сбросить на дефолтный buildpackheroku buildpacks:add --index 1 <heroku/nodejs>
— добавить дополнительный пакет сборкиheroku buildpacks
— посмотреть все установленные buildpack-и текущего приложенияheroku help buildpacks
— справка по командеbuildpacks
;heroku plugins:install heroku-builds
— установка плагина (не должен превышать квоты 500 мб)heroku container:login
— авторизоваться в реестре контейнеров herokuheroku container:release [-a evening-tundra-50688 web]
— полагаю, что запустить контейнер [для конкретного приложения с указанным типом]heroku stack
— посмотреть какой стэк использует ваше приложениеheroku stack:set <stackname> -a <appname>
— установить стэк для приложения, например `heroku stack:set container -a evening-tundra-50688`- `heroku update beta` — обновить heroku до beta (либо обновить канал бета (прим. переводчика))
- `heroku git:remote -a <appname>` — насколько я понял, добавить ссылку на удаленный репозиторий хероку в приложение
- `heroku auth:token` — авторизоваться через сторонний сервис
Особенности бесплатного хостинга:
- ограничение по времени работы до 550 часов в месяц
- сервер засыпает после секунд простоя, следующий запрос будет дольше (вероятно, несколько секунд)
- ограниченный размер — до 500 мб
- домен третьего уровня (можно докупить отдельно)
Дополнительно:
- Buildpack для selenium;
- Buildpack chromedriver;
- Buildpack google chrome;
Полезные ссылки:
Настройка postgresql с django
Установка Postgresql
- Для начала установим саму postgresql и ее утилиты cli
sudo apt install postgresql postgresql-contrib
- По дефолту posgresql развернется с пользователем postgres. Теперь можно переключиться на пользователя postgres:
sudo -i -u postgres
и войти в консоль postresql:psql
- Задаем пароль для текущего пользователя
\password postgres
- Выходим командой
\q
и создадим новую базу данных так:createdb <dbname>
либо так из cli psql:
create database first_db owner hostgeek_db;
- Cоздадим нового пользователя postgresql:
createuser --interactive
либо так из cli psql:
create user <hostgeek_db> with password <'testpassword18'>;
Другие команды postgresql:
\q
— выход- `\conninfo` — инфо о текущем пользователе
sudo -u postgres psql
— вход в консоль postgresql одной строкой
Полезные ссылки: установка postgresql на linux, и настройка с джангой,
django cli
Команды cli для django
py manage.py createapp [appname]
— создать новое приложение в текущем проектеpy manage.py makemigrations [--empty] [appname]
— генерация [шаблона] файла миграции [в приложении]py manage.py showmigrations [appname]
— показать состояние миграций [конкретного приложения]py manage.py migrate [appname] [migration_name]
— генерация схемы БД на основе [файлов миграций] моделей [либо откат миграции кmigration_name
, которая совпадает с именем файла миграции]py manage.py migrate [appname] --fake
— отметить миграции [для конкретного приложения] как выполненныеpython manage.py sqlmigrate <appname> <migration_name>
— показывает, какие sql-запросы генерируются конкретной миграциейpy manage.py createsuperuser
— создание супер администратораpy manage.py test [packname]
— запуск тестов [конкретного пакета/приложения] проектаpy manage.py collectstatic
— объединение всех статических файловpy manage.py dumpdata [appname[.model]] [--format xml] > dump.json
— сделать дамп базы данныхpy manage.py loaddata mydata.json
— загрузить данные из дампаpy manage.py flush
— удаляет все данные из базы данныхpy manage.py dbshell
— войти в командную оболочку используемой базы данныхpython manage.py check [appname]
— сделать проверку на распространенные ошибкиpython manage.py changepassword <user_name>
— сменить пароль пользователяpy manage.py help
— показать список всех доступных команд
Дополнительно:
cli для sqlite:
(sqlite3
)
sqlite [db_filename] .dump > dump.sql
— сохранить дамп базы данных в файл либо из shell:.output dump.sql .dump
sqlite3 [db_filename] < dump.sql
— загрузить из дампа в базу данных. Либо из shell.read dump.sql
cli для mysql:
(`mysql`)
Удалить все таблицы из базы данных, не удаляя саму БД:
DROP DATABASE coding_skills_new;
CREATE DATABASE coding_skills_new;
cli для pgsql:
(psql
)
Конверторы между базами данных
- mysqltosqlite конвертор — конвертирует дамп из mysql в sqlite-совместимый формат
- mysqltopgsql конвертор — конвертирует дамп из mysql в pgsql-совместимый формат
Удалить все таблицы в postgres, не удаляя саму базу данных (полезно при ремиграциях с нуля):
DROP SCHEMA public CASCADE; CREATE SCHEMA public;
PS:
Экспорт и импорт данных в джанго
При миграции джанго вы можете столкнуться с тем, что необходимо сделать неполный дамп и накатить его на пустую бд, например, так: `py manage.py dumpdata —exclude=relevance_tests —indent 4 > dump.json`. Однако, на практике это может оказаться не так просто и вас могут поджидать множество `UNIQUE` и FOREIGN
constraint failed: django_site.domain
, поскольку джанга будет следить за целостностью данных и уникальностью ключей. А прежде, чем накатить данные, вам необходимо будет сделать миграции для новой бд:
py manage.py migrate
Однако миграции не просто создают схему для базы данных, но и заполняют некоторые из этих таблиц. А именно auth_permission, sites и content_types, и при попытке записать данные поверх уже существующих данных с теми же ключами, мы имеем то, что имеем. Поэтому при дампе эти таблицы необходимо исключить приложения:
py manage.py dumpdata --exclude=sites --exclude=contenttypes --exclude=my_app --indent 4 > dump.json
Второй нюанс заключается в кодировке. В моем случае получившийся дамп надо было вручную перегнать в utf-8, иначе loaddata его принимала.
Есть и еще один нюанс. В примере выше, вы вероятно, заметили, что я не перечислил приложение auth, в котором лежит модель permissions, и сделал это сознательно, поскольку хотел экспортировать пользователей. Теперь чтобы избежать конфликта ключей, для loaddata необходимо явно исключить таблицу permission из:
py manage.py loaddata --exclude=auth.permission data.json
Так же стоит обратить внимание на ключ —natural-foreign. В официальной документации рекомендуют его использовать при дампе Permission и ContentType моделей.
Утилиты linux
rsync
- -v — выводит подробную информацию о процессе копирования;
- [-a] — сохраняет все атрибуты оригинальных файлов;
- -u — не перезаписывать более новые файлы;
- -l — копирует символьные ссылки;
- -L — копирует содержимое ссылок;
- -p — сохраняет права для файлов;
- -t — сохраняет время модификации;
- -e — использовать другой транспорт, например, ssh;
- [-z] — cжимает файлы перед передачей;
- —recursive — перебирать директории рекурсивно;
- —exclude — Исключить файлы по шаблону;
Примеры:
rsync -avz skillproject/data/ .
— из подкаталога в текущий каталогrsync -avz skillproject/data/ aaa/
— из подпапки в подпапкуaaa/
rsync -avz skillproject/data/ digita6d@digita6d.beget.tech:/home/d/digita6d/code-skills.ru/public_html/sources/skillproject/data/
— передача на удаленный серверrsync -avze ssh skillproject/data/ digita6d@digita6d.beget.tech:/home/d/digita6d/code-skills.ru/public_html/sources/skillproject/data/
— то же самое м явным указанием ssh
ss
- -l или —listening — посмотреть только прослушиваемые порты;
- -p или —program — показать имя программы и ее PID;
- -t или —tcp — показать tcp порты;
- -u или —udp показать udp порты;
- -n или —numeric показывать ip адреса в числовом виде.
Примеры:
ss -tlpn
— проверить все прослушивающие tcp-портыss -tulpn | grep :80
— показать все процессы, работающие на 80-м порту
ps
ps -e
— показать все процессыps -ef
— показать подробную информацию о каждом процессеps -ef | grep phantom
— найти все процессы с именем `phantom`
mpstat
Показывает статистику загрузки процессора. Команды:
mpstat
— показывает общую информацию- `mpstat -P ALL` — по каждому ядру
free
Показывает потребление ОЗУ на текущий момент:
free -h
— показывает информацию в гигабайтах (более человеко читаемо, чем в байтах)
top
Что-то наподобие диспетчера задач, только для линукс, показывает попроцессное потребление озу
dpkg
Пакетный менеджер для debian систем (не путать с системой управления пакетами — apt
/apt-get
)
dpkg -s <packname>
— проверить, установлен ли пакетdpkg -l
— список всех пакетовdpkg -l | grep apache2
— проверить, установлен ли конкретный пакетdpkg -i <package.deb>
— установить пакет
netstat
netstat -pnltu
— посмотреть список используемых портов
См так же краткий ликбез.
Основы pip
Шпаргалка для pip
pip install package_name [package_name [package_name]]
— установить пакет или список пакетовpip install package_name==x.x
— установить пакет конкретной версииpip install -r requirements.txt
— установка пакетов из указанного файлаpip install git+https://github.com/Sanshain/tortoise-orm.git[@name]
— установить пакет с гитхабpip freeze > requiremrnts.txt
— сохранить список пакетов окружения в файлpip list
— вывести список пакетов в консольpip install [package_name ] -U
— обновить пакетpip uninstall package_name [package_name [package_name]]
— удалить пакет или список пакетовpip show package_name
— показать зависимости пакетовpip -V
— показать установленную версию pip