понедельник, 6 августа 2018 г.

Django + Python3 + Nginx + Gunicorn кое-что адаптировано под 2018


Django + Python3 + Nginx + Gunicorn

кое-что адаптировано под 2018
ubuntu 18.04





Источник




Здравствуй, дорогой друг!
Затрону тему, которая не раз обсуждалась на форуме. Здесь же можете найти ссылки на многие туториалы по тому, как развернуть свой сайт на сервере.
Также есть уже готовый рецепт.
Я захотел написать вариант немножко в другой связке: Python3 (уж простите, но вот так мне приятнее), в качестве веб-сервера Nginx, в качестве http-сервера Gunicorn, размещаемся на digitalocean.com.
Внимание! Статейка моя адресована больше тем, кто делает первые шаги в разворачивании боевого сервера, она достаточно подробная и может вызвать приступы скуки и, возможно, тошноты у "бывалых".
Почему решил написать свой вариант, несмотря на то, что есть уже рецепты и на самом digitalocean.com? 4 пункта:
просто по их рецепту у меня ничего не вышло, в итоге я слепил картину из трех источников; потому что кому-то, только начавшему, мой вариант может и помочь. Чтоб не натыкались на те же грабли. Я просидел за решением проблем 3 вечера, а знал бы как правильно, сделал бы быстрее; вдруг кто-нибудь увидит в моих шагах сложность и предложит более правильное решение (я буду только рад, т.к. сам еще далеко не гуру); ну и также я оставлю это здесь, чтоб самому в перспективе обращаться. Итак! Пользоваться будем сервисом digitalocean.com (далее DO). Если еще кто-то не знаком, попробуйте. Это провайдер облачного хостинга. Для пробы используйте промо-код "radio-t" и вам на аккаунт упадет 10$ (сейчас июль 2014. Если читаете позже, код может не действовать). На минималке с одним инстансом 10$ хватит на 2 месяца.
Предположу, что вы уже зарегистрировались и денежки у вас на аккаунте уже есть.
1) Первое, что сразу посоветую сделать - создайте пару SSH и закиньте публичный на DO, для этого у них есть вкладка "SSH Keys". Далее это вам сильно облегчит жизнь.
2) Создадим инстанс (у них это называется "droplet"). Очень просто все: Нажимаете "Create" -> В поле ввода вносите имя дроплета (in english, please) -> выбираете размер -> выбираете регион (Для сайтов, которые ориентированы на Евразию, лучше выбрать Амстердам или Лондон) -> Затем выбираете дистрибутив (я ставил Ubuntu 12.04) -> жмакаете на свой ssh key (если создавали, под выбором дистрибутива должен появится пункт по этому поводу) -> и жмакаете "Create droplet". Ждете минтку.
3) Далее, если создавали ssh, заходите в терминал и коннектитесь с вашим дроплетом. Предположим, что ваш IP 111.222.333.44 (можете его найти под именем дроплета).
ssh root@111.222.333.44
Если все сделали правильно, то должно все сработать. При первом заходе, спросит вашего подтверждения, что вы хотите законнектится по этому ключу, это стандартное поведение при работе через ssh. Подтверждайте.
Если вы не захотели заморачиваться с ключами, то можете зайти в дроплет на сайте DO и кликнуть на большую синюю кнопку "Console Access". Т.е. вы будете все то же самое делать через браузер, но для входа нужен будет пароль, который DO вышлют вам на почту.
Ну, это была только прелюдия
Вот вы в консоли. Давайте установим все необходимые программы.
4) Для начала нужно сделать апгрейд
sudo apt-get update

sudo apt-get upgrade
5) Если вы следуете за мной по пятам и поставили Ubuntu 12.04, то вам следует поставить python3 (напомню, что описание для определенной связки. Если работаете на 2.х-версии, то вы молодец, вам это не нужно делать).
sudo apt-get install python3
6) Поставим nginx
sudo apt-get install nginx
7) Ставим третий pip.
sudo apt-get install python3-setuptools?

sudo apt install python3-pip
!!!!sudo easy_install3 pip
8) Virtualenv
установим само виртуальное окружение
sudo pip3 proxy 109.126.3.245:1989 install  virtualenv!!!pip3 install virtualenv #если pip не хочет, можете поставить командой easy_install3 virtualenv
sudo mkdir /opt/myenvsudo chown user:user /opt/myenv
virtualenv /opt/myenv   # myenv можете заменить на любое другое имя
user@u_18_s:~$ virtualenv /opt/myenvUsing base prefix '/usr'New python executable in /opt/myenv/bin/python3Also creating executable in /opt/myenv/bin/pythonInstalling setuptools, pip, wheel...done.user@u_18_s:~$
source /opt/myenv/bin/activate # активируем виртуальное окружение. После этого в начале строки консоли должен появиться маркер (myenv)
(myenv) user@u_18_s:~$
Далее внутри виртуального окружения ставим необходимый пакет программ
9) Ставим django и gunicorn.


(myenv) user@u_18_s:~$ pip3 install django gunicorn

 предварительно настроить прокси !!!
