Пользователь пока ничего не рассказал о себе

Достижения

Все достижения (1)

Наибольший вклад в теги

Все теги (11)

Лучшие ответы пользователя

Все ответы (8)
  • Как должен выглядеть процесс работы с Docker?

    @paldraken
    Попробую описать простыми словами без серьезной терминологии (Devops'ы не бейте ногами).

    Следующим шагом я бы рекомендовал вам начать использовать docker-compose.
    Он позволит всю инфраструктуру описать в одном конфигурационном файле, запускать все одной командой и создать алиасы для общения контейнеров между собой.

    Например у нас такая структура. Я использую php но для nodejs может быть похоже.
    project
       - scr/   #Код проета под контролем версий в git
            - Dockerfile
            - phpfile1.php
            - phpfile2.php
            - etc.php
       - db_data/ #папка где будут сохранятся база данных. (иначе каждый запуск контейнера будет ее обнулять)
       - docker-compose.yml
       - site.conf   #конфиг для виртуального хоста nginx
       - nginx.conf #конфиг nginx


    Настраивается взаимодействие в специальном файле.
    docker-compose.yml
    version: '2'
    services:
      nginx:
        image: nginx:latest
        ports:
          - "8080:80"
        volumes:
          - ../src/:/app
          - ./site.conf:/etc/nginx/conf.d/site.conf
          - ./nginx.conf:/etc/nginx/nginx.conf
        links:
          - php
      db:
        image: mysql:5.7
        volumes:
          - ./db_data:/var/lib/mysql
        environment:
          MYSQL_ROOT_PASSWORD: 123
          MYSQL_DATABASE: changeme
          MYSQL_USER: changeme
          MYSQL_PASSWORD: 123
        ports:
          - "33306:3306"
      php:
        build: ../src
        volumes:
          - ../src:/app
        depends_on:
          - db
        environment:
          PHP_DB_HOST: db:3306
          PHP_DB_USER: changeme
          PHP_DB_PASSWORD: 123


    Тут я использую контейнер nginx и mysql из DockerHub и свой контейнер для php описанный в
    src/Dockerfile
    FROM php:fpm
    
    RUN apt-get update && \
      apt-get install -y \
        openssl \
        git \
        curl \
        unzip
    
    RUN docker-php-ext-install pdo pdo_mysql
    
    ADD . /app
    WORKDIR /app


    Теперь использовав docker-compose up мы удобно запустим все контейнеры с нужной конфигурацией.
    Взаимодействие между контейнерами будет происходить по алиасам
    например из php соединение с БД происходит так:

    db.php
    return [
        'class' => 'yii\db\Connection',
        'dsn' => "mysql:host=db:3306;dbname=donor", // db:3306 - это services имя контейнера с mysql в docker-compose.yml 
        'username' => getenv('PHP_DB_USER'), // это переменные окружения для контейнера тоже из docker-compose.yml
        'password' => getenv('PHP_DB_PASSWORD'),
        'charset' => 'utf8',
    ];



    Код прокидываем в 2 контейнера php и nginx (раздел volumes). То есть внутри контейнера создается директория /app которая ссылается на директорию на хост машине. Для разработки очень удобно, вы изменяете код и сразу можно обновлять страницу.

    На продакшен я обновляю код через git из репозитория и перезапускаю контейнеры (если надо).

    ps. Это один из самых простых способов, разумеется существуют более "взрослые" и "правильные" методы. Но надеюсь мое описание позволит вам сдвинутся с мертвой точки в изучении докера.
    Ответ написан
  • Как в YII2 сделать выполнение определенного действия во всех контроллерах?

    @paldraken
    Сделать некий базовый контроллер у которого переопределить метод
    beforeAction
    В этом методе реализовать вашу логику по считыванию информации.
    А затем те контроллеры в которых надо применять эту логику унаследовать от Базового.

    class BaseController extends \yii\web\Controller
    {
        public function beforeAction($action)
        {
            if (!parent::beforeAction($action)) {
                return false;
            }
            // Тут прописать логику или вызвать отслеживающий сервис
            return true;
        }
    }
    
    class MyController extends BaseController
    {
        public function actionIndex()
        {
    .....
    Ответ написан
  • Как поделиться картинкой в instagram?

    @paldraken
    Напрямую нельзя, но можно, при условии установленного приложения инстаграм использовать intent
    https://www.instagram.com/developer/mobile-sharing...
    Ответ написан
  • Как вести документацию по серверам (Сис.Администрирование)?

    @paldraken
    Для паролей и другой секурной информации использую enpass
    База паролей шифруется и закрыта мастер паролем. Внутри удобная древовидная структура. Для синхронизации между командой можно использовать облачные хранилища. Бесплатна для декстопов.
    Как альтернатива опенсорсный KeePass, но с ним пришлось повозится чтобы настроить синхронизацию под линукс.
    Ответ написан
  • Оптимизация большой таблицы mysql, правильно ли?

    @paldraken
    Используйте партиционирование (partitioning).
    Это как раз и есть способ разбиения разбиения большой таблицы на логические части по определенным критериям. В вашем случае это будет поле дата. Например:
    CREATE TABLE employees (
        id INT NOT NULL,
        fname VARCHAR(30),
        lname VARCHAR(30),
        hired DATE NOT NULL DEFAULT '1970-01-01',
        separated DATE NOT NULL DEFAULT '9999-12-31',
        job_code INT,
        store_id INT
    )
    PARTITION BY RANGE ( YEAR(separated) ) (
        PARTITION p0 VALUES LESS THAN (1991),
        PARTITION p1 VALUES LESS THAN (1996),
        PARTITION p2 VALUES LESS THAN (2001),
        PARTITION p3 VALUES LESS THAN MAXVALUE
    );

    Пример отсюда
    Впрочем миллион строк это действительно немного и возможно стоить начать с индексов
    Ответ написан