/codeigniter4-docker

🐳 PHP Docker Image for CodeIgniter4 development

Primary LanguageShellMIT LicenseMIT

Docker Image for CodeIgniter4 development

Docker Build Status Docker Stars Docker Image Version (tag latest semver) Docker Pulls Docker Image Size

This repository provides you a development environment without requiring you to install PHP, a web server, and any other server software on your local machine. For this, it requires Docker and Docker Compose.

Basic example to create your container (tested on Ubuntu 20.04 - Docker version 20.10.11, build dea9396 - docker-compose version 1.25.0 ):

NOTE: This package is under early development and is not ready for prime-time.

The old version is still available in the branch called "old"

Build Image

Clone thi repository and run:

./build.sh

start the container with php 7.4:

docker container run -it --publish 80:80 --name ci4 -v /localfolder:/var/www/html codeigniter4.2.3:7.4.30-apache

start the container with php 8.0:

docker container run -it --publish 80:80 --name ci4 -v /localfolder:/var/www/html codeigniter4.2.3:8.0.20-apache

start the container with php 8.1:

docker container run -it --publish 80:80 --name ci4 -v /localfolder:/var/www/html codeigniter4.2.3:8.1.9-apache

Installation

  1. Install docker and docker-compose ;

  2. Copy docker-compose.yml file to your project root path, and edit it according to your needs ;

  3. Uncomment, in the docker-compose.yml file, the image you want to use it ;

  4. From your project directory, start up your application by running:

docker-compose up -d
  1. From your project directory, stop your application by running:
docker-compose down --volumes

Environment variables summary:

Environment file

allowed values are: [0, 1]

  • REGEN_ENV_FILE - if 1, the .env file will be created and overwritten when the container starts