pip install django gunicorn
__________________________________________(myenv) user@u_18_s:~$ pip install django gunicorn
Collecting django
  Downloading https://files.pythonhosted.org/packages/51/1a/e0ac7886c7123a03814178d7517dc822af0fe51a72e1a6bff26153103322/Django-2.1-py3-none-any.whl (7.3MB)
    100% |████████████████████████████████| 7.3MB 4.5MB/s
Collecting gunicorn
  Downloading https://files.pythonhosted.org/packages/8c/da/b8dd8deb741bff556db53902d4706774c8e1e67265f69528c14c003644e6/gunicorn-19.9.0-py2.py3-none-any.whl (112kB)
    100% |████████████████████████████████| 122kB 11.1MB/s
Collecting pytz (from django)
  Downloading https://files.pythonhosted.org/packages/30/4e/27c34b62430286c6d59177a0842ed90dc789ce5d1ed740887653b898779a/pytz-2018.5-py2.py3-none-any.whl (510kB)
    100% |████████████████████████████████| 512kB 8.9MB/s
Installing collected packages: pytz, django, gunicorn
Successfully installed django-2.1 gunicorn-19.9.0 pytz-2018.5
_________________________________________
На этом все установки закончились. Теперь перейдем к тестам и запуску.
10) Создадим проект
Все стандартно: перейдем в окружение, если еще не там
cd /opt/myenv
source bin/activate
и
django-admin.py startproject myproject
перейдем в папку проекта
cd myproject
11) Тест gunicorn
теперь именно из папки проекта (там, где лежит manage.py) запускаем gunicorn
gunicorn myproject.wsgi:application --bind 111.222.333.44:8000  #пишете ваш ip
Теперь в строке вашего браузера наберите 111.222.333.44:8000 #пишете ваш ip
Должна появиться стартовая страница django "It worked!"
Если работает, я радуюсь вместе с вами.

Получаем ошибку:

(myenv) user@u_18_s:/opt/myenv/myproject$ gunicorn myproject.wsgi:application --bind 10.240.230.60:8000[2018-08-10 11:02:30 +0000] [3218] [INFO] Starting gunicorn 19.9.0[2018-08-10 11:02:30 +0000] [3218] [INFO] Listening at: http://10.240.230.60:8000 (3218)[2018-08-10 11:02:30 +0000] [3218] [INFO] Using worker: sync[2018-08-10 11:02:30 +0000] [3221] [INFO] Booting worker with pid: 3221Invalid HTTP_HOST header: '10.240.230.60:8000'. You may need to add '10.240.230.60' to ALLOWED_HOSTS.Bad Request: /Invalid HTTP_HOST header: '10.240.230.60:8000'. You may need to add '10.240.230.60' to ALLOWED_HOSTS.Bad Request: /favicon.ico

edit this:
(myenv) user@u_18_s:/opt/myenv/myproject/myproject$ vi settings.py

change to:

ALLOWED_HOSTS = ['*']

start again ok!

myenv) user@u_18_s:/opt/myenv/myproject$ gunicorn myproject.wsgi:application --bind 10.240.230.60:8000



start again ok!

12) Статика
К сожалению, статика к нашему проекту еще не подключена. И вы можете в этом убедиться, сделав python manage.py syncdb

2018!
$python manage.py syncdb is deprecated and not supported now. So instead of this follow below instructions..
Whatever model you have created: First run:
$python manage.py makemigrations
After running this command you model will be reflected in a migration.
Then you have to run:
$python manage.py migrate
(myenv) user@u_18_s:/opt/myenv/myproject$ python manage.py migrateOperations to perform:  Apply all migrations: admin, auth, contenttypes, sessionsRunning migrations:  Applying contenttypes.0001_initial... OK  Applying auth.0001_initial... OK  Applying admin.0001_initial... OK  Applying admin.0002_logentry_remove_auto_add... OK  Applying admin.0003_logentry_add_action_flag_choices... OK  Applying contenttypes.0002_remove_content_type_name... OK  Applying auth.0002_alter_permission_name_max_length... OK  Applying auth.0003_alter_user_email_max_length... OK  Applying auth.0004_alter_user_username_opts... OK  Applying auth.0005_alter_user_last_login_null... OK  Applying auth.0006_require_contenttypes_0002... OK  Applying auth.0007_alter_validators_add_error_messages... OK  Applying auth.0008_alter_user_username_max_length... OK  Applying auth.0009_alter_user_last_name_max_length... OK  Applying sessions.0001_initial... OK


Then run server:
$python manage.py runserver



затем перезапустить gunicorn 

