Поиск
Показаны результаты для тегов 'mariadb'.
Найдено 1 результат
-
Всем привет! Бывают разные технические ситуации, и вот иногда нужно сделать так, чтобы две копии Marzban были установлены на одном сервере. Сделать это возможно, и можно даже сделать управление ими через команды marzban cli. Сегодня расскажу как это сделать. За Reverse proxy будет отвечать Nginx Proxy Manager. Все подключения у клиентов будут только к нодам Страницы подписки и страницы панелей будут различаться. На мэйн сервере будут открыты только порты 443 Поднимать мэйны будем сразу с БД MySQL (MariaDB) Никакой HaProxy нам не нужен, мы не будем использовать никакой переброс портов и reality (везде будет 443 порт) Установка будет без скрипта, в ручном режиме. Начнем. 1. Берем сервер. Проще всего мне сейчас взять сервер у Vultr: https://www.vultr.com/?ref=9598405 Но как я уже говорил в теме ФэнШуя , за мэйн сервер хорошо подойдет и любой надежный провайдера в РФ, ведь к нему доступ будет скрыт полностью за CDN CloudFlare (проксироваться) и никто особо даже не узнает, что И я кажется я нашел для себя не дорогого но надежного провайдера: https://vscale.io/?invite=dhOwOGF0szepMIczf5bR (Обзор на него будет как нибудь в другой раз.) 1.1. Заказываем сервер. В моем случае я выбираю сервер с публичным адресом (конечно же), характеристики беру достаточные. Установка проходит очень быстро 2. Установка Nginx proxy manager Зашли на сервер. 2.1. Первым делом что? Правильно, обновили систему и установили обновления: apt update && apt upgrade -yqq 2.2. Теперь дело дошло до NPM Ставим сперва Docker curl -fsSL https://get.docker.com | sh Теперь ставим сам NPM mkdir npm && cd npm && nano docker-compose.yml Вставляем в него код (по инструкции: https://nginxproxymanager.com/setup/ ) services: app: image: 'jc21/nginx-proxy-manager:latest' restart: unless-stopped ports: # These ports are in format <host-port>:<container-port> - '80:80' # Public HTTP Port - '443:443' # Public HTTPS Port - '81:81' # Admin Web Port # Add any other Stream port you want to expose # - '21:21' # FTP # Uncomment the next line if you uncomment anything in the section # environment: # Uncomment this if you want to change the location of # the SQLite DB file within the container # DB_SQLITE_FILE: "/data/database.sqlite" # Uncomment this if IPv6 is not enabled on your host # DISABLE_IPV6: 'true' volumes: - ./data:/data - ./letsencrypt:/etc/letsencrypt Теперь запускаем контейнер: docker compose up -d И переходим по адресу нашего сервера на порт 81: http://31.129.56.165:81/ И вводим данные по умолчанию: Сменим сразу логин и пароль Зайдем в Proxy Host и зададим сразу домен для нашего NPM Под это дело я создам новый в CF новую запись, и сразу ее проксирую Возвращаюсь в NPM и задаю параметр домена и настройки как на скриншоте. Сеть докера по умолчанию 172.17.0.1 а порт 81 Иду на вкладку SSL и запрашиваю новый серт Отлично. Теперь идем в docker-compose.yml и уберем из публикации 81 порт nano ~/npm/docker-compose.yml Перезапускаем контейнер. docker compose restart И переходим на наш адрес: https://test-npm.openode.xyz/ 3. Установка первого Marzban Main Теперь возвращаемся к основной теме установки. Запускать каждый Marzban мы будем в отдельных контейнерах и в отдельных сетях (чтобы не было пересечения по IP адресам и портам). 3.1. Создаем новую сеть Docker docker network create --driver bridge --subnet 10.10.0.0/24 --gateway 10.10.0.1 network_one Сразу создадим вторую для второго Marzban docker network create --driver bridge --subnet 10.20.0.0/24 --gateway 10.20.0.1 network_two Давайте сразу подключим наш NPM к этим двум сетями: nano ~/npm/docker-compose.yml Добавляем в конец: networks: - network_one - network_two networks: network_one: external: true network_two: external: true Общий вид будет такой: Поднимаем заново контейнер командой: cd ~/npm && docker compose up -d 3.2. Создаем папку для первого Marzban mkdir -p /opt/marzban_1 && mkdir -p /var/lib/marzban_1 3.3. Создадим сразу файлы заготовки: touch /opt/marzban_1/docker-compose.yml && touch /opt/marzban_1/.env и скачаем наш xray-config curl -o /var/lib/marzban_1/xray_config.json https://raw.githubusercontent.com/Gozargah/Marzban/dev/xray_config.json 3.4. Заполним их содержимым docker-compose.yml: nano /opt/marzban_1/docker-compose.yml Будет иметь такой вид: services: marzban_1: image: gozargah/marzban:dev restart: always env_file: .env volumes: - /var/lib/marzban_1:/var/lib/marzban networks: network_one: ipv4_address: 10.10.0.10 depends_on: - mysql_1 mysql_1: image: mariadb:lts environment: MYSQL_ROOT_PASSWORD: my-root-password MYSQL_ROOT_HOST: '%' MYSQL_DATABASE: marzban MYSQL_USER: marzban MYSQL_PASSWORD: password command: - --character-set-server=utf8mb4 - --collation-server=utf8mb4_unicode_ci - --innodb-log-file-size=67108864 - --bind-address=0.0.0.0 volumes: - /var/lib/marzban_1/mysql:/var/lib/mysql networks: network_one: ipv4_address: 10.10.0.3 networks: network_one: external: true 3.5. Заполним их содержимым .env: Содержимое мы ПОЛНОСТЬЮ возьмем из оригинального репозитория DEV ветки: https://raw.githubusercontent.com/Gozargah/Marzban/dev/.env.example Теперь раскомментируем нужные нам строки: Добавим новую строку для подключения к нашей БД: SQLALCHEMY_DATABASE_URL="mysql+pymysql://marzban:[email protected]:3306/marzban" Добавим строчку с ядром (для дальнейшего обновления его) - АДРЕС УКАЗЫВАЕТСЯ В ПАПКЕ ВНУТРИ КОНТЕЙНЕРА, ПОЭТОМУ АДРЕС не /marzban_1/ XRAY_JSON = "/var/lib/marzban/xray_config.json" Добавим строки с данными для подписок: XRAY_SUBSCRIPTION_URL_PREFIX = "https://link.openode.xyz" XRAY_SUBSCRIPTION_PATH = for-you Это будут наши основные, остальные параметры указывайте на свое усмотрение. 3.6. Установим сразу два оригинальных сервиса marzban cli: curl -sSL https://github.com/Gozargah/Marzban-scripts/raw/master/marzban.sh | sudo install -m 755 /dev/stdin /usr/local/bin/marzban_1 и второй curl -sSL https://github.com/Gozargah/Marzban-scripts/raw/master/marzban.sh | sudo install -m 755 /dev/stdin /usr/local/bin/marzban_2 Это позволит нам использовать разные команды для управления двумя контейнерами: marzban_1 update (например) Но мы теперь зайдем и отредактируем один параметр внутри, который будет указывать наши папки. nano /usr/local/bin/marzban_1 Находим внутри строку: И меняем на название нашего сервиса и наших папок (для удобства - они должны совпадать): marzban_1 Получаем так: Аналогично делаем для второго: nano /usr/local/bin/marzban_2 Пробуем поднять наш первый контейнер. marzban_1 up Выйдет ошибка. Не переживаем!!! Смотри список наших контейнеров: docker ps видим такой вид: Теперь нам нужно зайти в наш контейнер с mysql: docker exec -it marzban_1-mysql_1-1 bash теперь команду работы с БД mariadb -u root -p запросит пароль, вводите password Создайте пользователя marzban и установите ему пароль: CREATE USER 'marzban'@'%' IDENTIFIED BY 'password'; Предоставьте пользователю marzban все привилегии на базе данных marzban: GRANT ALL PRIVILEGES ON marzban.* TO 'marzban'@'%'; FLUSH PRIVILEGES; Убедитесь, что пользователь создан и имеет необходимые права: SHOW GRANTS FOR 'marzban'@'%'; Вывод будет примерно таким, если у вас все корректно: Теперь перезапускаем наш marzban: marzban_1 restart И видим успех! 4. Возвращаемся в нашу nginx proxy manager и пробрасываем домен для подписки и для панели (покажу только на примере подписки): Готово! Все остальные настройки используйте аналогично как я писал в предыдущих статьях. 5. Аналогичные процедуры проводим для второго сервера marzban. Но везде где мы использовали marzban_1 делаем marzban_2. А где mysql_1 делаем mysql_2. Не забываем, что мы будем использовать другую сеть. Вот конфиг docker-compose.yml для marzban_2 из нашего примера: services: marzban_2: image: gozargah/marzban:dev restart: always env_file: .env volumes: - /var/lib/marzban_2:/var/lib/marzban networks: network_two: ipv4_address: 10.20.0.10 depends_on: - mysql_1 mysql_2: image: mariadb:lts environment: MYSQL_ROOT_PASSWORD: my-root-password MYSQL_ROOT_HOST: '%' MYSQL_DATABASE: marzban MYSQL_USER: marzban MYSQL_PASSWORD: password command: - --character-set-server=utf8mb4 - --collation-server=utf8mb4_unicode_ci - --innodb-log-file-size=67108864 - --bind-address=0.0.0.0 volumes: - /var/lib/marzban_2/mysql:/var/lib/mysql networks: network_one: ipv4_address: 10.20.0.3 networks: network_two: external: true Отдельной темой распишу потом как ограничить доступ к другим путям, если мы используем разные домены для подписки и для панели.