You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

304 lines
9.1 KiB

  1. ###########################################################################
  2. # Set custom timezone if needed
  3. ###########################################################################
  4. ARG CUSTOM_TZ=Etc/UTC
  5. RUN if [ ${CUSTOM_TZ} -ne $(cat /etc/timezone) ]; then \
  6. ln -snf /usr/share/zoneinfo/$CUSTOM_TZ /etc/localtime && \
  7. echo $CUSTOM_TZ > /etc/timezone \
  8. ;fi
  9. ###########################################################################
  10. # Set additional locale if needed:
  11. ###########################################################################
  12. ARG CUSTOM_LOCALE=en_US.UTF-8
  13. RUN if [ ${CUSTOM_LOCALE} -ne 'en_US.UTF-8' ]; then \
  14. locale-gen ${CUSTOM_LOCALE} \
  15. ;fi
  16. ###########################################################################
  17. # Laradock non-root user:
  18. ###########################################################################
  19. ARG CUSTOM_PUID=1000
  20. ARG CUSTOM_PGID=1000
  21. RUN if [ ${CUSTOM_PUID} -nq 1000 ]; then \
  22. usermod -u ${CUSTOM_PUID} laradock \
  23. ;fi
  24. RUN if [ ${CUSTOM_PGID} -nq 1000 ]; then \
  25. groupmod -g ${CUSTOM_PGID} laradock \
  26. chown -R :${CUSTOM_PGID} /home/laradock \
  27. ;fi
  28. ###########################################################################
  29. # Update composer version if needed
  30. ###########################################################################
  31. USER root
  32. ARG COMPOSER_VERSION=2
  33. RUN set -e; if [ ${COMPOSER_VERSION} -ne 2 ]; then \
  34. composer self-update --${COMPOSER_VERSION}; \
  35. mkdir -p ${HOME}/.composer; \
  36. ln -s /run/secrets/composer_auth ${HOME}/.composer/auth.json; \
  37. else \
  38. mkdir -p ${HOME}/.config/composer; \
  39. ln -s /run/secrets/composer_auth ${HOME}/.config/composer/auth.json; \
  40. fi
  41. ###########################################################################
  42. # WP CLI:
  43. ###########################################################################
  44. # The command line interface for WordPress
  45. USER root
  46. ARG INSTALL_WP_CLI=false
  47. RUN if [ ${INSTALL_WP_CLI} = true ]; then \
  48. curl -fsSL -o /usr/local/bin/wp https://raw.githubusercontent.com/wp-cli/builds/gh-pages/phar/wp-cli.phar | bash && \
  49. chmod +x /usr/local/bin/wp \
  50. ;fi
  51. ###########################################################################
  52. # Pear Mail and Mail_Mime:
  53. ###########################################################################
  54. ARG INSTALL_PEAR_MAIL=false
  55. RUN if [ ${INSTALL_PEAR_MAIL} = true ]; then \
  56. pear install Mail && pear install Mail_Mime \
  57. ;fi
  58. ###########################################################################
  59. # Node / NVM:
  60. ###########################################################################
  61. ARG INSTALL_NODE=false
  62. ARG NODE_VERSION=v18.18.0
  63. ENV NODE_VERSION ${NODE_VERSION}
  64. USER laradock
  65. ENV NVM_DIR /home/laradock/.nvm
  66. RUN if [ ${INSTALL_NODE} = true ]; then \
  67. mkdir -p $NVM_DIR && \
  68. curl -o- https://raw.githubusercontent.com/creationix/nvm/v0.33.11/install.sh | bash \
  69. && . $NVM_DIR/nvm.sh \
  70. ;fi
  71. # Wouldn't execute when added to the RUN statement in the above block
  72. # Source NVM when loading bash since ~/.profile isn't loaded on non-login shell
  73. RUN if [ ${INSTALL_NODE} = true ]; then \
  74. echo "" >> ~/.bashrc && \
  75. echo 'export NVM_DIR="$HOME/.nvm"' >> ~/.bashrc && \
  76. echo '[ -s "$NVM_DIR/nvm.sh" ] && . "$NVM_DIR/nvm.sh" # This loads nvm' >> ~/.bashrc \
  77. ;fi
  78. # Add NVM binaries to root's .bashrc
  79. USER root
  80. RUN if [ ${INSTALL_NODE} = true ]; then \
  81. cp -R /home/laradock/.nvm /root/ && \
  82. chown -R root:root /root/.nvm && \
  83. echo "" >> ~/.bashrc && \
  84. echo 'export NVM_DIR="$HOME/.nvm"' >> ~/.bashrc && \
  85. echo '[ -s "$NVM_DIR/nvm.sh" ] && . "$NVM_DIR/nvm.sh" # This loads nvm' >> ~/.bashrc \
  86. ;fi
  87. USER root
  88. RUN if [ ${INSTALL_NODE} = true ]; then \
  89. . ~/.bashrc && nvm install ${NODE_VERSION} \
  90. && . ~/.bashrc && nvm alias default ${NODE_VERSION} \
  91. && npm i -g yarn \
  92. && cp -R ~/.nvm/alias /home/laradock/.nvm \
  93. && cp -R ~/.nvm/versions /home/laradock/.nvm \
  94. && chown -R ${CUSTOM_PUID}:${CUSTOM_PGID} /home/laradock/.nvm \
  95. ;fi
  96. ###########################################################################
  97. # ssh:
  98. ###########################################################################
  99. USER root
  100. ARG INSTALL_SSH=false
  101. ENV INSTALL_SSH ${INSTALL_SSH}
  102. RUN if [ ${INSTALL_SSH} = true ]; then \
  103. rm -f /etc/service/sshd/down \
  104. ;fi
  105. USER laradock
  106. RUN if [ ${INSTALL_SSH} = true ]; then \
  107. mkdir -p ~/.ssh \
  108. && ln -s /run/secrets/user_ssh_key ~/.ssh/id_rsa \
  109. && ln -s /run/secrets/user_known_hosts ~/.ssh/known_hosts \
  110. ;fi
  111. ###########################################################################
  112. # APT
  113. ###########################################################################
  114. USER root
  115. # once please
  116. RUN apt update -qq
  117. ###########################################################################
  118. # YADM
  119. ###########################################################################
  120. ARG INSTALL_YADM=true
  121. USER root
  122. RUN if [ ${INSTALL_YADM} = true ]; then \
  123. apt-get install direnv yadm tmux -qq && \
  124. curl -sS https://starship.rs/install.sh | sh -s -- -f && \
  125. yadm clone --bootstrap https://vcs.wpstudio.ru/gitea/dotfiles.git \
  126. ;fi
  127. USER laradock
  128. RUN if [ ${INSTALL_YADM} = true ]; then \
  129. yadm clone --bootstrap https://vcs.wpstudio.ru/gitea/dotfiles.git && \
  130. sed -i 's/#/\\$/g' ${HOME}/.config/starship.toml \
  131. ;fi
  132. ###########################################################################
  133. # FINE UTILS:
  134. ###########################################################################
  135. USER root
  136. ARG INSTALL_FINE_UTILS=false
  137. RUN if [ ${INSTALL_FINE_UTILS} = true ]; then \
  138. apt-get install htop wget unzip curl grep dbview -qq \
  139. ;fi
  140. ###########################################################################
  141. # SUPERVISOR:
  142. ###########################################################################
  143. USER root
  144. ARG INSTALL_SUPERVISOR=false
  145. RUN if [ ${INSTALL_SUPERVISOR} = true ]; then \
  146. apt-get install supervisor -qq \
  147. ;fi
  148. ###########################################################################
  149. # PYTHON & UVICORN:
  150. ###########################################################################
  151. USER root
  152. ARG INSTALL_PYTHON=false
  153. RUN if [ ${INSTALL_PYTHON} = true ]; then \
  154. apt-get install liblzma-dev libbz2-dev libffi-dev libreadline-dev zlib1g-dev -qq --no-install-recommends \
  155. ;fi
  156. USER laradock
  157. SHELL ["/bin/bash", "-c"]
  158. ARG PYTHON_VERSION=3.12
  159. ENV PYENV_VERSION=${PYTHON_VERSION}
  160. RUN if [ ${INSTALL_PYTHON} = true ]; then \
  161. set -e; \
  162. curl https://pyenv.run | bash &&\
  163. echo '' >> ~/.shell-env.local && \
  164. echo 'export PYENV_ROOT="$HOME/.pyenv"' >> ~/.shell-env.local && \
  165. echo '[[ -d $PYENV_ROOT/bin ]] && export PATH="$PYENV_ROOT/bin:$PATH"' >> ~/.shell-env.local && \
  166. echo 'eval "$(pyenv init -)"' >> ~/.shell-env.local && \
  167. echo '' >> ~/.shell-env.local && \
  168. echo 'eval "$(pyenv virtualenv-init -)"' >> ~/.shell-env.local && \
  169. echo '' >> ~/.shell-env.local && \
  170. $HOME/.pyenv/bin/pyenv install ${PYTHON_VERSION} \
  171. ;fi
  172. RUN if [ ${INSTALL_PYTHON} = true ]; then \
  173. bash -ic 'python -m pip install uvicorn' \
  174. ;fi
  175. RUN if [ false = true ]; then \
  176. python -m pip install uvicorn && \
  177. python -m pip install --upgrade supervisor && \
  178. echo_supervisord_conf > /etc/supervisord.conf && \
  179. sed -i 's/\;\[include\]/\[include\]/g' /etc/supervisord.conf && \
  180. sed -i 's/\;files\s.*/files = supervisord.d\/*.conf/g' /etc/supervisord.conf \
  181. ;fi
  182. SHELL ["/bin/sh", "-c"]
  183. ###########################################################################
  184. # Libreoffice
  185. ###########################################################################
  186. USER root
  187. ARG INSTALL_LIBREOFFICE=false
  188. RUN if [ ${INSTALL_LIBREOFFICE} = true ]; then \
  189. add-apt-repository -y ppa:libreoffice/ppa \
  190. && apt update -qq \
  191. && apt-get install libreoffice-nogui -qq --no-install-recommends \
  192. ;fi
  193. ###########################################################################
  194. # НУЦ:
  195. ###########################################################################
  196. USER root
  197. ARG INSTALL_NUC_CERTS=false
  198. RUN if [ ${INSTALL_NUC_CERTS} = true ]; then \
  199. mkdir /usr/local/share/ca-certificates/extra && \
  200. cd /usr/local/share/ca-certificates/extra && \
  201. curl -O https://gu-st.ru/content/lending/russian_trusted_root_ca_pem.crt && \
  202. curl -O https://gu-st.ru/content/lending/russian_trusted_sub_ca_pem.crt && \
  203. update-ca-certificates \
  204. ;fi
  205. ###########################################################################
  206. # Tune opts:
  207. ###########################################################################
  208. USER root
  209. ARG PHP_OPT_MEMORY_LIMIT=256M
  210. RUN sed -i "s/^memory_limit = .*/memory_limit = $PHP_OPT_MEMORY_LIMIT/g" /etc/php/${PHP_VERSION}/cli/php.ini
  211. ARG PHP_OPT_SHORT_OPEN_TAG=Off
  212. RUN sed -i "s/^short_open_tag = .*/short_open_tag = $PHP_OPT_SHORT_OPEN_TAG/g" /etc/php/${PHP_VERSION}/cli/php.ini
  213. ###########################################################################
  214. # Cleanup & Crontab
  215. ###########################################################################
  216. USER root
  217. # Clean up
  218. RUN apt-get clean && rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/*
  219. COPY ./crontab/* /etc/cron.d/
  220. RUN chmod -R 644 /etc/cron.d
  221. #ENTRYPOINT ["/bin/bash","-c","service supervisor start"]