(myenv) user@u_18_s:/opt/myenv/myproject$ python manage.py runserver 10.240.230.60:8000Performing system checks...
System check identified no issues (0 silenced).August 10, 2018 - 11:18:55Django version 2.1, using settings 'myproject.settings'Starting development server at http://10.240.230.60:8000/Quit the server with CONTROL-C.[10/Aug/2018 11:19:11] "GET / HTTP/1.0" 404 74[10/Aug/2018 11:19:18] "GET /admin HTTP/1.0" 301 0[10/Aug/2018 11:19:18] "GET /admin/ HTTP/1.0" 302 0[10/Aug/2018 11:19:18] "GET /admin/login/?next=/admin/ HTTP/1.0" 200 1819[10/Aug/2018 11:19:18] "GET /static/admin/css/base.css HTTP/1.0" 404 99[10/Aug/2018 11:19:18] "GET /static/admin/css/responsive.css HTTP/1.0" 404 105[10/Aug/2018 11:19:18] "GET /static/admin/css/login.css HTTP/1.0" 404 100


и зайти в админку (ваш_ip:8000/admin). Будет все без стилей.











Разместим статику в папке проекта.
Открываем settings.py либо в вашем любимом редакторе, либо через nano.
nano settings.py
и прописываем static_root
STATIC_ROOT = '/opt/myenv/myproject/static/'
сохраняем и выходим
из папки проекта запускаем
python manage.py collectstatic
в папке проекта появится папка с именем static
(myenv) user@u_18_s:/opt/myenv/myproject$ python manage.py collectstatic
119 static files copied to '/opt/myenv/myproject/static'.(myenv) user@u_18_s:/opt/myenv/myproject$ ls /opt/myenv/myproject/staticadmin


13) Настроим nginx
перейдем по следующему пути
cd /etc/nginx/sites-available/
открываем файлик default
nano default
Удаляем оттуда все и пишем
server {
    listen 80;
    server_name 111.222.333.44; #либо ip, либо доменное имя
    access_log  /var/log/nginx/example.log;

    location /static/ {
        root /opt/myenv/myproject/;
        expires 30d;
    }

    location / {
        proxy_pass http://127.0.0.1:8000; 
        proxy_set_header Host $server_name;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }
  }
Сохраняем, выходим.
14) "Поехали!" (с)
возвращаемся в папку проекта
cd /opt/myenv/myproject
Перезапустим nginx
sudo service nginx restart
Запустим gunicorn
gunicorn myproject.wsgi:application


(myenv) user@u_18_s:/opt/myenv/myproject$ gunicorn myproject.wsgi:application   [2018-08-10 11:42:27 +0000] [1637] [INFO] Starting gunicorn 19.9.0
[2018-08-10 11:42:27 +0000] [1637] [INFO] Listening at: http://127.0.0.1:8000 (1637)
[2018-08-10 11:42:27 +0000] [1637] [INFO] Using worker: sync
[2018-08-10 11:42:27 +0000] [1640] [INFO] Booting worker with pid: 1640

В браузере набираем 111.222.333.44
It worked!



15) Supervisor.
Чтобы наше приложение стратовало после любого непредвиденного ребута или сбоя, нам нужно обзавестись supervisor-ом.
Установим supervisor
apt-get install supervisor
Создадим конфиг файл для gunicorn
cd /opt/myenv/myproject/myproject #лучше делать именно в каталоге с settings.py
touch gunicorn.conf.py
Открываем на редактирование
nano gunicorn.conf.py
или

vi /opt/myenv/myproject/myproject/gunicorn.conf.py


Вносим
bind = '127.0.0.1:8000'
workers = 3
user = "nobody" ## changed to "user" fo me

создадим конфиг файл для супервизора
cd /etc/supervisor/conf.d/
touch myproject.conf

Откроем
nano myproject.conf
или
sudo vi  /etc/supervisor/conf.d/myproject.conf



Внутрь внесем
[program:myproject]
command=/opt/myenv/bin/gunicorn myproject.wsgi:application -c /opt/myenv/myproject/myproject/gunicorn.conf.py
directory=/opt/myenv/myproject
user=nobody ## changed to user fo me

autorestart=true
redirect_stderr=true
Команды для supervisor
sudo supervisorctl rereadsudo supervisorctl update
sudo supervisorctl status myproject
sudo supervisorctl restart myproject
После старта роверяем свой сайт в браузере. Должен работать.
Останавливаем машину
sudo shutdown -r now
Или можно просто вырубить инстанс
Заводим и проверяем. Все должно работать.



Create django addmin


source /opt/myenv/bin/activate
python /opt/myenv/myproject/manage.py createsuperuser

user@u_18_s:~$ source /opt/myenv/bin/activate
(myenv) user@u_18_s:~$ cd /opt/myenv/myproject
(myenv) user@u_18_s:/opt/myenv/myproject$ python manage.py createsuperuser
Username (leave blank to use 'user'): admin
Email address:
Password:
Password (again):
Superuser created successfully.


заходим на : ..../admin

получаем 
OperationalError at /admin/login/ attempt to write a readonly database
решение было :

vi /opt/myenv/myproject/myproject/gunicorn.conf.py

Вносим
bind = '127.0.0.1:8000'
workers = 3
user = "nobody" ## changed to "user" fo me=======================================================
sudo vi  /etc/supervisor/conf.d/myproject.conf

