feat: add minio

This commit is contained in:
2026-05-13 21:43:52 +03:00
parent 0e7709c95e
commit cf9052ab7a
7 changed files with 78 additions and 12 deletions
+34
View File
@@ -31,6 +31,39 @@ services:
retries: 5 retries: 5
restart: always restart: always
minio:
image: minio/minio:latest
command: server /data --console-address ":9001"
environment:
MINIO_ROOT_USER: "${S3_ACCESS_KEY_ID}"
MINIO_ROOT_PASSWORD: "${S3_SECRET_ACCESS_KEY}"
ports:
- "9000:9000"
- "9001:9001"
networks:
- aether-dev
volumes:
- minio-data:/data
restart: unless-stopped
minio-init:
image: minio/mc:latest
depends_on:
- minio
networks:
- aether-dev
environment:
S3_ACCESS_KEY_ID: "${S3_ACCESS_KEY_ID}"
S3_SECRET_ACCESS_KEY: "${S3_SECRET_ACCESS_KEY}"
S3_BUCKET_NAME: "${S3_BUCKET_NAME}"
entrypoint: >
/bin/sh -c "
mc alias set minio http://minio:9000 $${S3_ACCESS_KEY_ID} $${S3_SECRET_ACCESS_KEY} &&
mc mb -p minio/$${S3_BUCKET_NAME} || true &&
mc anonymous set download minio/$${S3_BUCKET_NAME} || true
"
restart: "no"
redis-insight: redis-insight:
image: redis/redisinsight:latest image: redis/redisinsight:latest
ports: ports:
@@ -66,6 +99,7 @@ volumes:
redis_data: redis_data:
rabbitmq-data: rabbitmq-data:
esdata: esdata:
minio-data:
networks: networks:
aether-dev: aether-dev:
+38
View File
@@ -46,6 +46,39 @@ services:
- redis-data:/data - redis-data:/data
restart: unless-stopped restart: unless-stopped
minio:
image: minio/minio:latest
command: server /data --console-address ":9001"
environment:
MINIO_ROOT_USER: "${S3_ACCESS_KEY_ID}"
MINIO_ROOT_PASSWORD: "${S3_SECRET_ACCESS_KEY}"
ports:
- "9000:9000"
- "9001:9001"
networks:
- aether
volumes:
- minio-data:/data
restart: unless-stopped
minio-init:
image: minio/mc:latest
depends_on:
- minio
networks:
- aether
environment:
S3_ACCESS_KEY_ID: "${S3_ACCESS_KEY_ID}"
S3_SECRET_ACCESS_KEY: "${S3_SECRET_ACCESS_KEY}"
S3_BUCKET_NAME: "${S3_BUCKET_NAME}"
entrypoint: >
/bin/sh -c "
mc alias set minio http://minio:9000 $${S3_ACCESS_KEY_ID} $${S3_SECRET_ACCESS_KEY} &&
mc mb -p minio/$${S3_BUCKET_NAME} || true &&
mc anonymous set download minio/$${S3_BUCKET_NAME} || true
"
restart: "no"
prestart: prestart:
build: build:
context: ./backend context: ./backend
@@ -71,6 +104,8 @@ services:
- aether - aether
env_file: env_file:
- .env - .env
environment:
S3_URL: "http://minio:9000"
restart: unless-stopped restart: unless-stopped
backend: backend:
@@ -91,6 +126,8 @@ services:
- aether - aether
env_file: env_file:
- .env - .env
environment:
S3_URL: "http://minio:9000"
restart: unless-stopped restart: unless-stopped
frontend: frontend:
@@ -111,6 +148,7 @@ volumes:
db-data: db-data:
rabbitmq-data: rabbitmq-data:
redis-data: redis-data:
minio-data:
networks: networks:
aether: aether:
+2 -2
View File
@@ -9,10 +9,10 @@
<meta name="apple-mobile-web-app-status-bar-style" content="black-translucent" /> <meta name="apple-mobile-web-app-status-bar-style" content="black-translucent" />
<meta name="apple-mobile-web-app-title" content="Aether" /> <meta name="apple-mobile-web-app-title" content="Aether" />
<link rel="apple-touch-icon" href="/favicon.png" /> <link rel="apple-touch-icon" href="/favicon.png" />
<meta name="description" content="Aether — изящный мессенджер с простотой и красотой" /> <meta name="description" content="Aether — личный проект" />
<meta name="mobile-web-app-capable" content="yes" /> <meta name="mobile-web-app-capable" content="yes" />
<meta name="format-detection" content="telephone=no" /> <meta name="format-detection" content="telephone=no" />
<title>Aether — Messenger</title> <title>Aether</title>
<link rel="preconnect" href="https://fonts.googleapis.com"> <link rel="preconnect" href="https://fonts.googleapis.com">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin> <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link href="https://fonts.googleapis.com/css2?family=Lora:ital,wght@0,400;0,600;1,400&family=Inter:wght@400;500;600&display=swap" rel="stylesheet"> <link href="https://fonts.googleapis.com/css2?family=Lora:ital,wght@0,400;0,600;1,400&family=Inter:wght@400;500;600&display=swap" rel="stylesheet">
+1 -1
View File
@@ -41,7 +41,7 @@ export default function AuthPage() {
exit={{ opacity: 0, y: 10 }} exit={{ opacity: 0, y: 10 }}
transition={{ duration: 0.2 }} transition={{ duration: 0.2 }}
> >
{isLogin ? 'Добро пожаловать!' : 'Присоединяйтесь'} {isLogin ? 'Вход в аккаунт' : 'Создание аккаунта'}
</motion.h1> </motion.h1>
</AnimatePresence> </AnimatePresence>
</div> </div>
+1 -7
View File
@@ -747,12 +747,6 @@ export default function ChatPage() {
</div> </div>
</div> </div>
{/* Footer Info */}
<div className="p-4 border-t text-center" style={{ borderColor: 'var(--border-color)' }}>
<p className="text-xs font-inter" style={{ color: 'var(--text-secondary)' }}>
Aether Chat v1.0
</p>
</div>
</div> </div>
{/* Main Chat Area */} {/* Main Chat Area */}
@@ -1157,7 +1151,7 @@ export default function ChatPage() {
<img src={miniLogo} alt="Aether Logo" className="w-full h-full object-contain" /> <img src={miniLogo} alt="Aether Logo" className="w-full h-full object-contain" />
</div> </div>
<h2 className="text-2xl font-lora font-semibold mb-3" style={{ color: 'var(--text-primary)' }}> <h2 className="text-2xl font-lora font-semibold mb-3" style={{ color: 'var(--text-primary)' }}>
Добро пожаловать в Aether Aether
</h2> </h2>
<p className="font-inter" style={{ color: 'var(--text-secondary)' }}> <p className="font-inter" style={{ color: 'var(--text-secondary)' }}>
Выберите существующий чат из списка слева или создайте новый, чтобы начать общение Выберите существующий чат из списка слева или создайте новый, чтобы начать общение
+1 -1
View File
@@ -51,7 +51,7 @@ export default function ForgotPasswordPage() {
AETHER AETHER
</div> </div>
<h2 className="text-xl font-lora font-semibold" style={{ color: 'var(--text-primary)' }}> <h2 className="text-xl font-lora font-semibold" style={{ color: 'var(--text-primary)' }}>
Восстановление пароля Запрос сброса пароля
</h2> </h2>
<p className="mt-2 text-sm font-inter" style={{ color: 'var(--text-secondary)' }}> <p className="mt-2 text-sm font-inter" style={{ color: 'var(--text-secondary)' }}>
Введите почту или никнейм для получения ссылки на сброс пароля Введите почту или никнейм для получения ссылки на сброс пароля
+1 -1
View File
@@ -78,7 +78,7 @@ export default function ResetPasswordPage() {
AETHER AETHER
</div> </div>
<h2 className="text-xl font-lora font-semibold" style={{ color: '#2C2C2C' }}> <h2 className="text-xl font-lora font-semibold" style={{ color: '#2C2C2C' }}>
Сброс пароля Установка нового пароля
</h2> </h2>
</div> </div>