App Configuration

  • CI_ENVIRONMENT - ENVIRONMENT [production, develompent, tests]
  • APP_BASE_URL - URL to your CodeIgniter root. Typically this will be your base URL, WITH a trailing slash [http://localhost/]
  • APP_FORCE_GLOBAl_SECURE_REQUESTS - If true, this will force every request made to this application to be made via a secure connection (HTTPS) [true, false]

App Session

  • APP_SESSION_DRIVER - [CodeIgniter\Session\Handlers\FileHandler]
  • APP_SESSION_COOCKIE_NAME - [ci_session]
  • APP_SESSION_EXPIRATION - [7200]
  • APP_SESSION_SAVE_PATH - [null]
  • APP_SESSION_MATCH_CHIP - [true, false]
  • APP_SESSION_TIME_TO_UPDATE - [300]
  • APP_SESSION_REGENERATE_DESTROY - [true, false]
  • APP_CSP_ENABLED - [true, false]

Default Database Configuration

  • DB_DEFAULT_HOSTNAME - default hostname [127.0.0.1]
  • DB_DEFAULT_DATABASE - default database name
  • DB_DEFAULT_USERNAME - default database username
  • DB_DEFAULT_PASSWORD - default database password
  • DB_DEFAULT_DRIVER - default database driver [MySQLi, SQLSRV, Postgre, OCI8, SQLite3]
  • DB_DEFAULT_PORT - default database port [3306, 1443, 5432, 1521]
  • DB_DEFAULT_PREFIX - default database prefix

Tests Database Configuration

  • DB_TESTS_HOSTNAME - tests hostname [127.0.0.1]

  • DB_TESTS_DATABASE - tests database name

  • DB_TESTS_USERNAME - tests database username

  • DB_TESTS_PASSWORD - tests database password

  • DB_TESTS_DRIVER - tests database driver [MySQLi, SQLSRV, Postgre, OCI8, SQLite3]

  • DB_TESTS_PORT - tests database port [3306, 1443, 5432, 1521]

  • DB_TESTS_PREFIX - tests database prefix

  • DB_DEFAULT_PREFIX - default database prefix

Content Secure Policy Configuration

  • CONTENT_SECURE_POLICY_REPORT_ONLY - Default CSP report context [true, false]
  • CONTENT_SECURE_POLICY_DEFAULT_SRC - Will default to self if not overridden [none]
  • CONTENT_SECURE_POLICY_SCRIPT_SRC - Lists allowed scripts' URLs [self]
  • CONTENT_SECURE_POLICY_STYLE_SRC - Lists allowed stylesheets' URLs [self]
  • CONTENT_SECURE_POLICY_IMAGE_SRC - Defines the origins from which images can be loaded [self]
  • CONTENT_SECURE_POLICY_BASE_URI - Restricts the URLs that can appear in a page's <base> element [null]
  • CONTENT_SECURE_POLICY_CHILD_SRC - Lists the URLs for workers and embedded frame contents [null]
  • CONTENT_SECURE_POLICY_CONNECT_SRC - Limits the origins that you can connect to (via XHR, WebSockets, and EventSource)[self]
  • CONTENT_SECURE_POLICY_FONT_SRC - Specifies the origins that can serve web fonts [null]
  • CONTENT_SECURE_POLICY_FORM_ACTION - Lists valid endpoints for submission from <form> tags [null]
  • CONTENT_SECURE_POLICY_FRAME_ANCESTORS - Specifies the sources that can embed the current page [null]
  • CONTENT_SECURE_POLICY_RFAME_SRC - The frame-src directive restricts the URLs which may be loaded into nested browsing contexts [null]
  • CONTENT_SECURE_POLICY_MEDIA_SRC - Restricts the origins allowed to deliver video and audio [null]
  • CONTENT_SECURE_POLICY_OBJECT_SRC - Allows control over Flash and other plugins [null]
  • CONTENT_SECURE_POLICY_PLUGIN_TYPES - Limits the kinds of plugins a page may invoke [null]
  • CONTENT_SECURE_POLICY_REPORT_URI - Specifies a URL where a browser will send reports when a content security policy is violated [null]
  • CONTENT_SECURE_POLICY_SANDBOX - List of actions allowed [true, false]
  • CONTENT_SECURE_POLICY_UPGRADE_INSECURE_REQUESTS - Instructs user agents to rewrite URL schemes, changing HTTP to HTTPS. This directive is for websites with large numbers of old URLs that need to be rewritten[true, false]

Cookie Configuration

  • COOKIE_PREFIX - Set a cookie name prefix if you need to avoid collisions [``]
  • COOKIE_EXPIRES - Default expires timestamp for cookies [0]
  • COOKIE_PATH - Typically will be a forward slash [/]
  • COOKIE_DOMAIN - Set to .your-domain.com for site-wide cookies [``]
  • COOKIE_SECURE - Cookie will only be set if a secure HTTPS connection exists [true, false]
  • COOKIE_HTTP_ONLY - Cookie will only be accessible via HTTP(S) (no JavaScript) [true, false]
  • COOKIE_SAME_SITE - Configure cookie SameSite setting [None, Lax, Strict, '']
  • COOKIE_RAW - This flag allows setting a "raw" cookie [true, false]

Encryption Configuration

  • ENCRYPTION_KEY - If you use the Encryption class you must set an encryption key (seed) [``]
  • ENCRYPTION_DRIVER - One of the supported encryption drivers [OpenSSL, Sodium]
  • ENCRYPTION_BLOCK_SIZE - This is the number of bytes that will be padded to the plaintext message before it is encrypted [16]
  • ENCRYPTION_DIGEST - HMAC digest to use [SHA256, SHA512]

Honeypot Configuration

  • HONEYPOT_HIDDEN - Makes Honeypot visible or not to human [true, false]
  • HONEYPOT_LABEL - Honeypot Label Content [Fill This Field]
  • HONEYPOT_NAME - Honeypot Field Name [honeypot]
  • HONEYPOT_TEMPLATE - Honeypot HTML Template [<label>{label}</label><input type="text" name="{name}" value=""/>]
  • HONEYPOT_CONTAINER - Honeypot container [<div style="display:none">{template}</div>]

Security Configuration

  • SECURITY_CSRF_PROTECTION - Protection Method for Cross Site Request Forgery protection [cookie, session]
  • SECURITY_TOKEN_RANDOMIZE - Randomize the CSRF Token for added security [true, false]
  • SECURITY_TOKEN_NAME - Token name for Cross Site Request Forgery protection [csrf_token_name]
  • SECURITY_HEADER_NAME - Header name for Cross Site Request Forgery protection [X-CSRF-TOKE]
  • SECURITY_COOKIE_NAME - Cookie name for Cross Site Request Forgery protection [csrf_cookie_name]
  • SECURITY_EXPIRES - Expiration time for Cross Site Request Forgery protection cookie [7200]
  • SECURITY_REGENERATE - Regenerate CSRF Token on every submission [true, false]
  • SECURITY_REDIRECT - Redirect to previous page with error on failure [true, false]
  • SECURITY_SAME_SITE - Setting for CSRF SameSite cookie token [None, Lax, Strict, '']

Logger Configuration

  • LOGGER_THRESHOLD - You can enable error logging by setting a threshold over zero [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
    • Threshold options are:
      • 0 = Disables logging, Error logging TURNED OFF
      • 1 = Emergency Messages - System is unusable
      • 2 = Alert Messages - Action Must Be Taken Immediately
      • 3 = Critical Messages - Application component unavailable, unexpected exception.
      • 4 = Runtime Errors - Don't need immediate action, but should be monitored.
      • 5 = Warnings - Exceptional occurrences that are not errors.
      • 6 = Notices - Normal but significant events.
      • 7 = Info - Interesting events, like user logging in, etc.
      • 8 = Debug - Detailed debug information.
      • 9 = All Messages

Curl Request Configuration

  • CURL_REQUEST_SHARE_OPTIONS - Whether share options between requests or not [true, false]

Sendmail Configuration

  • ROOT_EMAIL - The user that gets all mail for userids less than 1000. Ifblank, address rewriting is disabled.
  • MAIL_SERVER - The host to send mail to, in the form host.
  • MAIL_SERVER_PORT - The port to send mail to, in the form host.
  • MAIL_SERVER_USER - The user name to use for SMTP AUTH.
  • MAIL_SERVER_PASSWORD - The password to use for SMTP AUTH.
  • MAIL_SERVER_TLS - Specifies whether ssmtp uses TLS to talk to the SMTP server.
  • MAIL_SERVER_STARTTLS - Specifies whether ssmtp does a EHLO/STARTTLS before starting SSL negotiation.

List of Apache Modules pre-installed on these Docker images (apachectl -M)

  • core_module (static)
  • so_module (static)
  • watchdog_module (static)
  • http_module (static)
  • log_config_module (static)
  • logio_module (static)
  • version_module (static)
  • unixd_module (static)
  • access_compat_module (shared)
  • alias_module (shared)
  • auth_basic_module (shared)
  • authn_core_module (shared)
  • authn_file_module (shared)
  • authz_core_module (shared)
  • authz_host_module (shared)
  • authz_user_module (shared)
  • autoindex_module (shared)
  • cgi_module (shared)
  • deflate_module (shared)
  • dir_module (shared)
  • env_module (shared)
  • expires_module (shared)
  • fcgid_module (shared)
  • filter_module (shared)
  • headers_module (shared)
  • mime_module (shared)
  • mpm_prefork_module (shared)
  • negotiation_module (shared)
  • php_module (shared)
  • proxy_module (shared)
  • proxy_http_module (shared)
  • reqtimeout_module (shared)
  • rwrite_module (shared)
  • setenvif_module (shared)
  • socache_shmcb_module (shared)
  • ssl_module (shared)
  • status_module (shared)

List of PHP Modules pre-installed on these Docker images (php -m)

[PHP Modules]

  • amqp
  • ast
  • bcmath
  • bz2
  • calendar
  • Core
  • csv
  • ctype
  • curl
  • date
  • dba
  • decimal
  • dom
  • ds
  • enchant
  • ev
  • event
  • excimer
  • exif
  • FFI
  • fileinfo
  • filter
  • ftp
  • gd
  • geospatial
  • gettext
  • gmp
  • gnupg
  • grpc
  • hash
  • http
  • iconv
  • igbinary
  • imagick
  • imap
  • inotify
  • intl
  • json
  • json_post
  • ldap
  • libsmbclient
  • libxml
  • lzf
  • mailparse
  • maxminddb
  • mbstring
  • mcrypt
  • memcache
  • memcached
  • mongodb
  • msgpack
  • mysqli
  • mysqlnd
  • OAuth
  • oci8
  • odbc
  • opencensus
  • openssl
  • openswoole
  • pcntl
  • pcov
  • pcre
  • PDO
  • pdo_dblib
  • PDO_Firebird
  • pdo_mysql
  • PDO_OCI
  • PDO_ODBC
  • pdo_pgsql
  • pdo_sqlite
  • pdo_sqlsrv
  • pgsql
  • Phar
  • posix
  • pspell
  • raphf
  • readline
  • redis
  • Reflection
  • SeasLog
  • session
  • shmop
  • SimpleXML
  • smbclient
  • snmp
  • soap
  • sockets
  • sodium
  • SPL
  • sqlite3
  • sqlsrv
  • ssh2
  • standard
  • tokenizer
  • uuid
  • xdebug
  • xml
  • xmldiff
  • xmlreader
  • xmlrpc
  • xmlwriter
  • xsl
  • yac
  • yaml
  • yar
  • Zend OPcache
  • zend_test
  • zephir_parser
  • zip
  • zlib
  • zstd

[Zend Modules]

  • Xdebug
  • Zend OPcache

Changelog

You can find the changes made in the changelog file

Contributing

Contributions are welcome! Leave an issue on Github, or create a Pull Request.

Licence

This work is under MIT licence.