せっかちな方の為に素早くSQL Serverに接続できるようにまとめました。
yamlファイルをダウンロード
vscodeのターミナルを立ち上げ、以下のコードを実行する
curl -LO https://raw.githubusercontent.com/bitnami/containers/main/bitnami/laravel/docker-compose.yml
docker-compose.ymlというファイル名は古い書き方なので名前を変更してcompose.yamlとします。
中身を編集します
version: '2' #削除 services: #途中のコード省略 image: docker.io/bitnami/laravel:9 #削除 build: ./docker #追記 ports: - '8000:8000' - '${VITE_PORT:-5173}:${VITE_PORT:-5173}' #追記 #途中のコード省略 volumes: - './my-project:/app' - './docker/php.ini:/opt/bitnami/php/etc/php.ini' #追記
Dockerfileを作成
compose.yamlファイルと同じディレクトリにdockerフォルダを作成して、dockerフォルダ内にDockerfileを作成します。中身を以下のようにします。
FROM docker.io/bitnami/laravel:9 RUN apt update \ && apt install -y autoconf gcc g++ make gnupg unixodbc-dev php-common \ && pecl install xdebug sqlsrv pdo_sqlsrv RUN curl https://packages.microsoft.com/keys/microsoft.asc | apt-key add - RUN curl https://packages.microsoft.com/config/debian/11/prod.list > /etc/apt/sources.list.d/mssql-release.list RUN apt-get update RUN ACCEPT_EULA=Y apt-get install -y msodbcsql18 RUN phpenmod sqlsrv pdo_sqlsrv
php.iniファイルの作成
dockerフォルダ内にphp.iniファイルを作成します。中身を以下のようにします。
[PHP] engine = On short_open_tag = Off precision = 14 output_buffering = 4096 zlib.output_compression = Off implicit_flush = Off unserialize_callback_func = serialize_precision = -1 disable_functions = disable_classes = zend.enable_gc = On zend.exception_ignore_args = On zend.exception_string_param_max_len = 0 expose_php = 0 max_execution_time = 30 max_input_time = 60 memory_limit = 128M error_reporting = E_ALL & ~E_DEPRECATED & ~E_STRICT display_errors = Off display_startup_errors = Off log_errors = On ignore_repeated_errors = Off ignore_repeated_source = Off report_memleaks = On variables_order = "GPCS" request_order = "GP" register_argc_argv = Off auto_globals_jit = On post_max_size = 40M auto_prepend_file = auto_append_file = default_mimetype = "text/html" default_charset = "UTF-8" doc_root = user_dir = extension_dir = /opt/bitnami/php/lib/php/extensions extension_dir = /opt/bitnami/php/lib/php/extensions enable_dl = Off file_uploads = On upload_tmp_dir = /opt/bitnami/php/tmp upload_max_filesize = 40M max_file_uploads = 20 allow_url_fopen = On allow_url_include = Off default_socket_timeout = 60 zend_extension = opcache [CLI Server] cli_server.color = On [Date] date.timezone = UTC [filter] [iconv] [imap] [intl] [sqlite3] [Pcre] [Pdo] extension=pdo_sqlsrv.so extension=sqlsrv.so [Pdo_mysql] pdo_mysql.default_socket= [Phar] [mail function] SMTP = localhost smtp_port = 25 mail.add_x_header = Off [ODBC] odbc.allow_persistent = On odbc.check_persistent = On odbc.max_persistent = -1 odbc.max_links = -1 odbc.defaultlrl = 4096 odbc.defaultbinmode = 1 [MySQLi] mysqli.max_persistent = -1 mysqli.allow_persistent = On mysqli.max_links = -1 mysqli.default_port = 3306 mysqli.default_socket = mysqli.default_host = mysqli.default_user = mysqli.default_pw = mysqli.reconnect = Off [mysqlnd] mysqlnd.collect_statistics = On mysqlnd.collect_memory_statistics = Off [OCI8] [PostgreSQL] pgsql.allow_persistent = On pgsql.auto_reset_persistent = Off pgsql.max_persistent = -1 pgsql.max_links = -1 pgsql.ignore_notice = 0 pgsql.log_notice = 0 [bcmath] bcmath.scale = 0 [browscap] [Session] session.save_handler = files session.save_path = /opt/bitnami/php/var/run/session session.save_path = /opt/bitnami/php/var/run/session session.save_path = /opt/bitnami/php/var/run/session session.use_strict_mode = 0 session.use_cookies = 1 session.use_only_cookies = 1 session.name = PHPSESSID session.auto_start = 0 session.cookie_lifetime = 0 session.cookie_path = / session.cookie_domain = session.cookie_httponly = session.cookie_samesite = session.serialize_handler = php session.gc_probability = 1 session.gc_divisor = 1000 session.gc_maxlifetime = 1440 session.referer_check = session.cache_limiter = nocache session.cache_expire = 180 session.use_trans_sid = 0 session.sid_length = 26 session.trans_sid_tags = "a=href,area=href,frame=src,form=" session.sid_bits_per_character = 5 [Assertion] zend.assertions = -1 [COM] [mbstring] [gd] [exif] [Tidy] tidy.clean_output = Off [soap] soap.wsdl_cache_enabled=1 soap.wsdl_cache_dir="/tmp" soap.wsdl_cache_ttl=86400 soap.wsdl_cache_limit = 5 [sysvshm] [ldap] ldap.max_links = -1 [dba] [opcache] opcache.enable = 0 opcache.enable_cli = 0 opcache.memory_consumption = 192 opcache.interned_strings_buffer = 16 opcache.max_accelerated_files = 4000 opcache.revalidate_freq = 60 opcache.file_cache = /opt/bitnami/php/var/run/opcache_file [curl] [openssl] [ffi] opcache.fast_shutdown = 1 [xdebug] xdebug.mode=debug xdebug.start_with_request=yes xdebug.client_host=host.docker.internal xdebug.client_port=9004 xdebug.log=/tmp/xdebug.log xdebug.log_level=0 zend_extension=/opt/bitnami/php/lib/php/extensions/xdebug.so
my-project/config/database.phpの編集
php.iniまで保存がおわったら下記コマンドでコンテナを立ち上げます。
docker compose up
my-project/config/database.phpを編集する
'connections' => [ 'sqlite' => [ //省略 ], 'mysql' => [ //省略 ], 'pgsql' => [ //省略 ], 'sqlsrv' => [ 'driver' => 'sqlsrv', 'url' => env('DATABASE_URL'), 'host' => env('DB_HOST_SECOND', '192.168.0.100'), //SQL ServerのIPアドレス 'port' => env('DB_HOST_SECOND', '1433'), //SQL Serverのポート番号に合わせる 'database' => env('DB_HOST_SECOND', 'my_dbname'), // 編集 'username' => env('DB_HOST_SECOND', 'my_user_name'), // 編集 'password' => env('DB_HOST_SECOND', 'my_password'), // 編集 'charset' => 'utf8', 'prefix' => '', 'prefix_indexes' => true, 'trust_server_certificate' => 'true', //追記 ],
.envファイルを編集
my-project/.env DB_HOST_SECONDで設定します。
下記を追記します。
DB_CONNECTION_SECOND=sqlsrv DB_HOST_SECOND=192.168.0.100 DB_PORT_SECOND=1433 DB_DATABASE_SECOND=my_dbname DB_USERNAME_SECOND=my_user_name DB_PASSWORD_SECOND=my_password
database.phpと.envファイルの変数名と変数を一致させます。
以上でSQL Serverとの接続は完了です。
エラー解決しながらSQL Serverと接続するバージョンの記事もあります
コメント