diff --git a/.env.example b/.env.example index 478972c..aa43b53 100644 --- a/.env.example +++ b/.env.example @@ -1,4 +1,4 @@ -APP_NAME=Laravel +APP_NAME=example-app APP_ENV=local APP_KEY= APP_DEBUG=true @@ -8,12 +8,13 @@ LOG_CHANNEL=stack LOG_DEPRECATIONS_CHANNEL=null LOG_LEVEL=debug -DB_CONNECTION=mysql -DB_HOST=127.0.0.1 -DB_PORT=3306 -DB_DATABASE=laravel -DB_USERNAME=root -DB_PASSWORD= +DB_CONNECTION=pgsql +DB_HOST=db #docker-compose +#DB_HOST=127.0.0.1 #dockerfile +DB_PORT=5432 +DB_DATABASE=example-app +DB_USERNAME=postgres +DB_PASSWORD=12345678 BROADCAST_DRIVER=log CACHE_DRIVER=file diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..c928503 --- /dev/null +++ b/Dockerfile @@ -0,0 +1,57 @@ +FROM php:8.1-apache + +ENV PGHOST localhost +ENV POSTGRES_DB pgsql +ENV POSTGRES_USER postgres +ENV POSTGRES_PASSWORD 12345678 + +ENV DB_CONNECTION=pgsql +ENV DB_HOST=localhost +ENV DB_PORT=5432 +ENV DB_DATABASE=example_app +ENV DB_USERNAME=postgres +ENV DB_PASSWORD=12345678 + +COPY . /var/www/html/public + +ENV APACHE_DOCUMENT_ROOT ${APACHE_DOCUMENT_ROOT:-/var/www/html/public} + +# Required for zip; php zip extension; png; node; vim; gd; gd; php mbstring extension; cron; +RUN apt-get update && \ + apt-get install -y zip libzip-dev libpng-dev gnupg vim libfreetype6-dev libjpeg62-turbo-dev libonig-dev sudo postgresql postgresql-contrib - &&\ + apt-get install -y --no-install-recommends nodejs npm libssl-dev zlib1g-dev curl git unzip libxml2-dev libpq-dev libzip-dev && \ + pecl install apcu && \ + docker-php-ext-configure pgsql -with-pgsql=/usr/local/pgsql && \ + docker-php-ext-install -j$(nproc) zip opcache intl pdo_pgsql pgsql && \ + docker-php-ext-enable apcu pdo_pgsql sodium && \ + apt-get clean && rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/* + +COPY pg_hba.conf /etc/postgresql/15/main/ + +# Install Composer +RUN curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer + +# Copy custom apache virtual host configuration into container +COPY apache.conf /etc/apache2/sites-available/000-default.conf + +# Copy start stript into container +COPY start.sh /usr/local/bin/start + +# Set apache folder permission +RUN chown -R www-data:www-data /var/www + +# Activate Apache mod_rewrite +RUN a2enmod rewrite + +# Set start script permission +RUN chmod u+x /usr/local/bin/start + +# Cleanup +RUN apt-get clean +RUN apt-get autoclean + +EXPOSE 80 5432 + +WORKDIR /var/www/html/public +# +CMD ["/usr/local/bin/start"] diff --git a/README.md b/README.md index 4886b92..a31276a 100644 --- a/README.md +++ b/README.md @@ -34,3 +34,8 @@ P.S. В лоб пилить логику в контроллере - не инт - php artisan optimize - chmod -R 777 storage/logs - docker-compose up -d --build + +### demo-deploy (all in one) +- sudo rm -r docker +- docker build -t example-app . +- docker run -d -p 8000:80 --name example-app example-app diff --git a/apache.conf b/apache.conf new file mode 100644 index 0000000..0325fa1 --- /dev/null +++ b/apache.conf @@ -0,0 +1,11 @@ + + DocumentRoot ${APACHE_DOCUMENT_ROOT}/public + + /public + AllowOverride all + Require all granted + + + ErrorLog ${APACHE_LOG_DIR}/error.log + CustomLog ${APACHE_LOG_DIR}/access.log combined + diff --git a/pg_hba.conf b/pg_hba.conf new file mode 100644 index 0000000..33b0584 --- /dev/null +++ b/pg_hba.conf @@ -0,0 +1,104 @@ +# PostgreSQL Client Authentication Configuration File +# =================================================== +# +# Refer to the "Client Authentication" section in the PostgreSQL +# documentation for a complete description of this file. A short +# synopsis follows. +# +# This file controls: which hosts are allowed to connect, how clients +# are authenticated, which PostgreSQL user names they can use, which +# databases they can access. Records take one of these forms: +# +# local DATABASE USER METHOD [OPTIONS] +# host DATABASE USER ADDRESS METHOD [OPTIONS] +# hostssl DATABASE USER ADDRESS METHOD [OPTIONS] +# hostnossl DATABASE USER ADDRESS METHOD [OPTIONS] +# hostgssenc DATABASE USER ADDRESS METHOD [OPTIONS] +# hostnogssenc DATABASE USER ADDRESS METHOD [OPTIONS] +# +# (The uppercase items must be replaced by actual values.) +# +# The first field is the connection type: +# - "local" is a Unix-domain socket +# - "host" is a TCP/IP socket (encrypted or not) +# - "hostssl" is a TCP/IP socket that is SSL-encrypted +# - "hostnossl" is a TCP/IP socket that is not SSL-encrypted +# - "hostgssenc" is a TCP/IP socket that is GSSAPI-encrypted +# - "hostnogssenc" is a TCP/IP socket that is not GSSAPI-encrypted +# +# DATABASE can be "all", "sameuser", "samerole", "replication", a +# database name, or a comma-separated list thereof. The "all" +# keyword does not match "replication". Access to replication +# must be enabled in a separate record (see example below). +# +# USER can be "all", a user name, a group name prefixed with "+", or a +# comma-separated list thereof. In both the DATABASE and USER fields +# you can also write a file name prefixed with "@" to include names +# from a separate file. +# +# ADDRESS specifies the set of hosts the record matches. It can be a +# host name, or it is made up of an IP address and a CIDR mask that is +# an integer (between 0 and 32 (IPv4) or 128 (IPv6) inclusive) that +# specifies the number of significant bits in the mask. A host name +# that starts with a dot (.) matches a suffix of the actual host name. +# Alternatively, you can write an IP address and netmask in separate +# columns to specify the set of hosts. Instead of a CIDR-address, you +# can write "samehost" to match any of the server's own IP addresses, +# or "samenet" to match any address in any subnet that the server is +# directly connected to. +# +# METHOD can be "trust", "reject", "md5", "password", "scram-sha-256", +# "gss", "sspi", "ident", "peer", "pam", "ldap", "radius" or "cert". +# Note that "password" sends passwords in clear text; "md5" or +# "scram-sha-256" are preferred since they send encrypted passwords. +# +# OPTIONS are a set of options for the authentication in the format +# NAME=VALUE. The available options depend on the different +# authentication methods -- refer to the "Client Authentication" +# section in the documentation for a list of which options are +# available for which authentication methods. +# +# Database and user names containing spaces, commas, quotes and other +# special characters must be quoted. Quoting one of the keywords +# "all", "sameuser", "samerole" or "replication" makes the name lose +# its special character, and just match a database or username with +# that name. +# +# This file is read on server startup and when the server receives a +# SIGHUP signal. If you edit the file on a running system, you have to +# SIGHUP the server for the changes to take effect, run "pg_ctl reload", +# or execute "SELECT pg_reload_conf()". +# +# Put your actual configuration here +# ---------------------------------- +# +# If you want to allow non-local connections, you need to add more +# "host" records. In that case you will also need to make PostgreSQL +# listen on a non-local interface via the listen_addresses +# configuration parameter, or via the -i or -h command line switches. + + + + +# DO NOT DISABLE! +# If you change this first entry you will need to make sure that the +# database superuser can access the database using some other method. +# Noninteractive access to all databases is required during automatic +# maintenance (custom daily cronjobs, replication, and similar tasks). +# +# Database administrative login by Unix domain socket (psql without password) +local all all trust + +# TYPE DATABASE USER ADDRESS METHOD + +# "local" is for Unix domain socket connections only +local all all peer +# IPv4 local connections: +host all all 127.0.0.1/32 scram-sha-256 +# IPv6 local connections: +host all all ::1/128 scram-sha-256 +# Allow replication connections from localhost, by a user with the +# replication privilege. +local replication all peer +host replication all 127.0.0.1/32 scram-sha-256 +host replication all ::1/128 scram-sha-256 diff --git a/start.sh b/start.sh new file mode 100755 index 0000000..2287646 --- /dev/null +++ b/start.sh @@ -0,0 +1,21 @@ +#!/bin/sh + +service postgresql restart +sudo -u postgres psql -c "ALTER USER postgres WITH PASSWORD '12345678';" +sudo -u postgres psql -c "create database example_app;" + +php composer_2.phar update +php composer_2.phar dump-autoload + +chmod -R 777 storage/logs/ +php artisan config:clear +php artisan route:clear +php artisan cache:clear +php artisan config:cache +php artisan migrate + +set -e + +cron + +exec apache2-foreground