Я пытаюсь построить такую структуру:
application-1/
├── docker/
│ ├── apache2
│ ├── php
│ ├── docker-compose.yml
├── src/
└── other-framework-files/
application-2/
├── docker/
│ ├── apache2
│ ├── php
│ ├── docker-compose.yml
├── src/
└── other-framework-files/
Где каждое приложение является полностью независимым экземпляром одного и того же кода. Я хочу добраться до точки, где у меня может появиться мое приложение дважды и где я могу развиваться на двух «блоках» независимо.
Эта структура прекрасно работает для одного экземпляра.
Давайте просто скажем, что в моей папке у меня есть только одно приложение, с которым я запускаю:
cd application-1/
docker-compose up -d
Это мой docker -compose.yml файл
version: '3.7'
services:
webapp:
build:
context: ./php/
dockerfile: Dockerfile
container_name: webapp
image: php:7.4.2-fpm-alpine
volumes:
- ../:/srv/app
apache2:
build:
network: host
context: ./apache2/
dockerfile: Dockerfile
container_name: apache2
image: httpd:2.4.39-alpine
ports:
- 8080:80
volumes:
- ../:/srv/app
mysql:
container_name: mysql
image: mysql:latest
ports:
- 13306:3306
volumes:
- mysql:/var/lib/mysql:cached
environment:
MYSQL_ROOT_USER: root
MYSQL_ROOT_PASSWORD: root
MYSQL_DATABASE: content
MYSQL_USER: content
MYSQL_PASSWORD: content
redis:
container_name: redis
image: redis:5.0.6-alpine
ports:
- 16379:6379
volumes:
- redis:/data:cached
volumes:
mysql:
driver: local
redis:
driver: local
Это прекрасно работает для одного экземпляра приложения.
Когда я go до
http://123.123.123:8080 (my Digital Ocean droplet)
Я вижу свой веб-сайт, и все хорошо.
Однако, если я хочу скопировать это в приложение 2 и запустить его оттуда, я не могу заставить это работать. Для второго приложения я попытался изменить имя всех контейнеров, а также изменил порты следующим образом:
version: '3.7'
services:
webapp2:
build:
context: ./php/
dockerfile: Dockerfile
container_name: webapp2
image: php:7.4.2-fpm-alpine
volumes:
- ../:/srv/app
apache2-2:
build:
network: host
context: ./apache2/
dockerfile: Dockerfile
container_name: apache2-2
image: httpd:2.4.39-alpine
ports:
- 8081:80
volumes:
- ../:/srv/app
mysql2:
container_name: mysql2
image: mysql:latest
ports:
- 13309:3306
volumes:
- mysql:/var/lib/mysql:cached
environment:
MYSQL_ROOT_USER: root
MYSQL_ROOT_PASSWORD: root
MYSQL_DATABASE: content
MYSQL_USER: content
MYSQL_PASSWORD: content
redis2:
container_name: redis2
image: redis:5.0.6-alpine
ports:
- 16380:6379
volumes:
- redis:/data:cached
volumes:
mysql2:
driver: local
redis2:
driver: local
Делая это, я надеялся, что смогу получить два полностью независимых мульти-контейнера composer Программы. Чтобы два разработчика могли работать отдельно над одним и тем же приложением.
Но когда я пытаюсь получить к нему доступ вот так
http://123.123.123:8081
Оно просто ничего не загружает. Говорит, что сайт недоступен. Это не ударил apache или что-нибудь. Это просто не работает.
Кто-нибудь сможет указать мне правильное направление здесь? Мне не нужно никаких причудливых решений. Это просто для разработки, просто для начала, и тогда я могу попробовать что-то настроить.
ОБНОВЛЕНИЕ:
Это мой конфиг apache2. Я изменил webapp на webapp2 для второго экземпляра.
LoadModule deflate_module /usr/local/apache2/modules/mod_deflate.so
LoadModule proxy_module /usr/local/apache2/modules/mod_proxy.so
LoadModule proxy_fcgi_module /usr/local/apache2/modules/mod_proxy_fcgi.so
LoadModule rewrite_module modules/mod_rewrite.so
<VirtualHost *:80>
ServerName www.content.local
ServerAlias content.local
# Proxy .php requests to port 9000 of the php-fpm container
ProxyPassMatch ^/(.*\.php(/.*)?)$ fcgi://webapp:9000/srv/app/public/$1
DocumentRoot /srv/app/public
<Directory /srv/app/public>
DirectoryIndex index.php
Options Indexes FollowSymLinks
AllowOverride All
Require all granted
</Directory>
# Send apache logs to stdout and stderr
CustomLog /proc/self/fd/1 common
ErrorLog /proc/self/fd/2
</VirtualHost>