Dockerfile 5.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171
  1. FROM ubuntu:latest
  2. LABEL maintainer="stefan@pejcic.rs"
  3. LABEL author="Stefan Pejcic"
  4. ENV TZ=UTC
  5. ENV DEBIAN_FRONTEND=noninteractive
  6. RUN apt-get update && \
  7. apt-get install -y software-properties-common && \
  8. add-apt-repository ppa:ondrej/php && \
  9. apt-get update && \
  10. apt-get install --no-install-recommends -y \
  11. msmtp \
  12. ttyd \
  13. screen \
  14. nginx \
  15. mysql-server \
  16. php8.2-fpm \
  17. php8.2-mysql \
  18. php8.2-curl \
  19. php8.2-gd \
  20. php8.2-mbstring \
  21. php8.2-xml \
  22. php8.2-xmlrpc \
  23. php8.2-soap \
  24. php8.2-intl \
  25. php8.2-zip \
  26. php8.2-bcmath \
  27. php8.2-calendar \
  28. php8.2-exif \
  29. php8.2-ftp \
  30. php8.2-ldap \
  31. php8.2-sockets \
  32. php8.2-sysvmsg \
  33. php8.2-sysvsem \
  34. php8.2-sysvshm \
  35. php8.2-tidy \
  36. php8.2-uuid \
  37. php8.2-opcache \
  38. php8.2-redis \
  39. curl \
  40. cron \
  41. pwgen \
  42. zip \
  43. unzip \
  44. wget \
  45. nano \
  46. phpmyadmin \
  47. openssh-server \
  48. php-mbstring && \
  49. apt-get clean && \
  50. apt-get autoremove -y && \
  51. rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/*
  52. ########## PHP Composer ##########
  53. COPY --from=composer:latest /usr/bin/composer /usr/local/bin/composer
  54. ########## MySQL ##########
  55. COPY mysql/mysqld.cnf /etc/mysql/mysql.conf.d/
  56. RUN chown mysql:mysql -R /var/lib/mysql
  57. RUN usermod -d /var/lib/mysql mysql
  58. RUN chmod a+rwx /run/mysqld
  59. # Get MySQL root password from debian.cnf
  60. RUN MYSQL_PASSWORD=$(awk -F "=" '/password/ {gsub(/[ \t]+/, "", $2); print $2; exit}' /etc/mysql/debian.cnf); \
  61. \
  62. if [ -z "$MYSQL_PASSWORD" ]; then \
  63. echo "Error: Password not found in /etc/mysql/debian.cnf"; \
  64. exit 1; \
  65. fi; \
  66. \
  67. service mysql start && \
  68. mysql -u root -e "ALTER USER 'debian-sys-maint'@'localhost' IDENTIFIED BY '$MYSQL_PASSWORD';"
  69. ########## PORTOVI ##########
  70. EXPOSE 22 80 3306 7681 8080
  71. ########## NGINX ##########
  72. RUN sed -i \
  73. -e 's/# server_names_hash_bucket_size 640;/server_names_hash_bucket_size 640;/' \
  74. -e 's/# worker_connections 768;/worker_connections 10000;/' \
  75. /etc/nginx/nginx.conf && \
  76. chmod 700 /etc/nginx/sites-available && \
  77. chmod 700 /etc/nginx/sites-enabled
  78. COPY nginx/default /etc/nginx/sites-available/default
  79. ########## PHPMYADMIN ##########
  80. COPY phpmyadmin/config.inc.php /etc/phpmyadmin/
  81. COPY phpmyadmin/pma.php /usr/share/phpmyadmin/pma.php
  82. RUN new_password=$(openssl rand -base64 12 | tr -d '/+' | head -c 16) \
  83. && sed -i "s/\(\$dbpass='.*'\)/\$dbpass='$new_password';/" "/etc/phpmyadmin/config-db.php" \
  84. && pma_file="/usr/share/phpmyadmin/pma.php" \
  85. && sed -i "s/\(\$_SESSION\['PMA_single_signon_user'] = '\).*\(';.*\)/\1phpmyadmin\2/" "$pma_file" \
  86. && sed -i "s/\(\$_SESSION\['PMA_single_signon_password'] = '\).*\(';.*\)/\1$new_password\2/" "$pma_file" \
  87. && sed -i "s/\(\$_SESSION\['PMA_single_signon_host'] = '\).*\(';.*\)/\1localhost\2/" "$pma_file" \
  88. && service mysql start \
  89. && mysql -u root -e "CREATE DATABASE IF NOT EXISTS phpmyadmin;" \
  90. && mysql -u root -e "CREATE USER 'phpmyadmin'@'localhost' IDENTIFIED BY '$new_password';" \
  91. && mysql -u root -e "GRANT ALL PRIVILEGES ON phpmyadmin.* TO 'phpmyadmin'@'localhost';" \
  92. && mysql -u root -e "GRANT ALL ON *.* TO 'phpmyadmin'@'localhost';" \
  93. && mysql -u root -e "REVOKE CREATE USER ON *.* FROM 'phpmyadmin'@'localhost';" \
  94. && mysql -u root -e "REVOKE CREATE ON *.* FROM 'phpmyadmin'@'localhost';" \
  95. && mysql -u root -e "FLUSH PRIVILEGES;" \
  96. && mysql -u root < /usr/share/doc/phpmyadmin/examples/create_tables.sql \
  97. && service mysql stop
  98. ########## PHP-FPM ##########
  99. # 8.2
  100. RUN update-alternatives --set php /usr/bin/php8.2
  101. RUN sed -i \
  102. -e 's/^upload_max_filesize = .*/upload_max_filesize = 1024M/' \
  103. -e 's/^max_input_time = .*/max_input_time = 600/' \
  104. -e 's/^memory_limit = .*/memory_limit = -1/' \
  105. -e 's/^post_max_size = .*/post_max_size = 1024M/' \
  106. -e 's/^max_execution_time = .*/max_execution_time = 600/' \
  107. -e 's/^opcache.enable= .*/opcache.enable=1/' \
  108. /etc/php/8.2/fpm/php.ini
  109. RUN sed -i 's|;sendmail_path = *|sendmail_path = "/usr/bin/msmtp -t"|g' /etc/php/8.2/fpm/php.ini
  110. RUN sed -i \
  111. -e 's/^upload_max_filesize = .*/upload_max_filesize = 1024M/' \
  112. -e 's/^max_input_time = .*/max_input_time = 600/' \
  113. -e 's/^memory_limit = .*/memory_limit = -1/' \
  114. -e 's/^post_max_size = .*/post_max_size = 1024M/' \
  115. -e 's/^max_execution_time = .*/max_execution_time = 600/' \
  116. -e 's/^opcache.enable= .*/opcache.enable=1/' \
  117. /etc/php/8.2/cli/php.ini
  118. RUN sed -i 's|;sendmail_path = *|sendmail_path = "/usr/bin/msmtp -t"|g' /etc/php/8.2/cli/php.ini
  119. ########## EMAIL ##########
  120. COPY email/msmtprc /etc/msmtprc
  121. ########## SSH ##########
  122. ENV NOTVISIBLE "in users profile"
  123. RUN echo "export VISIBLE=now" >> /etc/profile
  124. ########## SSL #############
  125. RUN mkdir -p /etc/nginx/ssl/ && cd /etc/nginx/ssl/ && openssl req -new -newkey rsa:4096 -days 365 -nodes -x509 -subj "/C=GB/ST=London/L=London/O=Global Security/OU=R&D Department/CN=openpanel.co" -keyout cert.key -out cert.crt
  126. ########## TERMINAL #############
  127. # fix for webterminal: bash: permission denied: /home/user/.bashrc
  128. RUN chmod 755 /root
  129. ########## WP-CLI ##########
  130. RUN curl -O https://raw.githubusercontent.com/wp-cli/builds/gh-pages/phar/wp-cli.phar && \
  131. chmod +x wp-cli.phar && \
  132. mv wp-cli.phar /usr/local/bin/wp
  133. ########## cleanup ##########
  134. RUN rm -rf /var/cache/apk/* /tmp/* /var/tmp/*
  135. ########## docker run entrypoint ##########
  136. COPY entrypoint.sh /etc/entrypoint.sh
  137. RUN chmod +x /etc/entrypoint.sh
  138. CMD ["/bin/sh", "-c", "/etc/entrypoint.sh ; tail -f /dev/null"]