Внутрь внесем
[program:myproject]
command=/opt/myenv/bin/gunicorn myproject.wsgi:application -c /opt/myenv/myproject/myproject/gunicorn.conf.py
directory=/opt/myenv/myproject
user=nobody ## changed to user fo me

autorestart=true
redirect_stderr=true======================================================
Обязательные правки для боевого.
1) в settings.py
DEBUG = False  #так должно быть
2) Но при debug = False обязательно нужно указать ALLOWED_HOSTS­. Это, по идее, должен быть ваш домен
3) если вы просто скопировали проект из другого места, то лучше заменить SECRET_KEY
=======================================================
Какие еще могут появиться проблемы?
Невероятные кейсы
Кейс 1
Если вы запустили gunicorn, а после этого вышли из терминала, вспомнили, что хотели еще небольшие правки внести. Зашли снова в терминал. Внесли правки. Перезапустили nginx. Запускаете gunicorn, а он выдет вам следующее:
Retrying in 1 second… # несколько раз
Can't connect to ваш_IP
Есть вероятность, что просто ваш процесс gunicorn уже запущен.
Проверяем.
ps xa | grep gunicorn
если появилась портянка с гоникорнами, то так и есть
убиваем процесс
killall gunicorn
затем запускаем.
Кейс 2
Если вы создали дроплет и зашли по ключу, а потом этот дроплет кикнули, а потом снова создали ))))), есть вероятность, что вам дадут тот же IP. В этом случае при коннекте по ssh может ругнуться на ошибку. Не беспокойтесь! Откройте known_hosts (данный файл содержит список адресов и соответствующих им публичных ключей. лежит в .ssh на вашем компьютере) и почистите его. (Не самый лучший способ, если у вас несколько уже "настроенных" пар ключей).

вторник, 31 июля 2018 г.

ubuntu proxy. total / Complex definition

Complex definition :


root@client:~# 
vi /etc/profile.d/proxy.sh
# create new (set proxy settings to the environment variables)

MY_PROXY_URL="prox.srv.world:3128"

HTTP_PROXY=$MY_PROXY_URL
HTTPS_PROXY=$MY_PROXY_URL
FTP_PROXY=$MY_PROXY_URL
http_proxy=$MY_PROXY_URL
https_proxy=$MY_PROXY_URL
ftp_proxy=$MY_PROXY_URL

export HTTP_PROXY HTTPS_PROXY FTP_PROXY http_proxy https_proxy ftp_proxy

root@client:~# 
source /etc/profile.d/proxy.sh
# apt proxy setting

root@client:~# 
vi /etc/apt/apt.conf
# create new

Acquire::http::proxy "http://prox.srv.world:3128/";
Acquire::https::proxy "https://prox.srv.world:3128/";
Acquire::ftp::proxy "ftp://prox.srv.world:3128/";
# wget proxy setting

root@client:~# 
vi /etc/wgetrc
# add to the end

http_proxy = prox.srv.world:3128
https_proxy = prox.srv.world:3128
ftp_proxy = prox.srv.world:3128




apt

 sudo vi /etc/apt/apt.conf.d/10proxy
___________

Acquire::http::proxy "http://ip:port/";
Acquire::https::proxy ""http://ip:port/";/";
Acquire::::Proxy "true";


_____________

*10proxy  - any name

curl

https://github.com/bagder/everything-curl/blob/master/usingcurl-proxies.md

curl -x ip:port http:/example.com/


minicube

Before minikube start,I command
 export http_proxy=http://localhost:8123
 export https_proxy=http://localhost:8123

then
minikube start --docker-env HTTP_PROXY=$http_proxy \ --docker-env HTTPS_PROXY=$https_proxy



git

https://gist.github.com/evantoli/f8c23a37eb3558ab8765

In Detail

Configure the proxy

You can configure these globally in your user ~/.gitconfig file using the --global switch, or local to a repository in its .git/config file.

Setting a global proxy

Configure a global proxy if all access to all repos require this proxy
git config --global http.proxy http://proxyUsername:proxyPassword@proxy.server.com:port

URL specific proxy

If you wish to specify that a proxy should be used for just some URLs that specify the URL as a git config subsection using http.<url>.key notation:
git config --global http.https://domain.com.proxy http://proxyUsername:proxyPassword@proxy.server.com:port
Which will result in the following in the ~/.gitconfig file:
[http]
[http "https://domain.com"]
 proxy = http://proxyUsername:proxyPassword@proxy.server.com:port

src
https://qiita.com/hana_shin/items/e7a1c3fa18ad5889af8a

1 Minikubeとは?

Minikubeは、単一ノードのKubernetes環境を構築するためのコマンドです。
複数台から構成される環境は構築できません。
ここでは、下記公式ページにしたがって、MinikubeによるKubernetes環境を構築してみました。
https://kubernetes.io/docs/tasks/tools/install-minikube/#before-you-begin

2 環境

VMware Workstation 14 Player上の仮想マシンを使いました。
仮想マシンのOS版数は以下のとりです。仮想マシンは、最小構成で作成しました。
OS版数
[root@master ~]# cat /etc/redhat-release
CentOS Linux release 7.4.1708 (Core)

