Dockerfile 35 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025
  1. #
  2. #--------------------------------------------------------------------------
  3. # Image Setup
  4. #--------------------------------------------------------------------------
  5. #
  6. # To edit the 'workspace' base Image, visit its repository on Github
  7. # https://github.com/Laradock/workspace
  8. #
  9. # To change its version, see the available Tags on the Docker Hub:
  10. # https://hub.docker.com/r/laradock/workspace/tags/
  11. #
  12. # Note: Base Image name format {image-tag}-{php-version}
  13. #
  14. ARG LARADOCK_PHP_VERSION
  15. # FROM laradock/workspace:2.2-${LARADOCK_PHP_VERSION}
  16. FROM letsdockerize/laradock-workspace:2.4-${LARADOCK_PHP_VERSION}
  17. LABEL maintainer="Mahmoud Zalt <mahmoud@zalt.me>"
  18. ARG LARADOCK_PHP_VERSION
  19. # Set Environment Variables
  20. ENV DEBIAN_FRONTEND noninteractive
  21. # Start as root
  22. USER root
  23. ###########################################################################
  24. # Laradock non-root user:
  25. ###########################################################################
  26. # Add a non-root user to prevent files being created with root permissions on host machine.
  27. ARG PUID=1000
  28. ENV PUID ${PUID}
  29. ARG PGID=1000
  30. ENV PGID ${PGID}
  31. # always run apt update when start and after add new source list, then clean up at end.
  32. RUN set -xe; \
  33. apt-get update -yqq && \
  34. pecl channel-update pecl.php.net && \
  35. groupadd -g ${PGID} laradock && \
  36. useradd -u ${PUID} -g laradock -m laradock -G docker_env && \
  37. usermod -p "*" laradock -s /bin/bash && \
  38. apt-get install -yqq \
  39. apt-utils \
  40. #
  41. #--------------------------------------------------------------------------
  42. # Mandatory Software's Installation
  43. #--------------------------------------------------------------------------
  44. #
  45. # Mandatory Software's such as ("php-cli", "git", "vim", ....) are
  46. # installed on the base image 'laradock/workspace' image. If you want
  47. # to add more Software's or remove existing one, you need to edit the
  48. # base image (https://github.com/Laradock/workspace).
  49. #
  50. # next lines are here becase there is no auto build on dockerhub see https://github.com/laradock/laradock/pull/1903#issuecomment-463142846
  51. libzip-dev zip unzip \
  52. # Install the zip extension
  53. php${LARADOCK_PHP_VERSION}-zip \
  54. # nasm
  55. nasm && \
  56. php -m | grep -q 'zip'
  57. #
  58. #--------------------------------------------------------------------------
  59. # Optional Software's Installation
  60. #--------------------------------------------------------------------------
  61. #
  62. # Optional Software's will only be installed if you set them to `true`
  63. # in the `docker-compose.yml` before the build.
  64. # Example:
  65. # - INSTALL_NODE=false
  66. # - ...
  67. #
  68. ###########################################################################
  69. # Set Timezone
  70. ###########################################################################
  71. ARG TZ=UTC
  72. ENV TZ ${TZ}
  73. RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone
  74. ###########################################################################
  75. # User Aliases
  76. ###########################################################################
  77. USER root
  78. COPY ./aliases.sh /root/aliases.sh
  79. COPY ./aliases.sh /home/laradock/aliases.sh
  80. RUN sed -i 's/\r//' /root/aliases.sh && \
  81. sed -i 's/\r//' /home/laradock/aliases.sh && \
  82. chown laradock:laradock /home/laradock/aliases.sh && \
  83. echo "" >> ~/.bashrc && \
  84. echo "# Load Custom Aliases" >> ~/.bashrc && \
  85. echo "source ~/aliases.sh" >> ~/.bashrc && \
  86. echo "" >> ~/.bashrc
  87. USER laradock
  88. RUN echo "" >> ~/.bashrc && \
  89. echo "# Load Custom Aliases" >> ~/.bashrc && \
  90. echo "source ~/aliases.sh" >> ~/.bashrc && \
  91. echo "" >> ~/.bashrc
  92. ###########################################################################
  93. # Composer:
  94. ###########################################################################
  95. USER root
  96. # Add the composer.json
  97. COPY ./composer.json /home/laradock/.composer/composer.json
  98. # Add the auth.json for magento 2 credentials
  99. COPY ./auth.json /home/laradock/.composer/auth.json
  100. # Make sure that ~/.composer belongs to laradock
  101. RUN chown -R laradock:laradock /home/laradock/.composer
  102. USER laradock
  103. # Check if global install need to be ran
  104. ARG COMPOSER_GLOBAL_INSTALL=false
  105. ENV COMPOSER_GLOBAL_INSTALL ${COMPOSER_GLOBAL_INSTALL}
  106. RUN if [ ${COMPOSER_GLOBAL_INSTALL} = true ]; then \
  107. # run the install
  108. composer global install \
  109. ;fi
  110. # Check if auth file is disabled
  111. ARG COMPOSER_AUTH=false
  112. ENV COMPOSER_AUTH ${COMPOSER_AUTH}
  113. RUN if [ ${COMPOSER_AUTH} = false ]; then \
  114. # remove the file
  115. rm /home/laradock/.composer/auth.json \
  116. ;fi
  117. ARG COMPOSER_REPO_PACKAGIST
  118. ENV COMPOSER_REPO_PACKAGIST ${COMPOSER_REPO_PACKAGIST}
  119. RUN if [ ${COMPOSER_REPO_PACKAGIST} ]; then \
  120. composer config -g repo.packagist composer ${COMPOSER_REPO_PACKAGIST} \
  121. ;fi
  122. # Export composer vendor path
  123. RUN echo "" >> ~/.bashrc && \
  124. echo 'export PATH="~/.composer/vendor/bin:$PATH"' >> ~/.bashrc
  125. ###########################################################################
  126. # Non-root user : PHPUnit path
  127. ###########################################################################
  128. # add ./vendor/bin to non-root user's bashrc (needed for phpunit)
  129. USER laradock
  130. RUN echo "" >> ~/.bashrc && \
  131. echo 'export PATH="/var/www/vendor/bin:$PATH"' >> ~/.bashrc
  132. ###########################################################################
  133. # Crontab
  134. ###########################################################################
  135. USER root
  136. COPY ./crontab /etc/cron.d
  137. RUN chmod -R 644 /etc/cron.d
  138. ###########################################################################
  139. # Drush:
  140. ###########################################################################
  141. # Deprecated install of Drush 8 and earlier versions.
  142. # Drush 9 and up require Drush to be listed as a composer dependency of your site.
  143. USER root
  144. ARG INSTALL_DRUSH=false
  145. ARG DRUSH_VERSION
  146. ENV DRUSH_VERSION ${DRUSH_VERSION}
  147. RUN if [ ${INSTALL_DRUSH} = true ]; then \
  148. apt-get -y install mysql-client && \
  149. # Install Drush with the phar file.
  150. curl -fsSL -o /usr/local/bin/drush https://github.com/drush-ops/drush/releases/download/${DRUSH_VERSION}/drush.phar | bash && \
  151. chmod +x /usr/local/bin/drush && \
  152. drush core-status \
  153. ;fi
  154. ###########################################################################
  155. # WP CLI:
  156. ###########################################################################
  157. # The command line interface for WordPress
  158. USER root
  159. ARG INSTALL_WP_CLI=false
  160. RUN if [ ${INSTALL_WP_CLI} = true ]; then \
  161. curl -fsSL -o /usr/local/bin/wp https://raw.githubusercontent.com/wp-cli/builds/gh-pages/phar/wp-cli.phar | bash && \
  162. chmod +x /usr/local/bin/wp \
  163. ;fi
  164. ###########################################################################
  165. # SSH2:
  166. ###########################################################################
  167. USER root
  168. ARG INSTALL_SSH2=false
  169. RUN if [ ${INSTALL_SSH2} = true ]; then \
  170. # Install the PHP SSH2 extension
  171. apt-get -y install libssh2-1-dev php${LARADOCK_PHP_VERSION}-ssh2 \
  172. ;fi
  173. ###########################################################################
  174. # GMP:
  175. ###########################################################################
  176. USER root
  177. ARG INSTALL_GMP=false
  178. ARG PHP_VERSION=${LARADOCK_PHP_VERSION}
  179. RUN if [ ${INSTALL_GMP} = true ]; then \
  180. # Install the PHP GMP extension
  181. apt-get -y install php${LARADOCK_PHP_VERSION}-gmp \
  182. ;fi
  183. ###########################################################################
  184. # SOAP:
  185. ###########################################################################
  186. USER root
  187. ARG INSTALL_SOAP=false
  188. RUN if [ ${INSTALL_SOAP} = true ]; then \
  189. # Install the PHP SOAP extension
  190. apt-get -y install libxml2-dev php${LARADOCK_PHP_VERSION}-soap \
  191. ;fi
  192. ###########################################################################
  193. # XSL:
  194. ###########################################################################
  195. USER root
  196. ARG INSTALL_XSL=false
  197. RUN if [ ${INSTALL_XSL} = true ]; then \
  198. # Install the PHP XSL extension
  199. apt-get -y install libxslt-dev php${LARADOCK_PHP_VERSION}-xsl \
  200. ;fi
  201. ###########################################################################
  202. # LDAP:
  203. ###########################################################################
  204. ARG INSTALL_LDAP=false
  205. RUN if [ ${INSTALL_LDAP} = true ]; then \
  206. apt-get install -y libldap2-dev && \
  207. apt-get install -y php${LARADOCK_PHP_VERSION}-ldap \
  208. ;fi
  209. ###########################################################################
  210. # IMAP:
  211. ###########################################################################
  212. ARG INSTALL_IMAP=false
  213. RUN if [ ${INSTALL_IMAP} = true ]; then \
  214. apt-get install -y php${LARADOCK_PHP_VERSION}-imap \
  215. ;fi
  216. ###########################################################################
  217. # Subversion:
  218. ###########################################################################
  219. USER root
  220. ARG INSTALL_SUBVERSION=false
  221. RUN if [ ${INSTALL_SUBVERSION} = true ]; then \
  222. apt-get install -y subversion \
  223. ;fi
  224. ###########################################################################
  225. # xDebug:
  226. ###########################################################################
  227. USER root
  228. ARG INSTALL_XDEBUG=false
  229. RUN if [ ${INSTALL_XDEBUG} = true ]; then \
  230. # Load the xdebug extension only with phpunit commands
  231. apt-get install -y php${LARADOCK_PHP_VERSION}-xdebug && \
  232. sed -i 's/^;//g' /etc/php/${LARADOCK_PHP_VERSION}/cli/conf.d/20-xdebug.ini && \
  233. echo "alias phpunit='php -dzend_extension=xdebug.so /var/www/vendor/bin/phpunit'" >> ~/.bashrc \
  234. ;fi
  235. # ADD for REMOTE debugging
  236. COPY ./xdebug.ini /etc/php/${LARADOCK_PHP_VERSION}/cli/conf.d/xdebug.ini
  237. RUN sed -i "s/xdebug.remote_autostart=0/xdebug.remote_autostart=1/" /etc/php/${LARADOCK_PHP_VERSION}/cli/conf.d/xdebug.ini && \
  238. sed -i "s/xdebug.remote_enable=0/xdebug.remote_enable=1/" /etc/php/${LARADOCK_PHP_VERSION}/cli/conf.d/xdebug.ini && \
  239. sed -i "s/xdebug.cli_color=0/xdebug.cli_color=1/" /etc/php/${LARADOCK_PHP_VERSION}/cli/conf.d/xdebug.ini
  240. ###########################################################################
  241. # Phpdbg:
  242. ###########################################################################
  243. USER root
  244. ARG INSTALL_PHPDBG=false
  245. RUN if [ ${INSTALL_PHPDBG} = true ]; then \
  246. # Load the xdebug extension only with phpunit commands
  247. apt-get install -y --force-yes php${LARADOCK_PHP_VERSION}-phpdbg \
  248. ;fi
  249. ###########################################################################
  250. # Blackfire:
  251. ###########################################################################
  252. ARG INSTALL_BLACKFIRE=false
  253. ARG BLACKFIRE_CLIENT_ID
  254. ENV BLACKFIRE_CLIENT_ID ${BLACKFIRE_CLIENT_ID}
  255. ARG BLACKFIRE_CLIENT_TOKEN
  256. ENV BLACKFIRE_CLIENT_TOKEN ${BLACKFIRE_CLIENT_TOKEN}
  257. RUN if [ ${INSTALL_XDEBUG} = false -a ${INSTALL_BLACKFIRE} = true ]; then \
  258. curl -L https://packagecloud.io/gpg.key | apt-key add - && \
  259. echo "deb http://packages.blackfire.io/debian any main" | tee /etc/apt/sources.list.d/blackfire.list && \
  260. apt-get update -yqq && \
  261. apt-get install blackfire-agent \
  262. ;fi
  263. ###########################################################################
  264. # ssh:
  265. ###########################################################################
  266. ARG INSTALL_WORKSPACE_SSH=false
  267. COPY insecure_id_rsa /tmp/id_rsa
  268. COPY insecure_id_rsa.pub /tmp/id_rsa.pub
  269. RUN if [ ${INSTALL_WORKSPACE_SSH} = true ]; then \
  270. rm -f /etc/service/sshd/down && \
  271. cat /tmp/id_rsa.pub >> /root/.ssh/authorized_keys \
  272. && cat /tmp/id_rsa.pub >> /root/.ssh/id_rsa.pub \
  273. && cat /tmp/id_rsa >> /root/.ssh/id_rsa \
  274. && rm -f /tmp/id_rsa* \
  275. && chmod 644 /root/.ssh/authorized_keys /root/.ssh/id_rsa.pub \
  276. && chmod 400 /root/.ssh/id_rsa \
  277. && cp -rf /root/.ssh /home/laradock \
  278. && chown -R laradock:laradock /home/laradock/.ssh \
  279. ;fi
  280. ###########################################################################
  281. # MongoDB:
  282. ###########################################################################
  283. ARG INSTALL_MONGO=false
  284. RUN if [ ${INSTALL_MONGO} = true ]; then \
  285. # Install the mongodb extension
  286. if [ $(php -r "echo PHP_MAJOR_VERSION;") = "5" ]; then \
  287. pecl install mongo && \
  288. echo "extension=mongo.so" >> /etc/php/${LARADOCK_PHP_VERSION}/mods-available/mongo.ini && \
  289. ln -s /etc/php/${LARADOCK_PHP_VERSION}/mods-available/mongo.ini /etc/php/${LARADOCK_PHP_VERSION}/cli/conf.d/30-mongo.ini \
  290. ;fi && \
  291. pecl install mongodb && \
  292. echo "extension=mongodb.so" >> /etc/php/${LARADOCK_PHP_VERSION}/mods-available/mongodb.ini && \
  293. ln -s /etc/php/${LARADOCK_PHP_VERSION}/mods-available/mongodb.ini /etc/php/${LARADOCK_PHP_VERSION}/cli/conf.d/30-mongodb.ini \
  294. ;fi
  295. ###########################################################################
  296. # AMQP:
  297. ###########################################################################
  298. ARG INSTALL_AMQP=false
  299. RUN if [ ${INSTALL_AMQP} = true ]; then \
  300. apt-get install librabbitmq-dev -y && \
  301. pecl -q install amqp && \
  302. echo "extension=amqp.so" >> /etc/php/${LARADOCK_PHP_VERSION}/mods-available/amqp.ini && \
  303. ln -s /etc/php/${LARADOCK_PHP_VERSION}/mods-available/amqp.ini /etc/php/${LARADOCK_PHP_VERSION}/cli/conf.d/30-amqp.ini \
  304. ;fi
  305. ###########################################################################
  306. # PHP REDIS EXTENSION
  307. ###########################################################################
  308. ARG INSTALL_PHPREDIS=false
  309. RUN if [ ${INSTALL_PHPREDIS} = true ]; then \
  310. apt-get install -yqq php-redis \
  311. ;fi
  312. ###########################################################################
  313. # Swoole EXTENSION
  314. ###########################################################################
  315. ARG INSTALL_SWOOLE=false
  316. RUN if [ ${INSTALL_SWOOLE} = true ]; then \
  317. # Install Php Swoole Extension
  318. if [ $(php -r "echo PHP_MAJOR_VERSION;") = "5" ]; then \
  319. pecl -q install swoole-2.0.10; \
  320. else \
  321. if [ $(php -r "echo PHP_MINOR_VERSION;") = "0" ]; then \
  322. pecl install swoole-2.2.0; \
  323. else \
  324. pecl install swoole; \
  325. fi \
  326. fi && \
  327. echo "extension=swoole.so" >> /etc/php/${LARADOCK_PHP_VERSION}/mods-available/swoole.ini && \
  328. ln -s /etc/php/${LARADOCK_PHP_VERSION}/mods-available/swoole.ini /etc/php/${LARADOCK_PHP_VERSION}/cli/conf.d/20-swoole.ini \
  329. && php -m | grep -q 'swoole' \
  330. ;fi
  331. ###########################################################################
  332. # Libpng16 EXTENSION
  333. ###########################################################################
  334. ARG INSTALL_LIBPNG=false
  335. RUN if [ ${INSTALL_LIBPNG} = true ]; then \
  336. apt-get update && \
  337. apt-get install libpng16-16 \
  338. ;fi
  339. ###########################################################################
  340. # Inotify EXTENSION:
  341. ###########################################################################
  342. ARG INSTALL_INOTIFY=false
  343. RUN if [ ${INSTALL_INOTIFY} = true ]; then \
  344. pecl -q install inotify && \
  345. echo "extension=inotify.so" >> /etc/php/${LARADOCK_PHP_VERSION}/mods-available/inotify.ini && \
  346. ln -s /etc/php/${LARADOCK_PHP_VERSION}/mods-available/inotify.ini /etc/php/${LARADOCK_PHP_VERSION}/cli/conf.d/20-inotify.ini \
  347. ;fi
  348. ###########################################################################
  349. # fswatch
  350. ###########################################################################
  351. ARG INSTALL_FSWATCH=false
  352. RUN if [ ${INSTALL_FSWATCH} = true ]; then \
  353. apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 47FE03C1 \
  354. && add-apt-repository -y ppa:hadret/fswatch \
  355. || apt-get update -yqq \
  356. && apt-get -y install fswatch \
  357. ;fi
  358. ###########################################################################
  359. # IonCube Loader
  360. ###########################################################################
  361. ARG INSTALL_IONCUBE=false
  362. RUN if [ ${INSTALL_IONCUBE} = true ]; then \
  363. # Install the php ioncube loader
  364. curl -L -o /tmp/ioncube_loaders_lin_x86-64.tar.gz https://downloads.ioncube.com/loader_downloads/ioncube_loaders_lin_x86-64.tar.gz \
  365. && tar zxpf /tmp/ioncube_loaders_lin_x86-64.tar.gz -C /tmp \
  366. && mv /tmp/ioncube/ioncube_loader_lin_${LARADOCK_PHP_VERSION}.so $(php -r "echo ini_get('extension_dir');")/ioncube_loader.so \
  367. && echo "zend_extension=ioncube_loader.so" >> /etc/php/${LARADOCK_PHP_VERSION}/mods-available/0ioncube.ini \
  368. && rm -rf /tmp/ioncube* \
  369. ;fi
  370. ###########################################################################
  371. # Drupal Console:
  372. ###########################################################################
  373. USER root
  374. ARG INSTALL_DRUPAL_CONSOLE=false
  375. RUN if [ ${INSTALL_DRUPAL_CONSOLE} = true ]; then \
  376. apt-get -y install mysql-client && \
  377. curl https://drupalconsole.com/installer -L -o drupal.phar && \
  378. mv drupal.phar /usr/local/bin/drupal && \
  379. chmod +x /usr/local/bin/drupal \
  380. ;fi
  381. USER laradock
  382. ###########################################################################
  383. # Node / NVM:
  384. ###########################################################################
  385. # Check if NVM needs to be installed
  386. ARG NODE_VERSION=node
  387. ENV NODE_VERSION ${NODE_VERSION}
  388. ARG INSTALL_NODE=false
  389. ARG INSTALL_NPM_GULP=false
  390. ARG INSTALL_NPM_BOWER=false
  391. ARG INSTALL_NPM_VUE_CLI=false
  392. ARG INSTALL_NPM_ANGULAR_CLI=false
  393. ARG NPM_REGISTRY
  394. ENV NPM_REGISTRY ${NPM_REGISTRY}
  395. ENV NVM_DIR /home/laradock/.nvm
  396. RUN if [ ${INSTALL_NODE} = true ]; then \
  397. # Install nvm (A Node Version Manager)
  398. mkdir -p $NVM_DIR && \
  399. curl -o- https://raw.githubusercontent.com/creationix/nvm/v0.33.11/install.sh | bash \
  400. && . $NVM_DIR/nvm.sh \
  401. && nvm install ${NODE_VERSION} \
  402. && nvm use ${NODE_VERSION} \
  403. && nvm alias ${NODE_VERSION} \
  404. && if [ ${NPM_REGISTRY} ]; then \
  405. npm config set registry ${NPM_REGISTRY} \
  406. ;fi \
  407. && if [ ${INSTALL_NPM_GULP} = true ]; then \
  408. npm install -g gulp \
  409. ;fi \
  410. && if [ ${INSTALL_NPM_BOWER} = true ]; then \
  411. npm install -g bower \
  412. ;fi \
  413. && if [ ${INSTALL_NPM_VUE_CLI} = true ]; then \
  414. npm install -g @vue/cli \
  415. ;fi \
  416. && if [ ${INSTALL_NPM_ANGULAR_CLI} = true ]; then \
  417. npm install -g @angular/cli \
  418. ;fi \
  419. && ln -s `npm bin --global` /home/laradock/.node-bin \
  420. ;fi
  421. # Wouldn't execute when added to the RUN statement in the above block
  422. # Source NVM when loading bash since ~/.profile isn't loaded on non-login shell
  423. RUN if [ ${INSTALL_NODE} = true ]; then \
  424. echo "" >> ~/.bashrc && \
  425. echo 'export NVM_DIR="$HOME/.nvm"' >> ~/.bashrc && \
  426. echo '[ -s "$NVM_DIR/nvm.sh" ] && . "$NVM_DIR/nvm.sh" # This loads nvm' >> ~/.bashrc \
  427. ;fi
  428. # Add NVM binaries to root's .bashrc
  429. USER root
  430. RUN if [ ${INSTALL_NODE} = true ]; then \
  431. echo "" >> ~/.bashrc && \
  432. echo 'export NVM_DIR="/home/laradock/.nvm"' >> ~/.bashrc && \
  433. echo '[ -s "$NVM_DIR/nvm.sh" ] && . "$NVM_DIR/nvm.sh" # This loads nvm' >> ~/.bashrc \
  434. ;fi
  435. # Add PATH for node
  436. ENV PATH $PATH:/home/laradock/.node-bin
  437. # Make it so the node modules can be executed with 'docker-compose exec'
  438. # We'll create symbolic links into '/usr/local/bin'.
  439. RUN if [ ${INSTALL_NODE} = true ]; then \
  440. find $NVM_DIR -type f -name node -exec ln -s {} /usr/local/bin/node \; && \
  441. NODE_MODS_DIR="$NVM_DIR/versions/node/$(node -v)/lib/node_modules" && \
  442. ln -s $NODE_MODS_DIR/bower/bin/bower /usr/local/bin/bower && \
  443. ln -s $NODE_MODS_DIR/gulp/bin/gulp.js /usr/local/bin/gulp && \
  444. ln -s $NODE_MODS_DIR/npm/bin/npm-cli.js /usr/local/bin/npm && \
  445. ln -s $NODE_MODS_DIR/npm/bin/npx-cli.js /usr/local/bin/npx && \
  446. ln -s $NODE_MODS_DIR/vue-cli/bin/vue /usr/local/bin/vue && \
  447. ln -s $NODE_MODS_DIR/vue-cli/bin/vue-init /usr/local/bin/vue-init && \
  448. ln -s $NODE_MODS_DIR/vue-cli/bin/vue-list /usr/local/bin/vue-list \
  449. ;fi
  450. RUN if [ ${NPM_REGISTRY} ]; then \
  451. . ~/.bashrc && npm config set registry ${NPM_REGISTRY} \
  452. ;fi
  453. ###########################################################################
  454. # YARN:
  455. ###########################################################################
  456. USER laradock
  457. ARG INSTALL_YARN=false
  458. ARG YARN_VERSION=latest
  459. ENV YARN_VERSION ${YARN_VERSION}
  460. RUN if [ ${INSTALL_YARN} = true ]; then \
  461. [ -s "$NVM_DIR/nvm.sh" ] && . "$NVM_DIR/nvm.sh" && \
  462. if [ ${YARN_VERSION} = "latest" ]; then \
  463. curl -o- -L https://yarnpkg.com/install.sh | bash; \
  464. else \
  465. curl -o- -L https://yarnpkg.com/install.sh | bash -s -- --version ${YARN_VERSION}; \
  466. fi && \
  467. echo "" >> ~/.bashrc && \
  468. echo 'export PATH="$HOME/.yarn/bin:$PATH"' >> ~/.bashrc \
  469. ;fi
  470. # Add YARN binaries to root's .bashrc
  471. USER root
  472. RUN if [ ${INSTALL_YARN} = true ]; then \
  473. echo "" >> ~/.bashrc && \
  474. echo 'export YARN_DIR="/home/laradock/.yarn"' >> ~/.bashrc && \
  475. echo 'export PATH="$YARN_DIR/bin:$PATH"' >> ~/.bashrc \
  476. ;fi
  477. # Add PATH for YARN
  478. ENV PATH $PATH:/home/laradock/.yarn/bin
  479. ###########################################################################
  480. # PHP Aerospike:
  481. ###########################################################################
  482. USER root
  483. ARG INSTALL_AEROSPIKE=false
  484. RUN set -xe; \
  485. if [ ${INSTALL_AEROSPIKE} = true ]; then \
  486. # Fix dependencies for PHPUnit within aerospike extension
  487. apt-get -y install sudo wget && \
  488. # Install the php aerospike extension
  489. if [ $(php -r "echo PHP_MAJOR_VERSION;") = "5" ]; then \
  490. curl -L -o /tmp/aerospike-client-php.tar.gz https://github.com/aerospike/aerospike-client-php5/archive/master.tar.gz; \
  491. else \
  492. curl -L -o /tmp/aerospike-client-php.tar.gz https://github.com/aerospike/aerospike-client-php/archive/master.tar.gz; \
  493. fi \
  494. && mkdir -p /tmp/aerospike-client-php \
  495. && tar -C /tmp/aerospike-client-php -zxvf /tmp/aerospike-client-php.tar.gz --strip 1 \
  496. && \
  497. if [ $(php -r "echo PHP_MAJOR_VERSION;") = "5" ]; then \
  498. ( \
  499. cd /tmp/aerospike-client-php/src/aerospike \
  500. && phpize \
  501. && ./build.sh \
  502. && make install \
  503. ) \
  504. else \
  505. ( \
  506. cd /tmp/aerospike-client-php/src \
  507. && phpize \
  508. && ./build.sh \
  509. && make install \
  510. ) \
  511. fi \
  512. && rm /tmp/aerospike-client-php.tar.gz \
  513. && echo 'extension=aerospike.so' >> /etc/php/${LARADOCK_PHP_VERSION}/cli/conf.d/aerospike.ini \
  514. && echo 'aerospike.udf.lua_system_path=/usr/local/aerospike/lua' >> /etc/php/${LARADOCK_PHP_VERSION}/cli/conf.d/aerospike.ini \
  515. && echo 'aerospike.udf.lua_user_path=/usr/local/aerospike/usr-lua' >> /etc/php/${LARADOCK_PHP_VERSION}/cli/conf.d/aerospike.ini \
  516. ;fi
  517. ###########################################################################
  518. # PHP V8JS:
  519. ###########################################################################
  520. USER root
  521. ARG INSTALL_V8JS=false
  522. RUN set -xe; \
  523. if [ ${INSTALL_V8JS} = true ]; then \
  524. add-apt-repository -y ppa:pinepain/libv8-archived \
  525. && apt-get update -yqq \
  526. && apt-get install -y libv8-5.4 && \
  527. if [ $(php -r "echo PHP_MAJOR_VERSION;") = "5" ]; then \
  528. pecl install v8js-0.6.4; \
  529. else \
  530. pecl install v8js; \
  531. fi \
  532. && echo "extension=v8js.so" >> /etc/php/${LARADOCK_PHP_VERSION}/cli/php.ini \
  533. && php -m | grep -q 'v8js' \
  534. ;fi
  535. ###########################################################################
  536. # Laravel Envoy:
  537. ###########################################################################
  538. USER laradock
  539. ARG INSTALL_LARAVEL_ENVOY=false
  540. RUN if [ ${INSTALL_LARAVEL_ENVOY} = true ]; then \
  541. # Install the Laravel Envoy
  542. composer global require "laravel/envoy=~1.0" \
  543. ;fi
  544. ###########################################################################
  545. # Laravel Installer:
  546. ###########################################################################
  547. USER laradock
  548. ARG COMPOSER_REPO_PACKAGIST
  549. ENV COMPOSER_REPO_PACKAGIST ${COMPOSER_REPO_PACKAGIST}
  550. RUN if [ ${COMPOSER_REPO_PACKAGIST} ]; then \
  551. composer config -g repo.packagist composer ${COMPOSER_REPO_PACKAGIST} \
  552. ;fi
  553. ARG INSTALL_LARAVEL_INSTALLER=false
  554. RUN if [ ${INSTALL_LARAVEL_INSTALLER} = true ]; then \
  555. # Install the Laravel Installer
  556. composer global require "laravel/installer" \
  557. ;fi
  558. ###########################################################################
  559. # Deployer:
  560. ###########################################################################
  561. USER root
  562. ARG INSTALL_DEPLOYER=false
  563. RUN if [ ${INSTALL_DEPLOYER} = true ]; then \
  564. # Install the Deployer
  565. # Using Phar as currently there is no support for laravel 4 from composer version
  566. # Waiting to be resolved on https://github.com/deployphp/deployer/issues/1552
  567. curl -LO https://deployer.org/deployer.phar && \
  568. mv deployer.phar /usr/local/bin/dep && \
  569. chmod +x /usr/local/bin/dep \
  570. ;fi
  571. ###########################################################################
  572. # Prestissimo:
  573. ###########################################################################
  574. USER laradock
  575. ARG INSTALL_PRESTISSIMO=false
  576. RUN if [ ${INSTALL_PRESTISSIMO} = true ]; then \
  577. # Install Prestissimo
  578. composer global require "hirak/prestissimo" \
  579. ;fi
  580. ###########################################################################
  581. # Linuxbrew:
  582. ###########################################################################
  583. USER root
  584. ARG INSTALL_LINUXBREW=false
  585. RUN if [ ${INSTALL_LINUXBREW} = true ]; then \
  586. # Preparation
  587. apt-get upgrade -y && \
  588. apt-get install -y build-essential make cmake scons curl git \
  589. ruby autoconf automake autoconf-archive \
  590. gettext libtool flex bison \
  591. libbz2-dev libcurl4-openssl-dev \
  592. libexpat-dev libncurses-dev && \
  593. # Install the Linuxbrew
  594. git clone --depth=1 https://github.com/Homebrew/linuxbrew.git ~/.linuxbrew && \
  595. echo "" >> ~/.bashrc && \
  596. echo 'export PKG_CONFIG_PATH"=/usr/local/lib/pkgconfig:/usr/local/lib64/pkgconfig:/usr/lib64/pkgconfig:/usr/lib/pkgconfig:/usr/lib/x86_64-linux-gnu/pkgconfig:/usr/lib64/pkgconfig:/usr/share/pkgconfig:$PKG_CONFIG_PATH"' >> ~/.bashrc && \
  597. # Setup linuxbrew
  598. echo 'export LINUXBREWHOME="$HOME/.linuxbrew"' >> ~/.bashrc && \
  599. echo 'export PATH="$LINUXBREWHOME/bin:$PATH"' >> ~/.bashrc && \
  600. echo 'export MANPATH="$LINUXBREWHOME/man:$MANPATH"' >> ~/.bashrc && \
  601. echo 'export PKG_CONFIG_PATH="$LINUXBREWHOME/lib64/pkgconfig:$LINUXBREWHOME/lib/pkgconfig:$PKG_CONFIG_PATH"' >> ~/.bashrc && \
  602. echo 'export LD_LIBRARY_PATH="$LINUXBREWHOME/lib64:$LINUXBREWHOME/lib:$LD_LIBRARY_PATH"' >> ~/.bashrc \
  603. ;fi
  604. ###########################################################################
  605. # SQL SERVER:
  606. ###########################################################################
  607. ARG INSTALL_MSSQL=false
  608. RUN set -eux; \
  609. if [ ${INSTALL_MSSQL} = true ]; then \
  610. if [ $(php -r "echo PHP_MAJOR_VERSION;") = "5" ]; then \
  611. apt-get -y install php5.6-sybase freetds-bin freetds-common libsybdb5 \
  612. && php -m | grep -q 'mssql' \
  613. && php -m | grep -q 'pdo_dblib' \
  614. ;else \
  615. ###########################################################################
  616. # The following steps were taken from
  617. # https://github.com/Microsoft/msphpsql/wiki/Install-and-configuration
  618. ###########################################################################
  619. curl https://packages.microsoft.com/keys/microsoft.asc | apt-key add - && \
  620. curl https://packages.microsoft.com/config/ubuntu/16.04/prod.list > /etc/apt/sources.list.d/mssql-release.list && \
  621. apt-get update -yqq && \
  622. ACCEPT_EULA=Y apt-get install -y msodbcsql17 mssql-tools unixodbc unixodbc-dev libgss3 odbcinst locales && \
  623. ln -sfn /opt/mssql-tools/bin/sqlcmd /usr/bin/sqlcmd && \
  624. ln -sfn /opt/mssql-tools/bin/bcp /usr/bin/bcp && \
  625. echo "en_US.UTF-8 UTF-8" > /etc/locale.gen && \
  626. locale-gen && \
  627. if [ $(php -r "echo PHP_MINOR_VERSION;") = "0" ]; then \
  628. pecl install sqlsrv-5.3.0 pdo_sqlsrv-5.3.0 \
  629. ;else \
  630. pecl install sqlsrv pdo_sqlsrv \
  631. ;fi && \
  632. echo "extension=sqlsrv.so" > /etc/php/${LARADOCK_PHP_VERSION}/cli/conf.d/20-sqlsrv.ini && \
  633. echo "extension=pdo_sqlsrv.so" > /etc/php/${LARADOCK_PHP_VERSION}/cli/conf.d/20-pdo_sqlsrv.ini \
  634. && php -m | grep -q 'sqlsrv' \
  635. && php -m | grep -q 'pdo_sqlsrv' \
  636. ;fi \
  637. ;fi
  638. ###########################################################################
  639. # Minio:
  640. ###########################################################################
  641. USER root
  642. COPY mc/config.json /root/.mc/config.json
  643. ARG INSTALL_MC=false
  644. RUN if [ ${INSTALL_MC} = true ]; then\
  645. curl -fsSL -o /usr/local/bin/mc https://dl.minio.io/client/mc/release/linux-amd64/mc && \
  646. chmod +x /usr/local/bin/mc \
  647. ;fi
  648. ###########################################################################
  649. # Image optimizers:
  650. ###########################################################################
  651. USER root
  652. ARG INSTALL_IMAGE_OPTIMIZERS=false
  653. RUN if [ ${INSTALL_IMAGE_OPTIMIZERS} = true ]; then \
  654. apt-get install -y jpegoptim optipng pngquant gifsicle && \
  655. if [ ${INSTALL_NODE} = true ]; then \
  656. exec bash && . ~/.bashrc && npm install -g svgo \
  657. ;fi\
  658. ;fi
  659. USER laradock
  660. ###########################################################################
  661. # Symfony:
  662. ###########################################################################
  663. USER root
  664. ARG INSTALL_SYMFONY=false
  665. RUN if [ ${INSTALL_SYMFONY} = true ]; then \
  666. mkdir -p /usr/local/bin \
  667. && curl -LsS https://symfony.com/installer -o /usr/local/bin/symfony \
  668. && chmod a+x /usr/local/bin/symfony \
  669. # Symfony 3 alias
  670. && echo 'alias dev="php bin/console -e=dev"' >> ~/.bashrc \
  671. && echo 'alias prod="php bin/console -e=prod"' >> ~/.bashrc \
  672. # Symfony 2 alias
  673. # && echo 'alias dev="php app/console -e=dev"' >> ~/.bashrc \
  674. # && echo 'alias prod="php app/console -e=prod"' >> ~/.bashrc \
  675. ;fi
  676. ###########################################################################
  677. # PYTHON:
  678. ###########################################################################
  679. ARG INSTALL_PYTHON=false
  680. RUN if [ ${INSTALL_PYTHON} = true ]; then \
  681. apt-get -y install python python-pip python-dev build-essential \
  682. && python -m pip install --upgrade pip \
  683. && python -m pip install --upgrade virtualenv \
  684. ;fi
  685. ###########################################################################
  686. # POWERLINE:
  687. ###########################################################################
  688. USER root
  689. ARG INSTALL_POWERLINE=false
  690. RUN if [ ${INSTALL_POWERLINE} = true ]; then \
  691. if [ ${INSTALL_PYTHON} = true ]; then \
  692. python -m pip install --upgrade powerline-status && \
  693. echo "" >> /etc/bash.bashrc && \
  694. echo ". /usr/local/lib/python2.7/dist-packages/powerline/bindings/bash/powerline.sh" >> /etc/bash.bashrc \
  695. ;fi \
  696. ;fi
  697. USER laradock
  698. ###########################################################################
  699. # ImageMagick:
  700. ###########################################################################
  701. USER root
  702. ARG INSTALL_IMAGEMAGICK=false
  703. RUN if [ ${INSTALL_IMAGEMAGICK} = true ]; then \
  704. apt-get install -y imagemagick php-imagick \
  705. ;fi
  706. ###########################################################################
  707. # Terraform:
  708. ###########################################################################
  709. USER root
  710. ARG INSTALL_TERRAFORM=false
  711. RUN if [ ${INSTALL_TERRAFORM} = true ]; then \
  712. apt-get -y install sudo wget unzip \
  713. && wget https://releases.hashicorp.com/terraform/0.10.6/terraform_0.10.6_linux_amd64.zip \
  714. && unzip terraform_0.10.6_linux_amd64.zip \
  715. && mv terraform /usr/local/bin \
  716. && rm terraform_0.10.6_linux_amd64.zip \
  717. ;fi
  718. ###########################################################################
  719. # pgsql client
  720. ###########################################################################
  721. USER root
  722. ARG INSTALL_PG_CLIENT=false
  723. RUN if [ ${INSTALL_PG_CLIENT} = true ]; then \
  724. # Install the pgsql client
  725. apt-get install wget \
  726. && add-apt-repository "deb http://apt.postgresql.org/pub/repos/apt/ xenial-pgdg main" \
  727. && wget --quiet -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc | apt-key add - \
  728. && apt-get update \
  729. && apt-get -y install postgresql-client-10 \
  730. ;fi
  731. ###########################################################################
  732. # Dusk Dependencies:
  733. ###########################################################################
  734. USER root
  735. ARG CHROME_DRIVER_VERSION=stable
  736. ENV CHROME_DRIVER_VERSION ${CHROME_DRIVER_VERSION}
  737. ARG INSTALL_DUSK_DEPS=false
  738. RUN if [ ${INSTALL_DUSK_DEPS} = true ]; then \
  739. apt-get -y install zip wget unzip xdg-utils \
  740. libxpm4 libxrender1 libgtk2.0-0 libnss3 libgconf-2-4 xvfb \
  741. gtk2-engines-pixbuf xfonts-cyrillic xfonts-100dpi xfonts-75dpi \
  742. xfonts-base xfonts-scalable x11-apps \
  743. && wget https://dl.google.com/linux/direct/google-chrome-stable_current_amd64.deb \
  744. && dpkg -i --force-depends google-chrome-stable_current_amd64.deb \
  745. && apt-get -y -f install \
  746. && dpkg -i --force-depends google-chrome-stable_current_amd64.deb \
  747. && rm google-chrome-stable_current_amd64.deb \
  748. && wget https://chromedriver.storage.googleapis.com/${CHROME_DRIVER_VERSION}/chromedriver_linux64.zip \
  749. && unzip chromedriver_linux64.zip \
  750. && mv chromedriver /usr/local/bin/ \
  751. && rm chromedriver_linux64.zip \
  752. ;fi
  753. ###########################################################################
  754. # Phalcon:
  755. ###########################################################################
  756. ARG INSTALL_PHALCON=false
  757. ARG LARADOCK_PHALCON_VERSION
  758. ENV LARADOCK_PHALCON_VERSION ${LARADOCK_PHALCON_VERSION}
  759. RUN if [ $INSTALL_PHALCON = true ]; then \
  760. apt-get update && apt-get install -y unzip libpcre3-dev gcc make re2c \
  761. && curl -L -o /tmp/cphalcon.zip https://github.com/phalcon/cphalcon/archive/v${LARADOCK_PHALCON_VERSION}.zip \
  762. && unzip -d /tmp/ /tmp/cphalcon.zip \
  763. && cd /tmp/cphalcon-${LARADOCK_PHALCON_VERSION}/build \
  764. && ./install \
  765. && echo "extension=phalcon.so" >> /etc/php/${LARADOCK_PHP_VERSION}/mods-available/phalcon.ini \
  766. && ln -s /etc/php/${LARADOCK_PHP_VERSION}/mods-available/phalcon.ini /etc/php/${LARADOCK_PHP_VERSION}/cli/conf.d/30-phalcon.ini \
  767. && rm -rf /tmp/cphalcon* \
  768. ;fi
  769. ###########################################################################
  770. # MySQL Client:
  771. ###########################################################################
  772. USER root
  773. ARG INSTALL_MYSQL_CLIENT=false
  774. RUN if [ ${INSTALL_MYSQL_CLIENT} = true ]; then \
  775. apt-get update -yqq && \
  776. apt-get -y install mysql-client \
  777. ;fi
  778. ###########################################################################
  779. # FFMpeg:
  780. ###########################################################################
  781. USER root
  782. ARG INSTALL_FFMPEG=false
  783. RUN if [ ${INSTALL_FFMPEG} = true ]; then \
  784. apt-get -y install ffmpeg \
  785. ;fi
  786. ###########################################################################
  787. # Check PHP version:
  788. ###########################################################################
  789. RUN set -xe; php -v | head -n 1 | grep -q "PHP ${LARADOCK_PHP_VERSION}."
  790. #
  791. #--------------------------------------------------------------------------
  792. # Final Touch
  793. #--------------------------------------------------------------------------
  794. #
  795. USER root
  796. # Clean up
  797. RUN apt-get clean && \
  798. rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/* && \
  799. rm /var/log/lastlog /var/log/faillog
  800. # Set default work directory
  801. WORKDIR /var/www