First commit
This commit is contained in:
commit
f844dcb194
21
Dockerfile
Normal file
21
Dockerfile
Normal file
@ -0,0 +1,21 @@
|
||||
FROM almalinux/8-base:latest
|
||||
ARG PHPVER=81
|
||||
RUN dnf update -y && dnf upgrade -y
|
||||
RUN dnf install https://dl.fedoraproject.org/pub/epel/epel-release-latest-8.noarch.rpm -y
|
||||
RUN dnf install -y https://rpms.remirepo.net/enterprise/remi-release-8.rpm
|
||||
RUN dnf update -y && dnf upgrade -y
|
||||
RUN dnf install -y memcached nginx wget procps
|
||||
RUN mv /etc/nginx/nginx.conf /etc/nginx/nginx.bak
|
||||
COPY ./configs/nginx-default.conf /etc/nginx/nginx.conf
|
||||
RUN mkdir /run/php-fpm/
|
||||
RUN mkdir /scripts
|
||||
COPY ./scripts/* /scripts/
|
||||
RUN chmod +x /scripts/*
|
||||
RUN /scripts/install-php$PHPVER.sh
|
||||
RUN curl -O https://raw.githubusercontent.com/wp-cli/builds/gh-pages/phar/wp-cli.phar
|
||||
RUN chmod +x wp-cli.phar
|
||||
RUN mv wp-cli.phar /usr/local/bin/wp
|
||||
COPY ./configs/prod-php.ini /etc/php.ini
|
||||
COPY ./configs/mariadb.repo /etc/yum.repos.d/
|
||||
RUN yum clean all
|
||||
ENTRYPOINT [ "/scripts/entrypoint.sh" ]
|
57
README.md
Normal file
57
README.md
Normal file
@ -0,0 +1,57 @@
|
||||
# Cloud Nginx Container #
|
||||
This is the base container for running PHP based applications. Select the PHP version with the tags
|
||||
|
||||
*__You mush have docker or compatable containerization software running.__*
|
||||
|
||||
__You can pull this image locally by running:__
|
||||
|
||||
```console
|
||||
docker pull registry.dnspegasus.net/cnc:81
|
||||
```
|
||||
|
||||
__You can then run a development version of the server by running the following commands:__
|
||||
|
||||
```console
|
||||
mkdir -p local-development/domain.tld
|
||||
cd local-development/domain.tld
|
||||
mkdir web
|
||||
mkdir db
|
||||
docker run -it --rm -p 80:80 -e environment=DEV --mount type=bind,source="$(pwd)"/web,target=/home/myuser/public_html --mount type=bind,source="$(pwd)"/db,target=/var/lib/mysql -e uid=30001 -e user=myuser -e domain=domain.tld -e serveralias=www.domain.tld --name local-dev cnc:81
|
||||
```
|
||||
|
||||
*This will start the processes needed to run sites locally.*
|
||||
|
||||
__If you need to get into the container you can run from another terminal:__
|
||||
|
||||
```console
|
||||
docker exec -it local-dev /bin/bash
|
||||
```
|
||||
|
||||
__To install WordPress for your site__
|
||||
|
||||
```console
|
||||
cat /var/lib/mysql/creds
|
||||
su - myuser
|
||||
cd ~/public_html
|
||||
wp core download
|
||||
```
|
||||
|
||||
You should be able to then go into your browser and go to https://localhost (accept the SSL warning if it appears) and follow the prompts to setup the site.
|
||||
|
||||
The database credentials are shown in the /var/lib/mysql/creds file, which we had *cat* in the commands above.
|
||||
|
||||
### Tags ###
|
||||
*74* - PHP 7.4
|
||||
*80* - PHP 8.0
|
||||
*81* - PHP 8.1
|
||||
*82* - PHP 8.2
|
||||
|
||||
### Environment Variables ###
|
||||
__Required Tags__
|
||||
*uid* - User ID for File Permissions
|
||||
*user* - Username for File Permissions
|
||||
*domain* - Primary Domain for configuration
|
||||
|
||||
__Optional Tags__
|
||||
*environment* - Set to DEV to start memcached and mysql locally for development purposes
|
||||
*serveralias* - Set to allow alternative hostnames for a site.
|
2
configs/index.php
Normal file
2
configs/index.php
Normal file
@ -0,0 +1,2 @@
|
||||
<?php
|
||||
echo "pong";
|
11
configs/mariadb.repo
Normal file
11
configs/mariadb.repo
Normal file
@ -0,0 +1,11 @@
|
||||
# MariaDB 10.11 CentOS repository list - created 2023-04-03 23:52 UTC
|
||||
# https://mariadb.org/download/
|
||||
[mariadb]
|
||||
name = MariaDB
|
||||
# rpm.mariadb.org is a dynamic mirror if your preferred mirror goes offline. See https://mariadb.org/mirrorbits/ for details.
|
||||
# baseurl = https://rpm.mariadb.org/10.11/centos/$releasever/$basearch
|
||||
baseurl = https://mirrors.xtom.com/mariadb/yum/10.11/centos/$releasever/$basearch
|
||||
module_hotfixes = 1
|
||||
# gpgkey = https://rpm.mariadb.org/RPM-GPG-KEY-MariaDB
|
||||
gpgkey = https://mirrors.xtom.com/mariadb/yum/RPM-GPG-KEY-MariaDB
|
||||
gpgcheck = 1
|
89
configs/nginx-default.conf
Normal file
89
configs/nginx-default.conf
Normal file
@ -0,0 +1,89 @@
|
||||
# For more information on configuration, see:
|
||||
# * Official English Documentation: http://nginx.org/en/docs/
|
||||
# * Official Russian Documentation: http://nginx.org/ru/docs/
|
||||
|
||||
user nginx;
|
||||
worker_processes auto;
|
||||
error_log /var/log/nginx/error.log;
|
||||
pid /run/nginx.pid;
|
||||
|
||||
# Load dynamic modules. See /usr/share/doc/nginx/README.dynamic.
|
||||
include /usr/share/nginx/modules/*.conf;
|
||||
|
||||
events {
|
||||
worker_connections 1024;
|
||||
}
|
||||
|
||||
http {
|
||||
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
|
||||
'$status $body_bytes_sent "$http_referer" '
|
||||
'"$http_user_agent" "$http_x_forwarded_for"';
|
||||
|
||||
access_log /var/log/nginx/access.log main;
|
||||
|
||||
sendfile on;
|
||||
tcp_nopush on;
|
||||
tcp_nodelay on;
|
||||
keepalive_timeout 65;
|
||||
types_hash_max_size 2048;
|
||||
|
||||
include /etc/nginx/mime.types;
|
||||
default_type application/octet-stream;
|
||||
|
||||
# Load modular configuration files from the /etc/nginx/conf.d directory.
|
||||
# See http://nginx.org/en/docs/ngx_core_module.html#include
|
||||
# for more information.
|
||||
include /etc/nginx/conf.d/*.conf;
|
||||
|
||||
# server {
|
||||
# listen 80 default_server;
|
||||
# listen [::]:80 default_server;
|
||||
# server_name _;
|
||||
# root /usr/share/nginx/html;
|
||||
#
|
||||
# # Load configuration files for the default server block.
|
||||
# include /etc/nginx/default.d/*.conf;
|
||||
#
|
||||
# location / {
|
||||
# }
|
||||
#
|
||||
# error_page 404 /404.html;
|
||||
# location = /40x.html {
|
||||
# }
|
||||
#
|
||||
# error_page 500 502 503 504 /50x.html;
|
||||
# location = /50x.html {
|
||||
# }
|
||||
# }
|
||||
|
||||
# Settings for a TLS enabled server.
|
||||
#
|
||||
# server {
|
||||
# listen 443 ssl http2 default_server;
|
||||
# listen [::]:443 ssl http2 default_server;
|
||||
# server_name _;
|
||||
# root /usr/share/nginx/html;
|
||||
#
|
||||
# ssl_certificate "/etc/pki/nginx/server.crt";
|
||||
# ssl_certificate_key "/etc/pki/nginx/private/server.key";
|
||||
# ssl_session_cache shared:SSL:1m;
|
||||
# ssl_session_timeout 10m;
|
||||
# ssl_ciphers PROFILE=SYSTEM;
|
||||
# ssl_prefer_server_ciphers on;
|
||||
#
|
||||
# # Load configuration files for the default server block.
|
||||
# include /etc/nginx/default.d/*.conf;
|
||||
#
|
||||
# location / {
|
||||
# }
|
||||
#
|
||||
# error_page 404 /404.html;
|
||||
# location = /40x.html {
|
||||
# }
|
||||
#
|
||||
# error_page 500 502 503 504 /50x.html;
|
||||
# location = /50x.html {
|
||||
# }
|
||||
# }
|
||||
|
||||
}
|
13
configs/phpinfo.php
Normal file
13
configs/phpinfo.php
Normal file
@ -0,0 +1,13 @@
|
||||
<?php
|
||||
session_start();
|
||||
echo shell_exec("whoami");
|
||||
if ( !isset($_SESSION["number"]) ) {
|
||||
$_SESSION["number"] = 1;
|
||||
echo "New Session";
|
||||
echo $_SESSION["number"];
|
||||
}else {
|
||||
$_SESSION["number"] = $_SESSION["number"] + 1;
|
||||
echo $_SESSION["number"];
|
||||
}
|
||||
phpinfo();
|
||||
?>
|
1525
configs/prod-php.ini
Normal file
1525
configs/prod-php.ini
Normal file
File diff suppressed because it is too large
Load Diff
53
configs/vhost-template.tpl
Normal file
53
configs/vhost-template.tpl
Normal file
@ -0,0 +1,53 @@
|
||||
<Directory "/home/~~user~~">
|
||||
AllowOverride None
|
||||
# Allow open access:
|
||||
Require all granted
|
||||
</Directory>
|
||||
|
||||
<Directory "/home/~~user~~/public_html">
|
||||
#
|
||||
# Possible values for the Options directive are "None", "All",
|
||||
# or any combination of:
|
||||
# Indexes Includes FollowSymLinks SymLinksifOwnerMatch ExecCGI MultiViews
|
||||
#
|
||||
# Note that "MultiViews" must be named *explicitly* --- "Options All"
|
||||
# doesn't give it to you.
|
||||
#
|
||||
# The Options directive is both complicated and important. Please see
|
||||
# http://httpd.apache.org/docs/2.4/mod/core.html#options
|
||||
# for more information.
|
||||
#
|
||||
Options All MultiViews
|
||||
|
||||
#
|
||||
# AllowOverride controls what directives may be placed in .htaccess files.
|
||||
# It can be "All", "None", or any combination of the keywords:
|
||||
# Options FileInfo AuthConfig Limit
|
||||
#
|
||||
AllowOverride All
|
||||
|
||||
#
|
||||
# Controls who can get stuff from this server.
|
||||
#
|
||||
Require all granted
|
||||
</Directory>
|
||||
|
||||
<VirtualHost _default_:*>
|
||||
ServerName "~~domain~~"
|
||||
DocumentRoot "/home/~~user~~/public_html"
|
||||
RewriteEngine on
|
||||
RewriteCond %{SERVER_NAME} =~~domain~~
|
||||
RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [END,NE,R=permanent]
|
||||
</VirtualHost>
|
||||
|
||||
<IfModule mod_ssl.c>
|
||||
<VirtualHost _default_:443>
|
||||
ServerName "~~domain~~"
|
||||
DocumentRoot "/home/~~user~~/public_html"
|
||||
|
||||
|
||||
SSLCertificateFile /etc/pki/tls/certs/localhost.crt
|
||||
SSLCertificateKeyFile /etc/pki/tls/private/localhost.key
|
||||
</VirtualHost>
|
||||
</IfModule>
|
||||
|
70
pipeline/automated-build.yml
Normal file
70
pipeline/automated-build.yml
Normal file
@ -0,0 +1,70 @@
|
||||
---
|
||||
resources:
|
||||
- name: cnc
|
||||
type: git
|
||||
source:
|
||||
uri: https://repo.anhonesthost.net/cloud-hosting-platform/cloud-nginx-container.git
|
||||
branch: trunk
|
||||
|
||||
- name: build-cnc-74
|
||||
type: docker-image
|
||||
source:
|
||||
repository: registry.dnspegasus.net/cnc
|
||||
tag: 74
|
||||
|
||||
- name: build-cnc-80
|
||||
type: docker-image
|
||||
source:
|
||||
repository: registry.dnspegasus.net/cnc
|
||||
tag: 80
|
||||
|
||||
- name: build-cnc-81
|
||||
type: docker-image
|
||||
source:
|
||||
repository: registry.dnspegasus.net/cnc
|
||||
tag: 81
|
||||
|
||||
- name: build-cnc-82
|
||||
type: docker-image
|
||||
source:
|
||||
repository: registry.dnspegasus.net/cnc
|
||||
tag: 82
|
||||
|
||||
jobs:
|
||||
- name: publish-cnc-74
|
||||
plan:
|
||||
- get: cnc
|
||||
trigger: true
|
||||
- put: build-cnc-74
|
||||
params:
|
||||
build: cnc
|
||||
build_args:
|
||||
PHPVER: 74
|
||||
- name: publish-cnc-80
|
||||
plan:
|
||||
- get: cnc
|
||||
trigger: true
|
||||
- put: build-cnc-80
|
||||
params:
|
||||
build: cnc
|
||||
build_args:
|
||||
PHPVER: 80
|
||||
- name: publish-cnc-81
|
||||
plan:
|
||||
- get: cnc
|
||||
trigger: true
|
||||
- put: build-cnc-81
|
||||
params:
|
||||
build: cnc
|
||||
build_args:
|
||||
PHPVER: 81
|
||||
- name: publish-cnc-82
|
||||
plan:
|
||||
- get: cnc
|
||||
trigger: true
|
||||
- put: build-cnc-82
|
||||
params:
|
||||
build: cnc
|
||||
build_args:
|
||||
PHPVER: 82
|
||||
|
28
scripts/create-php-config.sh
Normal file
28
scripts/create-php-config.sh
Normal file
@ -0,0 +1,28 @@
|
||||
#!/bin/bash
|
||||
|
||||
rm /etc/php-fpm.d/www.conf
|
||||
|
||||
cat <<EOF > /etc/php-fpm.d/$user.conf
|
||||
|
||||
[$user]
|
||||
|
||||
user = $user
|
||||
group = $user
|
||||
listen = /run/php-fpm/www.sock
|
||||
listen.owner = nginx
|
||||
listen.group = nginx
|
||||
|
||||
pm = static
|
||||
pm.max_children = 25
|
||||
pm.max_requests = 1000
|
||||
|
||||
slowlog = /var/log/nginx/error_log
|
||||
request_slowlog_timeout = 3s
|
||||
|
||||
php_admin_value[error_log] = /var/log/nginx/error_log
|
||||
php_admin_flag[log_errors] = on
|
||||
php_value[soap.wsdl_cache_dir] = /var/lib/php/wsdlcache
|
||||
|
||||
EOF
|
||||
|
||||
exit 0
|
64
scripts/create-vhost.sh
Normal file
64
scripts/create-vhost.sh
Normal file
@ -0,0 +1,64 @@
|
||||
#!/bin/bash
|
||||
|
||||
alias_block=''
|
||||
|
||||
#Create Server Alias Block
|
||||
if [ ! -z $serveralias ]; then
|
||||
for alias in $(echo $serveralias | tr ',' ' ')
|
||||
do
|
||||
alias_block=$alias_block"ServerAlias $alias
|
||||
"
|
||||
done
|
||||
fi
|
||||
|
||||
cat <<EOF > /etc/nginx/conf.d/$domain.conf
|
||||
|
||||
# Upstream to abstract backend connection(s) for php
|
||||
upstream php {
|
||||
server unix:/run/php-fpm/www.sock;
|
||||
}
|
||||
|
||||
server {
|
||||
## Your website name goes here.
|
||||
listen 80 default_server;
|
||||
server_name _;
|
||||
#server_name $domain;
|
||||
## Your only path reference.
|
||||
root /home/$user/public_html;
|
||||
## This should be in your http block and if it is, it's not needed here.
|
||||
index index.php;
|
||||
|
||||
location = /favicon.ico {
|
||||
log_not_found off;
|
||||
access_log off;
|
||||
}
|
||||
|
||||
location = /robots.txt {
|
||||
allow all;
|
||||
log_not_found off;
|
||||
access_log off;
|
||||
}
|
||||
|
||||
location / {
|
||||
# This is cool because no php is touched for static content.
|
||||
# include the "?\$args" part so non-default permalinks doesn't break when using query string
|
||||
try_files \$uri \$uri/ /index.php?\$args;
|
||||
}
|
||||
|
||||
location ~ \.php$ {
|
||||
#NOTE: You should have "cgi.fix_pathinfo = 0;" in php.ini
|
||||
include fastcgi_params;
|
||||
fastcgi_intercept_errors on;
|
||||
fastcgi_pass php;
|
||||
#The following parameter can be also included in fastcgi_params file
|
||||
fastcgi_param SCRIPT_FILENAME \$document_root\$fastcgi_script_name;
|
||||
}
|
||||
|
||||
location ~* \.(js|css|png|jpg|jpeg|gif|ico)$ {
|
||||
expires max;
|
||||
log_not_found off;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
EOF
|
40
scripts/entrypoint.sh
Normal file
40
scripts/entrypoint.sh
Normal file
@ -0,0 +1,40 @@
|
||||
#!/bin/bash
|
||||
|
||||
adduser -u $uid $user
|
||||
|
||||
mkdir -p /home/$user/public_html
|
||||
|
||||
chown -R $user:$user /home/$user
|
||||
chmod -R 755 /home/$user
|
||||
|
||||
/scripts/create-vhost.sh
|
||||
/scripts/create-php-config.sh
|
||||
|
||||
/usr/sbin/nginx
|
||||
/usr/sbin/php-fpm -y /etc/php-fpm.conf
|
||||
|
||||
if [[ $environment == 'DEV' ]]; then
|
||||
echo "Starting Dev Deployment"
|
||||
yum install -y MariaDB-server MariaDB-client
|
||||
nohup mysqld -umysql &
|
||||
if [ ! -f /var/lib/mysql/creds ]; then
|
||||
echo "Give MySQL a chance to finish starting..."
|
||||
sleep 10
|
||||
mysql_user=$(tr -dc A-Za-z0-9 </dev/urandom | head -c 13 ; echo '')
|
||||
mysql_password=$(tr -dc A-Za-z0-9 </dev/urandom | head -c 18 ; echo '')
|
||||
mysql_db=$(tr -dc A-Za-z0-9 </dev/urandom | head -c 6 ; echo '')
|
||||
mysql -e "CREATE DATABASE devdb_"$mysql_db";"
|
||||
mysql -e "CREATE USER '"$mysql_user"'@'localhost' IDENTIFIED BY '"$mysql_password"';"
|
||||
mysql -e "GRANT ALL PRIVILEGES ON *.* TO '"$mysql_user"'@'localhost' WITH GRANT OPTION;"
|
||||
mysql -e "FLUSH PRIVILEGES;"
|
||||
echo "MySQL User: "$mysql_user > /var/lib/mysql/creds
|
||||
echo "MySQL Password: "$mysql_password >> /var/lib/mysql/creds
|
||||
echo "MySQL Database: devdb_"$mysql_db >> /var/lib/mysql/creds
|
||||
cat /var/lib/mysql/creds
|
||||
fi
|
||||
/usr/bin/memcached -d -u $user
|
||||
fi
|
||||
tail -f /var/log/nginx/*
|
||||
|
||||
exit 0
|
||||
|
6
scripts/install-php74.sh
Normal file
6
scripts/install-php74.sh
Normal file
@ -0,0 +1,6 @@
|
||||
#!/bin/bash
|
||||
dnf module enable php:remi-7.4 -y
|
||||
dnf install -y php php-fpm php-mysqlnd php-xml php-pecl-zip php-sodium php-soap php-xmlrpc \
|
||||
php-pecl-redis5 php-pecl-memcached php-pecl-memcache php-pecl-ip2location php-pecl-imagick php-pecl-geoip \
|
||||
php-mysqlnd php-mbstring php-ioncube-loader php-intl php-gd libzip php-cli
|
||||
exit 0
|
6
scripts/install-php80.sh
Normal file
6
scripts/install-php80.sh
Normal file
@ -0,0 +1,6 @@
|
||||
#!/bin/bash
|
||||
dnf module enable php:remi-8.0 -y
|
||||
dnf install -y php php-fpm php-mysqlnd php-xml php-pecl-zip php-sodium php-soap php-pecl-xmlrpc \
|
||||
php-pecl-redis5 php-pecl-memcached php-pecl-memcache php-pecl-ip2location php-pecl-imagick php-pecl-geoip \
|
||||
php-mysqlnd php-mbstring php-ioncube-loader php-intl php-gd libzip php-cli
|
||||
exit 0
|
6
scripts/install-php81.sh
Normal file
6
scripts/install-php81.sh
Normal file
@ -0,0 +1,6 @@
|
||||
#!/bin/bash
|
||||
dnf module enable php:remi-8.1 -y
|
||||
dnf install -y php php-fpm php-mysqlnd php-xml php-pecl-zip php-sodium php-soap php-pecl-xmlrpc \
|
||||
php-pecl-redis5 php-pecl-memcached php-pecl-memcache php-pecl-ip2location php-pecl-imagick php-pecl-geoip \
|
||||
php-mysqlnd php-mbstring php-ioncube-loader php-intl php-gd libzip php-cli
|
||||
exit 0
|
6
scripts/install-php82.sh
Normal file
6
scripts/install-php82.sh
Normal file
@ -0,0 +1,6 @@
|
||||
#!/bin/bash
|
||||
dnf module enable php:remi-8.2 -y
|
||||
dnf install -y php php-fpm php-mysqlnd php-xml php-pecl-zip php-sodium php-soap php-pecl-xmlrpc \
|
||||
php-pecl-redis5 php-pecl-memcached php-pecl-memcache php-pecl-ip2location php-pecl-imagick php-pecl-geoip \
|
||||
php-mysqlnd php-mbstring php-intl php-gd libzip php-cli
|
||||
exit 0
|
Loading…
Reference in New Issue
Block a user