[root@master ~]# uname -r
3.10.0-693.el7.x86_64

3 仮想マシンをIntel-VT対応に変更

「Intel VT-x...」のチェックボックスをONにして、仮想マシンを起動します。
minikube2.png
仮想マシンが起動したら、Intel-VT対応かどうかを確認します。
なお、lscpuコマンドのインストール方法は、ここ(lscpuコマンドの使い方)を参照してください。
ゲストマシンの確認
[root@master ~]# lscpu |grep vmx
Flags:                 fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 ss syscall nx pdpe1gb rdtscp lm constant_tsc arch_perfmon nopl xtopology tsc_reliable nonstop_tsc eagerfpu pni pclmulqdq vmx ssse3 fma cx16 pcid sse4_1 sse4_2 x2apic movbe popcnt tsc_deadline_timer aes xsave avx f16c rdrand hypervisor lahf_lm abm 3dnowprefetch tpr_shadow vnmi ept vpid fsgsbase tsc_adjust bmi1 avx2 smep bmi2 invpcid mpx rdseed adx smap clflushopt xsaveopt xsavec arat

/proc/cpuinfoの中身を直接確認することもできます。
[root@master ~]# cat /proc/cpuinfo |grep vmx
flags           : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 ss syscall nx pdpe1gb rdtscp lm constant_tsc arch_perfmon nopl xtopology tsc_reliable nonstop_tsc eagerfpu pni pclmulqdq vmx ssse3 fma cx16 pcid sse4_1 sse4_2 x2apic movbe popcnt tsc_deadline_timer aes xsave avx f16c rdrand hypervisor lahf_lm abm 3dnowprefetch tpr_shadow vnmi ept vpid fsgsbase tsc_adjust bmi1 avx2 smep bmi2 invpcid mpx rdseed adx smap clflushopt xsaveopt xsavec arat
(以下、略)

4 kubectlコマンドのインストール

リポジトリの追加
[root@master ~]# vi /etc/yum.repos.d/kubernetes.repo
[root@master ~]# cat /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=https://packages.cloud.google.com/yum/repos/kubernetes-el7-x86_64
enabled=1
gpgcheck=1
repo_gpgcheck=1
gpgkey=https://packages.cloud.google.com/yum/doc/yum-key.gpg https://packages.cloud.google.com/yum/doc/rpm-package-key.gpg
kubectlパッケージのインストール
[root@master ~]# yum install -y kubectl

[root@master ~]# kubectl version
Client Version: version.Info{Major:"1", Minor:"10", GitVersion:"v1.10.4", GitCommit:"5ca598b4ba5abb89bb773071ce452e33fb66339d", GitTreeState:"clean", BuildDate:"2018-06-06T08:13:03Z", GoVersion:"go1.9.3", Compiler:"gc", Platform:"linux/amd64"}
Server Version: version.Info{Major:"1", Minor:"10", GitVersion:"v1.10.0", GitCommit:"fc32d2f3698e36b93322a3465f63a14e9f0eaead", GitTreeState:"clean", BuildDate:"2018-03-26T16:44:10Z", GoVersion:"go1.9.3", Compiler:"gc", Platform:"linux/amd64"}

5 VirtualBoxのインストール

下記ページよりVirtualBoxパッケージをダウンロードします。
https://www.virtualbox.org/wiki/Linux_Downloads
minikube1.png
VirtualBoxパッケージのダウンロード
[root@master ~]# wget https://download.virtualbox.org/virtualbox/5.2.12/VirtualBox-5.2-5.2.12_122591_el7-1.x86_64.rpm
--2018-06-20 19:52:52--  https://download.virtualbox.org/virtualbox/5.2.12/VirtualBox-5.2-5.2.12_122591_el7-1.x86_64.rpm
download.virtualbox.org (download.virtualbox.org) をDNSに問いあわせています... 23.217.126.192
download.virtualbox.org (download.virtualbox.org)|23.217.126.192|:443 に接続しています... 接続しました。

