v1.0.51: 部署配套 - ①config/database.php 支持 env 注入(DB_HOST/PORT/NAME/USER/PASS/CHARSET,缺省回落本地开发);②新增sql/schema_v1.0.51_base.sql全量业务库基准schema(仓库原仅增量迁移,27表按代码反推重建,含source_channels种子);③新增deploy/容器化编排(php8.2-fpm+nginx+mysql8.0,web暴露宿主8081,DB仅内网,对齐license_server既有compose风格):Dockerfile/nginx/default.conf/mysql初始化(01导入基准+字典/02种子超管角色与admin账号及12个迁移版本标记)/.env.example;④.gitignore防护.env与运行产物. 已在服务器106.55.169.92用一次性mysql:8.0容器验证:27表+字典(3632区域/12来源渠道)+admin/超管+cert版本标记全部导入成功

Co-Authored-By: Claude Code <noreply@anthropic.com>
This commit is contained in:
qianqiuwanzi
2026-09-17 15:30:19 +08:00
parent c86f08c325
commit 43bd11db0b
9 changed files with 744 additions and 9 deletions
+8
View File
@@ -0,0 +1,8 @@
# SuperLink 部署环境变量(复制为 .env 并填写后再 docker compose up)
# 注意:.env 含口令,不要提交到 git(已加入 .gitignore)
# 数据库
DB_NAME=mysuperlink
DB_USER=mysuperlink_root
DB_PASS=ChangeMe_DB_Pass_2026
DB_ROOT_PASS=ChangeMe_Root_Pass_2026
+65
View File
@@ -0,0 +1,65 @@
# SuperLink 部署编排(对齐服务器 license_server 既有 compose 风格)
# 服务:db(MySQL8) / app(PHP-FPM) / web(nginx)
# 使用:cp .env.example .env 并填好口令;docker compose up -d --build
# 访问:http://<服务器IP>:8081/
name: mysuperlink
services:
db:
image: mysql:8.0
restart: unless-stopped
env_file: .env
environment:
MYSQL_DATABASE: ${DB_NAME}
MYSQL_USER: ${DB_USER}
MYSQL_PASSWORD: ${DB_PASS}
MYSQL_ROOT_PASSWORD: ${DB_ROOT_PASS}
command:
- --character-set-server=utf8mb4
- --collation-server=utf8mb4_unicode_ci
- --default-authentication-plugin=mysql_native_password
volumes:
- db_data:/var/lib/mysql
- ./mysql/initdb/01_schema_base.sh:/docker-entrypoint-initdb.d/01_schema_base.sh:ro
- .:/repo # 挂载部署目录,init 脚本 source 仓库 sql
- ../../sql:/repo/sql:ro # 仓库 sql 目录(基准 + 字典 + 迁移)
- ../../config:/repo/config:ro
healthcheck:
test: ["CMD-SHELL", "mysqladmin ping -h 127.0.0.1 -u$$MYSQL_USER -p$$MYSQL_PASSWORD --silent"]
interval: 5s
timeout: 5s
retries: 30
start_period: 30s
app:
build: ./php
restart: unless-stopped
env_file: .env
environment:
DB_HOST: db
DB_PORT: "3306"
DB_NAME: ${DB_NAME}
DB_USER: ${DB_USER}
DB_PASS: ${DB_PASS}
DB_CHARSET: utf8mb4
volumes:
- ../../:/var/www/html
depends_on:
db:
condition: service_healthy
web:
image: nginx:1.25-alpine
restart: unless-stopped
ports:
- "8081:80"
environment:
- TZ=Asia/Shanghai
volumes:
- ../../:/var/www/html:ro
- ./nginx/default.conf:/etc/nginx/conf.d/default.conf:ro
depends_on:
- app
volumes:
db_data:
+11
View File
@@ -0,0 +1,11 @@
#!/bin/bash
# SuperLink 首次初始化(仅空数据卷时由 mysql 镜像 entrypoint 执行):
# 1) 导入基准建库脚本(业务表全量定义)
# 2) 导入数据字典种子(官方 Excel 生成)
# 说明:大文件用 .sh 以 mysql < 方式导入;admin/角色/版本标记放 02_admin.sql。
set -euo pipefail
echo ">> SuperLink init: import base schema (${MYSQL_DATABASE})"
mysql --user=root --password="${MYSQL_ROOT_PASSWORD}" --default-character-set=utf8mb4 "${MYSQL_DATABASE}" < /repo/sql/schema_v1.0.51_base.sql
echo ">> SuperLink init: import dict_seed.sql"
mysql --user=root --password="${MYSQL_ROOT_PASSWORD}" --default-character-set=utf8mb4 "${MYSQL_DATABASE}" < /repo/sql/dict_seed.sql
echo ">> SuperLink init: schema + dict ok"
+40
View File
@@ -0,0 +1,40 @@
-- ============================================================
-- SuperLink 首次初始化:种子超管角色 + 管理员账号 + 迁移版本标记
-- 由 mysql 镜像 entrypoint 在空数据卷时执行;entrypoint 已自动 USE ${MYSQL_DATABASE}
-- 说明:
-- - base schema(v1.0.51_base) 已内建 v1.0.16→v1.0.51 的全部业务表,
-- 故在此把各迁移文件标记为"已应用",避免 tools/migrate.php up 重复执行。
-- - 管理员账号:admin / Admin@123456(bcrypt 密码,请在首次登录后立即修改)
-- ============================================================
-- 1) 超级管理员角色:权限 = 全部业务模块(与前端菜单标识一致)
INSERT INTO `system_roles` (`role_name`, `permissions`, `is_active`)
SELECT '超级管理员', '["dashboard","company","person","media","need","marketing","channel","document","preliminary","system","log"]', 1
FROM DUAL
WHERE NOT EXISTS (SELECT 1 FROM `system_roles` WHERE `role_name` = '超级管理员');
-- 2) 管理员账号(bcrypt,Admin@123456)
INSERT INTO `system_users` (`username`, `password`, `real_name`, `role_id`, `is_active`)
SELECT 'admin',
'$2y$10$1nNvyQx/fVtrPHOkFTUwV.HNbWFkea75Cx3ICil.9BnoJpCrSAeCm',
'管理员',
(SELECT `id` FROM `system_roles` WHERE `role_name` = '超级管理员' LIMIT 1),
1
FROM DUAL
WHERE NOT EXISTS (SELECT 1 FROM `system_users` WHERE `username` = 'admin');
-- 3) 迁移版本标记(version 去掉 migration_ 前缀,checksum = 迁移文件 md5)
INSERT INTO `schema_versions` (`version`, `checksum`) VALUES
('v1.0.16','73e9594d7ab151791c4ba315e5e87156'),
('v1.0.18','cdfd4eb98e92047c2aa35325908e6f2e'),
('v1.0.20','860b09d92e810620b3bd71d126833611'),
('v1.0.25','c6b545a9dfe0bff7aad8b94849785135'),
('v1.0.27','f1db249ac23697a4981559436306f542'),
('v1.0.30','8faa7dccea9c361d0b8fe4e0c11384f3'),
('v1.0.40','70b9cedf240555bca58f46148c0d380e'),
('v1.0.41','247b6bc7718b9f1d7d5ea28ed9b8a3e2'),
('v1.0.47','10b64a2551e7eb8f1f5bdc8e87c6c06a'),
('v1.0.48','f507f2964d9bf7f8c885d69119c6d041'),
('v1.0.50','edaa2a71a4adf716591ece61ed9fc09f'),
('v1.0.51','3251bf0bca9236e201dc419770f7f5dc')
ON DUPLICATE KEY UPDATE `checksum` = VALUES(`checksum`);
+53
View File
@@ -0,0 +1,53 @@
server {
listen 80;
server_name _;
root /var/www/html;
index index.html;
charset utf-8;
sendfile on;
tcp_nopush on;
client_max_body_size 200m;
server_tokens off;
# 禁止点开隐藏文件/目录及运行日志
location ~ /\. {
deny all;
}
# 静态资源长缓存(uploads/css/js/libs)
location ~* \.(?:css|js|png|jpg|jpeg|gif|svg|ico|woff2?)$ {
expires 7d;
add_header Cache-Control "public, immutable";
try_files $uri =404;
}
# 上传目录允许写入(由 php-fpm 侧保证写入者权限)
location /static/uploads {
access_log off;
expires 30d;
try_files $uri =404;
}
# PHP 交给 php-fpm
location ~ \.php$ {
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_pass app:9000;
fastcgi_index index.php;
fastcgi_read_timeout 300;
fastcgi_buffers 16 16k;
fastcgi_buffer_size 32k;
}
# 其余静态页面
location / {
try_files $uri $uri/ =404;
}
error_page 404 =404 /index.html;
gzip on;
gzip_types text/plain text/css application/json application/javascript image/svg+xml;
}
+11
View File
@@ -0,0 +1,11 @@
# SuperLink PHP-FPM 运行镜像
# 说明:官方 php:8.2-fpm 已内置 pdo_mysql / mbstring / fileinfo 等所需扩展,
# 仅显式安装 pdo_mysql 以备未来镜像变化,并设定可写目录权限。
FROM php:8.2-fpm
# 显式启用 PDO MySQL(官方镜像默认已含,这里保证 manifest 一致)
RUN docker-php-ext-install pdo_mysql \
&& mkdir -p /var/www/html/runtime/logs /var/www/html/runtime/session \
&& chown -R www-data:www-data /var/www/html/runtime
WORKDIR /var/www/html