├── .editorconfig
├── .gitattributes
├── .gitignore
├── .vscode
└── launch.json
├── LICENSE
├── docker-compose.yml
├── docker
├── apache
│ ├── Dockerfile
│ ├── httpd.conf
│ ├── localhost.conf
│ └── logs
│ │ └── .gitkeep
├── mysql
│ ├── mariadb.cnf
│ └── mysql.cnf
├── nginx
│ ├── Dockerfile
│ ├── default.conf
│ └── logs
│ │ └── .gitkeep
├── php
│ ├── Dockerfile
│ ├── entrypoint
│ └── php.ini
└── redis
│ └── .gitkeep
├── public_html
├── index.php
└── xdebug.php
└── readme.md
/.editorconfig:
--------------------------------------------------------------------------------
1 | root = true
2 |
3 | [*]
4 | indent_style = space
5 | indent_size = 2
6 | end_of_line = lf
7 | insert_final_newline = true
8 | trim_trailing_whitespace = true
9 |
10 | [*.php]
11 | indent_size = 4
12 |
--------------------------------------------------------------------------------
/.gitattributes:
--------------------------------------------------------------------------------
1 | # Enforce Unix newlines
2 | * text=lf
3 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | /**/.idea/
2 | /**/.DS_Store
3 |
4 | /**/docker/redis/*
5 | !/**/docker/redis/.gitkeep
6 | /**/docker/apache/logs/*
7 | !/**/docker/apache/logs/.gitkeep
8 | /**/docker/mysql/dbdata/*
9 | /**/docker/postgres/dbdata/*
10 | /**/docker/nginx/logs/*
11 | !/**/docker/nginx/logs/.gitkeep
12 |
--------------------------------------------------------------------------------
/.vscode/launch.json:
--------------------------------------------------------------------------------
1 | {
2 | "version": "0.2.0",
3 | "configurations": [
4 | {
5 | "name": "Listen for Xdebug",
6 | "type": "php",
7 | "request": "launch",
8 | "port": 9003,
9 | "pathMappings": {
10 | "/var/www": "${workspaceFolder}"
11 | }
12 | }
13 | ]
14 | }
15 |
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | Copyright (c) 2019-2023 Vagner dos Santos Cardoso
2 |
3 | Permission is hereby granted, free of charge, to any person obtaining a copy
4 | of this software and associated documentation files (the "Software"), to deal
5 | in the Software without restriction, including without limitation the rights
6 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
7 | copies of the Software, and to permit persons to whom the Software is
8 | furnished to do so, subject to the following conditions:
9 |
10 | The above copyright notice and this permission notice shall be included in
11 | all copies or substantial portions of the Software.
12 |
13 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
14 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
15 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
16 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
17 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
18 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
19 | THE SOFTWARE.
20 |
--------------------------------------------------------------------------------
/docker-compose.yml:
--------------------------------------------------------------------------------
1 | version: "3.7"
2 |
3 | networks:
4 | docker.network:
5 | driver: bridge
6 |
7 | services:
8 | php:
9 | build: ./docker/php
10 | restart: unless-stopped
11 | container_name: docker.php
12 | tty: true
13 | depends_on:
14 | - mysql
15 | - postgres
16 | - redis
17 | networks:
18 | - docker.network
19 | volumes:
20 | - .:/var/www
21 |
22 | nginx:
23 | build: ./docker/nginx
24 | container_name: docker.nginx
25 | restart: unless-stopped
26 | tty: true
27 | depends_on:
28 | - php
29 | ports:
30 | - "433:433"
31 | - "80:80"
32 | networks:
33 | - docker.network
34 | volumes:
35 | - .:/var/www
36 |
37 | # apache:
38 | # build: ./docker/apache
39 | # restart: unless-stopped
40 | # container_name: docker.apache
41 | # tty: true
42 | # depends_on:
43 | # - php
44 | # ports:
45 | # - "80:80"
46 | # - "443:443"
47 | # networks:
48 | # - docker.network
49 | # volumes:
50 | # - .:/var/www
51 |
52 | # mariadb:
53 | # image: mariadb
54 | # restart: unless-stopped
55 | # container_name: docker.mariadb
56 | # tty: true
57 | # ports:
58 | # - '3306:3306'
59 | # networks:
60 | # - docker.network
61 | # volumes:
62 | # - './docker/mysql/mariadb.cnf:/etc/mysql/conf.d/custom.cnf:ro'
63 | # - './docker/mysql/dbdata:/var/lib/mysql'
64 | # environment:
65 | # MYSQL_DATABASE: ${MYSQL_DATABASE:-development}
66 | # MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD:-root}
67 | # MYSQL_PASSWORD: ${MYSQL_PASSWORD:-mysql}
68 | # MYSQL_USER: ${MYSQL_USER:-mysql}
69 |
70 | mysql:
71 | image: mysql:5
72 | restart: unless-stopped
73 | container_name: docker.mysql
74 | tty: true
75 | ports:
76 | - "3306:3306"
77 | networks:
78 | - docker.network
79 | volumes:
80 | - "./docker/mysql/mysql.cnf:/etc/mysql/conf.d/custom.cnf:ro"
81 | - "./docker/mysql/dbdata:/var/lib/mysql"
82 | environment:
83 | MYSQL_DATABASE: ${MYSQL_DATABASE:-development}
84 | MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD:-root}
85 | MYSQL_PASSWORD: ${MYSQL_PASSWORD:-mysql}
86 | MYSQL_USER: ${MYSQL_USER:-mysql}
87 |
88 | phpmyadmin:
89 | image: phpmyadmin
90 | container_name: docker.phpmyadmin
91 | tty: true
92 | depends_on:
93 | - mysql
94 | ports:
95 | - "8080:80"
96 | networks:
97 | - docker.network
98 | environment:
99 | PMA_HOST: mysql
100 | PMA_ARBITRARY: 1
101 | PMA_PORT: 3306
102 |
103 | postgres:
104 | image: postgres:15-alpine
105 | container_name: docker.postgres
106 | restart: unless-stopped
107 | tty: true
108 | ports:
109 | - "5432:5432"
110 | networks:
111 | - docker.network
112 | volumes:
113 | - "./docker/postgres/dbdata:/var/lib/postgresql/data"
114 | environment:
115 | POSTGRES_USER: ${POSTGRES_USER:-postgres}
116 | POSTGRES_PASSWORD: ${POSTGRES_PASSWORD:-postgres}
117 | POSTGRES_DB: ${POSTGRES_DB:-development}
118 |
119 | pgadmin:
120 | image: dpage/pgadmin4
121 | container_name: docker.pgadmin
122 | tty: true
123 | depends_on:
124 | - postgres
125 | ports:
126 | - "8081:80"
127 | networks:
128 | - docker.network
129 | environment:
130 | PGADMIN_DEFAULT_EMAIL: ${PGADMIN_DEFAULT_EMAIL:-admin@localhost.com}
131 | PGADMIN_DEFAULT_PASSWORD: ${PGADMIN_DEFAULT_PASSWORD:-admin}
132 |
133 | redis:
134 | image: bitnami/redis:latest
135 | restart: unless-stopped
136 | container_name: docker.redis
137 | tty: true
138 | ports:
139 | - "6379:6379"
140 | networks:
141 | - docker.network
142 | volumes:
143 | - ./docker/redis:/bitnami/redis/data
144 | environment:
145 | ALLOW_EMPTY_PASSWORD: ${REDIS_ALLOW_EMPTY_PASSWORD:-no}
146 | REDIS_PASSWORD: ${REDIS_PASSWORD:-redis}
147 |
--------------------------------------------------------------------------------
/docker/apache/Dockerfile:
--------------------------------------------------------------------------------
1 | FROM httpd:2.4-alpine
2 |
3 | ENV TZ=${TZ:-UTC}
4 | RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone
5 |
6 | ENV APP_ROOT=/var/www/app
7 | ENV SERVER_NAME=localhost
8 | ENV DOCUMENT_ROOT=${APP_ROOT}/public_html
9 | ENV APACHE_LOG_DIR=${APP_ROOT}/docker/apache/logs
10 | ENV APACHE_RUN_GROUP=www-data
11 | ENV APACHE_RUN_USER=www-data
12 |
13 | RUN apk add --update --no-cache tzdata
14 |
15 | WORKDIR ${APP_ROOT}
16 |
17 | RUN mkdir -p ${DOCUMENT_ROOT}
18 | RUN chown -R ${APACHE_RUN_USER}:${APACHE_RUN_USER} ${DOCUMENT_ROOT}
19 |
20 | RUN ln -s ${APP_ROOT}/public_html/index.php ${DOCUMENT_ROOT}
21 |
22 | COPY ./httpd.conf /usr/local/apache2/conf/httpd.conf
23 |
--------------------------------------------------------------------------------
/docker/apache/httpd.conf:
--------------------------------------------------------------------------------
1 | #
2 | # This is the main Apache HTTP server configuration file. It contains the
3 | # configuration directives that give the server its instructions.
4 | # See for detailed information.
5 | # In particular, see
6 | #
7 | # for a discussion of each configuration directive.
8 | #
9 | # Do NOT simply read the instructions in here without understanding
10 | # what they do. They're here only as hints or reminders. If you are unsure
11 | # consult the online docs. You have been warned.
12 | #
13 | # Configuration and logfile names: If the filenames you specify for many
14 | # of the server's control files begin with "/" (or "drive:/" for Win32), the
15 | # server will use that explicit path. If the filenames do *not* begin
16 | # with "/", the value of ServerRoot is prepended -- so "logs/access_log"
17 | # with ServerRoot set to "/usr/local/apache2" will be interpreted by the
18 | # server as "/usr/local/apache2/logs/access_log", whereas "/logs/access_log"
19 | # will be interpreted as '/logs/access_log'.
20 |
21 | #
22 | # ServerRoot: The top of the directory tree under which the server's
23 | # configuration, error, and log files are kept.
24 | #
25 | # Do not add a slash at the end of the directory path. If you point
26 | # ServerRoot at a non-local disk, be sure to specify a local disk on the
27 | # Mutex directive, if file-based mutexes are used. If you wish to share the
28 | # same ServerRoot for multiple httpd daemons, you will need to change at
29 | # least PidFile.
30 | #
31 | ServerRoot "/usr/local/apache2"
32 |
33 | #
34 | # Mutex: Allows you to set the mutex mechanism and mutex file directory
35 | # for individual mutexes, or change the global defaults
36 | #
37 | # Uncomment and change the directory if mutexes are file-based and the default
38 | # mutex file directory is not on a local disk or is not appropriate for some
39 | # other reason.
40 | #
41 | # Mutex default:logs
42 |
43 | #
44 | # Listen: Allows you to bind Apache to specific IP addresses and/or
45 | # ports, instead of the default. See also the
46 | # directive.
47 | #
48 | # Change this to Listen on specific IP addresses as shown below to
49 | # prevent Apache from glomming onto all bound IP addresses.
50 | #
51 | #Listen 12.34.56.78:80
52 | Listen 80
53 |
54 | #
55 | # Dynamic Shared Object (DSO) Support
56 | #
57 | # To be able to use the functionality of a module which was built as a DSO you
58 | # have to place corresponding `LoadModule' lines at this location so the
59 | # directives contained in it are actually available _before_ they are used.
60 | # Statically compiled modules (those listed by `httpd -l') do not need
61 | # to be loaded here.
62 | #
63 | # Example:
64 | # LoadModule foo_module modules/mod_foo.so
65 | #
66 | LoadModule mpm_event_module modules/mod_mpm_event.so
67 | #LoadModule mpm_prefork_module modules/mod_mpm_prefork.so
68 | #LoadModule mpm_worker_module modules/mod_mpm_worker.so
69 | LoadModule authn_file_module modules/mod_authn_file.so
70 | #LoadModule authn_dbm_module modules/mod_authn_dbm.so
71 | #LoadModule authn_anon_module modules/mod_authn_anon.so
72 | #LoadModule authn_dbd_module modules/mod_authn_dbd.so
73 | #LoadModule authn_socache_module modules/mod_authn_socache.so
74 | LoadModule authn_core_module modules/mod_authn_core.so
75 | LoadModule authz_host_module modules/mod_authz_host.so
76 | LoadModule authz_groupfile_module modules/mod_authz_groupfile.so
77 | LoadModule authz_user_module modules/mod_authz_user.so
78 | #LoadModule authz_dbm_module modules/mod_authz_dbm.so
79 | #LoadModule authz_owner_module modules/mod_authz_owner.so
80 | #LoadModule authz_dbd_module modules/mod_authz_dbd.so
81 | LoadModule authz_core_module modules/mod_authz_core.so
82 | #LoadModule authnz_ldap_module modules/mod_authnz_ldap.so
83 | #LoadModule authnz_fcgi_module modules/mod_authnz_fcgi.so
84 | LoadModule access_compat_module modules/mod_access_compat.so
85 | LoadModule auth_basic_module modules/mod_auth_basic.so
86 | #LoadModule auth_form_module modules/mod_auth_form.so
87 | #LoadModule auth_digest_module modules/mod_auth_digest.so
88 | #LoadModule allowmethods_module modules/mod_allowmethods.so
89 | #LoadModule isapi_module modules/mod_isapi.so
90 | #LoadModule file_cache_module modules/mod_file_cache.so
91 | #LoadModule cache_module modules/mod_cache.so
92 | #LoadModule cache_disk_module modules/mod_cache_disk.so
93 | #LoadModule cache_socache_module modules/mod_cache_socache.so
94 | #LoadModule socache_shmcb_module modules/mod_socache_shmcb.so
95 | #LoadModule socache_dbm_module modules/mod_socache_dbm.so
96 | #LoadModule socache_memcache_module modules/mod_socache_memcache.so
97 | #LoadModule socache_redis_module modules/mod_socache_redis.so
98 | #LoadModule watchdog_module modules/mod_watchdog.so
99 | #LoadModule macro_module modules/mod_macro.so
100 | #LoadModule dbd_module modules/mod_dbd.so
101 | #LoadModule bucketeer_module modules/mod_bucketeer.so
102 | #LoadModule dumpio_module modules/mod_dumpio.so
103 | #LoadModule echo_module modules/mod_echo.so
104 | #LoadModule example_hooks_module modules/mod_example_hooks.so
105 | #LoadModule case_filter_module modules/mod_case_filter.so
106 | #LoadModule case_filter_in_module modules/mod_case_filter_in.so
107 | #LoadModule example_ipc_module modules/mod_example_ipc.so
108 | #LoadModule buffer_module modules/mod_buffer.so
109 | #LoadModule data_module modules/mod_data.so
110 | #LoadModule ratelimit_module modules/mod_ratelimit.so
111 | LoadModule reqtimeout_module modules/mod_reqtimeout.so
112 | #LoadModule ext_filter_module modules/mod_ext_filter.so
113 | #LoadModule request_module modules/mod_request.so
114 | #LoadModule include_module modules/mod_include.so
115 | LoadModule filter_module modules/mod_filter.so
116 | #LoadModule reflector_module modules/mod_reflector.so
117 | #LoadModule substitute_module modules/mod_substitute.so
118 | #LoadModule sed_module modules/mod_sed.so
119 | #LoadModule charset_lite_module modules/mod_charset_lite.so
120 | #LoadModule deflate_module modules/mod_deflate.so
121 | #LoadModule xml2enc_module modules/mod_xml2enc.so
122 | #LoadModule proxy_html_module modules/mod_proxy_html.so
123 | #LoadModule brotli_module modules/mod_brotli.so
124 | LoadModule mime_module modules/mod_mime.so
125 | #LoadModule ldap_module modules/mod_ldap.so
126 | LoadModule log_config_module modules/mod_log_config.so
127 | #LoadModule log_debug_module modules/mod_log_debug.so
128 | #LoadModule log_forensic_module modules/mod_log_forensic.so
129 | #LoadModule logio_module modules/mod_logio.so
130 | #LoadModule lua_module modules/mod_lua.so
131 | LoadModule env_module modules/mod_env.so
132 | #LoadModule mime_magic_module modules/mod_mime_magic.so
133 | #LoadModule cern_meta_module modules/mod_cern_meta.so
134 | #LoadModule expires_module modules/mod_expires.so
135 | LoadModule headers_module modules/mod_headers.so
136 | #LoadModule ident_module modules/mod_ident.so
137 | #LoadModule usertrack_module modules/mod_usertrack.so
138 | #LoadModule unique_id_module modules/mod_unique_id.so
139 | LoadModule setenvif_module modules/mod_setenvif.so
140 | LoadModule version_module modules/mod_version.so
141 | #LoadModule remoteip_module modules/mod_remoteip.so
142 | LoadModule proxy_module modules/mod_proxy.so
143 | #LoadModule proxy_connect_module modules/mod_proxy_connect.so
144 | #LoadModule proxy_ftp_module modules/mod_proxy_ftp.so
145 | #LoadModule proxy_http_module modules/mod_proxy_http.so
146 | LoadModule proxy_fcgi_module modules/mod_proxy_fcgi.so
147 | #LoadModule proxy_scgi_module modules/mod_proxy_scgi.so
148 | #LoadModule proxy_uwsgi_module modules/mod_proxy_uwsgi.so
149 | #LoadModule proxy_fdpass_module modules/mod_proxy_fdpass.so
150 | #LoadModule proxy_wstunnel_module modules/mod_proxy_wstunnel.so
151 | #LoadModule proxy_ajp_module modules/mod_proxy_ajp.so
152 | #LoadModule proxy_balancer_module modules/mod_proxy_balancer.so
153 | #LoadModule proxy_express_module modules/mod_proxy_express.so
154 | #LoadModule proxy_hcheck_module modules/mod_proxy_hcheck.so
155 | #LoadModule session_module modules/mod_session.so
156 | #LoadModule session_cookie_module modules/mod_session_cookie.so
157 | #LoadModule session_crypto_module modules/mod_session_crypto.so
158 | #LoadModule session_dbd_module modules/mod_session_dbd.so
159 | #LoadModule slotmem_shm_module modules/mod_slotmem_shm.so
160 | #LoadModule slotmem_plain_module modules/mod_slotmem_plain.so
161 | #LoadModule ssl_module modules/mod_ssl.so
162 | #LoadModule optional_hook_export_module modules/mod_optional_hook_export.so
163 | #LoadModule optional_hook_import_module modules/mod_optional_hook_import.so
164 | #LoadModule optional_fn_import_module modules/mod_optional_fn_import.so
165 | #LoadModule optional_fn_export_module modules/mod_optional_fn_export.so
166 | #LoadModule dialup_module modules/mod_dialup.so
167 | #LoadModule http2_module modules/mod_http2.so
168 | #LoadModule proxy_http2_module modules/mod_proxy_http2.so
169 | #LoadModule md_module modules/mod_md.so
170 | #LoadModule lbmethod_byrequests_module modules/mod_lbmethod_byrequests.so
171 | #LoadModule lbmethod_bytraffic_module modules/mod_lbmethod_bytraffic.so
172 | #LoadModule lbmethod_bybusyness_module modules/mod_lbmethod_bybusyness.so
173 | #LoadModule lbmethod_heartbeat_module modules/mod_lbmethod_heartbeat.so
174 | LoadModule unixd_module modules/mod_unixd.so
175 | #LoadModule heartbeat_module modules/mod_heartbeat.so
176 | #LoadModule heartmonitor_module modules/mod_heartmonitor.so
177 | #LoadModule dav_module modules/mod_dav.so
178 | LoadModule status_module modules/mod_status.so
179 | LoadModule autoindex_module modules/mod_autoindex.so
180 | #LoadModule asis_module modules/mod_asis.so
181 | #LoadModule info_module modules/mod_info.so
182 | #LoadModule suexec_module modules/mod_suexec.so
183 |
184 | #LoadModule cgid_module modules/mod_cgid.so
185 |
186 |
187 | #LoadModule cgi_module modules/mod_cgi.so
188 |
189 | #LoadModule dav_fs_module modules/mod_dav_fs.so
190 | #LoadModule dav_lock_module modules/mod_dav_lock.so
191 | #LoadModule vhost_alias_module modules/mod_vhost_alias.so
192 | #LoadModule negotiation_module modules/mod_negotiation.so
193 | LoadModule dir_module modules/mod_dir.so
194 | #LoadModule imagemap_module modules/mod_imagemap.so
195 | #LoadModule actions_module modules/mod_actions.so
196 | #LoadModule speling_module modules/mod_speling.so
197 | #LoadModule userdir_module modules/mod_userdir.so
198 | LoadModule alias_module modules/mod_alias.so
199 | LoadModule rewrite_module modules/mod_rewrite.so
200 |
201 |
202 | #
203 | # If you wish httpd to run as a different user or group, you must run
204 | # httpd as root initially and it will switch.
205 | #
206 | # User/Group: The name (or #number) of the user/group to run httpd as.
207 | # It is usually good practice to create a dedicated user and group for
208 | # running httpd, as with most system services.
209 | #
210 | User ${APACHE_RUN_USER}
211 | Group ${APACHE_RUN_GROUP}
212 |
213 |
214 |
215 | # 'Main' server configuration
216 | #
217 | # The directives in this section set up the values used by the 'main'
218 | # server, which responds to any requests that aren't handled by a
219 | # definition. These values also provide defaults for
220 | # any containers you may define later in the file.
221 | #
222 | # All of these directives may appear inside containers,
223 | # in which case these default settings will be overridden for the
224 | # virtual host being defined.
225 | #
226 |
227 | #
228 | # ServerAdmin: Your address, where problems with the server should be
229 | # e-mailed. This address appears on some server-generated pages, such
230 | # as error documents. e.g. admin@your-domain.com
231 | #
232 | ServerAdmin admin@${SERVER_NAME}
233 |
234 | #
235 | # ServerName gives the name and port that the server uses to identify itself.
236 | # This can often be determined automatically, but we recommend you specify
237 | # it explicitly to prevent problems during startup.
238 | #
239 | # If your host doesn't have a registered DNS name, enter its IP address here.
240 | #
241 | ServerName ${SERVER_NAME}
242 |
243 | #
244 | # Deny access to the entirety of your server's filesystem. You must
245 | # explicitly permit access to web content directories in other
246 | # blocks below.
247 | #
248 |
249 | AllowOverride none
250 | Require all denied
251 |
252 |
253 | #
254 | # Note that from this point forward you must specifically allow
255 | # particular features to be enabled - so if something's not working as
256 | # you might expect, make sure that you have specifically enabled it
257 | # below.
258 | #
259 |
260 | #
261 | # DocumentRoot: The directory out of which you will serve your
262 | # documents. By default, all requests are taken from this directory, but
263 | # symbolic links and aliases may be used to point to other locations.
264 | #
265 |
266 | ProxyPassMatch ^/(.*\.php(/.*)?)$ fcgi://php:9000${DOCUMENT_ROOT}/$1
267 | DocumentRoot ${DOCUMENT_ROOT}
268 |
269 |
270 | #
271 | # Possible values for the Options directive are "None", "All",
272 | # or any combination of:
273 | # Indexes Includes FollowSymLinks SymLinksifOwnerMatch ExecCGI MultiViews
274 | #
275 | # Note that "MultiViews" must be named *explicitly* --- "Options All"
276 | # doesn't give it to you.
277 | #
278 | # The Options directive is both complicated and important. Please see
279 | # http://httpd.apache.org/docs/2.4/mod/core.html#options
280 | # for more information.
281 | #
282 | Options Indexes FollowSymLinks
283 |
284 | #
285 | # AllowOverride controls what directives may be placed in .htaccess files.
286 | # It can be "All", "None", or any combination of the keywords:
287 | # AllowOverride FileInfo AuthConfig Limit
288 | #
289 | AllowOverride All
290 |
291 | #
292 | # Controls who can get stuff from this server.
293 | #
294 | Require all granted
295 | DirectoryIndex index.php
296 |
297 |
298 | #
299 | # DirectoryIndex: sets the file that Apache will serve if a directory
300 | # is requested.
301 | #
302 |
303 | DirectoryIndex index.html
304 |
305 |
306 | #
307 | # The following lines prevent .htaccess and .htpasswd files from being
308 | # viewed by Web clients.
309 | #
310 |
311 | Require all denied
312 |
313 |
314 | #
315 | # ErrorLog: The location of the error log file.
316 | # If you do not specify an ErrorLog directive within a
317 | # container, error messages relating to that virtual host will be
318 | # logged here. If you *do* define an error logfile for a
319 | # container, that host's errors will be logged there and not here.
320 | #
321 | ErrorLog ${APACHE_LOG_DIR}/error.log
322 |
323 | #
324 | # LogLevel: Control the number of messages logged to the error_log.
325 | # Possible values include: debug, info, notice, warn, error, crit,
326 | # alert, emerg.
327 | #
328 | LogLevel warn
329 |
330 |
331 | #
332 | # The following directives define some format nicknames for use with
333 | # a CustomLog directive (see below).
334 | #
335 | LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
336 | LogFormat "%h %l %u %t \"%r\" %>s %b" common
337 |
338 |
339 | # You need to enable mod_logio.c to use %I and %O
340 | LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\" %I %O" combinedio
341 |
342 |
343 | #
344 | # The location and format of the access logfile (Common Logfile Format).
345 | # If you do not define any access logfiles within a
346 | # container, they will be logged here. Contrariwise, if you *do*
347 | # define per- access logfiles, transactions will be
348 | # logged therein and *not* in this file.
349 | #
350 | CustomLog ${APACHE_LOG_DIR}/access.log combined
351 |
352 | #
353 | # If you prefer a logfile with access, agent, and referer information
354 | # (Combined Logfile Format) you can use the following directive.
355 | #
356 | #CustomLog "logs/access_log" combined
357 |
358 |
359 |
360 | #
361 | # Redirect: Allows you to tell clients about documents that used to
362 | # exist in your server's namespace, but do not anymore. The client
363 | # will make a new request for the document at its new location.
364 | # Example:
365 | # Redirect permanent /foo http://www.example.com/bar
366 |
367 | #
368 | # Alias: Maps web paths into filesystem paths and is used to
369 | # access content that does not live under the DocumentRoot.
370 | # Example:
371 | # Alias /webpath /full/filesystem/path
372 | #
373 | # If you include a trailing / on /webpath then the server will
374 | # require it to be present in the URL. You will also likely
375 | # need to provide a section to allow access to
376 | # the filesystem path.
377 |
378 | #
379 | # ScriptAlias: This controls which directories contain server scripts.
380 | # ScriptAliases are essentially the same as Aliases, except that
381 | # documents in the target directory are treated as applications and
382 | # run by the server when requested rather than as documents sent to the
383 | # client. The same rules about trailing "/" apply to ScriptAlias
384 | # directives as to Alias.
385 | #
386 | ScriptAlias /cgi-bin/ "/usr/local/apache2/cgi-bin/"
387 |
388 |
389 |
390 |
391 | #
392 | # ScriptSock: On threaded servers, designate the path to the UNIX
393 | # socket used to communicate with the CGI daemon of mod_cgid.
394 | #
395 | #Scriptsock cgisock
396 |
397 |
398 | #
399 | # "/usr/local/apache2/cgi-bin" should be changed to whatever your ScriptAliased
400 | # CGI directory exists, if you have that configured.
401 | #
402 |
403 | AllowOverride None
404 | Options None
405 | Require all granted
406 |
407 |
408 |
409 | #
410 | # Avoid passing HTTP_PROXY environment to CGI's on this or any proxied
411 | # backend servers which have lingering "httpoxy" defects.
412 | # 'Proxy' request header is undefined by the IETF, not listed by IANA
413 | #
414 | RequestHeader unset Proxy early
415 |
416 |
417 |
418 | #
419 | # TypesConfig points to the file containing the list of mappings from
420 | # filename extension to MIME-type.
421 | #
422 | TypesConfig conf/mime.types
423 |
424 | #
425 | # AddType allows you to add to or override the MIME configuration
426 | # file specified in TypesConfig for specific file types.
427 | #
428 | #AddType application/x-gzip .tgz
429 | #
430 | # AddEncoding allows you to have certain browsers uncompress
431 | # information on the fly. Note: Not all browsers support this.
432 | #
433 | #AddEncoding x-compress .Z
434 | #AddEncoding x-gzip .gz .tgz
435 | #
436 | # If the AddEncoding directives above are commented-out, then you
437 | # probably should define those extensions to indicate media types:
438 | #
439 | AddType application/x-compress .Z
440 | AddType application/x-gzip .gz .tgz
441 |
442 | #
443 | # AddHandler allows you to map certain file extensions to "handlers":
444 | # actions unrelated to filetype. These can be either built into the server
445 | # or added with the Action directive (see below)
446 | #
447 | # To use CGI scripts outside of ScriptAliased directories:
448 | # (You will also need to add "ExecCGI" to the "Options" directive.)
449 | #
450 | #AddHandler cgi-script .cgi
451 |
452 | # For type maps (negotiated resources):
453 | #AddHandler type-map var
454 |
455 | #
456 | # Filters allow you to process content before it is sent to the client.
457 | #
458 | # To parse .shtml files for server-side includes (SSI):
459 | # (You will also need to add "Includes" to the "Options" directive.)
460 | #
461 | #AddType text/html .shtml
462 | #AddOutputFilter INCLUDES .shtml
463 |
464 |
465 | #
466 | # The mod_mime_magic module allows the server to use various hints from the
467 | # contents of the file itself to determine its type. The MIMEMagicFile
468 | # directive tells the module where the hint definitions are located.
469 | #
470 | #MIMEMagicFile conf/magic
471 |
472 | #
473 | # Customizable error responses come in three flavors:
474 | # 1) plain text 2) local redirects 3) external redirects
475 | #
476 | # Some examples:
477 | #ErrorDocument 500 "The server made a boo boo."
478 | #ErrorDocument 404 /missing.html
479 | #ErrorDocument 404 "/cgi-bin/missing_handler.pl"
480 | #ErrorDocument 402 http://www.example.com/subscription_info.html
481 | #
482 |
483 | #
484 | # MaxRanges: Maximum number of Ranges in a request before
485 | # returning the entire resource, or one of the special
486 | # values 'default', 'none' or 'unlimited'.
487 | # Default setting is to accept 200 Ranges.
488 | #MaxRanges unlimited
489 |
490 | #
491 | # EnableMMAP and EnableSendfile: On systems that support it,
492 | # memory-mapping or the sendfile syscall may be used to deliver
493 | # files. This usually improves server performance, but must
494 | # be turned off when serving from networked-mounted
495 | # filesystems or if support for these functions is otherwise
496 | # broken on your system.
497 | # Defaults: EnableMMAP On, EnableSendfile Off
498 | #
499 | #EnableMMAP off
500 | #EnableSendfile on
501 |
502 | # Supplemental configuration
503 | #
504 | # The configuration files in the conf/extra/ directory can be
505 | # included to add extra features or to modify the default configuration of
506 | # the server, or you may simply copy their contents here and change as
507 | # necessary.
508 |
509 | # Server-pool management (MPM specific)
510 | #Include conf/extra/httpd-mpm.conf
511 |
512 | # Multi-language error messages
513 | #Include conf/extra/httpd-multilang-errordoc.conf
514 |
515 | # Fancy directory listings
516 | #Include conf/extra/httpd-autoindex.conf
517 |
518 | # Language settings
519 | #Include conf/extra/httpd-languages.conf
520 |
521 | # User home directories
522 | #Include conf/extra/httpd-userdir.conf
523 |
524 | # Real-time info on requests and configuration
525 | #Include conf/extra/httpd-info.conf
526 |
527 | # Virtual hosts
528 | #Include conf/extra/httpd-vhosts.conf
529 |
530 | # Local access to the Apache HTTP Server Manual
531 | #Include conf/extra/httpd-manual.conf
532 |
533 | # Distributed authoring and versioning (WebDAV)
534 | #Include conf/extra/httpd-dav.conf
535 |
536 | # Various default settings
537 | #Include conf/extra/httpd-default.conf
538 |
539 | # Configure mod_proxy_html to understand HTML4/XHTML1
540 |
541 | Include conf/extra/proxy-html.conf
542 |
543 |
544 | # Secure (SSL/TLS) connections
545 | #Include conf/extra/httpd-ssl.conf
546 | #
547 | # Note: The following must must be present to support
548 | # starting without SSL on platforms with no /dev/random equivalent
549 | # but a statically compiled-in mod_ssl.
550 | #
551 |
552 | SSLRandomSeed startup builtin
553 | SSLRandomSeed connect builtin
554 |
555 |
--------------------------------------------------------------------------------
/docker/apache/localhost.conf:
--------------------------------------------------------------------------------
1 |
2 | ServerName localhost
3 | ServerAlias www.localhost
4 | ServerAdmin webmaster@localhost
5 |
6 | ProxyPassMatch ^/(.*\.php(/.*)?)$ fcgi://php:9000${DOCUMENT_ROOT}/
7 |
8 | DocumentRoot ${DOCUMENT_ROOT}
9 |
10 | ErrorLog ${APACHE_LOG_DIR}/error.log
11 | CustomLog ${APACHE_LOG_DIR}/access.log combined
12 |
13 |
14 | Options Indexes FollowSymLinks
15 | AllowOverride All
16 | Require all granted
17 | DirectoryIndex index.php
18 |
19 |
20 |
--------------------------------------------------------------------------------
/docker/apache/logs/.gitkeep:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/vagnercardosoweb/docker-php8/148ec707f13c63ec7466777e523bda293b291198/docker/apache/logs/.gitkeep
--------------------------------------------------------------------------------
/docker/mysql/mariadb.cnf:
--------------------------------------------------------------------------------
1 | [mysqld]
2 | skip-networking=0
3 | skip-bind-address
4 | skip-name-resolve
5 |
--------------------------------------------------------------------------------
/docker/mysql/mysql.cnf:
--------------------------------------------------------------------------------
1 | [mysqld]
2 | bind-address = 0.0.0.0
3 | innodb_buffer_pool_size = 1024M
4 | default-authentication-plugin = mysql_native_password
5 |
6 | # Unicode
7 | character-set-server = utf8mb4
8 | collation-server = utf8mb4_unicode_ci
9 |
10 | [client]
11 | ssl-mode = DISABLED
12 | default-character-set = utf8mb4
13 |
14 | [mysql]
15 | default-character-set = utf8mb4
16 |
--------------------------------------------------------------------------------
/docker/nginx/Dockerfile:
--------------------------------------------------------------------------------
1 | FROM nginx:1.25-alpine
2 |
3 | ENV TZ=${TZ:-UTC}
4 | RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone
5 |
6 | RUN apk add --update --no-cache tzdata
7 | # RUN usermod -u 1000 nginx
8 |
9 | COPY ./default.conf /etc/nginx/conf.d/default.conf
10 |
--------------------------------------------------------------------------------
/docker/nginx/default.conf:
--------------------------------------------------------------------------------
1 | log_format compression '$remote_addr - $remote_user [$time_local] "$request" '
2 | '$status $body_bytes_sent "$http_referer" '
3 | '"$http_user_agent" "$http_x_forwarded_for" '
4 | '$request_time $upstream_response_time $pipe $upstream_cache_status';
5 |
6 | server {
7 | listen 80;
8 | listen [::]:80;
9 |
10 | root /var/www/public_html;
11 | server_name localhost;
12 | index index.php index.html;
13 |
14 | add_header X-Frame-Options "SAMEORIGIN";
15 | add_header X-Content-Type-Options "nosniff";
16 | add_header X-XSS-Protection "1; mode=block";
17 |
18 | charset utf-8;
19 | server_tokens off;
20 | keepalive_timeout 75;
21 | tcp_nopush on;
22 | tcp_nodelay on;
23 | sendfile off;
24 |
25 | access_log /var/www/docker/nginx/logs/access.log compression;
26 | error_log /var/www/docker/nginx/logs/error.log;
27 |
28 | location / {
29 | try_files $uri $uri/ /index.php?$query_string;
30 | gzip_static on;
31 | }
32 |
33 | location = /favicon.ico { access_log off; log_not_found off; }
34 | location = /robots.txt { access_log off; log_not_found off; }
35 |
36 | error_page 404 /index.php;
37 |
38 | location ~ \.php$ {
39 | try_files $uri =404;
40 | fastcgi_split_path_info ^(.+\.php)(/.+)$;
41 | fastcgi_pass php:9000;
42 | fastcgi_index index.php;
43 | fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
44 | fastcgi_param PATH_INFO $fastcgi_path_info;
45 | include fastcgi_params;
46 | }
47 |
48 | location ~* \.(jpg|jpeg|gif|png|css|js|ico|xml)$ {
49 | expires max;
50 | add_header Cache-Control public;
51 | log_not_found off;
52 | access_log off;
53 | error_log off;
54 |
55 | # Some browsers still send conditional-GET requests if there's a
56 | # Last-Modified header or an ETag header even if they haven't
57 | # reached the expiry date sent in the Expires header.
58 | add_header Last-Modified "";
59 | add_header ETag "";
60 | break;
61 | }
62 |
63 | location ~ /\. {
64 | log_not_found off;
65 | deny all;
66 | }
67 | }
68 |
--------------------------------------------------------------------------------
/docker/nginx/logs/.gitkeep:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/vagnercardosoweb/docker-php8/148ec707f13c63ec7466777e523bda293b291198/docker/nginx/logs/.gitkeep
--------------------------------------------------------------------------------
/docker/php/Dockerfile:
--------------------------------------------------------------------------------
1 | # From
2 | FROM php:8.3.4-fpm-alpine3.19
3 |
4 | # Labels
5 | LABEL creatorName="Vagner dos Santos Cardoso"
6 | LABEL creatorEmail="vagnercardosoweb@gmail.com"
7 |
8 | # Set timezone
9 | ENV TZ=${TZ:-UTC}
10 | RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone
11 |
12 | # Install non-dev dependencies
13 | RUN set -eux \
14 | && apk add --no-cache \
15 | git vim zip unzip bash curl tzdata icu-libs \
16 | c-client make ca-certificates imap gmp gettext libssh2 yaml \
17 | libintl libxslt libpng libwebp libjpeg-turbo freetype imap \
18 | linux-headers oniguruma libxslt libpq vips \
19 | gmp libzip libxml2 freetds
20 |
21 | # Install dependencies
22 | RUN set -eux \
23 | && apk add --no-cache --virtual .build_deps \
24 | libpng-dev libwebp-dev libjpeg-turbo-dev freetype-dev imap-dev \
25 | linux-headers oniguruma-dev libxslt-dev postgresql-dev vips-dev \
26 | libssh2-dev gmp-dev libzip-dev libxml2-dev freetds-dev yaml-dev \
27 | $PHPIZE_DEPS \
28 | \
29 | # Php extensions
30 | && docker-php-ext-install \
31 | mysqli \
32 | pdo_mysql \
33 | pdo_pgsql \
34 | pgsql\
35 | bcmath \
36 | mbstring \
37 | xml \
38 | gd \
39 | exif \
40 | zip \
41 | soap \
42 | intl \
43 | xsl \
44 | pcntl \
45 | sockets \
46 | sysvmsg \
47 | sysvsem \
48 | sysvshm \
49 | opcache \
50 | imap \
51 | gmp \
52 | \
53 | # Install xdebug
54 | && pecl install -o -f xdebug \
55 | && docker-php-ext-enable xdebug \
56 | \
57 | # Install YML
58 | && pecl install -o -f yaml \
59 | && docker-php-ext-enable yaml \
60 | \
61 | # Install redis
62 | && pecl install -o -f redis \
63 | && docker-php-ext-enable redis \
64 | \
65 | # Install mongodb
66 | && pecl install -o -f mongodb \
67 | && docker-php-ext-enable mongodb \
68 | \
69 | # Install apcu
70 | && pecl install -o -f apcu \
71 | && docker-php-ext-enable apcu \
72 | \
73 | # Install ssh2 \
74 | && pecl install -o -f ssh2 \
75 | && docker-php-ext-enable ssh2 \
76 | \
77 | # Clean php extensions
78 | && rm -rf /tmp/pear \
79 | && docker-php-source delete \
80 | \
81 | # Clean up
82 | && apk del --purge .build_deps \
83 | && rm -rf /var/cache/apk/*
84 |
85 | # Install composer
86 | COPY --from=composer:latest /usr/bin/composer /usr/local/bin/composer
87 |
88 | # Copy php settings
89 | COPY ./php.ini ${PHP_INI_DIR}/conf.d/99-php.ini
90 |
91 | # Copy entrypoint
92 | COPY ./entrypoint /usr/local/bin/docker-entrypoint
93 | RUN chmod +x /usr/local/bin/docker-entrypoint
94 |
95 | # Workdir
96 | ENV WORKDIR=/var/www/app
97 | RUN mkdir -p ${WORKDIR}
98 | WORKDIR ${WORKDIR}
99 |
100 | # Expose port
101 | EXPOSE 9000
102 |
103 | # Run entrypoint
104 | CMD ["docker-entrypoint"]
105 |
--------------------------------------------------------------------------------
/docker/php/entrypoint:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env bash
2 |
3 | set -e
4 |
5 | # composer install -o --working-dir="$WORKDIR"
6 |
7 | php-fpm
8 |
--------------------------------------------------------------------------------
/docker/php/php.ini:
--------------------------------------------------------------------------------
1 | [PHP]
2 | log_errors=On
3 | xmlrpc_errors=On
4 | html_errors=On
5 | display_errors=On
6 | display_startup_errors=On
7 | report_memleaks=On
8 | error_reporting=E_ALL
9 | file_uploads=On
10 | max_execution_time=120
11 | max_input_time=120
12 | session.gc_maxlifetime=1440
13 | post_max_size=50M
14 | upload_max_filesize=45M
15 | max_file_uploads=20
16 | variables_order="EGPCS"
17 | max_input_vars=10000
18 | max_input_nesting_level=64
19 | date.timezone=UTC
20 | memory_limit=512M
21 | expose_php=On
22 |
23 | [opcache]
24 | opcache.enable=true
25 | opcache.enable_cli=true
26 | opcache.jit=tracing
27 |
28 | [intl]
29 | intl.default_locale=en_utf8
30 |
31 | [xdebug]
32 | xdebug.client_host=host.docker.internal
33 | xdebug.client_port=9003
34 | xdebug.discover_client_host=0
35 | xdebug.start_with_request=yes
36 | xdebug.remote_handler=dbgp
37 | xdebug.idekey=PHPSTORM
38 | xdebug.mode=debug,develop
39 | xdebug.cli_color=1
40 |
--------------------------------------------------------------------------------
/docker/redis/.gitkeep:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/vagnercardosoweb/docker-php8/148ec707f13c63ec7466777e523bda293b291198/docker/redis/.gitkeep
--------------------------------------------------------------------------------
/public_html/index.php:
--------------------------------------------------------------------------------
1 |