[root@master ~]# ls VirtualBox-5.2-5.2.12_122591_el7-1.x86_64.rpm
VirtualBox-5.2-5.2.12_122591_el7-1.x86_64.rpm
ダウンロードしたパッケージをインストールします。
私の環境では、以下のようなエラーが発生しました。
VirtualBoxパッケージのインストール
[root@master ~]# rpm -ivh VirtualBox-5.2-5.2.12_122591_el7-1.x86_64.rpm
警告: VirtualBox-5.2-5.2.12_122591_el7-1.x86_64.rpm: ヘッダー V4 DSA/SHA1 Signature、鍵 ID 98ab5139: NOKEY
エラー: 依存性の欠如:
        libGL.so.1()(64bit) は VirtualBox-5.2-5.2.12_122591_el7-1.x86_64 に必要とされています
        libICE.so.6()(64bit) は VirtualBox-5.2-5.2.12_122591_el7-1.x86_64 に必要とされています
        libSDL-1.2.so.0()(64bit) は VirtualBox-5.2-5.2.12_122591_el7-1.x86_64 に必要とされています
        libSM.so.6()(64bit) は VirtualBox-5.2-5.2.12_122591_el7-1.x86_64 に必要とされています
        libX11-xcb.so.1()(64bit) は VirtualBox-5.2-5.2.12_122591_el7-1.x86_64 に必要とされています
        libX11.so.6()(64bit) は VirtualBox-5.2-5.2.12_122591_el7-1.x86_64 に必要とされています
        libXcursor.so.1()(64bit) は VirtualBox-5.2-5.2.12_122591_el7-1.x86_64 に必要とされています
        libXext.so.6()(64bit) は VirtualBox-5.2-5.2.12_122591_el7-1.x86_64 に必要とされています
        libXinerama.so.1()(64bit) は VirtualBox-5.2-5.2.12_122591_el7-1.x86_64 に必要とされています
        libXmu.so.6()(64bit) は VirtualBox-5.2-5.2.12_122591_el7-1.x86_64 に必要とされています
        libXrender.so.1()(64bit) は VirtualBox-5.2-5.2.12_122591_el7-1.x86_64 に必要とされています
        libXt.so.6()(64bit) は VirtualBox-5.2-5.2.12_122591_el7-1.x86_64 に必要とされています
        libfontconfig.so.1()(64bit) は VirtualBox-5.2-5.2.12_122591_el7-1.x86_64 に必要とされています
        libpng15.so.15()(64bit) は VirtualBox-5.2-5.2.12_122591_el7-1.x86_64 に必要とされています
        libpng15.so.15(PNG15_0)(64bit) は VirtualBox-5.2-5.2.12_122591_el7-1.x86_64 に必要とされています
        libvpx.so.1()(64bit) は VirtualBox-5.2-5.2.12_122591_el7-1.x86_64 に必要とされています
        libxcb.so.1()(64bit) は VirtualBox-5.2-5.2.12_122591_el7-1.x86_64 に必要とされています
エラーメッセージに表示されたパッケージインストールします。
パッケージの追加インストール
[root@master ~]# yum -y install libGL* libICE* libSDL* libSM* libX11* libXcursor* libXext* libXinerama* libXmu* libXrender* libXt* libfontconfig* libpng15* libvpx* libxcb*
再度、VirtualBoxパッケージをインストールします。
私の環境では、インストール完了まで少し時間(数分)がかかりました。
改めてVirtualBoxのインストール
[root@master ~]# rpm -ivh VirtualBox-5.2-5.2.12_122591_el7-1.x86_64.rpm
警告: VirtualBox-5.2-5.2.12_122591_el7-1.x86_64.rpm: ヘッダー V4 DSA/SHA1 Signature、鍵 ID 98ab5139: NOKEY
準備しています...              ################################# [100%]
更新中 / インストール中...
   1:VirtualBox-5.2-5.2.12_122591_el7-################################# [100%]

Creating group 'vboxusers'. VM users must be member of that group!

6 minikubeコマンドのインストール

minikubeコマンドのダウンロード&インストール
[root@master ~]# curl -Lo minikube https://storage.googleapis.com/minikube/releases/latest/minikube-linux-amd64 && chmod +x minikube && sudo mv minikube /usr/local/bin/
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100 40.8M  100 40.8M    0     0   121k      0  0:05:43  0:05:43 --:--:--  143k
minikubeの版数
[root@master ~]# minikube version
minikube version: v0.28.0
利用可能なKubernetes一覧
[root@master ~]# minikube get-k8s-versions
The following Kubernetes versions are available when using the localkube bootstrapper:
        - v1.10.0
        - v1.9.4
        - v1.9.0
        - v1.8.0
        - v1.7.5
        - v1.7.4
        - v1.7.3
        - v1.7.2
        - v1.7.0
        - v1.7.0-rc.1
        - v1.7.0-alpha.2
        - v1.6.4
        - v1.6.3
        - v1.6.0
        - v1.6.0-rc.1
        - v1.6.0-beta.4
        - v1.6.0-beta.3
        - v1.6.0-beta.2
        - v1.6.0-alpha.1
        - v1.6.0-alpha.0
        - v1.5.3
        - v1.5.2
        - v1.5.1
        - v1.4.5
        - v1.4.3
        - v1.4.2
        - v1.4.1
        - v1.4.0
        - v1.3.7
        - v1.3.6
        - v1.3.5
        - v1.3.4
        - v1.3.3
        - v1.3.0

7 Kubernetesクラスタの起動

minikubeコマンドを実行して、Kubernetesクラスタを起動します。
私の環境では、実行完了するまで60分程度かかりました。
Kubernetesクラスタの起動
[root@master ~]# minikube --vm-driver=virtualbox start
Starting local Kubernetes v1.10.0 cluster...
Starting VM...
Downloading Minikube ISO
 153.08 MB / 153.08 MB [============================================] 100.00% 0s
