From 329fa71290c3721046c66a9425f1f0d819d1bd5e Mon Sep 17 00:00:00 2001 From: Sam Date: Sun, 4 Oct 2015 22:43:09 +0200 Subject: [PATCH] add Dockerfile and docker-compose exemple --- Dockerfile | 59 +++++++++++ app.php | 246 +++++++++++++++++++++++++++++++++++++++++++++ docker-compose.yml | 32 ++++++ nginx.conf | 50 +++++++++ 4 files changed, 387 insertions(+) create mode 100644 Dockerfile create mode 100644 app.php create mode 100644 docker-compose.yml create mode 100644 nginx.conf diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..5b71257 --- /dev/null +++ b/Dockerfile @@ -0,0 +1,59 @@ +FROM php:fpm + + +#### +# composer +#### +# Packages +RUN apt-get update && \ + DEBIAN_FRONTEND=noninteractive apt-get install -y \ + libfreetype6-dev \ + libjpeg62-turbo-dev \ + libmcrypt-dev \ + libpng12-dev \ + libbz2-dev \ + php-pear \ + curl \ + git \ + && rm -r /var/lib/apt/lists/* + +# PHP Extensions +RUN docker-php-ext-install mcrypt zip bz2 mbstring \ + && docker-php-ext-configure gd --with-freetype-dir=/usr/include/ --with-jpeg-dir=/usr/include/ \ + && docker-php-ext-install gd + +RUN curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer +#### +# /composer +#### + + +RUN apt-get update && apt-get install -y \ + libmcrypt-dev\ + && docker-php-ext-install iconv mcrypt \ + && docker-php-ext-install mbstring \ + && docker-php-ext-install mysqli \ + && docker-php-ext-install pdo pdo_mysql + +ENV INVOICENINJA_VERSION 2.4.0 +ENV INVOICENINJA_SHA1 3e9b63c1681b6923dc1a24399411c1abde6ef5ea + +WORKDIR /var/www/ + +RUN curl -o invoiceninja.tar.gz -SL https://github.com/hillelcoren/invoice-ninja/archive/v${INVOICENINJA_VERSION}.tar.gz \ + && echo "$INVOICENINJA_SHA1 *invoiceninja.tar.gz" | sha1sum -c - \ + && tar -xzf invoiceninja.tar.gz \ + && rm -rf html \ + && ln -s invoice-ninja-${INVOICENINJA_VERSION}/public html \ + && rm invoiceninja.tar.gz \ + && chown -R www-data:www-data /var/www/ \ + && composer install --working-dir invoice-ninja-${INVOICENINJA_VERSION} -o + +VOLUME /var/www/html + + +COPY app.php invoice-ninja-${INVOICENINJA_VERSION}/config/app.php + +EXPOSE 80 + +CMD ["php-fpm"] diff --git a/app.php b/app.php new file mode 100644 index 0000000..3c141c8 --- /dev/null +++ b/app.php @@ -0,0 +1,246 @@ + env('APP_DEBUG', ''), + + /* + |-------------------------------------------------------------------------- + | Application URL + |-------------------------------------------------------------------------- + | + | This URL is used by the console to properly generate URLs when using + | the Artisan command line tool. You should set this to the root of + | your application so that it is used when running Artisan tasks. + | + */ + + 'url' => env('APP_URL', ''), + + /* + |-------------------------------------------------------------------------- + | Application Timezone + |-------------------------------------------------------------------------- + | + | Here you may specify the default timezone for your application, which + | will be used by the PHP date and date-time functions. We have gone + | ahead and set this to a sensible default for you out of the box. + | + */ + + 'timezone' => env('APP_TIMEZONE', 'UTC'), + + /* + |-------------------------------------------------------------------------- + | Application Locale Configuration + |-------------------------------------------------------------------------- + | + | The application locale determines the default locale that will be used + | by the translation service provider. You are free to set this value + | to any of the locales which will be supported by the application. + | + */ + + 'locale' => env('APP_LOCALE', 'en'), + + /* + |-------------------------------------------------------------------------- + | Application Fallback Locale + |-------------------------------------------------------------------------- + | + | The fallback locale determines the locale to use when the current one + | is not available. You may change the value to correspond to any of + | the language folders that are provided through your application. + | + */ + + 'fallback_locale' => 'en', + + /* + |-------------------------------------------------------------------------- + | Encryption Key + |-------------------------------------------------------------------------- + | + | This key is used by the Illuminate encrypter service and should be set + | to a random, 32 character string, otherwise these encrypted strings + | will not be safe. Please do this before deploying an application! + | + */ + + 'key' => env('APP_KEY', ''), + + 'cipher' => env('APP_CIPHER', MCRYPT_RIJNDAEL_128), + + /* + |-------------------------------------------------------------------------- + | Logging Configuration + |-------------------------------------------------------------------------- + | + | Here you may configure the log settings for your application. Out of + | the box, Laravel uses the Monolog PHP logging library. This gives + | you a variety of powerful log handlers / formatters to utilize. + | + | + */ + + 'log' => 'errorlog', + + /* + |-------------------------------------------------------------------------- + | Autoloaded Service Providers + |-------------------------------------------------------------------------- + | + | The service providers listed here will be automatically loaded on the + | request to your application. Feel free to add your own services to + | this array to grant expanded functionality to your applications. + | + */ + + 'providers' => [ + + /* + * Laravel Framework Service Providers... + */ + 'Illuminate\Foundation\Providers\ArtisanServiceProvider', + 'Illuminate\Auth\AuthServiceProvider', + 'Illuminate\Bus\BusServiceProvider', + 'Illuminate\Cache\CacheServiceProvider', + 'Illuminate\Foundation\Providers\ConsoleSupportServiceProvider', + 'Illuminate\Routing\ControllerServiceProvider', + 'Illuminate\Cookie\CookieServiceProvider', + 'Illuminate\Database\DatabaseServiceProvider', + 'Illuminate\Encryption\EncryptionServiceProvider', + 'Illuminate\Filesystem\FilesystemServiceProvider', + 'Illuminate\Foundation\Providers\FoundationServiceProvider', + 'Illuminate\Hashing\HashServiceProvider', + (isset($_ENV['POSTMARK_API_TOKEN']) ? 'Postmark\Adapters\LaravelMailProvider' : 'Illuminate\Mail\MailServiceProvider'), + 'Illuminate\Pagination\PaginationServiceProvider', + 'Illuminate\Pipeline\PipelineServiceProvider', + 'Illuminate\Queue\QueueServiceProvider', + 'Illuminate\Redis\RedisServiceProvider', + 'Illuminate\Auth\Passwords\PasswordResetServiceProvider', + 'Illuminate\Session\SessionServiceProvider', + 'Illuminate\Translation\TranslationServiceProvider', + 'Illuminate\Validation\ValidationServiceProvider', + 'Illuminate\View\ViewServiceProvider', + + /* + * Additional Providers + */ + 'Bootstrapper\BootstrapperL5ServiceProvider', + 'Former\FormerServiceProvider', + 'Barryvdh\Debugbar\ServiceProvider', + 'Chumper\Datatable\DatatableServiceProvider', + 'Intervention\Image\ImageServiceProvider', + 'Webpatser\Countries\CountriesServiceProvider', + 'Barryvdh\LaravelIdeHelper\IdeHelperServiceProvider', + 'Illuminate\Html\HtmlServiceProvider', + + /* + * Application Service Providers... + */ + 'App\Providers\AppServiceProvider', + 'App\Providers\BusServiceProvider', + 'App\Providers\ConfigServiceProvider', + 'App\Providers\EventServiceProvider', + 'App\Providers\RouteServiceProvider', + ], + + /* + |-------------------------------------------------------------------------- + | Class Aliases + |-------------------------------------------------------------------------- + | + | This array of class aliases will be registered when this application + | is started. However, feel free to register as many as you wish as + | + */ + + 'aliases' => [ + + 'App' => 'Illuminate\Support\Facades\App', + 'Artisan' => 'Illuminate\Support\Facades\Artisan', + 'Auth' => 'Illuminate\Support\Facades\Auth', + 'Blade' => 'Illuminate\Support\Facades\Blade', + 'Cache' => 'Illuminate\Support\Facades\Cache', + 'ClassLoader' => 'Illuminate\Support\ClassLoader', + 'Config' => 'Illuminate\Support\Facades\Config', + 'Controller' => 'Illuminate\Routing\Controller', + 'Cookie' => 'Illuminate\Support\Facades\Cookie', + 'Crypt' => 'Illuminate\Support\Facades\Crypt', + 'host' => 'Illuminate\Support\Facades\DB', + 'Eloquent' => 'Illuminate\Database\Eloquent\Model', + 'Event' => 'Illuminate\Support\Facades\Event', + 'File' => 'Illuminate\Support\Facades\File', + 'Hash' => 'Illuminate\Support\Facades\Hash', + 'Input' => 'Illuminate\Support\Facades\Input', + 'Lang' => 'Illuminate\Support\Facades\Lang', + 'Log' => 'Illuminate\Support\Facades\Log', + 'Mail' => 'Illuminate\Support\Facades\Mail', + 'Password' => 'Illuminate\Support\Facades\Password', + 'Queue' => 'Illuminate\Support\Facades\Queue', + 'Redirect' => 'Illuminate\Support\Facades\Redirect', + 'Redis' => 'Illuminate\Support\Facades\Redis', + 'Request' => 'Illuminate\Support\Facades\Request', + 'Response' => 'Illuminate\Support\Facades\Response', + 'Route' => 'Illuminate\Support\Facades\Route', + 'Schema' => 'Illuminate\Support\Facades\Schema', + 'Seeder' => 'Illuminate\Database\Seeder', + 'Session' => 'Illuminate\Support\Facades\Session', + 'Str' => 'Illuminate\Support\Str', + 'URL' => 'Illuminate\Support\Facades\URL', + 'Validator' => 'Illuminate\Support\Facades\Validator', + 'View' => 'Illuminate\Support\Facades\View', + + + // Added Class Aliases + 'Utils' => 'App\Libraries\Utils', + 'Form' => 'Collective\Html\FormFacade', + 'HTML' => 'Collective\Html\HtmlFacade', + 'SSH' => 'Illuminate\Support\Facades\SSH', + 'Alert' => 'Bootstrapper\Facades\Alert', + 'Badge' => 'Bootstrapper\Facades\Badge', + 'Breadcrumb' => 'Bootstrapper\Facades\Breadcrumb', + 'Button' => 'Bootstrapper\Facades\Button', + 'ButtonGroup' => 'Bootstrapper\Facades\ButtonGroup', + 'ButtonToolbar' => 'Bootstrapper\Facades\ButtonToolbar', + 'Carousel' => 'Bootstrapper\Facades\Carousel', + 'DropdownButton' => 'Bootstrapper\Facades\DropdownButton', + 'Helpers' => 'Bootstrapper\Facades\Helpers', + 'Icon' => 'Bootstrapper\Facades\Icon', + 'Label' => 'Bootstrapper\Facades\Label', + 'MediaObject' => 'Bootstrapper\Facades\MediaObject', + 'Navbar' => 'Bootstrapper\Facades\Navbar', + 'Navigation' => 'Bootstrapper\Facades\Navigation', + 'Paginator' => 'Bootstrapper\Facades\Paginator', + 'Progress' => 'Bootstrapper\Facades\Progress', + 'Tabbable' => 'Bootstrapper\Facades\Tabbable', + 'Table' => 'Bootstrapper\Facades\Table', + 'Thumbnail' => 'Bootstrapper\Facades\Thumbnail', + 'Typeahead' => 'Bootstrapper\Facades\Typeahead', + 'Typography' => 'Bootstrapper\Facades\Typography', + 'Former' => 'Former\Facades\Former', + 'Datatable' => 'Chumper\Datatable\Facades\DatatableFacade', + 'Omnipay' => 'Omnipay\Omnipay', + 'CreditCard' => 'Omnipay\Common\CreditCard', + 'Image' => 'Intervention\Image\Facades\Image', + 'Countries' => 'Webpatser\Countries\CountriesFacade', + 'Carbon' => 'Carbon\Carbon', + 'Rocketeer' => 'Rocketeer\Facades\Rocketeer', + + ], + +]; diff --git a/docker-compose.yml b/docker-compose.yml new file mode 100644 index 0000000..34477a4 --- /dev/null +++ b/docker-compose.yml @@ -0,0 +1,32 @@ +db: + image: mysql + environment: + MYSQL_DATABASE: ninja + MYSQL_USER: user + MYSQL_PASSWORD: pass + MYSQL_ROOT_PASSWORD: mdp + +app: + build: . + links: + - db:mysql + environment: + - APP_DEBUG=true + - APP_KEY=invoicekeyinvoicekeyinvoicekey12 + - DB_USERNAME=user + - DB_PASSWORD=mdp + - DB_HOST=$MYSQL_PORT + - DB_DATABASE=ninja + volumes: + - ./data/invoice:/var/www/html/logo + +web: + image: nginx + volumes: + - ./nginx.conf:/etc/nginx/nginx.conf:ro + links: + - app + volumes_from: + - app + ports: + - 80 diff --git a/nginx.conf b/nginx.conf new file mode 100644 index 0000000..1534403 --- /dev/null +++ b/nginx.conf @@ -0,0 +1,50 @@ +user www-data; + +events { + worker_connections 768; +} + +http { + upstream backend { + server app:9000; + } + include /etc/nginx/mime.types; + default_type application/octet-stream; + gzip on; + gzip_disable "msie6"; + + server { + listen 80 default; + server_name your_ininja_site; + + root /var/www/html; + + index index.php; + + charset utf-8; + + location / { + try_files $uri $uri/ /index.php?$query_string; + } + + location = /favicon.ico { access_log off; log_not_found off; } + location = /robots.txt { access_log off; log_not_found off; } + + sendfile off; + + location ~ \.php$ { + fastcgi_split_path_info ^(.+\.php)(/.+)$; + fastcgi_pass backend; + fastcgi_index index.php; + include fastcgi_params; + fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; + fastcgi_intercept_errors off; + fastcgi_buffer_size 16k; + fastcgi_buffers 4 16k; + } + + location ~ /\.ht { + deny all; + } + } +}