- Запуск проекта на локальном компьютере
- Запуск проекта на локальном компьютере через Docker
- Deployment проекта на удаленный сервер
- FAQ
1. Скачайте проект на локальный компьютер
git clone https://github.com/kenunq/Kenundev.git
2. Создайте виртуальное окружение
python -m venv venv
3. Активируйте виртуальное окружение
macOS
. venv/bin/activate
linux
source venv/bin/activate
windows
venv\Scripts\activate
4. Обновите пакетный установщик pip
python -m pip install --upgrade pip
5. Зайдите в рабочую директорию проекта(все дальнейшие действия будут осуществляется в ней)
cd Kenundev/mysite
6. Установите зависимости необходимые для запуска проекта
pip install -r requirements.txt
7. Сгенерируйте статические файлы
python manage.py collectstatic
8. Создайте файлы миграций
python manage.py makemigrations
9. Примините миграции
python manage.py migrate
10. Создайте файл .env и заполните его по примеру
SECRET_KEY = 'secret-key'
POSTGRES_NAME = 'dbname'
POSTGRES_USER = 'dbuser'
POSTGRES_PASSWORD = 'dbpassword'
POSTGRES_HOST = 'localhost'
POSTGRES_PORT = '5432'
RECAPTCHA_PUBLIC_KEY = 'public-key'
RECAPTCHA_PRIVATE_KEY = 'private-key'
REDIS_HOST = '127.0.0.1'
REDIS_PORT = '6379'
TELEBOT_ID = 'telegram-bot-id'
EMAIL_HOST_USER = 'email'
EMAIL_HOST_PASSWORD = 'email-password-IMAP'
CELERY_APP = 'mysite'
CELERY_FLOWER_URL_PREFIX = 'flower'
CELERY_FLOWER_ADDRESS = '127.0.0.1'
CELERY_FLOWER_PORT = '5555'
PROJECT_NAME = 'mysite'
MERCHANT_ID = merchant-id
SECRET_WORD = 'secret-word'
11. Запустите Redis(Как установить Redis?)
redis-server
12.Запустите сервер
python manage.py runserver
13. Для полноценной работы проекта запустите Celery во второй консоли
python manage.py runcelery
14. Откройте проект в браузере по адресу
http://127.0.0.1:8000/
Для остановки сервера нажмите CTRL+C или CMD+C(для mac) в обеих консолях
Запуск проекта на локальном компьютере через Docker
1. Скачайте проект на локальный компьютер
git clone https://github.com/kenunq/Kenundev.git
2. Зайдите в рабочую директорию проекта(все дальнейшие действия будут осуществляется в ней)
cd Kenundev/mysite
3. Создайте файл .env и заполните его по примеру
SECRET_KEY = 'secret-key'
POSTGRES_NAME = 'dbname'
POSTGRES_USER = 'dbuser'
POSTGRES_PASSWORD = 'dbpassword'
POSTGRES_HOST = 'localhost'
POSTGRES_PORT = '5432'
RECAPTCHA_PUBLIC_KEY = 'public-key'
RECAPTCHA_PRIVATE_KEY = 'private-key'
REDIS_HOST = '127.0.0.1'
REDIS_PORT = '6379'
TELEBOT_ID = 'telegram-bot-id'
EMAIL_HOST_USER = 'email'
EMAIL_HOST_PASSWORD = 'email-password-IMAP'
CELERY_APP = 'mysite'
CELERY_FLOWER_URL_PREFIX = 'flower'
CELERY_FLOWER_ADDRESS = '127.0.0.1'
CELERY_FLOWER_PORT = '5555'
PROJECT_NAME = 'mysite'
MERCHANT_ID = merchant-id
SECRET_WORD = 'secret-word'
4. Запустите Docker Desktop на пк.
5. Создайте образ и запустите контейнер
docker compose up --build
6. Откройте проект в браузере по адресу
http://127.0.0.1:8000/
Для остановки контейнера нажмите CTRL+C или CMD+C(для mac) в консоли
- Вход на удаленный сервер
- Установка необходимых пакетов из репозитория
Ubuntu - Создание базы данных
- Создание виртуального окружение
- Настройка Vim
- Тестовый запуск
- Настройка Gunicorn
- Установка Redis
- Установка Daphne
- Установка Celery
- Настройка Celery-flower и Celery-beat
- Настройка Nginx
- Подключение домена
- Настройка HTTPS
- Проверка служб
-
Войдите на удаленный сервер с помощью
SSHилиFTPlinux/macOS
ssh username@server_ipдалее введите пароль для подключения.
Windows
Для подключения по
SSHна Windows можно использовать следующее ПО, Putty или MobaXterm
-
Установите необходимык пакеты из репозитория
Ubuntu1. Обновите список пакетов репозитория
sudo apt update2. Установите необходимы пакеты
sudo apt install python3-pip python3-dev libpq-dev postgresql postgresql-contrib nginx curl
-
Создайте базу данных и пользователя для PostgreSQL
1. Войдите в интерактивный сеанс
Postgressudo -u postgres psql2. Создайте базу данных
CREATE DATABASE db_name;3. Создайте пользователя
CREATE USER db_username WITH PASSWORD 'user_password';4. Установите кодировку
UTF-8ALTER ROLE db_username SET client_encoding TO 'utf8';5. Заблокируйте чтение из незафиксированных транзакций
ALTER ROLE db_username SET default_transaction_isolation TO 'read committed';6. Установите часовой пояс
ALTER ROLE db_username SET timezone TO 'UTC';7. Предоставьте пользователю доступ для администрирования БД
GRANT ALL PRIVILEGES ON DATABASE db_name TO db_username;8. Выйдите из интерактивного режима
\q
-
Создайте виртуальное окружение для проекта
1. Обновите пакетный установщик
pipsudo -H pip3 install --upgrade pip
-
Установите
Python-3.11.71. Установите необходимые пакеты
sudo apt-get install -y make build-essential libssl-dev zlib1g-devsudo apt-get install -y libbz2-dev libreadline-dev libsqlite3-dev wget curl llvmsudo apt-get install -y libncurses5-dev libncursesw5-dev xz-utils tk-dev2. Смените пользователя на
rootsu root3. Перейдите в каталог
/optcd /opt4. Скачайте архив с исходным кодом
Python-3.11.7wget https://www.python.org/ftp/python/3.11.7/Python-3.11.7.tgz5. Распакуйте архив
tar xzvf Python-3.11.7.tgz6. Зайдите в разархивированный каталог
cd Python-3.11.77. Выполните оптимизацию компилятора при сборке
python./configure --enable-optimizations8. Скомпилируйте исходные файлы
make9. Установите скомпилируемые файлы
sudo make install10. Обратно смените пользователя
su kenun11. Перейдите в рабочую директорию
cd /home/kenun/
2. Загрузите файлы проекта на удаленный серверgit
git clone https://github.com/kenunq/Kenundev.gitscp (выполнять на локальном ПК)
scp -r <путь до директории на локальном ПК> [username]@[server_ip]:<путь куда копировать диркторию>3. Перейдите в директорию где будете создавать виртуальное окружение
cd Kenundev/4. Создайте виртуальное окружение
python3.11 -m venv venv5. Активируйте виртуальное окружение
source venv/bin/activate6. Перейдите в рабочую директорию проекта
cd mysite/7. Обновите пакетный установщик
pippip install --upgrade pip8. Установите зависимости для проекта
pip install -r requirements.txt9. Дополнительно установите
pip install gunicorn psycopg2-binary10. Для работы вебсокета установите
pip install -U 'Twisted[tls,http2]' -
-
Настройте
vimдля комфортной работы с файламиПерейдите в директорию
rootcd /rootСоздайте файл
.vimrcecho 'set tabstop=4 set shiftwidth=4 set expandtab set relativenumber set showmode set laststatus=2 set cursorline set mouse=a set mousefocus=true ' > .vimrcВернитесь в рабочую директорию проекта
cd /home/kenun/Kenundev/mysite
-
Тестовый запуск проекта
1. Смените пользователя на
rootsu root2. Разрешите входящий трафик по порту
8000sudo ufw allow 80003. Смените пользователя обратно
su kenun4. Создайте файлы миграций
python manage.py makemigrations5. Примините миграции
python manage.py migrate6. Откройте файл
settings.pyи измените переменныеALLOWED_HOSTS,DEBUGDATABASESvim mysite/settings.py... ALLOWED_HOSTS = ['server_ip'] ...
... DEBUG=False ...
... DATABASES = { 'default': { 'ENGINE': 'django.db.backends.postgresql_psycopg2', 'NAME': 'db_name', 'USER': 'db_username', 'PASSWORD': 'user_password', 'HOST': 'localhost', 'PORT': '', } } ...
7. Запустите сервер
python manage.py runserver 0.0.0.0:80008. Откройте проект в браузере по адресу
http://<server_ip>:8000/Для остановки сервера нажмите
CTRL+CилиCMD+C(для mac)Если
staticфайлы илиmediaфайлы не прогружаются - выполните следующие командыsudo chown -R www-data:www-data /home/kenun/Kenundev/mysite/staticsudo chown -R www-data:www-data /home/kenun/Kenundev/mysite/mediasudo chmod -R 777 /home/kenun/Kenundev/mysite/staticsudo chmod -R 777 /home/kenun/Kenundev/mysite/mediasudo usermod -a -G www-data $(whoami)
-
Создайте systemd socket и service файлы для Gunicorn
Gunicornнужен для автозапуска проекта, на случай перезапуска сервера, или если по какой-то причине сервер выходил из строя.
1. Проверьте работоспособность
Gunicorngunicorn --bind 0.0.0.0:8000 mysite.wsgiДля остановки сервера нажмите
CTRL+CилиCMD+C(для mac)
Для автозапуска мы будем использовать systemd
2. Смените пользователя на
rootsu root3. Создайте файл
/etc/systemd/system/gunicorn.socketсо следующим содержимымvim /etc/systemd/system/gunicorn.socket[Unit] Description=gunicorn socket [Socket] ListenStream=/run/gunicorn.sock [Install] WantedBy=sockets.target4. Создайте файл
/etc/systemd/system/gunicorn.serviceсо следующим содержимым[Unit] Description=gunicorn daemon Requires=gunicorn.socket After=network.target [Service] User=kenun Group=www-data WorkingDirectory=/home/kenun/Kenundev/mysite ExecStart=/home/kenun/Kenundev/venv/bin/gunicorn \ --access-logfile - \ --workers 3 \ --bind unix:/run/gunicorn.sock \ mysite.wsgi:application [Install] WantedBy=multi-user.target5. Запустите службу
gunicorn.socketsudo systemctl start gunicorn.socket6. Включите службу
gunicorn.servicesudo systemctl enable gunicorn.socket7. Проверьте работу
gunicorn.socketsudo systemctl status gunicorn.socketПри изменении файла
gunicorn.service- выполнитеsudo systemctl daemon-reloadПри изменении файлов проекта - выполните
sudo systemctl restart gunicornПроверить статус
gunicornsudo systemctl status gunicornПосмотреть лог
gunicorn(все ошибки связанные с запуском сервера, или внутренние ошибки сервера будут там)sudo journalctl -u gunicornДля быстрого перемещения можно использовать сочетания клавиш:
SHIFT+G- перейти в конец
G- перейти в начало
q- выход
-
Установка и настройка
Redis
1. Смените пользователя наrootsu root2. Разрешите входящий трафик по порту
6379sudo ufw allow 63793. Установите
Redissudo apt install redis-server4. Для автозапуска
Redisв файле/etc/redis/redis.confзаменитеsupervised noнаsupervised systemdvim /etc/redis/redis.conf5. Перезапустите
Redissudo systemctl restart redis.service6. Проверьте работу
Redissudo systemctl status redisТак же вы можете проверить работу
Redisи не только с помощьюsudo apt install net-toolssudo netstat -lnp | grep redis
-
Установка и настройка
Daphneдля работыWebSocket1. Установите
Daphnesudo apt install daphne2. Создайте файл
/etc/systemd/system/daphne.serviceсо следующим содержимымvim /etc/systemd/system/daphne.service[Unit] Description=WebSocket Daphne Service After=network.target [Service] Type=simple User=root WorkingDirectory=/home/kenun/Kenundev/mysite ExecStart=/home/kenun/Kenundev/venv/bin/python /home/kenun/Kenundev/venv/bin/daphne -b 0.0.0.0 -p 8001 mysite.asgi:application Restart=on-failure [Install] WantedBy=multi-user.target3. Примените изменения
sudo systemctl daemon-reload4. Запустите службу
daphne.serviesudo systemctl start daphne.service5. Проверьте слежбу
daphne.servicesudo systemctl status daphne.service6. Для автозапуска
Daphneсоздайте файл/root/boot.shсо следующим содержимымvim /root/boot.sh#!/bin/sh sudo systemctl start daphne.service7. Установите запуск этого файла как скрипт
chmod u+x /root/boot.sh8. Сообщите
systemd, чтобы он запускал/root/boot.shпри перезагрузке сервераvim /etc/systemd/system/on_boot.service[Service] ExecStart=/bin/bash /root/boot.sh [Install] WantedBy=default.target9. Перезагрузите конфигурацию
systemdsudo systemctl daemon-reload10. Запустите службу
on_bootsudo systemctl start on_boot11. Включите службу
on_bootsudo systemctl enable on_boot12. Разрешите входящий трафик по порту 8001
sudo ufw allow 800113. Перезапустите сервер
sudo shutdown -r now14. Проверьте состояние следующих служб
systemctl status on_boot.servicesystemctl status daphne.servicesystemctl status gunicorn.service
-
Установка и настройка
Celery Worker1. Установите
Celerysudo apt -y install celery2. Создайте файл
/etc/systemd/system/celery.serviceсо следующим содержимымvim /etc/systemd/system/celery.service[Unit] Description=Celery Service After=network.target [Service] Type=forking User=kenun Group=www-data EnvironmentFile=/etc/conf.d/celery WorkingDirectory=/home/kenun/Kenundev/mysite ExecStart=/bin/sh -c '${CELERY_BIN} multi start ${CELERYD_NODES} \ -A ${CELERY_APP} --pidfile=${CELERYD_PID_FILE} \ --logfile=${CELERYD_LOG_FILE} --loglevel=${CELERYD_LOG_LEVEL} ${CELERYD_OPTS}' ExecStop=/bin/sh -c '${CELERY_BIN} multi stopwait ${CELERYD_NODES} \ --pidfile=${CELERYD_PID_FILE}' ExecReload=/bin/sh -c '${CELERY_BIN} multi restart ${CELERYD_NODES} \ -A ${CELERY_APP} --pidfile=${CELERYD_PID_FILE} \ --logfile=${CELERYD_LOG_FILE} --loglevel=${CELERYD_LOG_LEVEL} ${CELERYD_OPTS}' Restart=always [Install] WantedBy=multi-user.target3. Создайте файл
/etc/conf.d/celery(vim и nano не хочет сохранять файл без расширения)touch /etc/conf.d/celery4. Отройкте файл
/etc/conf.d/celeryи добавьте в него следующее содержимоеvim /etc/conf.d/celeryCELERY_APP="mysite" CELERY_BIN="/home/kenun/Kenundev/venv/bin/celery" CELERYD_NODES="w1" CELERYD_MULTI="multi" CELERYD_OPTS="--time-limit=300 --concurrency=8" CELERYD_PID_FILE="/var/run/celery/%n.pid" CELERYD_LOG_FILE="/var/log/celery/%n%I.log" CELERYD_LOG_LEVEL="INFO" CELERYBEAT_SCHEDULE_FILE="/var/run/celery/celerybeat-schedule" CELERYBEAT_PID_FILE="/var/run/celery/beat.pid" CELERYBEAT_LOG_FILE="/var/log/celery/beat.log" CELERY_FLOWER_URL_PREFIX="flower" CELERY_FLOWER_LOG_FILE="/var/log/celery/flower.log" CELERY_FLOWER_ADDRESS="127.0.0.1" CELERY_FLOWER_PORT="5555"5. Создайте файл
/etc/tmpfiles.d/celery.confсо следующим содержимымvim /etc/tmpfiles.d/celery.confd /var/run/celery 0755 mysite www-data - d /var/log/celery 0755 mysite www-data -6. Примените изменения
sudo systemctl daemon-reload7. Запустите службу
Celerysudo systemctl start celery8. Включите службу
Celerysystemctl enable celery.service9. Проверьте работоспособность
Celerysudo systemctl status celery
-
Настройка
Celery flowerиCelery beat1. Создайте файл
/etc/systemd/system/celerybeat.serviceсо следующим содержимымvim /etc/systemd/system/celerybeat.service[Unit] Description=Celery Beat Service After=network.target [Service] Type=simple User=kenun Group=www-data EnvironmentFile=/etc/conf.d/celery WorkingDirectory=/home/kenun/Kenundev/mysite ExecStart=/bin/sh -c '${CELERY_BIN} -A ${CELERY_APP} beat \ -s ${CELERYBEAT_SCHEDULE_FILE} \ --pidfile=${CELERYBEAT_PID_FILE} \ --logfile=${CELERYBEAT_LOG_FILE} \ --loglevel=${CELERYD_LOG_LEVEL}' Restart=always [Install] WantedBy=multi-user.target2. Создайте файл
/etc/systemd/system/celeryflower.serviceсо следующим содержимымvim /etc/systemd/system/celeryflower.service[Unit] Description=Flower Celery Service After=network.target [Service] User=kenun Group=www-data EnvironmentFile=/etc/conf.d/celery WorkingDirectory=/home/kenun/Kenundev/mysite ExecStart=/bin/sh -c '${CELERY_BIN} -A ${CELERY_APP} flower \ --url_prefix=${CELERY_FLOWER_URL_PREFIX} --port=${CELERY_FLOWER_PORT} \ --address=${CELERY_FLOWER_ADDRESS} \ --log-file-prefix=${CELERY_FLOWER_LOG_FILE} --loglevel=${CELERYD_LOG_LEVEL}' Restart=on-failure Type=simple [Install] WantedBy=multi-user.target3. Примените изменения
sudo systemctl daemon-reload4. Запустите службу
Celery beatsudo systemctl start celerybeat5. Запустите службу
Celery flowersudo systemctl start celeryflower6. Включите службу
Celery beatsystemctl enable celerybeat.service7. Включите службу
Celery flowersystemctl enable celeryflower.service8. Проверьте работоспособность
Celery beatsudo systemctl status celerybeat9. Проверьте работоспособность
Celery flowersudo systemctl status celeryflower
-
Настройте Nginx для пропуска прокси к Gunicorn
1. Создайте файл
/etc/nginx/sites-available/mysiteсо следующим содержимымvim /etc/nginx/sites-available/mysiteserver { listen 80; server_name <server_ip>; location /static/ { root /home/kenun/Kenundev/mysite; } location /media/ { root /home/kenun/Kenundev/mysite; } location / { include proxy_params; proxy_pass http://unix:/run/gunicorn.sock; } }2. В файле
/etc/nginx/nginx.confзаменитеuser www-dataв самом начале наkenun3. Создайте символическую ссылку
sudo ln -s /etc/nginx/sites-available/mysite /etc/nginx/sites-enabled4. Проверьте конфигурацию
nginxsudo nginx -t5. Перезапустите
nginxsudo systemctl restart nginx6. Удалите
8000порт из входящего трафикаsudo ufw delete allow 80007. Разрешите входящий трафик через
firewallпорт80sudo ufw allow 'Nginx Full'8. Перезапустите
gunicornsudo systemctl restart gunicorn9. Перезагрузите сервер
sudo shutdown -r now10. Откройте проект в браузере по адресу
http://<server_ip>/Если проект успешно отобразился можно идти дальше
-
Подключение домена
1. После покупки домена нужно подключить
DNSна хостинге вашего сервера. Создайте А-запись с привязкой к ip вашего сервера.2. Измените конфигурацию
nginxvim /etc/nginx/sites-available/mysiteserver { listen 80; server_name <domain> www.<domain> <server_ip>; location /static/ { root /home/kenun/Kenundev/mysite; } location /media/ { root /home/kenun/Kenundev/mysite; } location / { include proxy_params; proxy_pass http://unix:/run/gunicorn.sock; } }3. Перезапустите
nginxsudo systemctl reload nginx4. Проверьте конфигурацию
nginxsudo nginx -t5. Добавьте новые доменные имена в
ALLOWED_HOSTSв файлеsettings.pyvim /home/kenun/Kenundev/mysite/mysite/settings.py... ALLOWED_HOSTS = ['domain', 'www.domain', 'server_ip'] ...6. Примените изменения
service gunicorn restartТеперь может потребоваться некоторое время пока ваш сайт станет доступным на вашем домене
Когда ваш сайт станет доступен на вашем домене - можно идти дальше
-
Настройка
HTTPS1. Установите
certbotsudo apt install certbot python3-certbot-nginx2. Проверьте установился ли
certbotcertbot --version3. Убедитесь, что конфигурация
nginxв порядкеsudo nginx -t4. Удалите
HTTPпорт из входящего трафикаsudo ufw delete allow 'Nginx HTTP'5. Получите
SSL-сертификатsudo certbot --nginx -d <domain> -d www.<domain>6. Проверьте состояние службы
certbot.timersudo systemctl status certbot.timer7. Протестируйте процесс обновления
sudo certbot renew --dry-run8. Обновите конфигурацию
nginxvim /etc/nginx/sites-available/mysiteserver { listen 80; server_name www.<domain> <domain>; return 301 https://$host$request_uri; } server { listen 443 ssl; ssl_certificate /etc/letsencrypt/live/<domain>/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/<domain>/privkey.pem; server_name www.<domain>; return 301 $scheme://<domain>$request_uri; } server { listen 443 ssl; ssl_certificate /etc/letsencrypt/live/<domain>/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/<domain>/privkey.pem; include /etc/letsencrypt/options-ssl-nginx.conf; ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; server_name <domain>; client_max_body_size 20M; location /static/ { root /home/kenun/Kenundev/mysite; } location /media/ { root /home/kenun/Kenundev/mysite; } location / { proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; proxy_pass http://unix:/run/gunicorn.sock; } location /ws/ { proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade"; proxy_redirect off; proxy_pass http://127.0.0.1:8001; } }9. Обновите конфигурацию
Daphnevim /etc/systemd/system/daphne.service[Unit] Description=WebSocket Daphne Service After=network.target [Service] Type=simple User=root WorkingDirectory=/home/kenun/Kenundev/mysite ExecStart=/home/kenun/Kenundev/venv/bin/python /home/kenun/Kenundev/venv/bin/daphne -e ssl:8001:privateKey=/etc/letsencrypt/live/<domain>/privkey.pem:certKey=/etc/letsencrypt/live/<domain>/fullchain.pem mysite.asgi:application Restart=on-failure [Install] WantedBy=multi-user.target10. Перезапустите
nginxsudo systemctl restart nginx11. Перезагрузите сервер
sudo shutdown -r now
-
Проверка служб
Проверьте следующие службы
sudo systemctl status gunicornsudo systemctl status daphnesudo systemctl status redissudo systemctl status celerysudo systemctl status celeryflowersudo systemctl status celerybeatsudo systemctl status nginxsudo systemctl status certbot.timerЕсли все работает корректно, тогда посетите ваш сайт по адресу
https://<domain>/и убедитесь, что все работет как и должно работать.Спасибо, что уделили время, чтобы познакомиться с моим проектом! Я надеюсь, что он окажется полезным и интересным для вас. Если у вас возникнут вопросы или предложения, не стесняйтесь обращаться ко мне.
- Команды
-
Серверные
sudo systemctl status <service_name>- Посмотреть статус службы
sudo systemctl stop <service_name>- Остановить службу
sudo systemctl start <service_name>- Запуск службы
sudo systemctl restart <service_name>- Перезапуск службы
sudo systemctl disable <service_name>- Отключить автозапуск службы
sudo journalctl -u <service_name>- Посмотреть логи службы
sudo systemctl enable <service_name>- Включить автозапуск службыsudo systemctl restart gunicorn- При изменении файлов проекта
sudo systemctl restart daphne- При изменении файлов связанных вWebsocketsudo journalctl -u gunicorn- Посмотреть логи сервера -
linux
rm <path>- Удалить файл
rmdir <path>- Удалить директорию
mkdir <path>- Создать директорию
cd <path>- Перейти в директорию
cd ..- Перейти на директорию назад
touch <path>- Создать файл
echo '<content>' > <path>- Записать информацию в конец файла
sudo ss -tulpn- Посмотреть открытые порты
pwd- Посмотреть в какой директории я сейчас нахожусь
ls <path>- Посмотреть какие файлы содержит директория
ls -l <path>- Тоже самое, что иls <path>, но будут показаны доп. параметры файлов
ip a- Узнатьipсервера -
VIM
:q- Выйти изvim
:q!- Выйти изvimбез изменений
:qw- Выйти изvimс сохранением
:w- Сохранить файл
v- Выделение посимвольно
shift+v- Выделение построчно
y- Скопировать
p- Вставить
gg- Перейти в начало файла
shift+g- Перейти в конец файла
a- Начать писать справа от курсора
i- Начать писать слева от курсораesc- Зайти в режимCommand mode
-