Getting VM IP address...
Moving files into cluster...
Downloading kubeadm v1.10.0
Downloading kubelet v1.10.0
Finished Downloading kubeadm v1.10.0
Finished Downloading kubelet v1.10.0
Setting up certs...
Connecting to cluster...
Setting up kubeconfig...
Starting cluster components...
Kubectl is now configured to use the cluster.
Loading cached images from config file.
ちなみに、kubernetesクラスタを停止するには、stopコマンドを使います。
Kubernetesクラスタのの停止
[root@master ~]# minikube stop
Stopping local Kubernetes cluster...
Machine stopped.

8 Minikubeの状態確認

状態確認
[root@master ~]# minikube status
minikube: Running
cluster: Running
kubectl: Correctly Configured: pointing to minikube-vm at 192.168.99.100
公開しているサービス一覧
[root@master ~]# minikube service list
|-------------|----------------------|-----------------------------|
|  NAMESPACE  |         NAME         |             URL             |
|-------------|----------------------|-----------------------------|
| default     | kubernetes           | No node port                |
| kube-system | kube-dns             | No node port                |
| kube-system | kubernetes-dashboard | http://192.168.99.100:30000 |
|-------------|----------------------|-----------------------------|

9 ノードの状態確認

クラスタの状態確認
[root@master ~]# kubectl cluster-info
Kubernetes master is running at https://192.168.99.100:8443
KubeDNS is running at https://192.168.99.100:8443/api/v1/namespaces/kube-system/services/kube-dns:dns/proxy

To further debug and diagnose cluster problems, use 'kubectl cluster-info dump'.
ノードの状態確認
[root@master ~]# kubectl get node -o wide
NAME       STATUS    ROLES     AGE       VERSION   EXTERNAL-IP   OS-IMAGE            KERNEL-VERSION   CONTAINER-RUNTIME
minikube   Ready     master    3m        v1.10.0   <none>        Buildroot 2018.05   4.16.14          docker://17.12.1-ce
コンテキストの確認
[root@master ~]# kubectl config get-contexts
CURRENT   NAME       CLUSTER    AUTHINFO   NAMESPACE
*         minikube   minikube   minikube

10 podの起動/削除

nginxのPodを起動してみます。ここでもpodの起動に時間(20?分程度)がかかりました。
Podの起動
[root@master ~]# kubectl run nginx --image=nginx
deployment.apps "nginx" created

podの状態を確認する。まだ、Podの作成中(ContainerCreating)であることがわかる。
[root@master ~]# kubectl get pod
NAME                     READY     STATUS              RESTARTS   AGE
nginx-65899c769f-sqfhk   0/1       ContainerCreating   0          23s

podの状態を確認する。PodがRunning状態になったことがわかる。
[root@master ~]# kubectl get pod
NAME                     READY     STATUS    RESTARTS   AGE
nginx-65899c769f-sqfhk   1/1       Running   0          14m

deploymentの状態を確認する。
[root@master ~]# kubectl get deployment
NAME      DESIRED   CURRENT   UP-TO-DATE   AVAILABLE   AGE
nginx     1         1         1            1           25m
Podの削除
[root@master ~]# kubectl delete deployment nginx
deployment.extensions "nginx" deleted

[root@master ~]# kubectl get pod
No resources found.

[root@master ~]# kubectl get deployment
No resources found.

11 エラー対処

Podは起動したものの、メッセージ(/var/log/messages)を確認すると
エラーらしきメッセージが多数出力されていたので、その対処をしました。

11.1 "Configuration file /etc/systemd/system/kubelet.service is marked executable. Please remove executable permission bits. Proceeding anyway."

ユニットファイル(kubelet.service)に実行権が設定されていたので、表題のエラーがでていたようです。
指示にしたがって、ユニットファイルの実行権を落としました。
[root@master ~]# ls -l /etc/systemd/system/kubelet.service
-rwxr-xr-x. 1 root root 221  6月  8 22:39 /etc/systemd/system/kubelet.service

[root@master ~]# chmod 644 /etc/systemd/system/kubelet.service
[root@master ~]# ls -l /etc/systemd/system/kubelet.service
-rw-r--r--. 1 root root 221  6月  8 22:39 /etc/systemd/system/kubelet.service

11.2 "unable to load client CA file /etc/kubernetes/pki/ca.crt: open /etc/kubernetes/pki/ca.crt: no such file or directory"

[root@master ~]#vi /etc/systemd/system/kubelet.service.d/10-kubeadm.conf
#Environment="KUBELET_AUTHZ_ARGS=--authorization-mode=Webhook --client-ca-file=/etc/kubernetes/pki/ca.crt"
Environment="KUBELET_AUTHZ_ARGS=--authorization-mode=Webhook --client-ca-file=/root/.minikube/ca.c

среда, 11 июля 2018 г.

python3 hw 03


вести два объекта Python и вывести первый непустой из них. Если оба пустые, вывести NO.

https://uneex.org/LecturesCMC/PythonIntro2017/Homework_AndOr

