Настоящая инструкция создана в режиме белых списков, поэтому есть частые упоминания их и особенности настройки ПО в этом режиме.Для начала на машине нужен установленный Git. Качаем с
https://git-scm.com/ Git установили теперь нужно получить доступ к репозиторию проекта у нашего технического директора Михаила Сутулова.
Доступ получили (отправили заодно свой публичный ключ в гитлабе репозитория) в нужном месте открываем GitBash (если для Windows) или просто в консоли (Linux/MacOS):
git clone git@46.19.66.92:root/artmexanika.git (качатся будет только в обычном режиме интернета, при белых списках будет отказ, над включением в список работаем, заодно просим посодействовать) У Вас получилось склонить проект. Если не выбрана ветка
main автоматом, нужно встать на нее в консоли вводим комманду
git checkout main Если Вы с Докером на «ты» есть в проекте папка /docker - используйте её для настройки. Подробности не излагаю, потому что я с докером на «вы».
Далее будет излагаться развертывание ПО на локальной машине Windows 10 или 11.
Ставим Apache 2.4 Lounge (качать можно здесь
https://www.apachelounge.com/download/ - выбираем последнюю версию согласно архитектуре Вашей Windows (64 или 32) - обычно у всех уже 64). На всякий ставим
vc_redist_x64 (или vc_redist_x86) дабы все нужные системные библиотеки обслуживающие Apache 2.4 были установлены.
Установка Apache.Скачали zip файл с апачем. Распаковываем. Ставим в папку куда мы руками программы ставим например C:\Apps называем папку httpd. И она будет иметь следущую структуру:
– Apache24 (папка)
– -- Win64 VS17 -- (файл)
– ReadMe.txt (файл)
Открываем файл ReadMe.txt там на английском языке инструкция как запустить Апач как службу. В нашем случае: открываем консоль в режиме админа.
cd C:\Apps\httpd\Apache24\binhttpd.exe -k installЕсли все настройки нормальные она запустится (искать уже можно в Службах в Панели управления)
Качаем https://www.php.net/~windows/releases/
php-7.4.33-Win32-vc15-x64.zip распаковываем. В папке C:\Apps если еще нет создаем папку php тут переносим распакованную папку, убираем из названия папки-той лишние буквы оставляем только php-7.4.33 . По итогу php.exe будет расположен в папке C:\Apps\php\php-7.4.33
Настраиваем модули апача и цепляем PHP к нему:
Открываем C:\Apps\httpd\Apache24\conf\httpd.conf
В самом низу добавляем строки:
LoadModule php7_module "C:/Apps/php/php-7.4.33/php7apache2_4.dll"PHPIniDir "C:/Apps/php/php-7.4.33"Также в оном файле примерно строка 512 убираем коментарий для:
Include conf/extra/httpd-vhosts.confСтрока 529 убраем коментарий для:
Include conf/extra/httpd-ssl.confСтрока 37 опредляем переменную:
Define SRVROOT "c:/Apps/httpd/Apache24"Со строки 72 модули примерное так должны выглядеть (все что закоменчено надо раскоментить):
#LoadModule access_compat_module modules/mod_access_compat.so
LoadModule actions_module modules/mod_actions.so
LoadModule alias_module modules/mod_alias.so
LoadModule allowmethods_module modules/mod_allowmethods.so
LoadModule asis_module modules/mod_asis.so
LoadModule auth_basic_module modules/mod_auth_basic.so
#LoadModule auth_digest_module modules/mod_auth_digest.so
#LoadModule auth_form_module modules/mod_auth_form.so
#LoadModule authn_anon_module modules/mod_authn_anon.so
LoadModule authn_core_module modules/mod_authn_core.so
#LoadModule authn_dbd_module modules/mod_authn_dbd.so
#LoadModule authn_dbm_module modules/mod_authn_dbm.so
LoadModule authn_file_module modules/mod_authn_file.so
#LoadModule authn_socache_module modules/mod_authn_socache.so
#LoadModule authnz_fcgi_module modules/mod_authnz_fcgi.so
#LoadModule authnz_ldap_module modules/mod_authnz_ldap.so
LoadModule authz_core_module modules/mod_authz_core.so
#LoadModule authz_dbd_module modules/mod_authz_dbd.so
#LoadModule authz_dbm_module modules/mod_authz_dbm.so
LoadModule authz_groupfile_module modules/mod_authz_groupfile.so
LoadModule authz_host_module modules/mod_authz_host.so
#LoadModule authz_owner_module modules/mod_authz_owner.so
LoadModule authz_user_module modules/mod_authz_user.so
LoadModule autoindex_module modules/mod_autoindex.so
#LoadModule brotli_module modules/mod_brotli.so
#LoadModule buffer_module modules/mod_buffer.so
#LoadModule cache_module modules/mod_cache.so
#LoadModule cache_disk_module modules/mod_cache_disk.so
#LoadModule cache_socache_module modules/mod_cache_socache.so
#LoadModule cern_meta_module modules/mod_cern_meta.so
LoadModule cgi_module modules/mod_cgi.so
#LoadModule charset_lite_module modules/mod_charset_lite.so
#LoadModule data_module modules/mod_data.so
#LoadModule dav_module modules/mod_dav.so
#LoadModule dav_fs_module modules/mod_dav_fs.so
#LoadModule dav_lock_module modules/mod_dav_lock.so
#LoadModule dbd_module modules/mod_dbd.so
#LoadModule deflate_module modules/mod_deflate.so
LoadModule dir_module modules/mod_dir.so
#LoadModule dumpio_module modules/mod_dumpio.so
LoadModule env_module modules/mod_env.so
#LoadModule expires_module modules/mod_expires.so
#LoadModule ext_filter_module modules/mod_ext_filter.so
#LoadModule file_cache_module modules/mod_file_cache.so
#LoadModule filter_module modules/mod_filter.so
#LoadModule http2_module modules/mod_http2.so
LoadModule headers_module modules/mod_headers.so
#LoadModule heartbeat_module modules/mod_heartbeat.so
#LoadModule heartmonitor_module modules/mod_heartmonitor.so
#LoadModule ident_module modules/mod_ident.so
#LoadModule imagemap_module modules/mod_imagemap.so
LoadModule include_module modules/mod_include.so
#LoadModule info_module modules/mod_info.so
LoadModule isapi_module modules/mod_isapi.so
#LoadModule lbmethod_bybusyness_module modules/mod_lbmethod_bybusyness.so
#LoadModule lbmethod_byrequests_module modules/mod_lbmethod_byrequests.so
#LoadModule lbmethod_bytraffic_module modules/mod_lbmethod_bytraffic.so
#LoadModule lbmethod_heartbeat_module modules/mod_lbmethod_heartbeat.so
#LoadModule ldap_module modules/mod_ldap.so
#LoadModule logio_module modules/mod_logio.so
LoadModule log_config_module modules/mod_log_config.so
#LoadModule log_debug_module modules/mod_log_debug.so
#LoadModule log_forensic_module modules/mod_log_forensic.so
#LoadModule lua_module modules/mod_lua.so
#LoadModule macro_module modules/mod_macro.so
#LoadModule md_module modules/mod_md.so
LoadModule mime_module modules/mod_mime.so
#LoadModule mime_magic_module modules/mod_mime_magic.so
LoadModule negotiation_module modules/mod_negotiation.so
LoadModule proxy_module modules/mod_proxy.so
#LoadModule proxy_ajp_module modules/mod_proxy_ajp.so
#LoadModule proxy_balancer_module modules/mod_proxy_balancer.so
#LoadModule proxy_connect_module modules/mod_proxy_connect.so
#LoadModule proxy_express_module modules/mod_proxy_express.so
#LoadModule proxy_fcgi_module modules/mod_proxy_fcgi.so
#LoadModule proxy_ftp_module modules/mod_proxy_ftp.so
#LoadModule proxy_hcheck_module modules/mod_proxy_hcheck.so
#LoadModule proxy_html_module modules/mod_proxy_html.so
LoadModule proxy_http_module modules/mod_proxy_http.so
LoadModule proxy_http2_module modules/mod_proxy_http2.so
#LoadModule proxy_scgi_module modules/mod_proxy_scgi.so
#LoadModule proxy_uwsgi_module modules/mod_proxy_uwsgi.so
LoadModule proxy_wstunnel_module modules/mod_proxy_wstunnel.so
#LoadModule ratelimit_module modules/mod_ratelimit.so
#LoadModule reflector_module modules/mod_reflector.so
#LoadModule remoteip_module modules/mod_remoteip.so
#LoadModule request_module modules/mod_request.so
#LoadModule reqtimeout_module modules/mod_reqtimeout.so
LoadModule rewrite_module modules/mod_rewrite.so
#LoadModule sed_module modules/mod_sed.so
#LoadModule session_module modules/mod_session.so
#LoadModule session_cookie_module modules/mod_session_cookie.so
#LoadModule session_crypto_module modules/mod_session_crypto.so
#LoadModule session_dbd_module modules/mod_session_dbd.so
LoadModule setenvif_module modules/mod_setenvif.so
#LoadModule slotmem_plain_module modules/mod_slotmem_plain.so
#LoadModule slotmem_shm_module modules/mod_slotmem_shm.so
#LoadModule socache_dbm_module modules/mod_socache_dbm.so
#LoadModule socache_memcache_module modules/mod_socache_memcache.so
LoadModule socache_redis_module modules/mod_socache_redis.so
LoadModule socache_shmcb_module modules/mod_socache_shmcb.so
#LoadModule speling_module modules/mod_speling.so
LoadModule ssl_module modules/mod_ssl.so
#LoadModule status_module modules/mod_status.so
#LoadModule substitute_module modules/mod_substitute.so
#LoadModule unique_id_module modules/mod_unique_id.so
#LoadModule userdir_module modules/mod_userdir.so
#LoadModule usertrack_module modules/mod_usertrack.so
#LoadModule version_module modules/mod_version.so
LoadModule vhost_alias_module modules/mod_vhost_alias.so
#LoadModule watchdog_module modules/mod_watchdog.so
#LoadModule xml2enc_module modules/mod_xml2enc.so
В системных переменных общего уровня находим
Path добавляем туда:
C:\Apps\httpd\Apache24\binНастраиваем PHP.
В папке с PHP будут такие файлы:
php.ini-development и
php.ini-productionЕсли мы хотим чтобы работало в режими «Продакшън» то копируем php.ini-production и переименовываем копию в php.ini. Если в режиме разработчика то аналогично с
php.ini-development. Далее будет расмартриваться настройка среды для разработчика.
Качаем
https://downloads.php.net/~windows/pecl/releases/redis/6.3.0/php_redis-6.3.0-7.4-ts-vc15-x64.zip (
PHP расширение для Redis). Распаковываем, копируем php_redis.dll и ставим в C:\Apps\php\php-7.4.33\ext (к другим dll)
Открываем php.ini
760 - 762 строки должны выглядеть так:
;extension_dir = "./"; On windows:extension_dir = "ext"т.е 760 закоменчена, 762 раскоменчена
С 914 строки так:
;extension=bz2extension=curl;extension=ffi;extension=ftpextension=fileinfoextension=gd2;extension=gettextextension=gmpextension=intl;extension=imap;extension=ldapextension=mbstringextension=memcache;extension=exif ; Must be after mbstring as it depends on itextension=mysqli;extension=oci8_12c ; Use with Oracle Database 12c Instant Client;extension=odbcextension=openssl;extension=pdo_firebirdextension=pdo_mysql;extension=pdo_oci;extension=pdo_odbc;extension=pdo_pgsqlextension=pdo_sqlite;extension=pgsqlextension=redis;extension=shmop ; The MIBS data available in the PHP distribution must be installed.; See http://www.php.net/manual/en/snmp.installation.php;extension=snmp extension=soapextension=socketsextension=sodiumextension=sqlite3extension=tidyextension=xmlrpcextension=xsl Обратите внимание что руками было добавлено
extension=redis (939 строка) - для работы с редиской.
В системных переменных общего уровня находим
Path добавляем туда:
C:\Apps\php\php-7.4.33В консоли забиваем httpd -t
Если пишет ОК идем в службы и перезапускаем Апач
Настройка хоста и сертификата:
Открываем в блокнот или иной теккстовый редактор в режиме Администратора. В нём открываем файл C:\Windows\System32\drivers\etc\hosts. В этом файле добавляем строку:
127.0.0.1 artmexanika.localСтавим mkcert:
choco install mkcert - если через шоколад
Если не хотите Chocolatey: скачайте mkcert-vX.X.X-windows-amd64.exe с GitHub Releases, переименуйте в mkcert.exe, положите в папку из PATH (например, C:\Windows\System32) — тогда команда mkcert будет работать везде.
Провереям установку:
mkcert --versionВ папке C:\Apps\httpd\Apache24\conf создаём папку ssl
Ныряем туда через GitBash, выполянем только один раз! (Если Вы уже делали эту команду то НЕ делайте! - сломаете прежние сертификаты):
mkcert -installСоздаем сертификат для artmexanika.local:
mkcert artmexanika.localСоздаем сертификат для localhost:
mkcert localhost Идём в C:\Apps\httpd\Apache24\conf\extra\httpd-ssl.conf
Строка 125 примерно прописываем:
ServerName localhost:443Строка 144:
SSLCertificateFile "${SRVROOT}/conf/ssl/localhost.pem"Строка 154:
SSLCertificateKeyFile "${SRVROOT}/conf/ssl/localhost-key.pem"Убедитесь что остальные пусти к файлам сертифката закоменчены!
P.S. Как вы догадываетесь номера строк могут не совпадать с Вашим файлом, делаем всё, согласно контексту.
В консоли: httpd -t если ок, перезапускаем Апач в службах.
В C:\Apps\httpd\Apache24\htdocs создаем файл test.php там пишем:
<?php phpinfo();?>В браузере (если его нет обязательно установите любой современный) в адресной строке пишем
https://localhost/test.php и проверяем:
1) Браузер не ругается на сертификат
2) Показывается текущая версия PHP 7.4.33 и расширения
Если PHP не подцепился а Апач не упал перезгружаем компьютер.
Если всё ок ставим MySQL, пойдет любая от 8.0.11 до 9.7.1 (последняя на сегодня), рекомендуется 8.0.36. Установку MySQL объяснять не буду качаем установщик и отвечем на вопросы. Установщик ищем на
https://dev.mysql.com/downloads/mysql/ В системных переменных общего уровня находим
Path добавляем туда путь к mysql.exe, например у меня:
C:\Program Files\MySQL\MySQL Server 9.5\binСтавим Redis Server:
Качаем с
https://github.com/redis-windows/redis-windows/releases/download/8.8.0/Redis-8.8.0-Windows-x64-msys2-with-Service.zip распаковываем, в C:\Apps создаем папку redis внутри нее папку data. Заходим в распокованный архив выбираем самую нижнюю папку копируем в C:\Apps\redis, убираем из названия лишние буквы оставляем: Redis-8.8.0, общий путь до файла redis.conf должен быть C:\Apps\redis\Redis-8.8.0\redis.conf
Открываем cmd в режиме администратора! идём в папку
cd C:\Apps\redis\Redis-8.8.0 запускаем команду:
RedisService.exe install -c C:\Apps\redis\Redis-8.8.0\redis.conf --dir C:\Apps\redis\data --port 6379Запускаем службу:
net start Redis В системных переменных общего уровня находим
Path добавляем туда:
C:\Apps\redis\Redis-8.8.0 Composer:Качаем с
https://getcomposer.org/download/ инсталлятор, ставим.
Открываем
GitBash в папке проекта запускаем
composer installNpm:Устанавливаем npm, возможно понадобиться установить NodeJS сразу.
Открываем
GitBash в папке проекта запускаем
npm installПотом запускаем
npm run dev Настройка artmexanika.local в ApacheОткрываем C:\Apps\httpd\Apache24\conf\extra\httpd-vhosts.conf
Убираем или коментим 2 экампл-хоста, добавляем это:
<VirtualHost *:80>
ServerAdmin admin@example.ru
ServerName artmexanika.local
Redirect permanent / https://artmexanika.local/
</VirtualHost>
<VirtualHost *:443>
ServerAdmin admin@example.ru
ServerName artmexanika.local
DocumentRoot "D:/projects/AM/artmexanika/web"
SSLEngine on
SSLCertificateFile "${SRVROOT}/conf/ssl/artmexanika.local.pem"
SSLCertificateKeyFile "${SRVROOT}/conf/ssl/artmexanika.local-key.pem"
ProxyPreserveHost On
ProxyRequests Off
RewriteEngine On
# ======================
# WebSocket proxy
# ======================
RewriteCond %{HTTP:Upgrade} =websocket [NC]
RewriteRule ^/ws/?$ ws://127.0.0.1:8082/ [P,L]
RewriteCond %{HTTP:Upgrade} !=websocket [NC]
RewriteRule ^/ws/?$ http://127.0.0.1:8082/ [P,L]
<Proxy *>
Require all granted
</Proxy>
ProxyTimeout 86400
# Передача реального IP
RequestHeader set X-Real-IP %{REMOTE_ADDR}s
RequestHeader add X-Forwarded-For %{REMOTE_ADDR}s
RequestHeader set X-Forwarded-Proto "https"
# ======================
# PHP / Yii2 настройки
# ======================
<Directory "D:/projects/AM/artmexanika/web/">
Options Indexes MultiViews FollowSymLinks
AllowOverride All
Require all granted
<IfModule mod_php>
php_flag display_errors Off
php_value error_reporting 0
</IfModule>
</Directory>
</VirtualHost>
Поясню конфиг и что Вам нужно заменить.
DocumentRoot "D:/projects/AM/artmexanika/web" -
D:/projects/AM/artmexanika тут папка с проектом (меняете на свой путь если надо), а
web - спец. Директория с для веб-сервера, аналогично с <Directory "D:/projects/AM/artmexanika/web/">
Идём в консоль, запускаем
httpd -t - не ругается перезапускаем Апач
Настройка очередей:
Как поднять воркер через NSSM (Windows)
NSSM — это просто обёртка для запуска как службы.
Шаги:
1. Установить NSSM
Скачать и распаковать.
2. Создать сервис
В cmd:
nssm install yii-queue
Откроется GUI:
Path: C:\Apps\php\php-7.4.33\php.exe
Arguments: D:\projects\AM\artmexanika\yii queue/listen --verbose=1
Startup directory: D:\Projects\AM\artmexanika
Настройка вебсокета:nssm install yii-socket
Откроется GUI:
Path: C:\Apps\php\php-7.4.33\php.exe
Arguments: D:\projects\AM\artmexanika\yii queue/fresher
Startup directory: D:\Projects\AM\artmexanika
Настройка .env:
YII_DEBUG=true
YII_ENV=local
# Database (Production/Dev)
DB_HOST=127.0.0.1
DB_NAME=artmexanika
DB_USER=root
DB_PASSWORD=password # тут нужно заменить на реальный пароль для root
# Test Database
TEST_DB_HOST=127.0.0.1
TEST_DB_NAME=artmexanika_test
TEST_DB_USER=root
TEST_DB_PASSWORD=password # тут нужно заменить на реальный пароль для root
# Mailer
MAILER_HOST=smtp.beget.com
MAILER_USERNAME=info@artmexanika.ru
MAILER_PASSWORD=1%8B4knv
MAILER_PORT=25
MAILER_ENCRYPTION=ssl
# Security
COOKIE_VALIDATION_KEY=Ij-S7y23qDtZjtdDtES8sVS1ogl00ctb
# Redis
REDIS_HOST=localhost
REDIS_PORT=6379
REDIS_DATABASE=2
REDIS_PASSWORD=
# Websocket
SOCKET_SERVER=ws://localhost:8082
SOCKET_CLIENT=wss://artmexanika.local/ws/
#Playwright
TEST_BASE_URL=https://artmexanika.local
TEST_USERNAME=demo@artmexanika.ru
TEST_PASSWORD=artmexanika
Нужно создать в базе mysql базу artmexanika, после этого в GitBash запустить
bin/update_db в процессе работы скрипта будут запршиваться пароль root от
schedule.artmexanika.ru и от root mysql сервера и root mysql локали
Дорогой читатель, если Вы успешно выполнили все эти действия и у тебя в браузере запустился
https://artmexanika.local/ без ругачек и всё ок, поздравляю с установкой проекта.
Ссылка на файл