mirror of
https://github.com/invoiceninja/dockerfiles.git
synced 2025-12-31 19:47:25 +01:00
add Dockerfile and docker-compose exemple
This commit is contained in:
59
Dockerfile
Normal file
59
Dockerfile
Normal file
@@ -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"]
|
||||||
246
app.php
Normal file
246
app.php
Normal file
@@ -0,0 +1,246 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
use App\Libraries\Utils;
|
||||||
|
|
||||||
|
return [
|
||||||
|
|
||||||
|
/*
|
||||||
|
|--------------------------------------------------------------------------
|
||||||
|
| Application Debug Mode
|
||||||
|
|--------------------------------------------------------------------------
|
||||||
|
|
|
||||||
|
| When your application is in debug mode, detailed error messages with
|
||||||
|
| stack traces will be shown on every error that occurs within your
|
||||||
|
| application. If disabled, a simple generic error page is shown.
|
||||||
|
|
|
||||||
|
*/
|
||||||
|
|
||||||
|
'debug' => 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',
|
||||||
|
|
||||||
|
],
|
||||||
|
|
||||||
|
];
|
||||||
32
docker-compose.yml
Normal file
32
docker-compose.yml
Normal file
@@ -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
|
||||||
50
nginx.conf
Normal file
50
nginx.conf
Normal file
@@ -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;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user