Initial commit: 风影 OA 全栈源码(API/Web/Flutter/IM)
含 Phase 1.1 IM seq 排序、断线重连、多端已读同步与微信式语音转文字 UI。 排除 node_modules、构建产物、安装包与 .env 密钥。 Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
@@ -0,0 +1,58 @@
|
||||
services:
|
||||
postgres:
|
||||
image: postgres:16.8-alpine
|
||||
container_name: fengying-postgres
|
||||
restart: unless-stopped
|
||||
environment:
|
||||
POSTGRES_USER: ${POSTGRES_USER:-ops}
|
||||
POSTGRES_PASSWORD: ${POSTGRES_PASSWORD}
|
||||
POSTGRES_DB: ${POSTGRES_DB:-enterprise_ops}
|
||||
ports:
|
||||
- "127.0.0.1:15432:5432"
|
||||
volumes:
|
||||
- /data/docker/pg:/var/lib/postgresql/data
|
||||
healthcheck:
|
||||
test: ["CMD-SHELL", "pg_isready -U ${POSTGRES_USER:-ops} -d ${POSTGRES_DB:-enterprise_ops}"]
|
||||
interval: 5s
|
||||
timeout: 5s
|
||||
retries: 20
|
||||
|
||||
redis:
|
||||
image: redis:7.4-alpine
|
||||
container_name: fengying-redis
|
||||
restart: unless-stopped
|
||||
command: ["redis-server", "--appendonly", "yes"]
|
||||
ports:
|
||||
- "127.0.0.1:16379:6379"
|
||||
volumes:
|
||||
- /data/docker/redis:/data
|
||||
healthcheck:
|
||||
test: ["CMD", "redis-cli", "ping"]
|
||||
interval: 5s
|
||||
timeout: 3s
|
||||
retries: 20
|
||||
|
||||
minio:
|
||||
image: minio/minio:RELEASE.2025-04-22T22-12-26Z
|
||||
container_name: fengying-minio
|
||||
restart: unless-stopped
|
||||
command: server /data --console-address ":19001"
|
||||
environment:
|
||||
MINIO_ROOT_USER: ${MINIO_ACCESS_KEY:-fengying}
|
||||
MINIO_ROOT_PASSWORD: ${MINIO_SECRET_KEY}
|
||||
ports:
|
||||
- "127.0.0.1:19000:9000"
|
||||
- "127.0.0.1:19001:19001"
|
||||
volumes:
|
||||
- /data/docker/minio:/data
|
||||
|
||||
npm:
|
||||
image: jc21/nginx-proxy-manager:latest
|
||||
container_name: fengying-npm
|
||||
restart: unless-stopped
|
||||
network_mode: host
|
||||
environment:
|
||||
DISABLE_IPV6: "true"
|
||||
volumes:
|
||||
- /data/npm/data:/data
|
||||
- /data/npm/letsencrypt:/etc/letsencrypt
|
||||
@@ -0,0 +1,16 @@
|
||||
[Unit]
|
||||
Description=Fengying OA API
|
||||
After=network.target docker.service
|
||||
Requires=docker.service
|
||||
|
||||
[Service]
|
||||
Type=simple
|
||||
WorkingDirectory=/data/fengying-oa/apps/api
|
||||
EnvironmentFile=/data/fengying-oa/apps/api/.env
|
||||
ExecStart=/usr/bin/node dist/main
|
||||
Restart=always
|
||||
RestartSec=3
|
||||
LimitNOFILE=65535
|
||||
|
||||
[Install]
|
||||
WantedBy=multi-user.target
|
||||
@@ -0,0 +1,16 @@
|
||||
[Unit]
|
||||
Description=Fengying MobileIMSDK
|
||||
After=network.target fengying-api.service
|
||||
|
||||
[Service]
|
||||
Type=simple
|
||||
WorkingDirectory=/data/fengying-oa/apps/im-server
|
||||
EnvironmentFile=/data/fengying-oa/apps/api/.env
|
||||
Environment=OA_API_URL=http://127.0.0.1:3010/api/v1
|
||||
ExecStart=/usr/bin/node server.js
|
||||
Restart=always
|
||||
RestartSec=3
|
||||
LimitNOFILE=65535
|
||||
|
||||
[Install]
|
||||
WantedBy=multi-user.target
|
||||
@@ -0,0 +1,73 @@
|
||||
server {
|
||||
listen 127.0.0.1:8088;
|
||||
server_name oa.fysxkj.com;
|
||||
|
||||
client_max_body_size 32m;
|
||||
|
||||
root /data/fengying-oa/apps/web/dist;
|
||||
index index.html;
|
||||
|
||||
location = /index.html {
|
||||
add_header Cache-Control "no-cache, no-store, must-revalidate";
|
||||
add_header Pragma "no-cache";
|
||||
add_header Expires "0";
|
||||
}
|
||||
|
||||
location = /fengying-oa.apk {
|
||||
default_type application/vnd.android.package-archive;
|
||||
add_header Content-Disposition 'attachment; filename="fengying-oa.apk"';
|
||||
add_header Cache-Control "no-cache";
|
||||
}
|
||||
|
||||
location = /fengying-oa-setup.exe {
|
||||
default_type application/octet-stream;
|
||||
add_header Content-Disposition 'attachment; filename="fengying-oa-setup.exe"';
|
||||
add_header Cache-Control "no-cache";
|
||||
}
|
||||
|
||||
location = /fengying-oa-linux.tar.gz {
|
||||
default_type application/gzip;
|
||||
add_header Content-Disposition 'attachment; filename="fengying-oa-linux.tar.gz"';
|
||||
add_header Cache-Control "no-cache";
|
||||
}
|
||||
|
||||
location = /fengying-oa_amd64.deb {
|
||||
default_type application/vnd.debian.binary-package;
|
||||
add_header Content-Disposition 'attachment; filename="fengying-oa_amd64.deb"';
|
||||
add_header Cache-Control "no-cache";
|
||||
}
|
||||
|
||||
location /api/ {
|
||||
client_max_body_size 32m;
|
||||
proxy_pass http://127.0.0.1:3010;
|
||||
proxy_http_version 1.1;
|
||||
proxy_set_header Host $host;
|
||||
proxy_set_header Authorization $http_authorization;
|
||||
proxy_set_header X-Real-IP $remote_addr;
|
||||
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
|
||||
proxy_set_header X-Forwarded-Proto $scheme;
|
||||
proxy_read_timeout 120s;
|
||||
proxy_send_timeout 120s;
|
||||
}
|
||||
|
||||
location ~* \.mjs$ {
|
||||
default_type application/javascript;
|
||||
add_header Cache-Control "public, max-age=31536000, immutable";
|
||||
try_files $uri =404;
|
||||
}
|
||||
|
||||
location /assets/ {
|
||||
try_files $uri =404;
|
||||
add_header Cache-Control "public, max-age=31536000, immutable";
|
||||
}
|
||||
|
||||
location /pdfjs/ {
|
||||
default_type application/octet-stream;
|
||||
try_files $uri =404;
|
||||
add_header Cache-Control "public, max-age=31536000";
|
||||
}
|
||||
|
||||
location / {
|
||||
try_files $uri $uri/ /index.html;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user