#!/usr/bin/python3
a,b = eval(input("Введите: "))
while a or b  :
    if a  : print(a)
    elif b : print(b)
    break
else: print("NO")


user@user-VirtualBox:~$ sudo /usr/bin/hw_03.py
Введите: 0,0
NO
user@user-VirtualBox:~$ sudo /usr/bin/hw_03.py
Введите: 0,2
2
user@user-VirtualBox:~$ sudo /usr/bin/hw_03.py
Введите: 1,2
1
user@user-VirtualBox:~$ sudo /usr/bin/hw_03.py
Введите: 1,0
1


proxy for apt




ОБНОВЛЕНИЕ UBUNTU ЧЕРЕЗ ПРОКСИ


Иногда бывает необходимо настроить обновление Ubuntu через прокси сервер. Некоторые провайдеры, или крупные организации разрешают доступ в интернет только через свои прокси, для того чтобы получить возможность фильтровать просматриваемый трафик чтобы ограничивать доступ на нежелательные ресурсы или при неуплате.
Настройка сводится к выполнению нескольких консольных команд. В Ubuntu для управления пакетами используется утилита apt, ее и будем настраивать. Как вы поняли, в данной статье мы рассмотрим как настроить apt через прокси, а точнее, как выполняется настройка обновления через прокси ubuntu 16.04.

НАСТРОЙКА РАБОТЫ APT ЧЕРЕЗ ПРОКСИ

Как я уже сказал, в Ubuntu загрузкой, поиском и установкой пакетов занимается утилита apt. Таким образом, нам нужно заставить apt работать через прокси. Для этого будем использовать каталог /etc/apt/apt.conf.d/, создайте в нем файл 10proxy:
 sudo vi /etc/apt/apt.conf.d/10proxy
Синтаксис записей в файле выглядит следующим образом:
Acquire::http { Proxy «http://username:password@proxy.com:port«; };
Вообще говоря, название файлу можно дать какое угодно, а выбрано именно это чтобы вы сразу посмотрев на имя, поняли для чего этот файл.
  • http — протокол, на котором работает прокси;
  • http://proxy.com — адрес прокси сервера;
  • port — порт;
  • username — имя пользователя, если для прокси используется аутентификация;
  • password — пароль от прокси.
Например, зададим три прокси, которые работают на протоколах http, https, ftp и socks, затем разрешим использование прокси серверов:
Acquire::http::proxy "http://username:password@proxy.com:port/";
Acquire::https::proxy "https://username:password@proxy.com:port/";
Acquire::ftp::proxy "http://username:password@proxy.com:port/";
Acquire::socks::proxy "socks://username:password@proxy.com:port/";
Acquire::::Proxy "true";
Прокси применяются так, как они расположены в списке, если первый не работает применяется второй и так далее. Сохраните изменения и теперь можно обновлять систему или устанавливать программное обеспечение:
 sudo apt update

$ sudo apt upgrade
Или установка пакетов ubuntu через прокси:
 sudo apt install gimp
Если захотите отключить обновление Ubuntu через прокси просто удалите файл 10proxy:
 sudo rm /etc/apt/apt.conf.d/10proxy

ВЫВОДЫ

Вот и все, теперь вы знаете как выполняется настройка apt через прокси Ubuntu. Для работы apt того что описано в статье достаточно, но если нужно заставить работать другие приложения, придется выполнить еще пару настроек, задать прокси в настройках системы, а также установить переменную http_proxy в файле ~/.bashrc.



среда, 20 декабря 2017 г.

Сбросить пароль 7 при помощи установочного диска



1. Вставьте установочный диск Windows 7 (именно той версии, которая установлена, я показал на примере Windows 7 Enterprise x64), либо скачайте ERD Commander и запишите на CD-RW. Затем нажать DEL, F2 или другую кнопку в зависимости от вашей версии BIOS, чтобы зайти туда
2. В BIOS на вкладке Boot - Boot Device Prioirity установите порядок загрузки, поставьте загрузку с CD перед Hard Drive (HDD). (Хотя это не обязательно, но Вам придется нажать Esc для выбора устройства загрузки.)
3. Когда появится Press any key to boot from CD or DVD, нажмите любую кнопку для загрузки.
4. Во втором диалоговом окне выберите Восстановление системы.
5. Выберите Командную строку.
6. Пропишите в ней c:\windows\regedit
7. Откройте раздел HKEY_LOCAL_MACHINE
8. Нажмите Файл - Загрузить куст
9. Найдите файл C:\WINDOWS\System32\config\system.
10. Задайте кусту любое имя.
11. Выберите раздел Setup
12. Измените значение параметра CmdLine на cmd.exe
13. Измените значение параметра SetupType на 2.
14. На вкладке Файл выберите Выгрузить куст.
15.Все закрыть и перезагрузить комп.
16. Когда появится Командная строка, пропишите net user (Ваше имя пользователя) (пароль) (без скобок), например: net user Admin 1234
17. Закройте командную строку – написать exit

18. Войдите в систему с новым паролем


вторник, 24 октября 2017 г.